区分度评估指标-KS
1.背景
KS指標來評估模型的區分度(discrimination),風控場景常用指標之一。本文將從區分度的概念、KS的計算方法、業務指導意義、幾何解釋、數學思想等多個維度展開分析,以期對KS指標有更為深入的理解認知。
Part 1. 直觀理解區分度的概念
在探索性數據分析(EDA)中,若想大致判斷自變量x對于因變量y有沒有區分度,我們常會分正負樣本群體來觀察該變量的分布差異,如圖1所示。那么,如何判斷自變量是有用的?直觀理解,如果這兩個分布的重疊部分越小,代表正負樣本的差異性越大,自變量就能把正負樣本更好地區分開。
?圖 1 - 正負樣本變量分布差異對比
Part 2. KS統計量的定義
KS(Kolmogorov-Smirnov)統計量由兩位蘇聯數學家A.N. Kolmogorov和N.V. Smirnov提出。在風控中,KS常用于評估模型區分度。區分度越大,說明模型的風險排序能力(ranking ability)越強。
KS統計量是基于經驗累積分布函數(Empirical Cumulative Distribution Function,ECDF)
建立的,一般定義為:
Part 3. KS的計算過程及業務分析
很多博客文章告訴我們,計算KS的常見方法是這樣的:
- step 1. 對變量進行分箱(binning),可以選擇等頻、等距,或者自定義距離。
- step 2. 計算每個分箱區間的好賬戶數(goods)和壞賬戶數(bads)。
- step 3. 計算每個分箱區間的累計好賬戶數占總好賬戶數比率(cum_good_rate)和累計壞賬戶數占總壞賬戶數比率(cum_bad_rate)。
- step 4. 計算每個分箱區間累計壞賬戶占比與累計好賬戶占比差的絕對值,得到KS曲線。也就是:?ks=|cum_goodrate?cum_badrate|
- step 5.?在這些絕對值中取最大值,得到此變量最終的KS值。
為幫助大家理解,現以具體數據(非業務數據)展示這一過程,如圖2所示。其中,total是每個分數區間里的樣本量,total_rate為樣本量占比;bad代表逾期,bad_rate為每個分數區間里的壞樣本占比。
圖 2 - KS計算過程表
?
那么,分析這張表我們可以得到哪些信息呢?
KS值的取值范圍是[0,1],一般習慣乘以100%。通常來說,KS越大,表明正負樣本區分程度越好。KS的業務評價標準如圖3所示。由于理解因人而異,不一定完全合理,僅供參考。
?圖 3 - KS的評價標準(供參考)
需要指出的是,KS是在放貸樣本上評估的,放貸樣本相對于全量申貸樣本永遠是有偏的。如果風控系統處于裸奔狀態(相當于不生效,隨機拒絕),那么這個偏差就會很小;反之,如果風控系統做得越好,偏差就會越大。因此,KS不僅僅只是一個數值指標,其背后蘊藏著很多原因,值得我們結合業務去認真分析。
當KS不佳時,為了達到KS的預期目標,我們可以從哪些方面著手去優化呢?一般建議如下:
若將表2數據可視化,就可以得到我們平時常見的KS曲線圖(也叫魚眼圖 ),其中橫坐標為模型概率分數(0~1),縱坐標為百分比(0~100%)。紅色曲線代表累計壞賬戶占比,綠色曲線代表累計好賬戶占比,藍色曲線代表KS曲線。
至此,我們已經基本了解KS的計算流程、評價標準、業務指導意義和優化思路。接下來,再給大家留下幾個思考題 :
Part 4. 風控中選用KS指標的原因分析
風控建模時,我們常把樣本標簽分為GBIX四類,其中:G = Good(好人,標記為0),B = Bad(壞人,標記為1),I = Indeterminate (不定,未進入表現期),X = Exclusion(排斥,異常樣本)。
需要指出的是,Good和Bad之間的定義往往是模糊、連續的,依賴于實際業務需求。這里舉兩個例子或許能幫助大家理解:
例1:模糊性
對于12期信貸產品,如果設定表現期為前6期,S6D15(前6期中任意一期逾期超過15天)就是1,否則為0;但是后來如果把表現期調整為前3期,那么對于“前3期都正常還款,但4~6期才發生逾期并超過15天“的這部分樣本而言,原本所定義的label就從1就變成0了。
因此,業務需求的不同,導致標簽定義不是絕對的。
例2:連續性
定義首期逾期超過30天為1,否則為0。但是,逾期29天和逾期31天的用戶之間其實并沒有不可跨越的硬間隔,逾期29天的用戶可能會進一步惡化為逾期31天。
由于逾期的嚴重程度定義本身就帶有一定的主觀性,我們很難說逾期天數差幾天有多少本質的差異,所以哪怕我們為了轉化為分類問題做了硬性的1和0的界限定義,但在業務上理解還是一個連續問題。
因此在風控中,y的定義并不是非黑即白(離散型),而用概率分布(連續型)來衡量或許更合理。
我們通常用概率分布來描述這種模糊的軟間隔概念,也傾向于使用LR這種概率模型,而不是SVM這種以邊界距離作為優化目標的模型。
那為什么選擇KS指標呢?——KS指標傾向于從概率角度衡量正負樣本分布之間的差異。正是因為正負樣本之間的模糊性和連續性,所以KS也是一條連續曲線。但最終為什么取一個最大值,主要原因是提取KS曲線中的一個顯著特征,從而便于相互比較。
Part 5. ROC曲線的幾何繪制及理解
在風控場景中,樣本不均衡問題非常普遍,一般正負樣本比都能達到1:100甚至更低。此時,評估模型的準確率是不可靠的。因為只要全部預測為負樣本,就能達到很高的準確率。例如,如果數據集中有95個貓和5個狗,分類器會簡單的將其都分為貓,此時準確率是95%。
【此處注意,平時都說樣本比例不影響auc,這個說法有問題,在樣本比例不極端的情況下,不影響auc。但是如果樣本比例極端的情況下,TPR個FPR曲線很極端,這樣的auc意義不大,所以樣本比例還是影響auc的】
在理解KS和ROC曲線的關系后,我們也就更容易理解——為什么通常認為KS在高于75%時就不可靠?我們可以想象,如果KS達到80%以上,此時ROC曲線就會變得很畸形,如圖9所示。
另一個更重要的可能原因是,為了便于制定策略,模型評分在放貸樣本上一般要求服從正態分布。現實中不太可能出現如此完美的分類器,如果出現這種明顯的雙峰分布,反而就不合常理,我們就有理由懷疑其可靠性。( 值得一起探討)
?
Part 8. KS的計算代碼(Python)
def ks_compute(proba_arr, target_arr):'''----------------------------------------------------------------------功能:利用scipy庫函數計算ks指標----------------------------------------------------------------------:param proba_arr: numpy array of shape (1,), 預測為1的概率.:param target_arr: numpy array of shape (1,), 取值為0或1.----------------------------------------------------------------------:return ks_value: float, ks score estimation----------------------------------------------------------------------示例:>>> ks_compute(proba_arr=df['score'], target_arr=df[target])>>> 0.5262199213881699----------------------------------------------------------------------'''from scipy.stats import ks_2sampget_ks = lambda proba_arr, target_arr: ks_2samp(proba_arr[target_arr == 1], \proba_arr[target_arr == 0]).statisticks_value = get_ks(proba_arr, target_arr)return ks_value?
參考:
1.風控模型—區分度評估指標(KS)深入理解應用 - 知乎
2.
總結
以上是生活随笔為你收集整理的区分度评估指标-KS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python小游戏——散刺修罗场
- 下一篇: Nextflow patterns