scorecardpy库的使用简介
? Python中信貸評分卡中常用的兩個庫有scorecardpy和Toad。其中scorecardpy是由謝士晨博士開發,Toad是由厚本金融風控團隊內部孵化產生的標準評分卡庫。關于Toad的使用,之前已經寫過學習教程,Toad庫使用教程,今天學習一下scorecardpy庫的使用。github鏈接見:
scorecardpy
? 該軟件包是R軟件包評分卡的python版本。它的目標是通過提供一些常見任務的功能,使傳統信用風險計分卡模型的開發更加輕松有效。該包的功能及對應的函數如下:
- 數據劃分(split_df)
- 變量選擇(iv, var_filter)
- 變量分箱(woebin, woebin_plot, woebin_adj, woebin_ply)
- 評分轉換(scorecard, scorecard_ply)
- 模型評估(perf_eva, perf_psi)
? 首先,導入germancredit數據。
import scorecardpy as sc dat = sc.germancredit() dt_s = sc.var_filter(dat, y="creditability")? 這個函數可以根據指定的條件篩選變量,例如IV值、缺失率、一致性等,函數的參數如下:
def var_filter(dt, y, x=None, iv_limit=0.02, missing_limit=0.95, identical_limit=0.95, var_rm=None, var_kp=None, return_rm_reason=False, positive='bad|1')var_rm:強制刪除變量的名稱
var_kp:強制保留變量的名稱
return_rm_reason:是否返回每個變量被刪除的原因
positive:壞樣本的標簽
數據劃分
train, test = sc.split_df(dt_s, 'creditability').values() def split_df(dt, y=None, ratio=0.7, seed=186)? 該函數的ratio默認為0.7,即按照7:3對數據集進行分割。ratio可以隨意進行設置,比如[0.5,0.2]
變量分箱
bins = sc.woebin(dt_s, y="creditability") def woebin(dt, y, x=None, var_skip=None, breaks_list=None, special_values=None, stop_limit=0.1, count_distr_limit=0.05, bin_num_limit=8, # min_perc_fine_bin=0.02, min_perc_coarse_bin=0.05, max_num_bin=8, positive="bad|1", no_cores=None, print_step=0, method="tree",ignore_const_cols=True, ignore_datetime_cols=True, check_cate_num=True, replace_blank=True, save_breaks_list=None, **kwargs):? 返回的是每個變量的分箱結果組成的字典。
? woebin支持決策樹分箱、卡方分箱、自定義分箱,默認的WOE值計算是用壞樣本率/好樣本率,這個可以通過參數postive進行調整。如果某一箱只有好樣本或者壞樣本,會對缺失的類別賦予0.99進行調整,方便計算woe值。重要參數含義如下:
var_skip:指定不需要分箱的變量。
breaks_list:分割點的List。對分箱進行調整的時候用。可以進行自定義分箱
special_values:指定單獨的箱。
count_distr_limit:分箱結果中最小占比。默認0.05
stop_limit:當IV值的增加值小于stop_limit或者卡方值小于qchisq(1-stoplimit, 1)時停止分割。
bin_num_limit:最大分箱數。
method:分箱方法,可以有"tree" or “chimerge”。
ignore_const_cols:是否忽略常數列。
check_cate_num:檢查分類變量中類別數是否大于50。
replace_blank:將空值替換為None。
? sc.woebin_plot()可以畫出變量分箱之后的Bi_variate圖,這里的壞樣本率圖展示了每一箱的好壞樣本數、樣本占比、壞樣本率,比較清晰明了。
分箱調整
breaks_adj = sc.woebin_adj(dt_s, "creditability", bins) def woebin_adj(dt, y, bins, adj_all_var=False, special_values=None, method="tree", save_breaks_list=None, count_distr_limit=0.05)重要參數的含義:
adj_all_var:是否顯示woe變量的單調性。
? 其它參數和woebin()函數一樣,這里沒有深入研讀調整分箱的代碼,而且運行過程中有報錯。猜測調整的方向是壞樣本率單調。
? 此外也可以手動進行分箱調整:
woe轉換
? 分箱之后需要對變量的原始值進行轉換,將變量值轉化成woe值,后續使用變量的WOE值入模進行訓練。
train_woe = sc.woebin_ply(train, bins_adj) test_woe = sc.woebin_ply(test, bins_adj)模型建立
y_train = train_woe.loc[:,'creditability'] X_train = train_woe.loc[:,train_woe.columns != 'creditability'] y_test = test_woe.loc[:,'creditability'] X_test = test_woe.loc[:,train_woe.columns != 'creditability']# logistic regression ------ from sklearn.linear_model import LogisticRegression lr = LogisticRegression(penalty='l1', C=0.9, solver='saga', n_jobs=-1) lr.fit(X_train, y_train) # lr.coef_ # lr.intercept_# predicted proability train_pred = lr.predict_proba(X_train)[:,1] test_pred = lr.predict_proba(X_test)[:,1]模型評估
train_perf = sc.perf_eva(y_train, train_pred, title = "train") test_perf = sc.perf_eva(y_test, test_pred, title = "test") def perf_eva(label, pred, title=None, groupnum=None, plot_type=["ks", "roc"], show_plot=True, positive="bad|1", seed=186)? perf_eva()函數可以從KS、AUC、Lift曲線、PR曲線評估模型的效果。可以通過plot_type參數控制評估方法,可以選"ks", “lift”, “roc”, “pr”。s
評分映射
? 模型評估之后,需要對概率進行映射,轉換成評分卡得分。得分包括每個客戶的最終得分和單個變量的得分。
card = sc.scorecard(bins_adj, lr, X_train.columns)? scorecard()返回一個字典,對應的是基礎分和每個變量的得分。
? scorecard()函數的參數含義如下:
bins:分箱信息。woebin()返回的結果。
model:模型對象。
points0:基礎分,默認為600。
odds:好壞比,默認為1:19
pdo:比率翻番的倍數,默認為50。
basepoints_eq0:如果為True,則將基礎分分散到每個變量中。
評分穩定性評估–PSI
sc.perf_psi(score = {'train':train_score, 'test':test_score},label = {'train':y_train, 'test':y_test} )總結:對于想學習建模的新手來說,一套有效的腳本能夠幫助快速建立一張評分卡。本人在自學的過程中看了幾乎網上所有能找到的評分卡腳本,比較實用的還是之前github上的半自動建模包,自己也嘗試寫了一個評分卡腳本,終于算是入門完成。scorecardpy庫雖然封裝得很好,但是一旦運行過程中出現問題,調試起來仍然是件很麻煩的事情。對比起來,本人覺得半自動化建模的包更具有實用性,將鏈接附在下方,感興趣者可以學習。
建立一個評分卡模型的代碼包
【作者】:Labryant
【原創公眾號】:風控獵人
【簡介】:某創業公司策略分析師,積極上進,努力提升。乾坤未定,你我都是黑馬。
【轉載說明】:轉載請說明出處,謝謝合作!~
總結
以上是生活随笔為你收集整理的scorecardpy库的使用简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas常用技巧总结
- 下一篇: 额度策略