有案例有代碼,詳細(xì)模型分?jǐn)?shù)(下)
編輯導(dǎo)語:風(fēng)控模型的應(yīng)用場景非常廣泛,只要牽扯互聯(lián)網(wǎng)金融的行業(yè)就少不了風(fēng)控,風(fēng)控模型建好后還要映射到信用分?jǐn)?shù)空間,才能呈現(xiàn)給用戶;本文作者分享了詳細(xì)的建模方法,教你如何建立模型分?jǐn)?shù),我們一起來看一下。
承接上文《有案例有代碼,詳細(xì)模型分?jǐn)?shù)》本文開頭告訴大家怎樣更合理的向客戶展示信用評估結(jié)果。把模型預(yù)測值映射到一個分?jǐn)?shù)區(qū)間,比如350~950,分?jǐn)?shù)越高信用越好。
很自然的我們就走到了這個最佳選擇,至于分?jǐn)?shù)為什么定義在這個區(qū)間,我個人理解一是為了跟國際上主流的個人信用評分區(qū)間接軌;二是為了拉開用戶之間的分?jǐn)?shù)差距。
4. 如何映射分?jǐn)?shù)
最簡單最容易想到的是采用尺度變化,將模型預(yù)測結(jié)果線性的映射到350~950,然后找到cutoff 對應(yīng)的分?jǐn)?shù)X,告訴用戶分?jǐn)?shù)高于X就可以拿到貸款。
等一下!如果過段時間模型更換了怎么辦?
模型換了,cutoff隨之變化,分?jǐn)?shù)X也跟著變了。這時就會有一部分用戶瘋狂的呼叫客服問“為啥我的評分變高了,反而不能貸款?”
同時每次更換模型,后臺、前端都需要進(jìn)行相應(yīng)的邏輯、頁面修改,每次模型發(fā)布需要多個環(huán)節(jié)協(xié)作完成,是一種高耦合的工作方式。
于是你趕緊召集團(tuán)隊成員討論解決方案,有人提出一個又簡單又好用的方案:分段尺度變換,將cutoff 固定為 680分(本文假定的)然后分成兩段作尺度變換。
總結(jié)分段尺度變換的優(yōu)點:
- 模型切換用戶無感。無論模型的cutoff如何調(diào)整,用戶感知不到差別,只要分?jǐn)?shù)超過680都可以成功申請到貸款;
- 解耦了模型團(tuán)隊與開發(fā)團(tuán)隊。也就是說當(dāng)模型人員校準(zhǔn)好評分后,后臺開發(fā)只需要設(shè)定680分通過,從此以后無論模型人員怎么更換模型,后臺開發(fā)都不用再重新修改代碼。
“`python
predict_desc = table.describe()[‘predict’]
# 這里用幾倍標(biāo)準(zhǔn)差確定上下界根據(jù)經(jīng)驗設(shè)定,是為了避免outlier值使得分?jǐn)?shù)過于集中在某個范圍
upper = min(predict_desc[‘mean’] + 5 * predict_desc[‘std’], 1)
lower = max(predict_desc[‘mean’] – 3 * predict_desc[‘std’], 0)
def get_score_linear(predict, upper, lower, cutoff):
“””
將模型打分結(jié)果尺度變換到350~950的分?jǐn)?shù)區(qū)間
:param predict: float, 模型打分
:param upper: 模型打分上界
:param lower: 模型打分下界
:param cutoff: 680分位置對應(yīng)的模型打分
:return:
“””
if predict > upper:
return 350
elif predict > cutoff:
return 680 – int((680 – 350) * (predict – cutoff) / (upper – cutoff))
elif predict == cutoff:
return 680
elif predict > lower:
return 680 + int((cutoff – predict) * (950 – 680) / (cutoff – lower))
else:
950
二、客群分層下的分?jǐn)?shù)映射
1. 老用戶分層
敏銳的你發(fā)現(xiàn),隨著用戶的復(fù)貸次數(shù)增多,原有盈虧平衡點的計算方式會使得拉新成本被計算了多次(用戶復(fù)貸幾次就多計算幾次)。
這也就引出了用戶分層的一種場景:區(qū)分新老客戶,分別建模,分別計算盈虧平衡點。
傳統(tǒng)的評分卡中A卡B卡也有異曲同工之處:
- A卡用于貸前審批階段對借款申請人的量化評估,是使用最廣泛的;
- B卡用于貸中階段,增加了借款人的還款及交易行為,預(yù)測借款人未來的還款能力和意愿;
綜合分析新老用戶分別建模的特點:
- 模型更準(zhǔn)確。老客戶建模引入了歷史還款行為、交易行為,使得模型更準(zhǔn)確。
- 老用戶的成本更低。拉新成本歸屬于邊際成本,當(dāng)新用戶轉(zhuǎn)化為老用戶后,每多一次復(fù)貸都會將拉新成本攤平。那么就可以將拉新成本算在新用戶上,老用戶的成本得以降低,對逾期率有更大的容忍度;
- 提高復(fù)貸率,提高盈利。修正老客戶的盈虧平衡點,可以提高老客戶的通過率,從而提高復(fù)貸率,提高盈利。
那么我們再重新計算以下老用戶的盈虧平衡點:帶入公式計算得到盈虧平衡點 pd = 0.0217,在代碼中求得cutoff = 0.047。
同理,采用分段尺度變換方法可以將模型結(jié)果進(jìn)一步映射到信用分?jǐn)?shù)空間,這里不再贅述。
此時的你又開始思考如何做大做強。為了吸引更多用戶,留住優(yōu)質(zhì)客源,你跑斷了腿找到一個新的資本方,愿意以更低的資金成本給你提供資金來源。
于是你終于可以上線一款新產(chǎn)品:更低的利率給更好的你。
至此業(yè)務(wù)進(jìn)入了多產(chǎn)品軌道。
2. 用戶質(zhì)量分層以匹配不同利率產(chǎn)品
除了按照新老客戶性質(zhì)分層,還可以按照用戶質(zhì)量來劃分用戶。
將老用戶分為優(yōu)質(zhì)用戶和次優(yōu)用戶,這樣做的目的是為優(yōu)質(zhì)用戶匹配優(yōu)質(zhì)產(chǎn)品,更低利率或更高額度。
按照這個思路就可以將用戶分為以下四個層次:
- A — 老用戶中的優(yōu)質(zhì)用戶???資金成本0.02 利率?0.22 額度?5000
- B — 老用戶中的次優(yōu)用戶???資金成本0.04 利率?0.34 額度?3000
- C — 新用戶中的優(yōu)質(zhì)用戶???資金成本0.02 利率?0.30 額度?3000
- D — 新用戶中的次優(yōu)用戶???資金成本0.04 利率?0.34 額度?1000
只以A、B類用戶舉例,同理帶入公式計算盈虧平衡點:
得到:
A類用戶盈虧平衡點?pd = 0.01467
B類用戶盈虧平衡點?pd = 0.02167
現(xiàn)實業(yè)務(wù)中可以將ABCD四類用戶評級結(jié)果直接反饋給用戶,比如我們常看到的黃金會員、鉆石會員,本質(zhì)上是類似的;
也可以按照分段尺度變換的思路將分?jǐn)?shù)劃分多段,例如:
代碼可以參考前面二分段尺度變換的代碼,增加對應(yīng)的判斷分支即可。
隨之而來的問題也就出現(xiàn)了:
- 如果產(chǎn)品越來越豐富,變換額度、利率,所需要計算的盈虧平衡點越來越多,那怎么辦呢?再使用分段尺度變換這種簡單粗暴的方法就顯得越來越笨拙了,也增加了出錯的概率。
- 當(dāng)多個模型共同工作或切換備用模型時,如何保證分?jǐn)?shù)尺度一致?這里尺度一致的意思是,兩個模型分?jǐn)?shù)相同時對應(yīng)的逾期率是否一致。
?三、多產(chǎn)品、多客群、多模型下數(shù)映射的產(chǎn)生——分?jǐn)?shù)校準(zhǔn)
為了能夠更好的進(jìn)行風(fēng)險定價,業(yè)務(wù)部門希望模型給出的分?jǐn)?shù)能夠準(zhǔn)確的反映出真實的信用風(fēng)險等級。
這一過程稱為分?jǐn)?shù)校準(zhǔn)(Score Calibration)。
也就是說,我們最終的目標(biāo)是:建立信用評估分?jǐn)?shù)與預(yù)測逾期率的函數(shù)關(guān)系。
這里介紹一種常用的分?jǐn)?shù)校準(zhǔn)方法,通過該方法,可以由分?jǐn)?shù)精準(zhǔn)的計算出預(yù)測逾期率,反之亦可。
1. 建立Odds與分?jǐn)?shù)的函數(shù)關(guān)系
熟悉業(yè)務(wù)的同學(xué)會知道,建模時逾期樣本非常少,更多的是信用良好的樣本。
原因我認(rèn)為有兩點:
- 現(xiàn)實中好人是大多數(shù)的,這點不多解釋。
- 模型長期篩選的作用,通常我們已經(jīng)得到還款結(jié)果的樣本是已經(jīng)通過上一輪模型的一批樣本,壞用戶已經(jīng)被上一輪模型過濾掉大部分了。
因此,逾期率與用戶數(shù)量是符合冪律分布的。也就是說隨著逾期率的升高,用戶數(shù)量呈指數(shù)下降。
進(jìn)而在設(shè)計Odds與分?jǐn)?shù)的函數(shù)關(guān)系時,對Odds取了一個log,再結(jié)合簡單的線性方程,加入截距A和斜率B進(jìn)行線性擬合:
也叫做比率Odds,常用來評估風(fēng)險。(ps:熟悉賭球的朋友會對比率很熟悉),同時有
由公式看出來分?jǐn)?shù)與log(Odds)呈線性關(guān)系,表示分?jǐn)?shù)每變化多少,逾期率會番翻。
要算出系數(shù)A、B的話,需要從業(yè)務(wù)角度先預(yù)設(shè)兩個前提條件:
我們設(shè)定時,應(yīng)逾期率是0.0196,?當(dāng)Odds按雙倍上下浮動時,分值對應(yīng)變動100分。
這里設(shè)定的值只是為了演示計算,實際業(yè)務(wù)中應(yīng)該根據(jù)業(yè)務(wù)情況制定合理的取值。
求解方程組計算得到A,B
上面這個公式就是分?jǐn)?shù)與逾期率的函數(shù)關(guān)系,我們可以進(jìn)一步把分?jǐn)?shù)、Odds、逾期率的對照關(guān)系計算出來:
仔細(xì)觀察我們會發(fā)現(xiàn),隨著逾期率PD越來越小,Odds其實近似等于逾期率,這就更方便業(yè)務(wù)團(tuán)隊進(jìn)行風(fēng)險定價。
2. 建立模型結(jié)果與Odds的函數(shù)關(guān)系
- 對于機器學(xué)習(xí)模型來說這里變量x可以是一個或多個模型預(yù)測結(jié)果;
- 對于評分卡來說變量x就是原始特征;
從模型結(jié)果到Odds是一個線性回歸過程。
至此,我們就完成了一個標(biāo)準(zhǔn)的分?jǐn)?shù)校準(zhǔn)。
四、總結(jié)
我們回顧一下,隨著產(chǎn)品種類,模型數(shù)量的豐富,分?jǐn)?shù)映射逐漸有了更多的要求以適應(yīng)業(yè)務(wù)的需求和團(tuán)隊協(xié)作的高效。
總結(jié)一下每個階段的優(yōu)缺點:
本文由 @FAL金科應(yīng)用研院 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 unsplash,基于 CC0 協(xié)議
124