python分箱分类代码_Python实现变量分箱及应用
之前發(fā)的內(nèi)容里,代碼看不清,此篇為重發(fā)。
個人觀點,信貸行業(yè)中,模型穩(wěn)定性往往比模型效果更重要。信貸行業(yè)所做的任何規(guī)則、政策、模型的調(diào)整,都需要較長時間才能知道結(jié)果如何,模型迭代周期相較于其他行業(yè)可能更長,因此一個模型的穩(wěn)定性至關(guān)重要。當然在模型迭代周期較短的場景下,可以去追求更好的模型效果,比如有些反欺詐場景,模型模型迭代快,模型可以快速及時調(diào)整。但對于大多數(shù)其他情況,無論是做評分卡還是機器學(xué)習(xí),個人在實踐中會為了穩(wěn)定性犧牲掉一些效果。
提高模型的穩(wěn)定性往往就是防止模型過擬合,當然不同算法中有很多防止過擬合的技術(shù) 上的細節(jié),除去算法上的技術(shù)處理,還有一個非常重要的一點,就是對入模的特征進行處理, 其中一點就是變量分箱。分箱是將變量離散化(類別變量的分箱,也可以理解為“離散化”, 因為分箱后整理類別會變少),挖掘出變量的主要趨勢,剔除變量的噪音。
之前使用SAS和R實現(xiàn)過分箱,學(xué)了Python后,就把R的代碼翻譯成python代碼,因為R和 python太像了。
將代碼封裝在函數(shù)cut_bin里,函數(shù)中各參數(shù)分別為,df待分箱的數(shù)據(jù)集, Kvar數(shù)據(jù)集主鍵, Yvar數(shù)據(jù)集y值, max_depth決策樹深度, p決策樹葉節(jié)點數(shù)據(jù)占比。 代碼如下:
該函數(shù)輸出兩個對象,df_bin分箱后的數(shù)據(jù)集,dict_bin為存放各變量分箱結(jié)果的字典。df_bin分箱后的數(shù)據(jù)集示例:
dict_bin示例:
某變量分箱結(jié)果,從Bad_Rate可以看出該變量風(fēng)險遞增,有很好的趨勢和業(yè)務(wù)解釋性:
在訓(xùn)練樣本上分箱后,如何將分箱結(jié)果應(yīng)用到測試樣本呢?下面函數(shù)實現(xiàn)了將訓(xùn)練樣本上分箱方式“套進” 測試樣本里。其中df是測試樣本數(shù)據(jù)集,Kvar是主鍵,Yvar是y值,lst_bin是訓(xùn)練樣本上的分箱結(jié)果的字典。該函數(shù)也輸出兩個對象,df_bin是測試樣本分箱結(jié)果,dict_bin是測試樣本變量分箱結(jié)果的字典。具體示例和上面結(jié)果相似。
上面的兩個函數(shù)實現(xiàn)了變量分箱的自動化,現(xiàn)在想看看訓(xùn)練樣本和測試樣本里某個變量的趨勢是否一致。編了兩個函數(shù)實現(xiàn)該功能。train_test_bindict_trend里的參數(shù)為訓(xùn)練和測試樣本的分箱結(jié)果的字典,train_test_bin_trend參數(shù)為訓(xùn)練和測試樣本的分箱數(shù)據(jù)集。
運行后的結(jié)果如下,左側(cè)為該變量在訓(xùn)練樣本上的趨勢,右側(cè)為測試樣本上的趨勢,從圖中可以看出該變量的趨勢比較穩(wěn)定,但為了業(yè)務(wù)上更好解釋,可以將2和3進行合并,這樣趨勢就更明顯也更好解釋,也會在某種程度上消除掉一些噪音。
現(xiàn)在我想改變上面這個變量的分箱,比如分箱的個數(shù)更多一些或更少一些,或改變每段的最少占比等。
如改變每段占比至少10%,看看趨勢如何:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python分箱分类代码_Python实现变量分箱及应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一组数字中算出最相近的组合_据说在金字塔
- 下一篇: 高大上的集团名字_那些刚改了“高大上”名