欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python算法深入理解風(fēng)控中的KS原理

 更新時間:2021年11月22日 11:14:36   作者:Python學(xué)習(xí)與數(shù)據(jù)挖掘  
這篇文章主要為大家介紹了python算法深入理解風(fēng)控中的KS原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、業(yè)務(wù)背景

在金融風(fēng)控領(lǐng)域,常常使用KS指標(biāo)來衡量評估模型的區(qū)分度(discrimination),這也是風(fēng)控模型最為追求的指標(biāo)之一。下面將從區(qū)分度概念、KS計算方法、業(yè)務(wù)指導(dǎo)意義、幾何解析、數(shù)學(xué)思想等角度,對KS進(jìn)行深入剖析。

二、直觀理解區(qū)分度的概念

在數(shù)據(jù)探索中,若想大致判斷自變量x對因變量y有沒有區(qū)分度,常會將樣本分為正負(fù)來觀察變量的分布差異。那么,如何判斷自變量是有用的?直觀理解,如果兩個分布的重疊部分越小,代表正負(fù)樣本的差異性越大,自變量就能更好的將正負(fù)樣本區(qū)分開來。具體如圖1所示。

打個比方,想象這個變量就是一雙手,把這個分布往兩邊拉開。這雙手的力量越大,兩個概率分布間隔就越遠(yuǎn),說明變量區(qū)分性就越強。

圖片

圖1 - 正負(fù)樣本分布差異對比

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統(tǒng)計量的定義

KS(Kolmogorov-Smirnov)統(tǒng)計量由兩位蘇聯(lián)科學(xué)家A.N.Kolmogorov和N.V.Smirnov提出。

在風(fēng)控中KS通常用于評估模型區(qū)分度,區(qū)分度越大,說明模型風(fēng)險排序能力越強。

KS是基于經(jīng)驗累積分布函數(shù)(Emporical Cumulative Distribution Function,ecdf)建立的

四、KS計算過程及業(yè)務(wù)分析

KS常用的計算方法:

step1:對變量進(jìn)行分箱(binning),可以選擇等頻、等距或者自定義距離。

step2:計算每個分箱區(qū)間的好樣本數(shù)(goods)與壞樣本數(shù)(bads)。

step3:計算每個分箱區(qū)間內(nèi)累計好客戶占總好客戶比值(cum_good_rate)和累計壞客戶占總壞客戶比值(cum_bad_rate)。

step4:計算每個分箱區(qū)間累計壞客戶占比與累計好客戶占比的絕對值,得到KS曲線,也就是:

step5:在這些絕對值中取最大值,得到此變量的最終KS值。

為了便于理解,以具體的數(shù)據(jù)展示上述過程:

圖片

表1 - KS計算過程表

上標(biāo)指標(biāo)計算邏輯:

從上表中可以得到以下信息:

1.模型分?jǐn)?shù)越高,逾期率越低,因此低分段bad_rate相對于高分段更高,cum_bad_rate曲線增長速率會比cum_good_rate更快。cum_bad_rate曲線在cum_good_rate曲線上方。

2.每個分箱樣本數(shù)量基本相同,說明是等頻分箱。

3.如將cutoff限定為0.65,則其cum_bad_rate為82.75%,表示有82.75%的壞客戶會被拒絕,但同時cum_good_rate為29.69%,表示同時會有29.69%的好客戶會被拒絕。

4.根據(jù)bad_rate的變化趨勢,模型的排序性很好。如果是A卡,對排序性的要求會更高,因為需要根據(jù)風(fēng)險等級對用戶風(fēng)險定價。

5.模型的KS達(dá)到53.1%,區(qū)分度較強,這是最理想的狀態(tài),實際業(yè)務(wù)應(yīng)用中需要根據(jù)預(yù)設(shè)條件權(quán)衡通過率與壞賬率的關(guān)系,一般cutoff不會選在理想值處,因此可知,KS是區(qū)分度的上限。

6.對于A卡來說,通常KS很難達(dá)到52%,因此,若上表數(shù)據(jù)為A卡結(jié)果,需要進(jìn)一步確認(rèn)模型是否發(fā)生過擬合。

需要進(jìn)一步指出的是,KS是在放貸樣本上評估的,放貸樣本對于全量樣本永遠(yuǎn)是有偏的。對于裸奔風(fēng)控系統(tǒng),偏差會很??;反之如果風(fēng)控系統(tǒng)做的越好,偏差就會越大。因此KS不僅僅只是一個數(shù)字,其背后蘊藏的很多原因,需要結(jié)合業(yè)務(wù)進(jìn)行具體分析。

當(dāng)KS不佳時,為了達(dá)到預(yù)期目的,可進(jìn)行以下校驗:

1.檢驗入模變量是否已被策略使用,使用重復(fù)變量會導(dǎo)致模型無法命中本應(yīng)被命中的壞客戶,導(dǎo)致模型效果下降。

2.檢驗訓(xùn)練樣本與驗證樣本之間的客群差異是否明顯,其中包括時間分布,某些特征分布、特殊特征命中情況等。

3.開發(fā)對目標(biāo)場景更具針對性的新特征,比如稅務(wù)場景,在進(jìn)行特征衍生時,更加關(guān)注稅務(wù)指標(biāo);如識別長期風(fēng)險,就使用強金融屬性變量,對于欺詐風(fēng)險,就使用一些短期的負(fù)面變量。

4.分群建模,但須考慮穩(wěn)定性與差異性,防止過擬合。

5.壞客戶分析,試圖通過個性推共性。

對表1數(shù)據(jù)進(jìn)行可視化,便得到KS曲線,主要使用到最后三列數(shù)據(jù),即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曲線

至此,我們已經(jīng)了解了KS的計算的基本流程、評價標(biāo)準(zhǔn)、業(yè)務(wù)指導(dǎo)意義和優(yōu)化思路,接下來有幾個問題:

1.為什么風(fēng)控中常用KS來評價模型效果,而不是使用準(zhǔn)確率、召回率等?

2.最大KS只是一個宏觀的結(jié)果,那么在不同的cutoff下取到max,模型效果有何差異?

3.一般情況下,KS越大越好,但為什么通常認(rèn)為高于75%的KS就不可靠了?

五、風(fēng)控中選擇KS的原因

風(fēng)控建模過程中,常把樣本標(biāo)簽分為GBIX四類,其中:G=Good(好人,標(biāo)記為0),B=Bad(壞人,標(biāo)記為1),I=Indeterminate(不定,未進(jìn)入表現(xiàn)期),X=Exclusion(排斥,異常樣本)。

需要指出的是,Good與Bad之間的定義往往是模糊的、連續(xù)的,依賴于實際業(yè)務(wù)需求。這里舉兩個例子幫助理解:

例1:模糊性

對于12期信貸產(chǎn)品,如果設(shè)定表現(xiàn)期為前6期,S6D15(前6期中,任意一期逾期超15天)就是1,否則為0;但后來如果把表現(xiàn)期調(diào)整為3期,那么對于**“前3期都正常還款,但4~6期才發(fā)生逾期并超過15天”**的這部分樣本,原本所定義的label就從1變成了0.因此業(yè)務(wù)需求不同,導(dǎo)致標(biāo)簽的定義不是絕對的。所以說,好壞樣本定義一定要根據(jù)實際業(yè)務(wù)需求來,要在對業(yè)務(wù)進(jìn)行充分理解與分析的基礎(chǔ)上進(jìn)行確定,而不是拍腦袋而為之。

例2:連續(xù)性

定義首期逾期超30天為1,否則為0。但是,逾期29天與逾期31天的用戶之間其實并沒有不可跨越的硬間隔,逾期29天的用戶可能會進(jìn)一步惡化為逾期31天。

由于逾期嚴(yán)重程度定義本身就帶有一定的主觀色彩,我們很難說逾期天數(shù)差幾天有多少本質(zhì)差異,所以哪怕我們?yōu)榱宿D(zhuǎn)化為分類問題做了硬性的1和0的界限定義,但業(yè)務(wù)上理解還是一個連續(xù)問題。

因此,在風(fēng)控中,y的定義并不是非黑即白(離散型),而用概率分布(連續(xù)型)衡量或許更合理。

那么,為什么選擇KS指標(biāo)呢?KS傾向于從概率角度衡量正負(fù)樣本之間的差異,正是因為正負(fù)樣本之間的模糊性與連續(xù)性,所以KS也是一條連續(xù)曲線。但最終為什么取一個最大值,主要原因是提取KS曲線中的的一個顯著特征,從而便于相互比較。

以上就是python算法深入理解風(fēng)控中的KS原理的詳細(xì)內(nèi)容,更多關(guān)于python算法風(fēng)控KS原理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python讀取圖片顏色值并生成excel像素畫的方法實例

    python讀取圖片顏色值并生成excel像素畫的方法實例

    這篇文章主要給大家介紹了關(guān)于python讀取圖片顏色值并生成excel像素畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python一行輸入多值的實現(xiàn)詳解

    python一行輸入多值的實現(xiàn)詳解

    開發(fā)人員通常想要用戶在一行中輸入多個值或者輸入。在python中有兩種方式讓用戶在一行中輸入多個值或者輸入,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • python實現(xiàn)三壺謎題的示例詳解

    python實現(xiàn)三壺謎題的示例詳解

    這篇文章主要介紹了python實現(xiàn)三壺謎題功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 一文詳解python如何將編寫的模塊打包上傳至pypi

    一文詳解python如何將編寫的模塊打包上傳至pypi

    我們此前花了很大功夫?qū)懥艘粋€極其簡單的web框架myWeb,想要給別人用的時候,需要讓別人拷貝源代碼才行,這太low了,所以本篇文章會介紹如何將自己寫的模塊打包上傳至pypi,以便讓需要的人通過pip進(jìn)行安裝,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • python雙向鏈表實現(xiàn)實例代碼

    python雙向鏈表實現(xiàn)實例代碼

    python雙向鏈表和單鏈表類似,只不過是增加了一個指向前面一個元素的指針,下面的代碼實例了python雙向鏈表的方法
    2013-11-11
  • Django框架模板用法詳解

    Django框架模板用法詳解

    本文詳細(xì)講解了Django框架中模板的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 使用Tensorboard工具查看Loss損失率

    使用Tensorboard工具查看Loss損失率

    今天小編就為大家分享一篇使用Tensorboard工具查看Loss損失率,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python中列表(list)操作方法匯總

    Python中列表(list)操作方法匯總

    這篇文章主要介紹了Python中列表(list)操作方法匯總,非常實用的技巧,需要的朋友可以參考下
    2014-08-08
  • Python中動態(tài)獲取對象的屬性和方法的教程

    Python中動態(tài)獲取對象的屬性和方法的教程

    本文主要介紹了如何在Python中動態(tài)獲取對象的屬性和方法,并運行使用它們,需要的朋友可以參考一下
    2015-04-04
  • Web服務(wù)器框架 Tornado簡介

    Web服務(wù)器框架 Tornado簡介

    Tornado Web Server 是使用Python編寫出來的一個極輕量級、高可伸縮性和非阻塞IO的Web服務(wù)器軟件,著名的 Friendfeed 網(wǎng)站就是使用它搭建的。
    2014-07-07

最新評論