视频作者:菜菜TsaiTsai
链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
评分卡中的分数,由以下公式计算:
Score=A−B×log(odds)Score = A-B \times \log(odds) Score=A−B×log(odds)
其中A与B是常数,A叫做“补偿”,B叫做“刻度”,log(odds)\log(odds)log(odds)代表了一个人违约的可能性。对于一个样本,代入先进行WOE变换,然后代入逻辑回归得到的值就是log(odds)\log(odds)log(odds)
我们要假定一个基准分,这是一个人为设定的分数,这里我们假设600分对应好坏比为160\begin{aligned} \frac{1}{60}\end{aligned}601,如果好坏比增加一倍,也就是好坏比为130\begin{aligned} \frac{1}{30}\end{aligned}301,分数降低20分(指定的违约概率翻倍的分数(PDO)),也就有
{600=A−B×log(160)580=A−B×log(130)\left\{\begin{aligned}&600=A-B \times \log(\frac{1}{60})\\&580=A-B \times \log(\frac{1}{30})\end{aligned}\right. ⎩⎪⎨⎪⎧600=A−B×log(601)580=A−B×log(301)
B = 20/np.log(1/2)
A = 600 + B * np.log(1/60)
B,A
---
(28.85390081777927, 481.8621880878296)
有了A和B,分数就很容易得到了。其中不受评分卡中各特征影响的基础分(这个也被称为基础分),就是将截距作为log(odds)\log(odds)log(odds)带入公式进行计算:
base_score = A - B * lr.intercept_
base_score
---
array([482.06209686])
用不同分箱的WOE值乘B,得到的数值就是该分箱对分数的影响
with open(r'D:\ObsidianWorkSpace\SklearnData\ScoreData.csv',"w") as fdata:fdata.write("base_score,{}\n".format(base_score))
for i,col in enumerate(X.columns):score = woeall[col] * (-B * lr.coef_[0][i])score.name = "Score"score.index.name = colscore.to_csv(r'D:\ObsidianWorkSpace\SklearnData\ScoreData.csv',header=True,mode="a")
其实大家可以发现,真正建模的部分不多,更多是我们如何处理数据,如何利用统计和机器学习的方法将数据调整成我们希望的样子,所以除了算法,更加重要的是我们能够达成数据目的的工程能力
推荐一篇文章:评分卡–基础分、基准分、PDO、WOE、补偿、刻度 行可可_公众号-行可可的博客-CSDN博客_评分卡pdo
下一篇:快速求N!