信用分模型
目前有
n
n
n个样本,每个样本表示一个贷款客户的信息。则第
i
i
i个样本表示为
{
x
i
.
y
i
}
\{x_i.y_i\}
{xi.yi},其中
y
∈
{
0
,
1
}
y\in \{0,1\}
y∈{0,1} 0代表正常,1代表逾期
写成矩阵的形式:
X
=
{
1
x
1
,
1
x
1
,
2
.
.
.
x
1
,
r
1
x
2
,
1
x
2
,
2
.
.
.
x
2
,
r
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
x
n
,
2
x
n
,
3
.
.
.
x
n
,
r
}
X = \left \{ \begin{aligned} 1 && x_{1,1} && x_{1,2} && ... && x_{1,r} \\ 1 && x_{2,1} && x_{2,2} && ... && x_{2,r} \\ ... && ... && ... && ... && ... \\ 1 && x_{n,2} && x_{n,3} && ... && x_{n,r} \\ \end{aligned}\right\}
X=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧11...1x1,1x2,1...xn,2x1,2x2,2...xn,3............x1,rx2,r...xn,r⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫
Y
=
(
y
1
,
y
2
,
.
.
.
,
y
n
)
T
Y = (y_1,y_2,...,y_n)^T
Y=(y1,y2,...,yn)T
对客户
i
i
i而言,如果其逾期的概率是
p
i
p_i
pi,那么其正常的概率就是
1
−
p
i
1-p_i
1−pi ,一个客户要么逾期要么正常,逾期和正常的概率之和必然是1。
因为需要根据
X
X
X评估用户
i
i
i是否会逾期。所以可以考虑使用最常见的广义可加模型,其中线性模型最为简单。
如下所示::
另外,又考虑到概率 p i p_i pi的值域是 [ 0 , 1 ] [0,1] [0,1]区间,T希望输出的函数值在这个值域。因此再嵌套一层函数以变换值域:
显然,上式的值域一定是在[0,1]区间的,这里使用logsitic函数是因为
e
z
i
e^{z_i}
ezi在微分求导上更便利。
样本
x
i
x_i
xi对应的借款人,可能是逾期,也可能是正常,可以用一个公式同时表示这两种情况:
P
i
=
P
(
y
i
∣
x
i
β
i
)
=
(
p
i
)
y
i
(
1
−
p
i
)
(
1
−
y
i
)
y
i
∈
{
0
,
1
}
P_i=P(y_i|x_i\beta_i) = (p_i)^{y_i}(1-p_i)^{(1-y_i)}\\y_i \in \{0,1\}
Pi=P(yi∣xiβi)=(pi)yi(1−pi)(1−yi)yi∈{0,1}
对n个样本而言,样本之间是相互独立的,因此对所有样本而言,其全体概率是:
L
(
β
)
=
∏
i
=
0
n
P
i
L(\beta)=\prod_{i=0}^nP_i
L(β)=∏i=0nPi
那么我们就需要对其中的参数
β
j
\beta_j
βj进行估计,也就是让
L
(
β
)
L(\beta)
L(β)的值最大,这里采用的是极大似然估计,这样就可以得到损失函数:
m
i
n
min
min
l
n
L
(
β
)
=
−
1
m
∑
(
y
i
1
p
i
+
(
1
−
y
i
)
1
(
1
−
p
i
)
)
ln^{L(\beta)} =-\frac{1}{m}\sum(y_i\frac{1}{p_i}+(1-y_i)\frac{1}{(1-p_i)})
lnL(β)=−m1∑(yipi1+(1−yi)(1−pi)1)
得到损失函数以后,我们再使用梯度下降法求得近似最优解.
评分卡模型建立
评分卡的分值分配,由比率决定。例如,一个评分卡可以设定,评分每降低 20 20 20分,违约的比率升高一倍, 600 600 600分账户的违约比率是 620 620 620 分账户的两倍。每个得分对应一个特定的违约比率,便于控制预期违约账户。
设
O
d
d
s
=
p
i
1
−
p
i
%排公式 \begin{aligned} %自动编号 Odds=\frac{p_i}{1-p_i} \end{aligned}
Odds=1−pipi
O
d
d
s
Odds
Odds(几率):不违约概率与违约概率的比值
公式
o
d
d
s
odds
odds做个变形,也就有:
p
i
=
O
d
d
s
1
+
O
d
d
s
\begin{aligned} %自动编号 p_i=\frac{Odds}{1+Odds} \end{aligned}
pi=1+OddsOdds
评分卡的信用分计算:
S
c
o
r
e
=
A
−
B
ln
(
O
d
d
s
)
\begin{aligned} %自动编号 Score=A-B\ln(Odds) \end{aligned}
Score=A−Bln(Odds)
其中,A和B是常数。如果违约率 p p p很小,那么Odds是一个正的小数,比如0.01、0.02,表示逾期概率很低,此时 l n ( O d d s ) ln(Odds) ln(Odds)是大的负数, S c o r e Score Score的分数高。反之可知 S c o r e Score Score的分数低。
计算A和B:
我们使用PDO(指定的违约概率翻倍的分数)方法来计算A,B
1.设定某个比率为 θ 0 \theta_0 θ0的对应的分值是 p 0 p_0 p0,然后,比率为 2 θ 0 2\theta_0 2θ0的点的分值是 p 0 + P D O p_0+PDO p0+PDO。
2.将上述两个设定带入公式,有如下两个等式:
p 0 = A − B ln ( θ ) p 0 + P D O = A − B ln ( 2 θ ) \begin{aligned} %自动编号 p_0=A-B\ln(\theta) \end{aligned}\\\begin{aligned} %自动编号 p_0+PDO=A-B\ln(2 \theta) \end{aligned} p0=A−Bln(θ)p0+PDO=A−Bln(2θ)
3.两个等式联合求解,可得:
B
=
P
D
O
ln
(
2
)
A
=
p
0
+
B
ln
(
θ
0
)
\begin{aligned} %自动编号 B&=\frac{PDO}{\ln(2)}\\ A&=p_0+B\ln(\theta_0) \end{aligned}
BA=ln(2)PDO=p0+Bln(θ0)
4.计算示例,违约比 O d d s = 1 60 Odds=\frac{1}{60} Odds=601的时候,是合理的违约比,此时对应的分值是 p 0 = 600 p_0=600 p0=600分,违约比每翻倍,分数变小 20 20 20分,也就是PDO= 20 20 20。那么,根据上述公式可以求出 A = 481.86 A=481.86 A=481.86, B = 28.85 B=28.85 B=28.85,也就是 S c o r e = 481.89 − 28.85 l n ( O d d s ) Score=481.89-28.85ln(Odds) Score=481.89−28.85ln(Odds)。如果 O d d s = 1 30 Odds=\frac{1}{30} Odds=301,增加一倍,则 S c o r e Score Score经过计算可得是 580.01 580.01 580.01,四舍五入后是 580 580 580,符合预期。
评分卡的模型建立
现在,我们重另外一个角度解释分箱的意义:
首先,我们知道:
l
n
(
p
i
1
−
p
i
)
=
z
i
ln(\frac{p_i}{1-p_i})=z_i
ln(1−pipi)=zi
那么公式
S
c
o
r
e
=
A
−
B
ln
(
p
i
1
−
p
i
)
\begin{aligned} %自动编号 Score=A-B\ln(\frac{p_i}{1-p_i}) \end{aligned}
Score=A−Bln(1−pipi)
可以变形为
S
c
o
r
e
=
A
−
B
(
β
0
+
β
1
x
i
,
1
+
.
.
.
+
β
r
x
i
,
r
)
S
c
o
r
e
=
A
−
B
β
0
+
B
(
−
β
1
x
i
,
1
−
.
.
.
−
β
r
x
i
,
r
)
(0)
Score=A-B(\beta_0+\beta_1x_{i,1}+...+\beta_rx_{i,r})\\Score=A-B\beta_0+B(-\beta_1x_{i,1}-...-\beta_rx_{i,r})\tag{0}
Score=A−B(β0+β1xi,1+...+βrxi,r)Score=A−Bβ0+B(−β1xi,1−...−βrxi,r)(0)
计算信用分,还可以进一步简化。根据上式计算信用分,需要
x
i
x_{i}
xi和多个参数进行计算,让操作人员使用直接使用这些参数是不合适的,首先结算结果解释性不清晰,其次核查每个属性对信用分产生的影响略显复杂。因此,简化的预期是,
第一,一线人员不需要记住
A
A
A、
B
B
B、
β
j
(
j
−
0
,
1
,
.
.
.
,
r
)
\beta_j(j-0,1,...,r)
βj(j−0,1,...,r)、
p
0
p_0
p0等参数
第二,要知道
x
i
x_i
xi的每个属性变量对信用分的贡献,大小多少。
举例来说,年龄 a g e age age是一个属性。信用分计算使用年龄属性,与其把年龄数值代入公式(0)进行计算,不如把进行分段,比如 a g e < 18 age<18 age<18是一段,对应一个分值,比如10分, 18 ≤ a g e ≤ 35 18\le age\le 35 18≤age≤35是一段,对应一个分值,比如20分, a g e > 35 age>35 age>35是一段,对应一个分值,比如15分。这样在计算信用分的时候,根据年龄所在的分段,查找分数。其他属性以此类推,把所有变量对应的分数加起来,再加上基础分,就得到信用分。
这样就可以从实用角度推导出分箱的必要性。
那么如果把年龄进行分箱,在计算公式(0)的时候,就不能再使用年龄的数值–用什么数据拟合才可以用什么数据预测,用年龄数值拟合的结果不能用年龄分段值进行预测。因此,每个年龄段需要用这个年龄段对应的一个值,替换掉年龄值,进入公式(0)做计算。
每个年龄段用一个值替换,这个值,在本质上需要能反应该年龄段对判别用户是逾期和正常的“价值”。所谓价值,比如说,全部样本有100个,其中正常的是90个,逾期的是10个,其中,
a
g
e
<
18
age<18
age<18的样本有30个,这30个样本里,正常的是10个,逾期的是20个,那么,
a
g
e
<
18
age<18
age<18这个年龄段对判断逾期,就是有“价值的”,因为这个年龄段逾期的密度比较高。如果
a
g
e
<
18
age<18
age<18的样本有30个,这30个样本里,正常的是27个,逾期的是3个,那么,
a
g
e
<
18
age<18
age<18这个年龄段对判断逾期,就是没有“价值的”,因为这个年龄段逾期的密度跟全部样本的逾期密度是一样的。
由此,我们找到一个估算一个分段的价值度量,就是Weight of Evidence:
其中,
k
k
k表示一个属性的第
k
k
k个分段,
n
k
g
o
o
d
n_k^{good}
nkgood表示这个分段对应的样本里正常还款的数量,
n
k
b
a
d
n_k^{bad}
nkbad表示这个分段对应的样本里逾期还款的数量,
n
a
l
l
g
o
o
d
n_{all}^{good}
nallgood表示所有样本里正常还款的数量,
n
a
l
l
b
a
d
n_{all}^{bad}
nallbad表示所有样本里逾期还款的数量。
一般写作:
以此类推,可以计算每个属性变量的每个分段的
W
O
E
WOE
WOE
当拥有了WOE这个工具以后,我们就可以计算特征对于预测函数的贡献程度,使用IV进行判断,不过这属于特征工程的部分,这里就不展开讨论了:
引入 W O E WOE WOE之后,计算流程如下:
1.对公式公式(0)的每个变量,进行分段。分段方式有多种,也可以根据具体场景自行设计。分段之后,计算每个变量的每个分段的 W O E WOE WOE值。然后,根据 x i , j x_{i,j} xi,j对应的分段,用 W O E k WOE_k WOEk替换 x i , j x_{i,j} xi,j。最终,公式 ( ? ? ? ) (???) (???)所有的值,都是各种 W O E WOE WOE的值,不再有 x i , j x_{i,j} xi,j的值了。
2.后续其他流程完全不变。
评分卡标准形
引入WOE之后,公式(0)变成如下形式
其中,
(
−
β
1
x
i
,
1
)
(-\beta_1x_{i,1})
(−β1xi,1)被
(
−
β
1
(
δ
i
,
1
,
1
W
O
E
1
,
1
+
δ
i
,
1
,
2
W
O
E
1
,
2
+
.
.
.
+
δ
i
,
1
,
k
1
W
O
E
1
,
k
1
)
)
(-\beta_1(\delta_{i,1,1}WOE_{1,1}+\delta_{i,1,2}WOE_{1,2}+...+\delta_{i,1,k_{1}}WOE_{1,k_{1}}))
(−β1(δi,1,1WOE1,1+δi,1,2WOE1,2+...+δi,1,k1WOE1,k1))替换。
x
i
,
1
x_{i,1}
xi,1是第
i
i
i个样本的第
1
1
1个属性变量,这个数量变量在分段阶段被分为
k
1
k_1
k1段,
W
O
E
1
,
k
1
WOE_{1,k_{1}}
WOE1,k1表示第
k
1
k_1
k1段的
W
O
E
WOE
WOE。
δ
i
,
1
,
1
\delta_{i,1,1}
δi,1,1表示,如果变量
x
i
,
1
x_{i,1}
xi,1的值在第1个分段,那么
δ
i
,
1
,
1
=
1
\delta_{i,1,1}=1
δi,1,1=1,如果变量
x
i
,
1
x_{i,1}
xi,1的值不在第1个分段,
δ
i
,
1
,
1
=
0
\delta_{i,1,1}=0
δi,1,1=0,这个变量的目的是让公式(0)的形式整齐。其他以此类推。
每个属性变量被切分成多少个分段是不确定的,肯定是互相不一样,因此需要分别表示,比如第 r r r个属性变量,被切分成 k r k_r kr段。
这样,计算信用分就变成了如下流程:
1.基础分是 A − B β 0 A-B\beta_0 A−Bβ0
2.对于第一个属性,如果它的值在该第一个分段,增加分值 − β 1 δ 1 , 1 W O E 1 , 1 -\beta_1\delta_{1,1}WOE_{1,1} −β1δ1,1WOE1,1,如果它的值在第二个分段,增加分值 − β 1 δ 1 , 2 W O E 1 , 2 -\beta_1\delta_{1,2}WOE_{1,2} −β1δ1,2WOE1,2…,由此,计算出第一个属性对应的分值,然后累加到基础分上。
3.以跟2.同样的步骤,处理所有属性变量,得到最终的信用分。
反映在程序上,就是将