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圖,這裏的壞樣本率圖展示了每一箱的好壞樣本數、樣本佔比、壞樣本率,比較清晰明瞭。
sc.woebin_plot(bins)
分箱調整
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()函數一樣,這裏沒有深入研讀調整分箱的代碼,而且運行過程中有報錯。猜測調整的方向是壞樣本率單調。
此外也可以手動進行分箱調整:
breaks_adj = {
'age.in.years': [26, 35, 40],
'other.debtors.or.guarantors': ["none", "co-applicant%,%guarantor"]
}
bins_adj = sc.woebin(dt_s, y="creditability", breaks_list=breaks_adj)
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()返回一個字典,對應的是基礎分和每個變量的得分。
def scorecard(bins, model, xcolumns, points0=600, odds0=1/19, pdo=50, basepoints_eq0=False)
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
【原創公衆號】:風控獵人
【簡介】:某創業公司策略分析師,積極上進,努力提升。乾坤未定,你我都是黑馬。
【轉載說明】:轉載請說明出處,謝謝合作!~