最近在做催收評分卡中的滾動率模型,在變量篩選這一步遇到了一些困惑,思考了很多覺得很有意義,有必要分享一下。如有理解不當之處還望多多指正。
第一個問題是關於邏輯迴歸中係數爲正的檢驗。先附上代碼:
# 邏輯迴歸係數符號篩選,在篩選前需要做woe轉換
def forward_delete_coef(x_train,y_train):
"""
x_train -- x訓練集
y_train -- y訓練集
return :
coef_col迴歸係數符號篩選後的變量
lr_coe:每個變量的係數值
"""
col_list = list(x_train.columns)
coef_col = []
for col in col_list:
coef_col.append(col)
x_train2 = x_train.loc[:,coef_col]
sk_lr = LogisticRegression(random_state=0).fit(x_train2,y_train)
coef_df = pd.DataFrame({'col':coef_col,'coef':sk_lr.coef_[0]})
if coef_df[coef_df.coef<0].shape[0]>0:
coef_col.remove(col)
x_new_train = x_train.loc[:,coef_col]
lr = LogisticRegression(random_state=0).fit(x_new_train,y_train)
lr_coe = pd.DataFrame({'col':coef_col,
'coef':lr.coef_[0]})
return coef_col,lr_coe
是不是一定要做這一步檢驗呢?經過一下午的思考和排查發現還是必須要的,下面慢慢解釋原因。
首先回到WOE的計算上面,看一下bad_rate和WOE值的關係。
結論就是某一箱的bad_rate越高,相應的WOE值也就越大。我觀察了下所有箱的bad_rate和woe值確實是單調的。
然後再看一下每一箱的評分映射邏輯:
簡單說,就是每一箱的得分等於,
這裏的B在評分卡映射中提到過,等於PDO/log(2),所以是個正數。
再回到每一個變量,解釋一下每個變量的得分情況:一個變量各個分箱的bad_rate越高,相應的WOE就越大,對應的分數應該越低。也就是越低。那麼C乘B的符號就需要爲正,否則就會出現bad_rate越高,分數也越高的情況。所以C的符號應爲正。
這裏的前提是以分數越高,違約概率越低來考量的。
所以結論就是,之所以要求係數爲正,是爲了便於解釋評分卡單變量的得分。只有係數爲正,才能對壞樣本率高的箱賦予較低的得分。
第二個問題就是評分卡變量的顯著性檢驗。附上代碼。
# 顯著性篩選,在篩選前需要做woe轉換
def forward_delete_pvalue(x_train,y_train):
"""
x_train -- x訓練集
y_train -- y訓練集
return :顯著性篩選後的變量
"""
col_list = list(x_train.columns)
pvalues_col=[]
for col in col_list:
pvalues_col.append(col)
x_train2 = sm.add_constant(x_train.loc[:,pvalues_col])
sm_lr = sm.Logit(y_train,x_train2)
sm_lr = sm_lr.fit()
for i,j in zip(sm_lr.pvalues.index[1:],sm_lr.pvalues.values[1:]):
if j>=0.05:
pvalues_col.remove(i)
x_new_train = x_train.loc[:,pvalues_col]
x_new_train2 = sm.add_constant(x_new_train)
lr = sm.Logit(y_train,x_new_train2)
lr = lr.fit()
print(lr.summary2())
return pvalues_col
特意去翻了一下筆記,關於一元線性迴歸的顯著性檢驗。
分爲F檢驗和T檢驗。F檢驗用來檢驗總體迴歸關係的顯著性,T檢驗用來檢驗各個迴歸係數的顯著性。
在變量篩選中,相關性剔除是一定要做的,相關性的檢驗就是去除變量之間的線性相關關係。相關係數小,只能說明變量之間無線性相關關係,但是仍有可能存在非線性相關的關係。
所以,是不是一定要進行顯著性檢驗,並不是。但是相關性檢驗一定是需要的。
第三個問題就是強變量是否應該入模。
以評分卡爲例,強變量的意思就是IV值很高,單箱的WOE值也很高。這種情況下其實可以將這一箱單獨作爲一條策略。當單箱的WOE值大於1的時候,可以推導一下壞樣本率。
WOE值大於1的時候,壞樣本率大於12.4%。之前看到說應該是65%,這裏留下疑問。如果有錯誤歡迎私信我。
再附上一個關於強變量是否應該作爲入模變量的文章,可以思考一下。
評分卡強變量是否應該入模
【作者】:Labryant
【原創公衆號】:風控獵人
【簡介】:某創業公司策略分析師,積極上進,努力提升。乾坤未定,你我都是黑馬。
【轉載說明】:轉載請說明出處,謝謝合作!~