0%

评分卡模型基于 R

评分卡模型

基于上课所学和华东师范大学应用统计科学院的 PPT,再加上自己的微不足道的理解,不足之处请指出。

评分卡模型基于逻辑回归,与逻辑回归不同的是解释变量变为 WOE,响应变量赋予了权重。

逻辑回归

逻辑回归是广义线性模型的一种,即假设响应变量 $Y \sim B\left (1,p\right)$ 即为指数分布簇,
其自然参数 $\theta = \ln \frac {p}{1-p}$,典则连接函数 $g\left (\cdot\right) = \ln \frac {x}{1-x}$。

$$
\ln \frac{P\left(Y = 1\right)}{1 - P\left(P = 1\right)} = \alpha + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_p X_p
$$

其中,$\frac {P\left (Y = 1\right)}{1 - P\left (P = 1\right)} = \frac {P\left (Y = 1\right)}{P\left (Y = 0\right)}$ 称为成功概率的优势比

广义线性模型(GLM)

广义线性模型是指响应变量不再假定满足正态分布,而是假设其满足指数分布簇即:
$$
Y \sim \exp{ \{ \frac{y\theta - b\left(\theta\right)}{a\left(\phi\right)} + C\left(y,\phi\right) \} }
$$
指数分布簇有两个参数 $\theta$ 和 $\phi$,$\theta$ 称为自然参数,可证明指数分布的期望 $EY = b^{\prime} \left (\theta\right)$,
方差 $VarY = b^{\prime\prime}\left (\theta\right) a\left (\phi\right)$。
然后通过一个连接函数来链接。指数分布簇常见的有正态分布、二项分布、泊松分布、伽马分布、逆高斯分布,而常用的连接函数是
典则连接函数即 $\theta = g\left (\cdot\right)$。

WOE

一般评分卡模型不是对原始数据进行建模,而是将解释变量转换为 WOE,假设解释变量分为五组,则 IV 值和 WOE 值如下:

变量 样本个数 $Y = 1$ $Y = 0$ $P(Y) = 1$ $P(Y) = 0$ $\text{WOE}$
取值区间 1 $n_1$ $n_{11}$ $n_{10}$ $ p_{11}=\frac{n_{11}}{n_{+1}}$ $p_{10}=\frac{n_{10}}{n_{+0}}$ $\ln \frac{p_{11}}{p_{10}} $
取值区间 2 $n_2$ $n_{21}$ $n_{20}$ $ p_{21}=\frac{n_{21}}{n_{+1}}$ $p_{20}=\frac{n_{20}}{n_{+0}}$ $\ln \frac{p_{21}}{p_{20}} $
取值区间 3 $n_3$ $n_{31}$ $n_{30}$ $ p_{31}=\frac{n_{31}}{n_{+1}}$ $p_{30}=\frac{n_{30}}{n_{+0}}$ $\ln \frac{p_{31}}{p_{30}} $
取值区间 4 $n_4$ $n_{41}$ $n_{40}$ $ p_{41}=\frac{n_{41}}{n_{+1}}$ $p_{40}=\frac{n_{40}}{n_{+0}}$ $\ln \frac{p_{41}}{p_{40}} $
取值区间 5 $n_5$ $n_{51}$ $n_{50}$ $ p_{51}=\frac{n_{51}}{n_{+1}}$ $p_{50}=\frac{n_{50}}{n_{+0}}$ $\ln \frac{p_{51}}{p_{50}} $

样本总数:$n = \sum_{i=1}^{5} n_i$

响应变量为 1 总数:$n_{+1} = \sum_{i=1}^{5} n_{i1}$

响应变量为 0 总数:$n_{+0} = \sum_{j=1}^{5} n_{j0}$

解释变量的 IV 值:$\text {IV} = \sum_{i = 1}^{5} \left (p_{i1} - p_{i0}\right) \ln \frac {p_{i1}}{p_{i0}} $,即反映对响应变量的区分度,越高说明越能区分。

模型的建立

根据逻辑回归,以 WOE 值作为解释变量可得:

$$
\ln \frac{P\left(Y = 1\right)}{1 - P\left(P = 1\right)} = \alpha + \beta_1 \text{WOE}_1 + \beta_2 \text{WOE}_2 + \dots + \beta_p \text{WOE}_p
$$

一般要求 $\beta_i >0 (i = 1,2,3,\dots,p)$,$\text {WOE}$ 值越大越支持 $P\left (Y = 1\right)$

结果转换为分数:

$$
\text{score} = \text{factor} \times \ln \frac{P\left(Y = 1\right)}{1 - P\left(P = 1\right)} + \text{offset}
$$

其中 $\text {score}$ 和 $\text {offset}$ 人为指定,则可计算解释变量在第 $i$ 个取值区间的评分如下

$$
\begin{aligned}
\text{score} &= \text{factor} \times \ln \frac{P\left(Y = 1\right)}{1 - P\left(P = 1\right)} + \text{offset} \\
&= \sum_{i=1}^{p} \text{factor} \times \left( \frac{\alpha}{n} + \beta_i \text{WOE}_i \right) +\frac{\text{offset}}{n}
\end{aligned}
$$

其中,$\text {factor}$ 和 $\text {offset}$ 的计算可通过如下三个参数 $b$,$o$,$p$,理想的分数区间在 $\left [0,999\right]$。

  • $b$ 表示基准分值(base point),一般取个 500
  • $o$ 表示基准分值对应的优势比(odds)
  • $p$ 表示优势比增加 1 倍时基准分值增加的分数(point double odds),一般取个 50

计算公式:
$$
\begin{aligned}
\text{factor} &= \frac{p}{\ln 2} \\
\text{offset} &= b - p \times \frac{\ln o}{\ln 2}
\end{aligned}
$$

常用的评分卡

评分卡类型 类型描述 主要用途
申请评分卡 对申请产品的新客户打分,预测客户将来产生逾期的可能性 常用于申请审批以及初始额度设定
行为评分卡 对现有客户的行为打分,预测客户在接下来一段时间内逾期的可能性 常用于额度调整,也可用于交叉销售的风险维度
催收评分卡 对已经逾期的客户打分,预测客户继续逾期的可能性 主要用于选择合适的客户进行催收
相应评分卡 对市场营销的客户打分,预测客户响应营销活动(购买产品)的可能性 主要用于交叉销售、二次销售等
流失评分卡 对现有客户打分,预测客户流失的可能性 主要用于客户挽留

申请评分卡(application)、行为评分卡(behavior)、催收评分卡(collection)合称为 “ABC” 卡

模型的评估

  • K-S(Kolmogorov-Smirnov test):好客户和坏客户累计经验分布函数差的最大值,衡量两者的区分度,KS 值越大越好,一般 $\left [0.2,0.4\right]$,太高有可能过拟合不稳定,一般要求
    测试集上 KS 不能低于建模样本的 1% 以上。
  • Gini:横坐标为好客户累计百分比,纵坐标为坏客户累计百分比,所成的曲线与 $Y = X$ 分界线面积的两倍,衡量两者的区分度。
  • 区分度:根据好客户和坏客户的分数的经验分布,计算 $Divergence = \frac {\left (m_a - m_b\right)^2}{\frac {1}{2} \left (S_a^2 + S_b^2\right)}$,其中 $m$ 为均值,$S$ 为标准差。
  • 提升曲线:横坐标为评分的分位数,纵坐标为坏客户的累计百分比,通过绘制各种样本的表现(随机样本、开发样本、建模样本、验证样本 1、验证样本 2)。
  • 分数分布:要求分数呈现平滑且正态,建模样本和验证样本的分数分布一致。
  • $\log \left (odds\right)$:根据建模的方法 $\log \left (odds\right)$ 和评分之间具有线性。
  • PSI(population shift index):检验模型在验证样本的变化情况,$\text {PSI} < 0.2$ 认为模型稳定,$\text {PSI} > 0.4$ 认为模型不稳定。

$$
\begin{aligned}
\text {PSI} = \sum_{i=1}^{20} \left (\mbox {建模样本比例}_i - \mbox {验证样本比例}_i\right) \ln \frac {\mbox {建模样本比例}_i}{\mbox {验证样本比例}_i}
\end{aligned}
$$

R 语言代码实现

1
library(scorecard)

变量分箱

对解释变量进行分箱,根据函数的描述,它使用树状结构最优化对连续变量进行分箱,这可能导致分箱结构数目太多不利于模型的简洁,可选取最大分箱数目。

1
bin <- woebin(train[,-1], y = "Response", bin_num_limit = 4)

变量转换为 WOE

根据分箱的结果,将解释变量转换为对应的 $\text {WOE}$ 的值。

1
train.woe <- woebin_ply(train, bin)

逻辑回归

根据 $\text {WOE}$ 的值,进行逻辑回归,默认使用的是典则连接函数。

1
glm.1 = glm(Response  ~ ., data = woe, family = binomial())

模型评估

1
2
3
4
5
6
7
pred.test <- predict(glm.1, newdata = test.woe, type = "response")

perf <- perf_eva(
pred = pred.test,
label = test.woe$Response,
show_plot = c('ks', 'lift', 'gain', 'roc', 'lz', 'pr', 'f1')
)

转换为分数

根据指定的参数,将模型转换为分数。

1
2
card <- scorecard(bin,glm.1,points0 = 500,odds = 0.1,pdo = 50)
scorecard_ply(train,card)