先上一张评分卡
信贷业务评估的是客户的客户违约率(Percent of Default)即PD,是[0,1]的概率,比如2%即100个客户中有2个违约,简称为p。
评分卡中不直接用客户违约率p,而是用违约概率与正常概率的比值,称为Odds,即
O d d s = p 1 − p Odds=\frac{p}{1-p} Odds=1−pp, p = O d d s 1 + O d d s p=\frac{Odds}{1+Odds} p=1+OddsOdds
评分卡的背后逻辑是Odds的变动与评分变动的映射(把Odds映射为评分),分值是根据Odds的前提条件算出来的,不是人工取的。以单个客户在整张评分卡的得分的变动(比如评分从50分上升到70分)来反映Odds的变动(比如Odds从5%下降至1.25%),以及背后相对应的客户违约率PD的变动(比如从4.8%下降到1.2%)。违约率PD不直观、业务看起来不方便、不便计算,而评分就很直观、便于计算。如图所示。
因此评分卡的生成过程,就是Odds变动映射成评分变动的过程。
Odds映射为评分的公式为:
S c o r e = A − B l o g ( p 1 − p ) Score=A-Blog(\frac{p}{1-p}) Score=A−Blog(1−pp)
要算出系数A、B的话,需要从业务角度先预设两个前提条件:
解释:
- 比如根据业务经验,消费金融信贷的客户违约率4.8%算正常( θ 0 = O d d s = 5 % ) ) 。 预 设 评 分 卡 的 分 值 为 0 − 100 分 , 那 取 预 期 分 值 \theta_0=Odds=5\%))。预设评分卡的分值为0-100分,那取预期分值 θ0=Odds=5%))。预设评分卡的分值为0−100分,那取预期分值P_0)为50分,并指定当Odds按双倍上下浮动时(比如2.5%或10%),分值则对应上下变动10分(比如60分或40分)。
- 这里 θ 0 \theta_0 θ0=5%是根据业务经验来的,没有数学依据;
- 0-100分是根据做评分卡的需要来的,没有数学依据。要是想做成600-1000分的评分卡也可以,修改对应的 P 0 P_0 P0和PDO就行;
- P 0 P_0 P0=50分是根据0-100分来的,也可以取45分或73分,不重要。重要的是随着Odds翻番变动时,分数也随之变动的联动变化体系(你翻番我就变PDO=10分)
设定好 θ 0 \theta_0 θ0、 P 0 P_0 P0、PDO后,联动变化为: O d d s ( θ 0 ) Odds(\theta_0) Odds(θ0)对应的分值为 P 0 P_0 P0,且翻番的 O d d s ( 2 θ 0 ) Odds(2\theta_0) Odds(2θ0)对应的分值为 P 0 P_0 P0+PDO。则有以下两式:
P 0 = A − B l o g ( θ 0 ) P_0=A-Blog(\theta_0) P0=A−Blog(θ0)
P 0 + P D O = A − B l o g ( 2 θ 0 ) P_0+PDO=A-Blog(2\theta_0) P0+PDO=A−Blog(2θ0)
解出A、B为:
B = P D O l o g ( 2 ) B=\frac{PDO}{log(2)} B=log(2)PDO
A = P 0 + B l o g ( θ 0 ) A=P_0+Blog(\theta_0) A=P0+Blog(θ0)
按上面的解释举个例子:
设 θ 0 \theta_0 θ0、 P 0 P_0 P0、PDO为5%、50分、10分,则
B = 10 l n ( 2 ) = 14.43 B=\frac{10}{ln(2)}=14.43 B=ln(2)10=14.43
A = 50 + 14.43 ∗ l n ( 0.05 ) = 6.78 A=50+14.43*ln(0.05)=6.78 A=50+14.43∗ln(0.05)=6.78
则
S c o r e = 6.78 − 14.43 l o g ( p 1 − p ) Score=6.78-14.43log(\frac{p}{1-p}) Score=6.78−14.43log(1−pp)
按照公式,可以把所有 O d d s ( p 1 − p ) Odds(\frac{p}{1-p}) Odds(1−pp)和客户评分、客户违约概率(PD)的对应关系算出来
该关系对应表应该算信用评分卡的核心思想了,评分是外层表现,客户违约率是内层核心,Odds是中间层转换计算
那问题来了,现在能算Score了,但输入是Odds。但数据的输入是特征变量 [ x 1 , x 2 , x 3 , ⋯   , x n ] [x_1,x_2,x_3,\cdots,x_n] [x1,x2,x3,⋯,xn],这里怎么对应呢?这就要说到逻辑回归本身了,先放结论:
l o g ( p 1 − p ) = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n log(\frac{p}{1-p})=\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n log(1−pp)=β0+β1x1+β2x2+⋯+βnxn
怎么来的,以下详细讲。
逻辑回归来源于线性回归(二维空间中就是一条直线拟合所有样本点),虽然线性回归是回归算法,逻辑回归是分类算法,但从算法表达式上,逻辑回归就是在线性回归算法外面套了一层壳。
线性回归:
f ( x ) = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n f(x)=\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n f(x)=β0+β1x1+β2x2+⋯+βnxn
逻辑回归:
f ( x ) = 1 1 + e − ( β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n ) f(x)=\frac{1}{1+e^{-(\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n)}} f(x)=1+e−(β0+β1x1+β2x2+⋯+βnxn)1
可以看到,从表达式上看,逻辑回归只是在线性回归的表达式外面套了一层 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1的壳。为什么要套这层壳,因为线性回归的值域为实数集R,但逻辑回归是二分类算法,需要输出的是类别1和类别2的概率,而概率是个[0, 1]之间的数。因此需要将线性回归的输出实数变成[0, 1]之间的概率,而能满足输入是实数而输出是[0, 1]的,就是Sigmoid函数,它的图形是个类S(见上面逻辑回归图)的限定在[0, 1]之间的函数。因此将Sigmoid函数套在线性回归外面,构成逻辑回归,拥有处理非线性的能力,可以做分类。
那么在信贷评分卡上, f ( x ) f(x) f(x)即为要预测的客户违约率(PD) p p p,另将 β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n \beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n β0+β1x1+β2x2+⋯+βnxn简写为向量形式 β T x \beta^Tx βTx,即:
p = 1 1 + e − β T x p=\frac{1}{1+e^{-\beta^Tx}} p=1+e−βTx1
经过变换,可得 l n ( p 1 − p ) = β T x ln(\frac{p}{1-p})=\beta^Tx ln(1−pp)=βTx
好,回到主线, l o g ( p 1 − p ) = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n log(\frac{p}{1-p})=\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n log(1−pp)=β0+β1x1+β2x2+⋯+βnxn,将score公式中的输入p变成输入特征变量X。到这里按理就可以结束了,有X就可以产出客户的Score,即:
S c o r e = A − B ( β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n ) Score=A-B(\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n) Score=A−B(β0+β1x1+β2x2+⋯+βnxn)
但我们要做的是分组评分卡,X是要对应到每个分组,得到各变量分组的评分然后相加得到客户总评分的,那就还需要将X打散到各分类(用离散型数据入逻辑回归模型)。因此这里的输入X就不能是原始变量,而是原始变量分箱并算WOE后的woe值(类似离散变量中各类别的数值化),即:
S c o r e = A − B [ β 0 + β 1 ( δ 11 w 11 + δ 12 w 12 + δ 13 w 13 ) + β 2 ( δ 21 w 21 + δ 22 w 22 + δ 23 w 23 + δ 24 w 24 ) + ⋯ + β n ( δ n 1 w n 1 + δ n 2 w n 2 ) ] Score=A-B[\beta_0+\beta_1(\delta_{11}w_{11}+\delta_{12}w_{12}+\delta_{13}w_{13})+\beta_2(\delta_{21}w_{21}+\delta_{22}w_{22}+\delta_{23}w_{23}+\delta_{24}w_{24})+\cdots+\beta_n(\delta_{n1}w_{n1}+\delta_{n2}w_{n2})] Score=A−B[β0+β1(δ11w11+δ12w12+δ13w13)+β2(δ21w21+δ22w22+δ23w23+δ24w24)+⋯+βn(δn1wn1+δn2wn2)]
- 假设类别型变量 x 1 x_1 x1、 x 2 x_2 x2、 x n x_n xn分别有3、4、2个分类(数值型变量先分箱成类别型变量)
- δ i j \delta_{ij} δij代表第i个变量的第j个分类,客户数据参与评分时,某个变量x只会有1个数,只会对应一个分类。比如,变量 x 1 x_1 x1的取值是第2个分类的话,那 δ 12 \delta_{12} δ12为1,则第二个分类的woe值 w 12 w_{12} w12生效, x 1 x_1 x1的其他两个 δ \delta δ则为0,对应的其他两个分类的woe值无效不参与计算
将上面的公式变下形式,变成最终可以组成评分卡的样式,即:
S c o r e = A − B { β 0 + ( β 1 w 11 ) δ 11 + ( β 1 w 12 ) δ 12 + ( β 1 w 13 ) δ 13 + ( β 2 w 21 ) δ 21 + ( β 2 w 22 ) δ 22 + ( β 2 w 23 ) δ 23 + ( β 2 w 24 ) δ 24 + ⋯ + ( β n w n 1 ) δ n 1 + ( β n w n 2 ) δ n 2 } \begin{aligned} Score=A-B\{\beta_0 & +(\beta_1w_{11})\delta_{11}+(\beta_1w_{12})\delta_{12}+(\beta_1w_{13})\delta_{13} \\ & +(\beta_2w_{21})\delta_{21}+(\beta_2w_{22})\delta_{22}+(\beta_2w_{23})\delta_{23}+(\beta_2w_{24})\delta_{24} \\ & +\cdots \\ & +(\beta_nw_{n1})\delta_{n1}+(\beta_nw_{n2})\delta_{n2}\} \end{aligned} Score=A−B{β0+(β1w11)δ11+(β1w12)δ12+(β1w13)δ13+(β2w21)δ21+(β2w22)δ22+(β2w23)δ23+(β2w24)δ24+⋯+(βnwn1)δn1+(βnwn2)δn2}
S c o r e = ( A − B β 0 ) − ( B β 1 w 11 ) δ 11 − ( B β 1 w 12 ) δ 12 − ( B β 1 w 13 ) δ 13 − ( B β 1 w 14 ) δ 14 − ⋯ − ( B β n w n 1 ) δ n 1 − ( B β n w n 2 ) δ n 2 \begin{aligned} Score=(A-B\beta_0) & - (B\beta_1w_{11})\delta_{11}-(B\beta_1w_{12})\delta_{12}-(B\beta_1w_{13})\delta_{13}-(B\beta_1w_{14})\delta_{14} \\ & -\cdots-(B\beta_nw_{n1})\delta_{n1}-(B\beta_nw_{n2})\delta_{n2} \end{aligned} Score=(A−Bβ0)−(Bβ1w11)δ11−(Bβ1w12)δ12−(Bβ1w13)δ13−(Bβ1w14)δ14−⋯−(Bβnwn1)δn1−(Bβnwn2)δn2
A、B已经算出, β \beta β是逻辑回归模型的输出系数, β 0 \beta_0 β0是逻辑回归模型的输出截距项,w是分箱后的woe值
嗯,至此评分卡就可以生成了。