[风控-001]金融风控之评分卡:从本质到精通--001

本文介绍了金融风控中评分卡的构建过程,包括问题描述、优化求解、信用分计算和WOE(Weight of Evidence)替换。通过最大似然估计方法优化线性模型,利用WOE值对特征进行分段,提高模型的解释性和信用分的计算效率。

pdf文件在 https://download.csdn.net/download/u011539200/10865606  

1.问题描述

假设有n个样本,每个样本表示一个贷款客户的信息。第i个样本表示为\{x_i,y_i\},其中x_i\in R^{r\times1}y_i\in\{0,1\}

具体地说,x_i是一个r维向量,每一个维度表示贷款人的一个属性变量。这r个变量,是经过填充数据缺失、去除离群点、去除高相关性变量、筛选高IV等之后的入模变量。y_i的值是0或1,y_i=1表示逾期,y_i=0表示正常。

写成矩阵的形式,n个样本全部数据,可以写成如下形式:

X=\left[ \begin{matrix} x_{1,1} & x_{1,2} &... & x_{1,r} \\ x_{2,1} & x_{2,2} &... & x_{2,r} \\ ... & ... & ...&...\\ x_{n,1} & x_{n,2} & ... &x_{n,r}\\ \end{matrix} \right]

Y=\left[ \begin{matrix} y_{1}\\ y_{2}\\ ...\\ y_{n}\\ \end{matrix} \right]


2.优化求解

对客户i而言,如果其逾期的概率是p_i,那么其正常的概率就是1-p_i,一个客户要么逾期要么正常,逾期和正常的概率之和必然是1。

我们需要根据x_i评估用户i是否会逾期。对于构建模型而言,最简单的是线性模型。在线性模型,就是:

z_i=\beta_0+\beta_1x_{i,1}+\beta_2x_{i,2}+...+\beta_rx_{i,r}
其中,z_i表示整个线性组合。

另外,又考虑到概率p的值域是(0,1)区间,希望输出的函数值在这个值域。因此再增加一层函数以变换值域:
p_i=\frac{e^{z_i}}{1+e^{z_i}}=\frac{1}{1+e^{-z_i}}

显然,上式的值域一定是在(0,1)区间的,这里使用e^x函数是经过设计的,其他形式的函数也可以同样达到一样的值域,但e^x在微分求导上更便利。

对上式做一次变形,可以得到:

ln\frac{p_i}{1-p_i}=z_i

这个公式在后文有用,后面会展开描述。

公式p_iz_i求导:
\frac{\partial p_i}{\partial z_i}=p_i(1-p_i)

此处,z_i是自变量,这个是可以推导出来的,比较简单,不再详述。这个公式在下文推导会直接使用。

样本x_i对应的借款人,可能是逾期,也可能是正常,可以用一个公式同时表示这两种情况:
L_i=(p_i)^{y_i}(1-p_i)^{(1-y_i)}

如果y_i=1,则L_i=p_i,如果y_i=0,则L_i=1-p_i

n个样本而言,样本之间是相互独立的,因此对所有样本而言,其全体概率是:
L=\prod_{i=1}^{n}L_i=\prod_{i=1}^{n}((p_i)^{y_i}(1-p_i)^{(1-y_i)})

注意,公式L的未知数是\beta_j(j=0,1,...,r)。求解\beta_j,就是让公式L的值最大,也就是等价于ln(L)最大,ln(L)在微分求导上更方便。(更多细节请概率论教科书的最大似然估计方法)

\begin{equation}\label{ln_L}
\begin{split}
ln(L) = &\sum_{i=1}^{n}(y_iln(p_i)+(1-y_i)ln(1-p_i))\\
      = &\sum_{i=1}^{n}(y_iln(p_i))+\sum_{i=1}^{n}((1-y_i)ln(1-p_i))\\
\end{split}
\end{equation}

\begin{equation}
\begin{split}
\frac{\partial ln(L)}{\partial \beta_j}=
  &\sum_{i=1}^{n}(y_i\frac{1}{p_i}\frac{\partial p_i}{\partial z_i}\frac{\partial z_i}{\partial \beta_j})+\sum_{i=1}^{n}((1-y_i)\frac{-1}{1-p_i}\frac{\partial p_i}{\partial z_i}\frac{\partial z_i}{\partial \beta_j})\\
  =&\sum_{i=1}^{n}(y_i\frac{1}{p_i}p_i(1-p_i)\frac{\partial z_i}{\partial \beta_j})+\sum_{i=1}^{n}((1-y_i)\frac{-1}{1-p_i}p_i(1-p_i)\frac{\partial z_i}{\partial \beta_j})\\
  =&\sum_{i=1}^{n}(y_i(1-p_i)\frac{\partial z_i}{\partial \beta_j})+\sum_{i=1}^{n}(p_i(y_i-1)\frac{\partial z_i}{\partial \beta_j})
\end{split}
\end{equation}
注意,j=0,1,...,r
更具体的一点,要分出j=0j>0 这两种情况:
\begin{equation}
\begin{split}
\frac{\partial ln(L)}{\partial \beta_0}=
  &\sum_{i=1}^{n}(y_i(1-p_i))+\sum_{i=1}^{n}(p_i(y_i-1))
\end{split}
\end{equation}

\begin{equation}
\begin{split}
\frac{\partial ln(L)}{\partial \beta_{j_{(j>0)}}}
  =&\sum_{i=1}^{n}(y_i(1-p_i)x_{i,j})+\sum_{i=1}^{n}(p_i(y_i-1)x_{i,j})
\end{split}
\end{equation}

根据梯度下降算法求公式ln_L的最大值,\beta_j的迭代公式是:
\begin{equation}
\beta_j = \beta_j + \mu \frac{\partial ln(L)}{\partial \beta_j}
\end{equation}

其中,\mu是学习速率,通常设置成小于零的数,比如\mu=0.01,也可以根据每轮迭代情况做动态调整。

也有一种做法,对x_i做变形:x_i=[1,[x_i]],这样\beta_0对应的就是固定为1的元素,不再单独区分。

3.信用分

评分卡的分值分配,由比率决定。例如,一个评分卡可以设定,评分每降低20分,违约的比率升高一倍,600分账户的违约比率是620分账户的两倍。每个得分对应一个特定的违约比率,便于控制预期违约账户。

如果借贷客户的逾期概率是p_i,那么正常概率就必然是1-p_i

\begin{equation}\label{odds}
Odds = \frac{p_i}{1-p_i}
\end{equation}
公式odds做个变形,也就有:
\begin{equation}
p_i = \frac{Odds}{1+Odds}
\end{equation}

评分卡的信用分计算:
\begin{equation}\label{score}
Score = A-Bln(Odds)
\end{equation}
其中,A和B是常数。如果违约率p很小,那么Odds是一个正的小数,比如0.01、0.02,表示逾期概率很低,此时ln(Odds)是大的负数,$Score$的分数高。反之可知Score的分数低。

计算A和B:

1.设定某个比率为$\theta_0$的对应的分值是$p_0$,然后,比率为$2\theta_0$的点的分值是$p_0+PDO$

2.将上述两个设定带入公式,有如下两个等式:

\begin{equation}
p_0 = A-Bln(\theta_0)
\end{equation}

\begin{equation}
p_0 + PDO = A-Bln(2\theta_0)
\end{equation}

3.两个等式联合求解,可得: 
\begin{equation}
B = \frac{PDO}{ln(2)}
\end{equation}

\begin{equation}
A = p_0 + Bln(\theta_0)
\end{equation}

4.计算示例,违约比Odds=\frac{1}{60}的时候,是合理的违约比,此时对应的分值是p_0=600分,违约比每翻倍,分数变小20分,也就是PDO=20。那么,根据上述公式可以求出 A=481.86,B=28.85,也就是Score=481.89-28.85ln(Odds)。如果Odds=\frac{1}{30},增加一倍,则$Score$经过计算可得是580.01,四舍五入后是580,符合预期。

信用分分值的分布,由A、B和“理论”的Odds三者决定。“实际”的Odds的分布由\beta_j(j=0,1,...r)决定。因此,对\beta_j的计算,跟A和B的计算无关。

4.WOE替换

对于公式Score,可以知:

\begin{equation}\label{score_2}
\begin{split}
Score =&A-Bln(\frac{p_i}{1-p_i})\\
      =&A-Bz_i\\
      =&A-B(\beta_0+\beta_1x_{i,1}+...+\beta_rx_{i,r})\\
      =&A-B\beta_0+(-\beta_1x_{i,1}-...-\beta_rx_{i,r})\\
\end{split}
\end{equation}

对上式来说,A-B\beta_0是常量,后面的-\beta_jx_{i,j}(j=1,...,r),前文已说,x_{i,j}是样本i的第j个属性变量,这样的变量一共有r个,因此-\beta_jx_{i,j}根据x_i的值变动。

计算信用分,还可以进一步简化。根据上式计算信用分,需要x_{i}和多个参数进行计算,让操作人员使用这些参数从直观上来看,结算结果解释性不清晰,核查每个属性对信用分产生的影响略显复杂。因此,简化的预期是,第一,一线人员不需要记住$A$、$B$、$\beta_j(j-0,1,...,r)$、$p_0$等参数,第二,要知道$x_i$的每个属性变量对信用分的贡献,大小多少。

举例来说,年龄$age$是一个属性。信用分计算使用年龄属性,与其把年龄数值代入公式$(\ref{score_2})$进行计算,不如把年龄进行分段,比如$age<18$是一段,对应一个分值,比如10分,$18\le age\le 35$是一段,对应一个分值,比如20分,$age>35$是一段,对应一个分值,比如15分。这样在计算信用分的时候,根据年龄所在的分段,查找分数。其他属性以此类推,把所有变量对应的分数加起来,再加上基础分,就得到信用分。

如果把年龄进行分段。那么,在优化计算公式$(\ref{ln_L})$的时候,就不能再使用年龄的数值--用什么数据优化才可以用什么数据预测,用年龄数值优化的结果不能用年龄分段值进行预测。因此,每个年龄段需要用这个年龄段对应的一个值,替换掉年龄值,进入公式$(\ref{ln_L})$做计算。

每个年龄段用一个值替换,这个值,在本质上需要能反应该年龄段对判别用户是逾期和正常的“价值”。所谓价值,比如说,全部样本有100个,其中正常的是90个,逾期的是10个,其中,$age<18$的样本有30个,这30个样本里,正常的是10个,逾期的是20个,那么,$age<18$这个年龄段对判断逾期,就是有“价值的”,因为这个年龄段逾期的密度比较高。如果$age<18$的样本有30个,这30个样本里,正常的是27个,逾期的是3个,那么,$age<18$这个年龄段对判断逾期,就是没有“价值的”,因为这个年龄段逾期的密度跟全部样本的逾期密度是一样的。

由此,我们到一个估算一个分段的价值度量,就是Weight of Evidence,就是:
\begin{equation}\label{woe}
WOE_k=ln(\frac{\frac{n_k^{good}}{n_k^{bad}}}{\frac{n_{all}^{good}}{n_{all}^{bad}}})
\end{equation}

其中,$k$表示一个属性的第$k$个分段,$n_k^{good}$表示这个分段对应的样本里正常还款的数量,$n_k^{bad}$表示这个分段对应的样本里逾期还款的数量,$n_{all}^{good}$表示所有样本里正常还款的数量,$n_{all}^{bad}$表示所有样本里逾期还款的数量。

以此类推,可以计算每个属性变量的每个分段的$WOE$

引入$WOE$之后,计算流程如下:

1.对公式$(\ref{big_x})$的每个变量,进行分段。分段方式有多种,也可以根据具体场景自行设计。分段之后,计算每个变量的每个分段的$WOE$值。然后,根据$x_{i,j}$对应的分段,用$WOE_k$替换$x_{i,j}$。最终,公式$(\ref{big_x})$所有的值,都是各种$WOE$的值,不再有$x_{i,j}$的值了。

2.后续其他流程完全不变。

分段在评分卡模型的正式叫法是“分箱”。

\section*{5.评分卡标准形}

引入WOE之后,公式$(\ref{score_2})$变成如下形式:
\begin{equation}\label{score_stand}
\begin{split}
Score =&A-B\beta_0+(-\beta_1x_{i,1}-...-\beta_rx_{i,r})\\
      =&A-B\beta_0+\\
       &(-\beta_1x_{i,1})+\\
       &...\\
       &(-\beta_rx_{i,r})\\
      =&A-B\beta_0+\\
       &(-\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}}))+\\
       &...\\
       &(-\beta_r(\delta_{i,r,1}WOE_{r,1}+\delta_{i,r,2}WOE_{r,2}+...+\delta_{i,r,k_{r}}WOE_{r,k_{r}}))\\
\end{split}
\end{equation}
其中,$(-\beta_1x_{i,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}}))$替换。$x_{i,1}$是第$i$个样本的第$1$个属性变量,这个数量变量在分段阶段被分为$k_1$段,$WOE_{1,k_{1}}$表示第$k_1$段的$WOE$。$\delta_{i,1,1}$表示,如果变量$x_{i,1}$的值在第1个分段,那么$\delta_{i,1,1}=1$,如果变量$x_{i,1}$的值不在第1个分段,$\delta_{i,1,1}=0$,这个变量的目的是让公式$(\ref{score_stand})$的形式整齐。其他以此类推。

注意,每个属性变量被切分成多少个分段是不确定的,肯定是互相不一样,因此需要分别表示,比如第$r$个属性变量,被切分成$k_r$段。

这样,计算信用分就变成了如下流程:

1.基础分是$A-B\beta_0$

2.对于第一个属性,如果它的值在该第一个分段,增加分值$-\beta_1\delta_{1,1}WOE_{1,1}$,如果它的值在第二个分段,增加分值$-\beta_1\delta_{1,2}WOE_{1,2}$...,由此,计算出第一个属性对应的分值,然后累加到基础分上。

3.以跟2.同样的步骤,处理所有属性变量,得到最终的信用分。

在实际操作上会把$-\beta_j\delta_{i,j,q}WOE_{j,q}$圆整成一个整数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值