最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

python 評分卡_評分卡原理及Python實現

2022-01-14 12:15 作者:python風控模型  | 我要投稿

本文致力于讓大家徹底弄懂評分卡的原理和實現。

本文目錄

評分卡原理

評分卡Python實現

2.1 根據客戶違約概率計算客戶得分

2.2 根據分箱WOE和特征系數計算客戶得分

一、評分卡原理

根據邏輯回歸原理,客戶違約的概率p有如下式子:

其中x為客戶特征,θ為特征系數,上式整理得:

違約概率和正常概率的比值稱為比率(Odds),即:

所以

設評分卡的評分Score為:

其中A、B是正常數,在風控中一般分數越高信用越好風險越低。所以B前面取負號,讓違約的概率越高分數越低。

由中學知識可知,兩個方程聯立可求出兩個未知數。為求出A、B的具體值,有如下兩個假設:

1.假設比率為θ

0

時的基準分為P

0

2.假設比率翻倍(2θ

0

)時分數的變動值為PDO。

把θ0、P0、PDO代入評分公式得:

①-②得:

最終解得:

將③代入①得:

假設θ0=0.001時,P0=600,PDO=40。

B = 40/np.log(2)=57.71

A=600+57.71*np.log(1/1000)=201.35

其中

x

1

、

x

2

x

n

等是出現在最終模型的入模變量。由于一些入模變量進行了WOE編碼,可以將評分寫成對應woe的形式。

其中θ

i

為第i個特征的系數,W

ij

為第i個特征第j個分箱的WOE值,

是0、1邏輯變量,當客戶對應特征的取值落在該分箱時為1否則為0。

所以最終的評分卡形式如下:

二、評分卡Python實現

從評分卡原理的分析中知,得到客戶的最終得分有兩個計算公式:

如果已經通過邏輯回歸的訓練得到客戶的違約概率,且只想得到客戶的最終得分??砂堰`約概率P代入第一個式子即可以得到客戶得分。

1根據客戶違約概率計算客戶得分

具體計算代碼如下:

def Prob2Score(prob, A, PDO):#將概率轉化成分數且為正整數y = np.log(prob/(1-prob))return?int(A-PDO/np.log(2)*(y))A, PDO = 201.35,40score['prob2score'] = score['predict'].apply(lambda x: Prob2Score(x, A, PDO))plt.hist(X_f_1['score'],bins=100)plt.show()

其中

Prob2Score

是根據第一個公式寫的函數,只要輸入違約概率prob、A和PDO的值即可計算客戶得分。

得到所有樣本的得分分布如下:

2根據分箱WOE和特征系數計算客戶得分

計算評分卡時先不考慮常值分A-Bθ0的值,只把每個特征對應分箱的分值算出。

根據最終評分卡形式編寫Python腳本如下,可得到標準評分卡。

def var_card(cut,woe,coef,B):import warningswarnings.filterwarnings('ignore')w1 = pd.DataFrame({'cut':cut,'woe':woe})w2 = w1.drop_duplicates(subset=['cut','woe'],keep='first')w2['name'] = cut.namew2['coef'] = coef[woe.name][0]w2['score'] = round(-w2['woe']*w2['coef']*B,0).astype('int64')w3 = w2[['name','cut','woe','coef','score']]return w3def score_card(card_name,data,B,coef):score_cards = pd.DataFrame({'name':[0],'cut':[0],'woe':[0],'coef':[0]})data = datafor i in range(card_name.shape[0]):cut = data[card_name.iloc[i,0]]woe = data[card_name.iloc[i,1]]coef = coefcard = var_card(cut,woe,coef,B)if card.shape[0]<20:score_cards = score_cards.append(card)score_cards_final = score_cards[['name','cut','woe','coef','score']]score_cards_final = score_cards_final.iloc[1:,:]return score_cards_finalcard_name = pd.DataFrame({'cut':columns_final_cut,'woe':columns_final_woe})data = dataA, PDO, B = 201.35,40,40/np.log(2)coef = coef_1score_card_1 = score_card(card_name,data,B,coef)

其中

card_name

中存儲每個特征對應分箱的woe值,data表示原始數據,B是公式中的常數,coef表示特征對應系數。

該計算公式只是我為了熟悉原始計算公式編寫,后續(xù)會進行代碼優(yōu)化,請悉知。

得到結果如下:

如果想根據評分卡對應分段的值得到最終得分,可在Python中輸入如下代碼:

def all_score(score_card,data,A,B,θ0):var_name = score_card[['name']].drop_duplicates(subset=['name'],keep='first')names = ['a']for i in range(var_name.shape[0]):sub = score_card[score_card['name']==var_name.iloc[i,0]]sub_1 = sub[['cut','score']]sub_1.rename(columns={'cut':sub['name'][0], 'score':sub['name'][0]+'_score'}, inplace = True)data = data.merge(sub_1, on=sub['name'][0],how='left')names.append(sub_1.columns[1])names = names[1:]score_model = data[names]score_model['woe_score'] = score_model.apply(lambda x:x.sum(), axis = 1)data['TOTALSCORE'] = score_model['woe_score']+A-B*θ0return datascore_1 = all_score(score_card_1,data,201.35,40/np.log(2),θ0=0.001)

其中

score_card_1

表示標準評分卡,data表示原始數據,A、B、θ

0

詳見上文中評分卡原理。

得到結果如下:

至此,邏輯回歸的原理和代碼闡述完畢,感興趣的同學可以自己根據公式,寫出對應的Python代碼。

轉載:https://blog.csdn.net/weixin_34534456/article/details/113644483

QQ學習群:1026993837 領學習資料? ? ? ?

在公眾號「python風控模型」里回復關鍵字:學習資料?


python 評分卡_評分卡原理及Python實現的評論 (共 條)

分享到微博請遵守國家法律
海门市| 寿光市| 昌邑市| 大荔县| 遂溪县| 如皋市| 辽中县| 南川市| 南丰县| 汝州市| 微博| 安图县| 张家川| 姜堰市| 红桥区| 精河县| 沛县| 专栏| 灵石县| 商城县| 赞皇县| 庆城县| 馆陶县| 万源市| 自贡市| 衡南县| 嘉黎县| 兴仁县| 常德市| 唐山市| 利辛县| 正阳县| 县级市| 郯城县| 伊春市| 合作市| 深泽县| 铜川市| 中宁县| 乌拉特后旗| 三原县|