您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“python風控中KS原理是什么”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“python風控中KS原理是什么”這篇文章吧。
在金融風控領域,常常使用KS指標來衡量評估模型的區分度(discrimination),這也是風控模型最為追求的指標之一。下面將從區分度概念、KS計算方法、業務指導意義、幾何解析、數學思想等角度,對KS進行深入剖析。
在數據探索中,若想大致判斷自變量x對因變量y有沒有區分度,常會將樣本分為正負來觀察變量的分布差異。那么,如何判斷自變量是有用的?直觀理解,如果兩個分布的重疊部分越小,代表正負樣本的差異性越大,自變量就能更好的將正負樣本區分開來。具體如圖1所示。
打個比方,想象這個變量就是一雙手,把這個分布往兩邊拉開。這雙手的力量越大,兩個概率分布間隔就越遠,說明變量區分性就越強。
圖1 - 正負樣本分布差異對比
import matplotlib import numpy as np import matplotlib.pyplot as plt mu = 100 # mean of distribution sigma = 15 # standard deviation of distribution x = mu + sigma * np.random.randn(20000) num_bins = 80 fig, ax = plt.subplots() # the histogram of the data n, bins, patches = ax.hist(x, num_bins, density=1) n1, bins1, patches1 = ax.hist(x - 20, num_bins, density=1) # add a 'best fit' line y = ((1 / (np.sqrt(2 * np.pi) * sigma)) * np.exp(-0.5 * (1 / sigma * (bins - mu))**2)) y1 = ((1 / (np.sqrt(2 * np.pi) * sigma)) * np.exp(-0.5 * (1 / sigma * (bins - mu))**2)) ax.plot(bins, y, '--', label = 'bads') ax.plot(bins1, y, '--', label = 'goods') ax.set_xlabel('Varible') ax.set_ylabel('Probability density') ax.set_title('Distribution of bads and goods') fig.tight_layout() plt.grid(True,linestyle = ':', color = 'r', alpha = 0.7) plt.legend() plt.show()
KS(Kolmogorov-Smirnov)統計量由兩位蘇聯科學家A.N.Kolmogorov和N.V.Smirnov提出。
在風控中KS通常用于評估模型區分度,區分度越大,說明模型風險排序能力越強。
KS是基于經驗累積分布函數(Emporical Cumulative Distribution Function,ecdf)建立的
step1:對變量進行分箱(binning),可以選擇等頻、等距或者自定義距離。
step2:計算每個分箱區間的好樣本數(goods)與壞樣本數(bads)。
step3:計算每個分箱區間內累計好客戶占總好客戶比值(cum_good_rate)和累計壞客戶占總壞客戶比值(cum_bad_rate)。
step4:計算每個分箱區間累計壞客戶占比與累計好客戶占比的絕對值,得到KS曲線,也就是:
step5:在這些絕對值中取最大值,得到此變量的最終KS值。
為了便于理解,以具體的數據展示上述過程:
表1 - KS計算過程表
從上表中可以得到以下信息:
1.模型分數越高,逾期率越低,因此低分段bad_rate相對于高分段更高,cum_bad_rate曲線增長速率會比cum_good_rate更快。cum_bad_rate曲線在cum_good_rate曲線上方。
2.每個分箱樣本數量基本相同,說明是等頻分箱。
3.如將cutoff限定為0.65,則其cum_bad_rate為82.75%,表示有82.75%的壞客戶會被拒絕,但同時cum_good_rate為29.69%,表示同時會有29.69%的好客戶會被拒絕。
4.根據bad_rate的變化趨勢,模型的排序性很好。如果是A卡,對排序性的要求會更高,因為需要根據風險等級對用戶風險定價。
5.模型的KS達到53.1%,區分度較強,這是最理想的狀態,實際業務應用中需要根據預設條件權衡通過率與壞賬率的關系,一般cutoff不會選在理想值處,因此可知,KS是區分度的上限。
6.對于A卡來說,通常KS很難達到52%,因此,若上表數據為A卡結果,需要進一步確認模型是否發生過擬合。
需要進一步指出的是,KS是在放貸樣本上評估的,放貸樣本對于全量樣本永遠是有偏的。對于裸奔風控系統,偏差會很小;反之如果風控系統做的越好,偏差就會越大。因此KS不僅僅只是一個數字,其背后蘊藏的很多原因,需要結合業務進行具體分析。
當KS不佳時,為了達到預期目的,可進行以下校驗:
1.檢驗入模變量是否已被策略使用,使用重復變量會導致模型無法命中本應被命中的壞客戶,導致模型效果下降。
2.檢驗訓練樣本與驗證樣本之間的客群差異是否明顯,其中包括時間分布,某些特征分布、特殊特征命中情況等。
3.開發對目標場景更具針對性的新特征,比如稅務場景,在進行特征衍生時,更加關注稅務指標;如識別長期風險,就使用強金融屬性變量,對于欺詐風險,就使用一些短期的負面變量。
4.分群建模,但須考慮穩定性與差異性,防止過擬合。
5.壞客戶分析,試圖通過個性推共性。
對表1數據進行可視化,便得到KS曲線,主要使用到最后三列數據,即cum_good_rate、cum_bad_rate和KS,具體代碼和圖像如下:
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np cum_good_rate = np.array([0.00,0.05,0.12,0.20,0.30,0.41,0.53,0.71,0.86,1.00]) cum_bad_rate = np.array([0.26,0.45,0.59,0.72,0.83,0.90,0.97,0.99,1.00,1.00]) x = np.linspace(0, 1, 10) plt.plot(x, cum_good_rate, label = 'cum_good_rate') plt.plot(x, cum_bad_rate, label = 'cum_bad_rate') plt.plot(x, cum_bad_rate - cum_good_rate, label = 'KS') plt.title('KS Curve', fontsize = 16) plt.grid(True,linestyle = ':', color = 'r', alpha = 0.7) plt.axhline(y = 0.53, c = 'r', ls = '--', lw = 3) #繪制平行于x軸的水平參考線 plt.axvline(x = 0.43, c = 'r', ls = '--', lw = 3) #繪制平行于y軸的垂直參考線 plt.legend() plt.show()
圖2 - KS曲線
至此,我們已經了解了KS的計算的基本流程、評價標準、業務指導意義和優化思路,接下來有幾個問題:
1.為什么風控中常用KS來評價模型效果,而不是使用準確率、召回率等?
2.最大KS只是一個宏觀的結果,那么在不同的cutoff下取到max,模型效果有何差異?
3.一般情況下,KS越大越好,但為什么通常認為高于75%的KS就不可靠了?
風控建模過程中,常把樣本標簽分為GBIX四類,其中:G=Good(好人,標記為0),B=Bad(壞人,標記為1),I=Indeterminate(不定,未進入表現期),X=Exclusion(排斥,異常樣本)。
需要指出的是,Good與Bad之間的定義往往是模糊的、連續的,依賴于實際業務需求。這里舉兩個例子幫助理解:
對于12期信貸產品,如果設定表現期為前6期,S6D15(前6期中,任意一期逾期超15天)就是1,否則為0;但后來如果把表現期調整為3期,那么對于**“前3期都正常還款,但4~6期才發生逾期并超過15天”**的這部分樣本,原本所定義的label就從1變成了0.因此業務需求不同,導致標簽的定義不是絕對的。所以說,好壞樣本定義一定要根據實際業務需求來,要在對業務進行充分理解與分析的基礎上進行確定,而不是拍腦袋而為之。
定義首期逾期超30天為1,否則為0。但是,逾期29天與逾期31天的用戶之間其實并沒有不可跨越的硬間隔,逾期29天的用戶可能會進一步惡化為逾期31天。
由于逾期嚴重程度定義本身就帶有一定的主觀色彩,我們很難說逾期天數差幾天有多少本質差異,所以哪怕我們為了轉化為分類問題做了硬性的1和0的界限定義,但業務上理解還是一個連續問題。
因此,在風控中,y的定義并不是非黑即白(離散型),而用概率分布(連續型)衡量或許更合理。
那么,為什么選擇KS指標呢?KS傾向于從概率角度衡量正負樣本之間的差異,正是因為正負樣本之間的模糊性與連續性,所以KS也是一條連續曲線。但最終為什么取一個最大值,主要原因是提取KS曲線中的的一個顯著特征,從而便于相互比較。
以上是“python風控中KS原理是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。