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