日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

金融风控实战——有监督分箱

發布時間:2025/4/5 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 金融风控实战——有监督分箱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

卡方分箱

??分箱的方法有很多,卡方分箱屬于其中一種,屬于有監督系列的。卡方分箱正是一種基于卡方檢驗的分箱方法,更具地說是基于上面提到的第二種應用,獨立性檢驗,來實現核心分箱功能的。
??卡方分箱算法簡單來說,有兩個部分組成:1)初始化步驟;2)合并。
小栗子:

  • 計算所有相鄰分箱的卡方值:也就是說如果有1,2,3,4個分箱,那么就需要綁定相鄰的兩個分箱,共三組:12,23,34。然后分別計算三個綁定組的卡方值。
  • 從計算的卡方值中找出最小的一個,并把這兩個分箱合并:比如,23是卡方值最小的一個,那么就將2和3合并,本輪計算中分箱就變為了1,23,4。

??背后的基本思想是:如果兩個相鄰的區間具有非常類似的類分布,那么這兩個區間可以合并。否則,它們應該分開。低卡方值表明它們具有相似的類分布。(卡方值衡量推斷值和觀察值之間的偏離程度)
??停止條件:1)卡方停止的閾值 ,2)分箱數目的限制

卡方分箱公式理解:
χ2=∑i=1m∑j=1k(Aij?Eij)2Eij\chi^{2}=\sum_{i=1}^{m} \sum_{j=1}^{k} \frac{\left(A_{i j}-E_{i j}\right)^{2}}{E_{i j}} χ2=i=1m?j=1k?Eij?(Aij??Eij?)2?

  • m=2:表示相鄰的兩個分箱數目
  • k:表示目標變量的類別數,比如目標是網貸違約的好和壞,那么k=2。k也可以是多類,大于2。
  • AijA_{ij}Aij?:實際頻數,即第i個分箱的j類頻數
  • EijE_{ij}Eij?:期望頻數

其中,期望頻數的公式如下,可根據P(AB)=P(A)P(B)推導出來:Eij=Ri?CjNE_{i j}=\frac{R_{i} * C_{j}}{N} Eij?=NRi??Cj??RiR_{i}Ri?CjC_{j}Cj?:分別是實際頻數整列和整行的加和

舉個例子說明一下這個公式是如何用的,對于相鄰兩個分箱的卡方值計算:

??實際頻數和期望頻數都有了,帶入卡方公式求解,過程如下:χ2=∑i=1m∑j=1k(Aij?Eij)2Eij=[(A11?E11)2E11+(A12?E12)2E12]+[(A21?E21)2E21+(A22?E22)2E22]\begin{aligned} \chi^{2} &=\sum_{i=1}^{m} \sum_{j=1}^{k} \frac{\left(A_{i j}-E_{i j}\right)^{2}}{E_{i j}} \\ &=\left[\frac{\left(A_{11}-E_{11}\right)^{2}}{E_{11}}+\frac{\left(A_{12}-E_{12}\right)^{2}}{E_{12}}\right]+\left[\frac{\left(A_{21}-E_{21}\right)^{2}}{E_{21}}+\frac{\left(A_{22}-E_{22}\right)^{2}}{E_{22}}\right] \end{aligned} χ2?=i=1m?j=1k?Eij?(Aij??Eij?)2?=[E11?(A11??E11?)2?+E12?(A12??E12?)2?]+[E21?(A21??E21?)2?+E22?(A22??E22?)2?]?
??如果計算結果是所有卡方值中最小的,說明:這組中兩個分箱具有最相似的類分布,因此把它們合并。

??如果性別和化妝與否沒有關系,四個格子應該是括號里的數(期望值,用極大似然估計55=100*110/200,其中110/200可理解為化妝的概率,乘以男人數100,得到男人化妝概率的似然估計),這和實際值(括號外的數)有差距,理論和實際的差距說明這不是隨機的組合。

應用擬合度公式
∑i=1k(fi?npi)2npi=(95?55)255+(15?55)255+(85?45)245+(5?45)245=129.3\sum_{i=1}^{k} \frac{\left(f_{i}-n p_{i}\right)^{2}}{n p_{i}}=\frac{(95-55)^{2}}{55}+\frac{(15-55)^{2}}{55}+\frac{(85-45)^{2}}{45}+\frac{(5-45)^{2}}{45}=129.3 i=1k?npi?(fi??npi?)2?=55(95?55)2?+55(15?55)2?+45(85?45)2?+45(5?45)2?=129.3

決策樹分箱

??決策樹分箱的原理就是用想要離散化的變量單變量用樹模型擬合目標變量,例如直接使用sklearn提供的決策樹(是用cart決策樹實現的),然后將內部節點的閾值作為分箱的切點。
??補充,cart決策樹和ID3、C4.5決策樹不同,cart決策樹對于離散變量的處理其實和 連續變量一樣,都是將特征的所有取值從小到大排序,然后取兩兩之間的均值,然后遍歷所有這些均值,然后取gini系數最小的點作為閾值進行劃分數據集。并且該特征后續還可參與劃分。
??這里需要說明一下:cart的決策樹是一顆二叉樹,所以對于離散變量處理時會遍歷所有值,然后取一個作為一類,剩下的作為另一類,這樣建樹的結果就是一顆二叉樹;但在sklearn包并沒有實現對離散屬性的單獨處理,所以我們傳入的離散屬性值也會被當成連續值去處理。“scikit-learn uses an optimised version of the CART algorithm; however, scikit-learn implementation does not support categorical variables for now.”

from sklearn.tree import DecisionTreeClassifier from sklearn import tree x = np.array([0, 10, 180, 30, 55, 35, 25, 75, 80, 10]).reshape(-1, 1) y = np.array([1, 1, 0, 1, 0, 0, 0, 1, 0, 0])boundary = [] # 待return的分箱邊界值列表#x = x.fillna(-1).values # 填充缺失值 #y = y.valuesclf = DecisionTreeClassifier(criterion='entropy', # “信息熵”最小化準則劃分max_leaf_nodes=6, # 最大葉子節點數min_samples_leaf=0.05) # 葉子節點樣本數量最小占比clf.fit(x, y) # 訓練決策樹 #DecisionTreeClassifier(criterion='entropy', max_leaf_nodes=6, # min_samples_leaf=0.05) plt.figure(figsize=(14,6)) tree.plot_tree(clf) #打印決策樹的結構圖 plt.show()

n_nodes = clf.tree_.node_count #決策樹的節點數 n_nodes #11 children_left = clf.tree_.children_left #node_count大小的數組,children_left[i]表示第i個節點的左子節點 children_right = clf.tree_.children_right #node_count大小的數組,children_right[i]表示第i個節點的右子節點 children_left #array([ 1, 3, -1, -1, 5, 7, -1, 9, -1, -1, -1], dtype=int64) children_right #array([ 2, 4, -1, -1, 6, 8, -1, 10, -1, -1, -1], dtype=int64) threshold = clf.tree_.threshold #node_count大小的數組,threshold[i]表示第i個節點劃分數據集的閾值 threshold #array([77.5, 5. , -2. , -2. , 65. , 32.5, -2. , 27.5, -2. , -2. , -2. ]) boundary1=[] for i in range(n_nodes):if children_left[i] != children_right[i]: # 非葉節點boundary1.append(threshold[i])boundary1.sort() boundary1 #[5.0, 27.5, 32.5, 65.0, 77.5] min_x = x.min() max_x = x.max() + 0.1 # +0.1是為了考慮后續groupby操作時,能包含特征最大值的樣本 boundary = [min_x] + boundary + [max_x] boundary #[0, 5.0, 27.5, 32.5, 65.0, 77.5, 180.1]

總結

以上是生活随笔為你收集整理的金融风控实战——有监督分箱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。