午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

基于Toad的評(píng)分卡模型全流程詳解(內(nèi)含代碼)

 昵稱10087950 2022-10-12 發(fā)布于江蘇

領(lǐng)取風(fēng)控資料合集


不知不覺(jué)中,Python已經(jīng)在短短幾年內(nèi)一躍成為最熱門的編程語(yǔ)言之一,尤其是在數(shù)據(jù)科學(xué)、人工智能和機(jī)器學(xué)習(xí)領(lǐng)域。這除了因?yàn)镻ython相對(duì)簡(jiǎn)單易學(xué),可讀性高之外,也有很大一部分原因是因?yàn)镻ython有著良好的開(kāi)源生態(tài)從而產(chǎn)生了許多強(qiáng)大的第三方庫(kù),這些庫(kù)可供直接調(diào)用,為開(kāi)發(fā)人員的工作提供了極大的便利。

風(fēng)控領(lǐng)域亦是如此,以最常用、最經(jīng)典的信用風(fēng)險(xiǎn)評(píng)分卡模型為例,第三方的庫(kù)就有謝士晨博士開(kāi)發(fā)的Scorecardpy以及今天我們要重點(diǎn)介紹的toad。

toad是針對(duì)風(fēng)險(xiǎn)評(píng)分卡的建模而開(kāi)發(fā)的工具包,其功能全面,性能強(qiáng)大,從數(shù)據(jù)探索EDA、特征篩選、特征分箱、WOE變換,到建模、模型評(píng)估、轉(zhuǎn)換分?jǐn)?shù),對(duì)評(píng)分卡模型的各個(gè)步驟都做了完整的封裝,極大的簡(jiǎn)化了建模的復(fù)雜程度,深受從業(yè)人員的喜愛(ài)。

下面我們將根據(jù)建模實(shí)際的流程,分布為大家介紹toad包的各種功能。

在開(kāi)始之前先簡(jiǎn)單說(shuō)一下toad庫(kù)的安裝與升級(jí),和其他的庫(kù)一樣,直接使用pip即可:
  • 安裝:pip install toad
  • 升級(jí):pip install --upgrade toad
0.導(dǎo)入庫(kù)與數(shù)據(jù)讀取

圖片

可以看到,演示數(shù)據(jù)共有50000條數(shù)據(jù),16個(gè)特征,包含14個(gè)特征變量,一列主鍵和一列標(biāo)簽(Defaulter)列。其中有若干個(gè)離散型變量和連續(xù)性變量,且有一定的缺失值。為了后續(xù)模型能夠檢驗(yàn),我們使用sklearn里的train_test_split將數(shù)據(jù)劃分為訓(xùn)練集(30000條)與測(cè)試集(20000條)。




1.EDA數(shù)據(jù)探索

(1)toad.detect(dataframe)

用于檢測(cè)數(shù)據(jù)情況(EDA),方便我們對(duì)數(shù)據(jù)有一個(gè)總體的印象。輸出每列特征的統(tǒng)計(jì)性特征和其他信息,主要的信息包括:缺失值、unique values、數(shù)值變量的平均值、離散型變量的眾數(shù)等。如下面的cell,可以得到以下信息:
  • 壞客戶的占比為16.2%:Defaulter的mean為0.162;
  • 部分特征有缺失值,且缺失值不等:注意missing列;
  • 數(shù)值型變量和離散型變量有若干個(gè),部分離散型變量的unique values較多,有10多個(gè)甚至61個(gè):離散型變量的unique列。

圖片

(2)toad.quality(dataframe, target='target', iv_only=False)

輸出每個(gè)變量的iv值,gini,entropy,和unique values,結(jié)果以iv值排序。'target'為目標(biāo)列,'iv_only'決定是否只輸出iv值。

圖片

注意:
  • 對(duì)于數(shù)據(jù)量大或高維度數(shù)據(jù),建議使用iv_only=True
  • 要去掉主鍵,日期等高unique values且不用于建模的特征




2.使用toad高效分箱并進(jìn)行特征篩選

(1)toad.selection.select(dataframe, target='target', empty=0.9, iv=0.02, corr=0.7, return_drop=False, exclude=None)

根據(jù)缺失值占比,iv值,和高相關(guān)性進(jìn)行變量篩選,各參數(shù)含義為:
  • empty=0.9:若變量的缺失值大于0.9則被刪除;
  • iv=0.02:若變量的iv值小于0.02則被刪除;
  • corr=0.7:若兩個(gè)變量的相關(guān)性高于0.7時(shí),iv值低的變量則被刪除;
  • return_drop=False:若為True,function將返回被刪去的變量列;
  • exclude=None:明確不被刪去的列名,輸入為list格式;

如下面的cell,沒(méi)有變量由于缺失值高被刪除,3個(gè)變量因?yàn)榈蚷v值被刪除,1個(gè)相關(guān)性高的變量被刪除。從14個(gè)特征中選出了10個(gè)變量。

在實(shí)際工作中,只需要根據(jù)需求調(diào)整各個(gè)參數(shù)值,即可完成變量的初篩,對(duì)于有特殊含義需要保留但不滿足篩選要求的變量,也可以在exclude里保留。

圖片

(2)分箱toad.transform.Combiner

toad的分箱功能支持?jǐn)?shù)值型數(shù)據(jù)和離散型分箱,集成了各種常用的分箱方法,包括卡方分箱(默認(rèn))、決策樹(shù)分箱、等頻分箱、等距分箱、最優(yōu)分箱等。

toad.transform.Combiner 是用來(lái)分箱的class,具體分箱步驟如下:

  • 初始化:c = toad.transform.Combiner()
  • 訓(xùn)練分箱:c.fit(dataframe, y = 'target', method = 'chi', min_samples = None, n_bins = None, empty_separate = False)
其中,
y:目標(biāo)列
Method:分箱方法,支持'chi' (卡方分箱),'dt' (決策樹(shù)分箱),'kmean','quantile' (等頻分箱),'step'(等步長(zhǎng)分箱)等
min_samples:每箱至少包含樣本量,可以是數(shù)字或者占比
n_bins:箱數(shù),若無(wú)法分出這么多箱數(shù),則會(huì)分出最多的箱數(shù)
empty_separate:是否將空箱單獨(dú)分開(kāi)
  • 查看分箱節(jié)點(diǎn):c.export()
  • 手動(dòng)調(diào)整分箱:c.load(dict)
  • apply分箱結(jié)果:c.transform(dataframe, labels=False)
  • Labels:是否將分箱結(jié)果轉(zhuǎn)化成箱標(biāo)簽。False時(shí)輸出0,1,2…(離散變量根據(jù)占比高低排序),True輸出(-inf, 0], (0,10], (10, inf)。

注意:記得刪去不需要分箱的列,比如是ID列和時(shí)間列

圖片

(3)觀察分箱:toad.plot.bin_plot(dataframe, x = None, target = 'target')

toad.plot的module提供了一部分的可視化功能,幫助調(diào)整分箱節(jié)點(diǎn)。

  • x:需要觀察的特征
  • target:目標(biāo)列

圖片

bar代表了樣本量占比,紅線代表了正樣本占比(e.g. 壞賬率)

(4)調(diào)整分箱:c.update(dict)
update后會(huì)更新被修改的箱

圖片




3.WOE轉(zhuǎn)化

WOE轉(zhuǎn)化在分箱調(diào)整好之后進(jìn)行,步驟如下:
  • 用調(diào)整好的Combiner轉(zhuǎn)化數(shù)據(jù):c.transform(dataframe, labels=False)
只會(huì)轉(zhuǎn)化被分箱的變量
  • 初始化woe transer:transer = toad.transform.WOETransformer()
  • fit_transform:transer.fit_transform(dataframe, target, exclude = None)訓(xùn)練并輸出woe轉(zhuǎn)化的數(shù)據(jù),用于轉(zhuǎn)化train數(shù)據(jù)
target:目標(biāo)列數(shù)據(jù)(非列名)
Exclude:不需要被WOE轉(zhuǎn)化的列
注意:會(huì)轉(zhuǎn)化所有列,包括未被分箱transform的列,通過(guò)'exclude'刪去不要WOE轉(zhuǎn)化的列,特別是target列
  • 根據(jù)訓(xùn)練好的transer,轉(zhuǎn)化test數(shù)據(jù):transer.transform(dataframe)
圖片




4.逐步回歸特征篩選

toad.selection.stepwise(dataframe, target='target', estimator='ols', direction='both', criterion='aic', max_iter=None, return_drop=False, exclude=None)
其中,
  • estimator: 用于擬合的模型,支持'ols', 'lr', 'lasso', 'ridge'
  • direction: 逐步回歸的方向,支持'forward', 'backward', 'both'(推薦)
  • criterion: 評(píng)判標(biāo)準(zhǔn),支持'aic', 'bic', 'ks', 'auc'
  • max_iter: 最大循環(huán)次數(shù)
  • return_drop: 是否返回被剔除的列名
  • exclude: 不需要被訓(xùn)練的列名,比如ID列和時(shí)間列
Tip:經(jīng)驗(yàn)證,direction = 'both'效果最好。estimator = 'ols'以及criterion = 'aic'運(yùn)行速度快且結(jié)果對(duì)邏輯回歸建模有較好的代表性。

圖片

toad.metrics.PSI(df_train, df_test)
輸出每列特征的PSI,可以用于檢驗(yàn)WOE轉(zhuǎn)化后的特征穩(wěn)定性

圖片




5.建模與模型評(píng)估

首先使用LR建模:

圖片

下面評(píng)估模型的結(jié)果,風(fēng)控模型常用的評(píng)分指標(biāo)有KS,AUC,PSI等。我們可以用toad快速輸出這些指標(biāo):

圖片
圖片

另外,toad還提供了KS bucket功能,輸出模型預(yù)測(cè)分箱后評(píng)判信息,包括每組的分?jǐn)?shù)區(qū)間,樣本量,壞賬率,KS等。

toad.metrics.KS_bucket(predicted_proba, y_true, bucket=10, method = 'quantile')
  • bucket:分箱的數(shù)量
  • method:分箱方法,建議用'quantile'(等人數(shù)),或'step' (等分?jǐn)?shù)步長(zhǎng))

bad_rate為每組壞賬率:
  • 組之間的壞賬率差距越大越好
  • 可以用于觀察是否有跳點(diǎn)
  • 可以用與找最佳切點(diǎn)
  • 可以對(duì)比

圖片




6.轉(zhuǎn)換評(píng)分

toad.ScoreCard(combiner = {}, transer = None, pdo = 60, rate = 2, base_odds = 20, base_score = 750, card = None, C=0.1,kwargs)

邏輯回歸模型轉(zhuǎn)標(biāo)準(zhǔn)評(píng)分卡,支持傳入邏輯回歸參數(shù),進(jìn)行調(diào)參。
  • combiner:傳入訓(xùn)練好的toad.Combiner對(duì)象
  • transer:傳入先前訓(xùn)練的toad.WOETransformer對(duì)象
  • pdo、rate、base_odds、base_score:e.g. pdo=60, rate=2, base_odds=20,base_score=750
實(shí)際意義為當(dāng)比率為1/20,輸出基準(zhǔn)評(píng)分750,當(dāng)比率為基準(zhǔn)比率2倍時(shí),基準(zhǔn)分下降60分
  • card: 支持傳入專家評(píng)分卡
  • kwargs: 支持傳入邏輯回歸參數(shù)(參數(shù)詳見(jiàn)sklearn.linear_model.LogisticRegression)
圖片

注意:評(píng)分卡在fit時(shí)使用WOE轉(zhuǎn)換后的數(shù)據(jù)來(lái)計(jì)算最終的分?jǐn)?shù),分?jǐn)?shù)一旦計(jì)算完成,便無(wú)需WOE值,可以直接使用原始數(shù)據(jù)進(jìn)行評(píng)分。

圖片
輸出結(jié)果:
圖片
圖片

至此,我們就用toad快速完成了一個(gè)評(píng)分卡模型的全流程,可以說(shuō)是非常方便了,沒(méi)有使用太多第三方庫(kù),除了基本的numpy,pandas就只用到了toad和一點(diǎn)點(diǎn)sklearn,這也可以看出toad確實(shí)將評(píng)分卡的全流程都進(jìn)行了完整的封裝,足以滿足大部分工作的需求。

本文以介紹toad庫(kù)的功能為主要目的,展示了評(píng)分卡建模的基礎(chǔ)流程,實(shí)際工作中只需要根據(jù)數(shù)據(jù)的特點(diǎn)和工作的需求進(jìn)行流程和參數(shù)的一些調(diào)整即可。

本文參考資料:
toad官方github主頁(yè)
https://github.com/amphibian-dev/toad


圖片

如果你喜歡、想要看更多的干貨類型的文章,可以把公眾號(hào)設(shè)為星標(biāo)??,順便轉(zhuǎn)發(fā)分享~

FAL長(zhǎng)期對(duì)外征稿,邀請(qǐng)各大風(fēng)控人士加入我們,在風(fēng)控圈分享你的經(jīng)驗(yàn)與知識(shí)??征稿,快到碗里來(lái),有稿費(fèi)那種!
圖片

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多