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