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才算合格。
4.5 知识体系总览
下面这张图展示了评分卡开发的完整流程和核心逻辑:
4.6 模型评估与验证
模型训练完,别急着上线。先做评估和验证,确保模型靠谱。
常用的评估指标包括:
- AUC:衡量模型区分好坏客户的能力。AUC大于0.7算及格,大于0.8算优秀。
- KS值:衡量模型对好坏客户的区分度。KS大于0.3算合格。
- 混淆矩阵:看准确率、召回率、精确率。比如召回率低,说明很多违约客户没被识别出来。
验证时,我习惯做时间外验证——用过去的数据训练,用未来的数据测试。如果模型在时间外验证中表现稳定,那上线后大概率不会翻车。
好了,评分卡开发的完整流程就讲到这里。数据准备、特征工程、模型训练、评分映射,每一步都有坑,但每一步也都有方法。逻辑回归和决策树各有适用场景,选哪个取决于你的业务需求和数据特点。记住,模型只是工具,真正重要的是你对业务的理解和对风险的把控。