1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一文梳理金融風(fēng)控建模全流程(Python)

        共 12237字,需瀏覽 25分鐘

         ·

        2022-06-21 04:02

        一、信貸風(fēng)控簡(jiǎn)介

        信貸風(fēng)控是數(shù)據(jù)挖掘算法最成功的應(yīng)用之一,這在于金融信貸行業(yè)的數(shù)據(jù)量很充足,需求場(chǎng)景清晰及豐富。

        信貸風(fēng)控簡(jiǎn)單來(lái)說(shuō)就是判斷一個(gè)人借了錢(qián)后面(如下個(gè)月的還款日)會(huì)不會(huì)按期還錢(qián)。更專(zhuān)業(yè)來(lái)說(shuō),信貸風(fēng)控是還款能力及還款意愿的綜合考量,根據(jù)這預(yù)先的判斷為信任依據(jù)進(jìn)行放貸,以此大大提高了金融業(yè)務(wù)效率。

        與其他機(jī)器學(xué)習(xí)的工業(yè)場(chǎng)景不同,金融是極其厭惡風(fēng)險(xiǎn)的領(lǐng)域,其特殊性在于非常側(cè)重模型的解釋性及穩(wěn)定性。業(yè)界通常的做法是基于挖掘多維度的特征建立一套可解釋及效果穩(wěn)定的規(guī)則及風(fēng)控模型對(duì)每筆訂單/用戶/行為做出判斷決策。

        其中,對(duì)于(貸前)申請(qǐng)前的風(fēng)控模型,也稱(chēng)為申請(qǐng)?jiān)u分卡--A卡。A卡是風(fēng)控的關(guān)鍵模型,業(yè)界共識(shí)是申請(qǐng)?jiān)u分卡可以覆蓋80%的信用風(fēng)險(xiǎn)。此外還有貸中行為評(píng)分卡B卡、催收評(píng)分卡C卡,以及反欺詐模型等等。

        A卡(Application score card)。目的在于預(yù)測(cè)申請(qǐng)時(shí)(申請(qǐng)信用卡、申請(qǐng)貸款)對(duì)申請(qǐng)人進(jìn)行量化評(píng)估。B卡(Behavior score card)。目的在于預(yù)測(cè)使用時(shí)點(diǎn)(獲得貸款、信用卡的使用期間)未來(lái)一定時(shí)間內(nèi)逾期的概率。C卡(Collection score card)。目的在于預(yù)測(cè)已經(jīng)逾期并進(jìn)入催收階段后未來(lái)一定時(shí)間內(nèi)還款的概率。

        一個(gè)好的特征,對(duì)于模型和規(guī)則都是至關(guān)重要的。像申請(qǐng)?jiān)u分卡--A卡,主要可以歸到以下3方面特征:

        • 1、信貸歷史類(lèi):信貸交易次數(shù)及額度、收入負(fù)債比、查詢(xún)征信次數(shù)、信貸歷史長(zhǎng)度、新開(kāi)信貸賬戶數(shù)、額度使用率、逾期次數(shù)及額度、信貸產(chǎn)品類(lèi)型、被追償信息。(信貸交易類(lèi)的特征重要程度往往是最高的,少了這部分歷史還款能力及意愿的信息,風(fēng)控模型通常直接就廢了。)

        • 2、基本資料及交易記錄類(lèi):年齡、婚姻狀況、學(xué)歷、工作類(lèi)型及年薪、工資收入、存款A(yù)UM、資產(chǎn)情況、公積金及繳稅、非信貸交易流水等記錄(這類(lèi)主要是從還款能力上面綜合考量的。還可以結(jié)合多方核驗(yàn)資料的真?zhèn)我约肮灿孟袷謾C(jī)號(hào)、身份證號(hào)等團(tuán)伙欺詐信息,用來(lái)鑒別欺詐風(fēng)險(xiǎn)。需要注意的,像性別、膚色、地域、種族、宗教信仰等類(lèi)型特征使用要謹(jǐn)慎,可能模型會(huì)有效果,但也會(huì)導(dǎo)致算法歧視問(wèn)題。)

        • 3、公共負(fù)面記錄類(lèi):如破產(chǎn)負(fù)債、民事判決、行政處罰、法院強(qiáng)制執(zhí)行、涉賭涉詐黑名單等(這類(lèi)特征不一定能拿得到數(shù)據(jù),且通常缺失度比較高,對(duì)模型貢獻(xiàn)一般,更多的是從還款意愿/欺詐維度的考慮)

        二、申請(qǐng)?jiān)u分卡(A卡)全流程

        實(shí)戰(zhàn)部分我們以經(jīng)典的申請(qǐng)?jiān)u分卡為例,使用的中原銀行個(gè)人貸款違約預(yù)測(cè)比賽的數(shù)據(jù)集,使用信用評(píng)分python庫(kù)--toad、樹(shù)模型Lightgbm及邏輯回歸LR做申請(qǐng)?jiān)u分模型。(注:文中所涉及的一些金融術(shù)語(yǔ),由于篇幅就不展開(kāi)解釋了,疑問(wèn)之處 可以谷歌了解下哈。)

        2.1 模型定義

        申請(qǐng)?jiān)u分模型定義主要是通過(guò)一系列的數(shù)據(jù)分析確定建模的樣本及標(biāo)簽。

        首先,補(bǔ)幾個(gè)金融風(fēng)控的術(shù)語(yǔ)的說(shuō)明。概念模糊的話,可以回查再理解下: 

        逾期期數(shù)(M) :指實(shí)際還款日與應(yīng)還款日之間的逾期天數(shù),并按區(qū)間劃分后的逾期狀態(tài)。M取自Month on Book的第一個(gè)單詞。(注:不同機(jī)構(gòu)所定義的區(qū)間劃分可能存在差異) M0:當(dāng)前未逾期(或用C表示,取自Current) M1:逾期1-30日 M2:逾期31-60日 M3:逾期61-90日 M4:逾期91-120日 M5:逾期121-150日 M6:逾期151-180日 M7+:逾期180日以上

        觀察點(diǎn):樣本層面的時(shí)間窗口。 用于構(gòu)建樣本集的時(shí)間點(diǎn)(如2010年10月申請(qǐng)貸款的用戶),不同環(huán)節(jié)定義不同,比較抽象,這里舉例說(shuō)明:如果是申請(qǐng)模型,觀察點(diǎn)定義為用戶申貸時(shí)間,取19年1-12月所有的申貸訂單作為構(gòu)建樣本集;如果是貸中行為模型,觀察點(diǎn)定義為某個(gè)具體日期,如取19年6月15日在貸、沒(méi)有發(fā)生逾期的申貸訂單構(gòu)建樣本集。

        觀察期:特征層面的時(shí)間窗口。構(gòu)造特征的相對(duì)時(shí)間窗口,例如用戶申請(qǐng)貸款訂前12個(gè)月內(nèi)(2009年10月截至到2010年10月申請(qǐng)貸款前的數(shù)據(jù)都可以用, 可以有用戶平均消費(fèi)金額、次數(shù)、貸款次數(shù)等數(shù)據(jù)特征)。設(shè)定觀察期是為了每個(gè)樣本的特征對(duì)齊,長(zhǎng)度一般根據(jù)數(shù)據(jù)決定。一個(gè)需要注意的點(diǎn)是,只能用此次申請(qǐng)前的特征數(shù)據(jù),不然就會(huì)數(shù)據(jù)泄露(時(shí)間穿越,用未來(lái)預(yù)測(cè)過(guò)去的現(xiàn)象)。

        表現(xiàn)期:標(biāo)簽層面的時(shí)間窗口。定義好壞標(biāo)簽Y的時(shí)間窗口,信貸風(fēng)險(xiǎn)具有天然的滯后性,因?yàn)橛脩艚杩詈笠粋€(gè)月(第一期)才開(kāi)始還錢(qián),有得可能還了好幾期才發(fā)生逾期。

        對(duì)于現(xiàn)成的比賽數(shù)據(jù),數(shù)據(jù)特征的時(shí)間跨度(觀察期)、數(shù)據(jù)樣本、標(biāo)簽定義都是已經(jīng)提前分析確定下來(lái)的。但對(duì)于實(shí)際的業(yè)務(wù)來(lái)說(shuō),數(shù)據(jù)樣本及模型定義其實(shí)也是申請(qǐng)?jiān)u分卡的關(guān)鍵之處。畢竟實(shí)際場(chǎng)景里面可能沒(méi)有人扔給你現(xiàn)成的數(shù)據(jù)及標(biāo)簽(好壞定義,有些公司的業(yè)務(wù)會(huì)提前分析好給建模人員),然后只是跑個(gè)分類(lèi)模型那么簡(jiǎn)單。

        確定建模的樣本量及標(biāo)簽,也就是模型從多少的數(shù)據(jù)樣本中學(xué)習(xí)如何分辨其中的好、壞標(biāo)簽樣本。如果樣本量稀少、標(biāo)簽定義有問(wèn)題,那學(xué)習(xí)的結(jié)果可想而知也會(huì)是差的。

        對(duì)于建模樣本量的確定,經(jīng)驗(yàn)上肯定是滿足建模條件的樣本越多越好,一個(gè)類(lèi)別最好有幾千以上的樣本數(shù)。對(duì)于標(biāo)簽的定義,可能我們直觀感覺(jué)是比較簡(jiǎn)單,比如“好用戶就是沒(méi)有逾期的用戶, 壞用戶就是在逾期的用戶”,但具體做量化起來(lái)會(huì)發(fā)現(xiàn)并不簡(jiǎn)單,有兩個(gè)方面的主要因素需要考量:

        • 【壞的定義】逾期多少天算是壞客戶。比如:只逾期2天算是建模的壞客戶?

        根據(jù)巴塞爾協(xié)議的指導(dǎo),一般逾期超過(guò)90天(M4+)的客戶,即定義為壞客戶。更為通用的,可以使用“滾動(dòng)率”分析方法(Roll Rate Analysis)確定多少天算是“壞”,基本方法是統(tǒng)計(jì)分析出逾期M期的客戶多大概率會(huì)逾期M+1期(同樣的,我們不太可能等著所有客戶都逾期一年才最終確定他就是壞客戶。一來(lái)時(shí)間成本太高,二來(lái)這數(shù)據(jù)樣本會(huì)少的可憐)。如下示例,我們通過(guò)滾動(dòng)率分析各期逾期的變壞概率。當(dāng)前未逾期(M0)下個(gè)月保持未逾期的概率99.71%;當(dāng)前逾期M1,下個(gè)月繼續(xù)逾期概率為54.34%;當(dāng)前M2下個(gè)月繼續(xù)逾期概率就高達(dá)*90.04%*。我們可以看出M2是個(gè)比較明顯的變壞拐點(diǎn),可以以M2+作為壞樣本的定義。

        • 【表現(xiàn)期】借貸申請(qǐng)的時(shí)間點(diǎn)(即:觀察點(diǎn))之后要在多久的時(shí)間暴露表現(xiàn)下,才能比較徹底的確定客戶是否逾期。比如:借貸后觀察了一個(gè)客戶借貸后60天的那幾個(gè)分期的表現(xiàn)都是按時(shí)還款,就可以判斷他是好/壞客戶?

        這也就是確定表現(xiàn)期,常用的分析方法是Vintage分析(Vintage在信貸領(lǐng)域不僅可以用它來(lái)評(píng)估客戶好壞充分暴露所需的時(shí)間,即成熟期,還可以用它分析不同時(shí)期風(fēng)控策略的差異等),通過(guò)分析歷史累計(jì)壞用戶暴露增加的趨勢(shì),來(lái)確定至少要多少期可以比較全面的暴露出大部分的壞客戶。如下示例的壞定義是M4+,我們可以看出各期的M4+壞客戶經(jīng)過(guò)9或者10個(gè)月左右的表現(xiàn),基本上可以都暴露出來(lái),后面壞客戶的總量就比較平穩(wěn)了。這里我們就可以將表現(xiàn)期定位9或者10個(gè)月~

        確定了壞的定義以及需要的表現(xiàn)期,我們就可以確定樣本的標(biāo)簽,最終劃定的建模樣本:

        • 好用戶:表現(xiàn)期(如9個(gè)月)內(nèi)無(wú)逾期的用戶樣本。
        • 壞用戶:表現(xiàn)期(如9個(gè)月)內(nèi)逾期(如M2+)的用戶樣本。
        • 灰用戶:表現(xiàn)期內(nèi)有過(guò)逾期行為,但不到壞定義(如M2+)的樣本。注:實(shí)踐中經(jīng)常會(huì)把只逾期3天內(nèi)的用戶也歸為好用戶。

        比如現(xiàn)在的時(shí)間是2022-10月底,表現(xiàn)期9個(gè)月的話,就可以取2022-01月份及之前申請(qǐng)的樣本(這也稱(chēng)為 觀察點(diǎn)),打上好壞標(biāo)簽,建模。

        通過(guò)上面信用評(píng)分的介紹,很明顯的好用戶通常遠(yuǎn)大于壞用戶的,這是一個(gè)類(lèi)別極不均衡的典型場(chǎng)景,不均衡處理方法下文會(huì)談到。

        2.2 讀取數(shù)據(jù)及預(yù)處理

        本數(shù)據(jù)集的數(shù)據(jù)字典文檔、比賽介紹及本文代碼,可以到https://github.com/aialgorithm/Blog項(xiàng)目相應(yīng)的代碼目錄下載

        該數(shù)據(jù)集為中原銀行的個(gè)人貸款違約預(yù)測(cè)數(shù)據(jù)集,個(gè)別字段有做了脫敏(金融的數(shù)據(jù)大都涉及機(jī)密)。主要的特征字段有個(gè)人基本信息、經(jīng)濟(jì)能力、貸款歷史信息等等數(shù)據(jù)有10000條樣本,38維原始特征,其中isDefault為標(biāo)簽,是否逾期違約。

        import pandas as pd
        pd.set_option("display.max_columns",50)

        train_bank = pd.read_csv('./train_public.csv')

        print(train_bank.shape)
        train_bank.head()

        數(shù)據(jù)預(yù)處理主要是對(duì)日期信息、噪音數(shù)據(jù)做下處理,并劃分下類(lèi)別、數(shù)值類(lèi)型的特征。

        # 日期類(lèi)型:issueDate 轉(zhuǎn)換為pandas中的日期類(lèi)型,加工出數(shù)值特征
        train_bank['issue_date'] = pd.to_datetime(train_bank['issue_date'])
        # 提取多尺度特征
        train_bank['issue_date_y'] = train_bank['issue_date'].dt.year
        train_bank['issue_date_m'] = train_bank['issue_date'].dt.month
        # 提取時(shí)間diff # 轉(zhuǎn)換為天為單位
        base_time = datetime.datetime.strptime('2000-01-01''%Y-%m-%d')   # 隨機(jī)設(shè)置初始的基準(zhǔn)時(shí)間
        train_bank['issue_date_diff'] = train_bank['issue_date'].apply(lambda x: x-base_time).dt.days
        # 可以發(fā)現(xiàn)earlies_credit_mon應(yīng)該是年份-月的格式,這里簡(jiǎn)單提取年份
        train_bank['earlies_credit_mon'] = train_bank['earlies_credit_mon'].map(lambda x:int(sorted(x.split('-'))[0]))
        train_bank.head()


        # 工作年限處理
        train_bank['work_year'].fillna('10+ years', inplace=True)

        work_year_map = {'10+ years': 10, '2 years': 2, '< 1 year': 0, '3 years': 3, '1 year': 1,
             '5 years': 5, '4 years': 4, '6 years': 6, '8 years': 8, '7 years': 7, '9 years': 9}
        train_bank['work_year']  = train_bank['work_year'].map(work_year_map)

        train_bank['class'] = train_bank['class'].map({'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6})

        # 缺失值處理
        train_bank = train_bank.fillna('9999')

        # 區(qū)分 數(shù)值 或類(lèi)別特征

        drop_list = ['isDefault','earlies_credit_mon','loan_id','user_id','issue_date']
        num_feas = []
        cate_feas = []

        for col in train_bank.columns:
            if col not in drop_list:
                try:
                    train_bank[col] = pd.to_numeric(train_bank[col]) # 轉(zhuǎn)為數(shù)值
                    num_feas.append(col)
                except:
                    train_bank[col] = train_bank[col].astype('category')
                    cate_feas.append(col)
                    
        print(cate_feas)
        print(num_feas)

        2.3 lightgbm評(píng)分卡建模

        如果是用Lightgbm建模做違約預(yù)測(cè),簡(jiǎn)單的數(shù)據(jù)處理,基本上代碼就結(jié)束了。lgb樹(shù)模型是集成學(xué)習(xí)的強(qiáng)模型,自帶缺失、類(lèi)別變量的處理,特征上面不用做很多處理,建模非常方便,模型效果通常不錯(cuò),還可以輸出特征的重要性。

        (By the way,申請(qǐng)?jiān)u分卡業(yè)界用邏輯回歸LR會(huì)比較多,因?yàn)槟P秃?jiǎn)單,解釋性也比較好)。


        def model_metrics(model, x, y):
            """ 評(píng)估 """
            yhat = model.predict(x)
            yprob = model.predict_proba(x)[:,1]
            fpr,tpr,_ = roc_curve(y, yprob,pos_label=1)
            metrics = {'AUC':auc(fpr, tpr),'KS':max(tpr-fpr),
                       'f1':f1_score(y,yhat),'P':precision_score(y,yhat),'R':recall_score(y,yhat)}
            
            roc_auc = auc(fpr, tpr)

            plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)

            plt.xlim([-0.05, 1.05])  # 設(shè)置x、y軸的上下限,以免和邊緣重合,更好的觀察圖像的整體
            plt.ylim([-0.05, 1.05])
            plt.xlabel('False Positive Rate')
            plt.ylabel('True Positive Rate')  # 可以使用中文,但需要導(dǎo)入一些庫(kù)即字體
            plt.title('ROC Curve')
            plt.legend(loc="lower right")


            return metrics
        # 劃分?jǐn)?shù)據(jù)集:訓(xùn)練集和測(cè)試集
        train_x, test_x, train_y, test_y = train_test_split(train_bank[num_feas + cate_feas], train_bank.isDefault,test_size=0.3, random_state=0)

        # 訓(xùn)練模型
        lgb=lightgbm.LGBMClassifier(n_estimators=5,leaves=5, class_weight= 'balanced',metric = 'AUC')
        lgb.fit(train_x, train_y)
        print('train ',model_metrics(lgb,train_x, train_y))
        print('test ',model_metrics(lgb,test_x,test_y))

        from lightgbm import plot_importance
        plot_importance(lgb)

        2.4 LR評(píng)分卡建模

        LR即邏輯回歸,是一種廣義線性模型,因?yàn)槠淠P秃?jiǎn)單、解釋性良好,在金融行業(yè)是最常用的。

        也正因?yàn)長(zhǎng)R過(guò)于簡(jiǎn)單,沒(méi)有非線性能力,所以我們往往需要通過(guò)比較復(fù)雜的特征工程,如分箱WOE編碼的方法,提高模型的非線性能力。關(guān)于LR的原理及優(yōu)化方法,強(qiáng)烈推薦閱讀下:

        下面我們通過(guò)toad實(shí)現(xiàn)特征分析、特征選擇、特征分箱及WOE編碼

        2.4.1 特征選擇

        # 數(shù)據(jù)EDA分析
        toad.detector.detect(train_bank)

        # 特征選擇,根據(jù)相關(guān)性 缺失率、IV 等指標(biāo)
        train_selected, dropped = toad.selection.select(train_bank,target = 'isDefault', empty = 0.5, iv = 0.05, corr = 0.7, return_drop=True, exclude=['earlies_credit_mon','loan_id','user_id','issue_date'])
        print(dropped)
        print(train_selected.shape)

        # 劃分訓(xùn)練集 測(cè)試集
        train_x, test_x, train_y, test_y = train_test_split(train_selected.drop(['loan_id','user_id','isDefault','issue_date','earlies_credit_mon'],axis=1), train_selected.isDefault,test_size=0.3, random_state=0)

        2.4.2 卡方分箱

        # 特征的卡方分箱
        combiner = toad.transform.Combiner()

        # 訓(xùn)練數(shù)據(jù)并指定分箱方法

        combiner.fit(pd.concat([train_x,train_y], axis=1), y='isDefault',method= 'chi',min_samples = 0.05,exclude=[])

        # 以字典形式保存分箱結(jié)果

        bins = combiner.export()

        bins 

        通過(guò)特征分箱,每一個(gè)特征被離散化為各個(gè)分箱。

        接下來(lái)就是LR特征工程的特色處理了--手動(dòng)調(diào)整分箱的單調(diào)性。

        這一步的意義更多在于特征的業(yè)務(wù)解釋性的約束,對(duì)于模型的擬合效果影響不一定是正面的。這里我們主觀認(rèn)為大多數(shù)特征的不同分箱的壞賬率badrate應(yīng)該是滿足某種單調(diào)關(guān)系的,而起起伏伏是不太好理解的。如征信查詢(xún)次數(shù)這個(gè)特征,應(yīng)該是分箱數(shù)值越高,壞賬率越大。(注:如年齡特征可能就不滿足這種單調(diào)關(guān)系)

        我們可以查看下ebt_loan_ratio這個(gè)變量的分箱情況,根據(jù)bad_rate趨勢(shì)圖,并保證單個(gè)分箱的樣本占比不低于0.05,去調(diào)整分箱,達(dá)到單調(diào)性。(其他的特征可以按照這個(gè)方法繼續(xù)調(diào)整,單調(diào)性調(diào)整還是挺耗時(shí)的)

        adj_var = 'scoring_low'
        #調(diào)整前原來(lái)的分箱 [560.4545455, 621.8181818, 660.0, 690.9090909, 730.0, 775.0]
        adj_bin = {adj_var: [ 660.0, 700.9090909, 730.0, 775.0]}

        c2 = toad.transform.Combiner()
        c2.set_rules(adj_bin)

        data_ = pd.concat([train_x,train_y], axis=1)
        data_['type'] = 'train'
        temp_data = c2.transform(data_[[adj_var,'isDefault','type']], labels=True)

        from toad.plot import badrate_plot, proportion_plot
        # badrate_plot(temp_data, target = 'isDefault', x = 'type', by = adj_var)
        # proportion_plot(temp_data[adj_var])
        from toad.plot import  bin_plot,badrate_plot
        bin_plot(temp_data, target = 'isDefault',x=adj_var)
        • 調(diào)整前
        • 調(diào)整后
        # 更新調(diào)整后的分箱
        combiner.set_rules(adj_bin)
        combiner.export()

        2.4.3 WOE編碼

        接下來(lái)就是對(duì)各個(gè)特征的分箱做WOE編碼,通過(guò)WOE編碼給各個(gè)分箱不同的權(quán)重,提升LR模型的非線性。

        #計(jì)算WOE,僅在訓(xùn)練集計(jì)算WOE,不然會(huì)標(biāo)簽泄露
        transer = toad.transform.WOETransformer()
        binned_data = combiner.transform(pd.concat([train_x,train_y], axis=1))

        #對(duì)WOE的值進(jìn)行轉(zhuǎn)化,映射到原數(shù)據(jù)集上。對(duì)訓(xùn)練集用fit_transform,測(cè)試集用transform.
        data_tr_woe = transer.fit_transform(binned_data, binned_data['isDefault'],  exclude=['isDefault'])
        data_tr_woe.head()

        ## test woe

        # 先分箱
        binned_data = combiner.transform(test_x)
        #對(duì)WOE的值進(jìn)行轉(zhuǎn)化,映射到原數(shù)據(jù)集上。測(cè)試集用transform.
        data_test_woe = transer.transform(binned_data)
        data_test_woe.head()

        2.4.4 訓(xùn)練LR

        使用woe編碼后的train數(shù)據(jù)訓(xùn)練模型。對(duì)于金融風(fēng)控這種極不平衡的數(shù)據(jù)集,比較常用的做法是做下極少類(lèi)的正采樣或者使用代價(jià)敏感學(xué)習(xí)class_weight='balanced',以增加極少類(lèi)的學(xué)習(xí)權(quán)重。可見(jiàn):《一文解決樣本不均衡(全)》

        對(duì)于LR等弱模型,通常會(huì)發(fā)現(xiàn)訓(xùn)練集與測(cè)試集的指標(biāo)差異(gap)是比較少的,即很少過(guò)擬合現(xiàn)象。

        # 訓(xùn)練LR模型
        from sklearn.linear_model import LogisticRegression

        lr = LogisticRegression(class_weight='balanced')
        lr.fit(data_tr_woe.drop(['isDefault'],axis=1), data_tr_woe['isDefault'])

        print('train ',model_metrics(lr,data_tr_woe.drop(['isDefault'],axis=1), data_tr_woe['isDefault']))
        print('test ',model_metrics(lr,data_test_woe,test_y))

        2.4.5 評(píng)分卡應(yīng)用

        利用訓(xùn)練好的LR模型,輸出(概率)分?jǐn)?shù)分布表,結(jié)合誤殺率、召回率以及業(yè)務(wù)需要可以確定一個(gè)合適分?jǐn)?shù)閾值cutoff (注:在實(shí)際場(chǎng)景中,通常還會(huì)將概率非線性轉(zhuǎn)化為更為直觀的整數(shù)分score=A-B*ln(odds),方便評(píng)分卡更直觀、統(tǒng)一的應(yīng)用。)


        train_prob = lr.predict_proba(data_tr_woe.drop(['isDefault'],axis=1))[:,1]
        test_prob = lr.predict_proba(data_test_woe)[:,1]


        # Group the predicted scores in bins with same number of samples in each (i.e. "quantile" binning)
        toad.metrics.KS_bucket(train_prob, data_tr_woe['isDefault'], bucket=10, method = 'quantile')

        當(dāng)預(yù)測(cè)這用戶的概率大于設(shè)定閾值,意味這個(gè)用戶的違約概率很高,就可以拒絕他的貸款申請(qǐng)。

        - END -

        往期精彩回顧




         

        瀏覽 35
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            怡春院综合 | 欧美午夜精品一区 | 亚洲男男gaygay无套 | 殴美一级特黄aaaaaa | 久久久久久久久久久免费 | 国产色婷婷导航 | 啪啪啪在线观看网站 | 欧美日韩一区二区在线观看 | 法国做爰露性器50部 | 亚洲无码精品视频 |