4、信用评分卡模型:评分卡开发流程

信用评分卡,说白了就是给代理商打个分。

分数越高,信用越好,风险越低。这个分数怎么来的?不是拍脑袋,而是靠数据说话。今天我就带你走一遍评分卡开发的完整流程——数据准备、特征工程、模型训练、评分映射。我会结合逻辑回归和决策树这两种经典算法,讲讲它们在实际项目中的用法。

4.1 数据准备:地基不牢,房子会塌

数据准备是评分卡开发的第一步,也是最容易被忽视的一步。我见过太多项目,模型跑得挺漂亮,结果上线后一塌糊涂——原因就是数据质量不行。

数据准备主要做三件事:

  • 数据收集:代理商的基本信息、交易记录、历史违约情况、工商信息等。来源可以是内部系统,也可以是外部征信机构。
  • 数据清洗:处理缺失值、异常值、重复数据。比如某个代理商的年龄填了200岁,这明显是录入错误,得处理掉。
  • 数据划分:按时间或随机方式,把数据分成训练集、验证集和测试集。一般比例是6:2:2。
我的经验:数据清洗时,别一股脑删掉所有缺失值。有时候缺失本身就是一个信号——比如某个代理商故意不填某些信息,可能就有问题。我习惯先分析缺失模式,再决定怎么处理。

4.2 特征工程:好特征胜过好模型

特征工程,就是把原始数据变成模型能理解的语言。这一步做得好,模型效果能提升一大截。

常见的特征工程操作包括:

  • 特征衍生:从原始字段中创造新特征。比如从“注册时间”和“当前时间”算出“合作时长”。
  • 特征分箱:把连续变量离散化。比如年龄分成“20-30岁”、“30-40岁”等区间。分箱后,模型更稳定,也更容易解释。
  • 特征编码:把类别变量转成数值。比如“行业类型”有10个类别,可以用独热编码或WOE编码。
  • 特征选择:去掉冗余或无关的特征。特征太多,模型容易过拟合;特征太少,模型欠拟合。我一般用IV值(信息量)来筛选,IV值大于0.02的特征才保留。
避坑指南:我曾经在某个项目中,一股脑衍生了几百个特征,结果模型训练时间暴涨,效果反而下降了。后来我学乖了——特征不是越多越好,关键是质量。先做业务理解,再动手做特征工程。

4.3 模型训练:逻辑回归 vs 决策树

模型训练是评分卡的核心环节。这里我重点讲两种算法:逻辑回归和决策树。它们各有千秋,适合不同的场景。

4.3.1 逻辑回归:简单、稳定、可解释

逻辑回归是评分卡领域的老牌选手。它的输出是一个概率值(0到1之间),然后通过评分映射转成整数分数。

逻辑回归的优点很明显:

  • 可解释性强:每个特征的权重一目了然。比如“合作时长”的系数是0.3,说明合作越久,信用越好。
  • 训练速度快:数据量再大,也能快速收敛。
  • 稳定性好:不容易过拟合,适合业务场景频繁变化的情况。

缺点呢?它假设特征之间是线性关系,但现实中很多关系是非线性的。比如“交易金额”和“违约概率”可能不是简单的正比关系——金额太低或太高,风险都可能上升。

下面是一个简单的逻辑回归代码示例:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score

# 假设 X 是特征矩阵,y 是标签(0=正常,1=违约)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练逻辑回归模型
model = LogisticRegression(C=0.1, solver='liblinear')
model.fit(X_train, y_train)

# 预测概率
y_pred_prob = model.predict_proba(X_test)[:, 1]

# 评估模型
auc = roc_auc_score(y_test, y_pred_prob)
print(f'AUC: {auc:.4f}')

4.3.2 决策树:灵活、直观、能处理非线性

决策树则像一个“如果-那么”的规则集合。比如:如果合作时长大于3年,且交易金额大于100万,则信用等级为A。

决策树的优点:

  • 能处理非线性关系:不需要假设特征之间的关系。
  • 直观易懂:画出来就是一棵树,业务人员也能看懂。
  • 对缺失值不敏感:有些决策树算法(如CART)能自动处理缺失值。

缺点呢?容易过拟合,尤其是树很深的时候。而且它不稳定——数据稍微变一点,树的结构可能就全变了。

决策树代码示例:

from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

# 训练决策树模型
tree_model = DecisionTreeClassifier(max_depth=5, min_samples_leaf=50)
tree_model.fit(X_train, y_train)

# 可视化决策树
plt.figure(figsize=(20,10))
plot_tree(tree_model, filled=True, feature_names=feature_names, class_names=['正常', '违约'])
plt.show()
注意:决策树容易过拟合,我建议用剪枝或集成方法(如随机森林)来提升稳定性。另外,决策树对类别较多的特征有偏好,分箱时要小心。

4.4 评分映射:把概率变成分数

模型输出的是概率,但业务上需要的是分数。评分映射就是做这个转换的。

评分映射的公式一般是:

Score = Offset + Factor * ln(odds)

其中 odds = p/(1-p),p 是违约概率。Offset 和 Factor 是常数,通过业务需求设定。比如设定“分数每降低20分,违约概率翻倍”。

举个例子:假设某个代理商的违约概率是0.1,odds = 0.1/0.9 ≈ 0.111。如果 Offset=600,Factor=50,那么分数 = 600 + 50 * ln(0.111) ≈ 600 - 110 = 490分。

评分映射后,还需要做分数校准。我习惯用KS统计量来验证分数区分度——KS值大于0.3才算合格。

我的习惯:评分映射时,我会把分数区间设定为300-850分,这样和主流征信机构的分数范围一致,业务人员更容易接受。另外,分数分档也很重要——比如700分以上是优质客户,600-700分是普通客户,600分以下是高风险客户。

4.5 知识体系总览

下面这张图展示了评分卡开发的完整流程和核心逻辑:

信用评分卡开发流程 数据准备 收集、清洗、划分 特征工程 衍生、分箱、编码 模型训练 逻辑回归 / 决策树 评分映射 概率 → 分数 逻辑回归 线性关系假设 可解释性强 训练速度快 决策树 非线性关系 直观易懂 易过拟合 最终输出:信用评分卡 分数区间:300-850分

4.6 模型评估与验证

模型训练完,别急着上线。先做评估和验证,确保模型靠谱。

常用的评估指标包括:

  • AUC:衡量模型区分好坏客户的能力。AUC大于0.7算及格,大于0.8算优秀。
  • KS值:衡量模型对好坏客户的区分度。KS大于0.3算合格。
  • 混淆矩阵:看准确率、召回率、精确率。比如召回率低,说明很多违约客户没被识别出来。

验证时,我习惯做时间外验证——用过去的数据训练,用未来的数据测试。如果模型在时间外验证中表现稳定,那上线后大概率不会翻车。

一个小技巧:模型上线后,记得做监控。每个月看一次分数分布、违约率变化。如果发现分数分布偏移了,可能是数据变了,也可能是模型失效了。这时候需要重新训练或调整模型。

好了,评分卡开发的完整流程就讲到这里。数据准备、特征工程、模型训练、评分映射,每一步都有坑,但每一步也都有方法。逻辑回归和决策树各有适用场景,选哪个取决于你的业务需求和数据特点。记住,模型只是工具,真正重要的是你对业务的理解和对风险的把控。

专注资料整理