这是一个在金融风控领域非常流行和实用的包,专门用于信用评分卡的构建、评估和监控,它极大地简化了从数据预处理到最终评分卡生成的整个流程,让数据科学家和分析师能够更专注于业务逻辑和模型优化。

什么是 scorecardpy?
scorecardpy(简称 scpy)是一个开源的 Python 库,其目标是提供一个完整、高效、用户友好的信用评分卡开发工具链,它的设计理念是 R 语言中 scorecard 包的 Python 移植版,并针对 Python 生态进行了一些优化和扩展。
它将复杂的评分卡开发流程封装成了简单易用的函数,主要包括以下几个核心模块:
- 数据预处理:变量分箱、WOE(Weight of Evidence)转换。
- 变量筛选:基于 IV(Information Value)和单变量/多变量逻辑回归进行特征选择。
- 模型构建:逻辑回归模型训练。
- 评分卡转换:将逻辑回归的系数转换为可读的信用分数。
- 模型评估:KS、AUC、ROC 曲线、PSI 等评估指标。
- 评分卡监控:PSI(Population Stability Index)监控模型稳定性。
为什么选择 scorecardpy?
相比于使用 pandas, numpy, sklearn 等基础库从头搭建评分卡流程,scorecardpy 的优势非常明显:
- 流程化:它将评分卡开发的每一步都模块化了,代码逻辑清晰,易于理解和维护。
- 高效:内置的
binning功能(特别是使用tree或quantile方法)非常高效,能快速完成变量分箱和 WOE 转换。 - 功能全面:从数据清洗、特征工程到模型评估、监控,覆盖了评分卡开发的完整生命周期。
- 易于使用:API 设计简洁,参数清晰,文档和示例也比较丰富,降低了上手门槛。
- 结果直观:生成的报告和图表(如 WOE 图、IV 图、ROC 曲线)非常专业,便于向业务方展示。
scorecardpy 的核心功能详解
下面我们通过一个简单的例子,介绍 scorecardpy 的主要功能。

1 安装
你需要安装这个包,它依赖于 pandas, numpy, scikit-learn, matplotlib, statsmodels 等。
pip install scorecardpy
2 核心工作流程
一个典型的评分卡开发流程如下:
import scorecardpy as scpy # 1. 数据加载 # 2. 数据分割 # 3. 数据预处理 (缺失值、异常值处理) # 4. 变量分箱与 WOE 转换 # 5. 变量筛选 # 6. 模型训练 # 7. 评分卡转换 # 8. 模型评估 # 9. 评分卡监控
3 功能示例
假设我们有一个数据集 data.csv,y 是目标变量(1表示违约,0表示正常)。
步骤 1 & 2: 数据加载与分割
# 加载示例数据集 # scpy.germancredit() 会加载一个内置的德国信用数据集 dat = scpy.germancredit() # 数据分割:训练集和测试集 train, test = scpy.split_df(dat, y='creditability', ratio=0.7, seed=42)
步骤 3: 数据预处理
scorecardpy 提供了 var_filter 函数,可以自动进行初步的变量筛选,并处理缺失值。
# 变量筛选:剔除 IV 值过低或过高的变量,以及唯一值过多的变量
# iv_limit: IV 值的下限和上限
# miss_limit: 缺失值比例的上限
# unique_limit: 唯一值个数的上限
train = scpy.var_filter(train, y='creditability',
iv_limit=(0.02, 1),
miss_limit=0.9,
unique_limit=10)
# 同样对测试集进行筛选(使用训练集的筛选条件)
test = scpy.var_filter(test, y='creditability',
iv_limit=(0.02, 1),
miss_limit=0.9,
unique_limit=10)
步骤 4: 变量分箱与 WOE 转换
这是 scorecardpy 最核心的功能。woebin 函数可以自动为所有变量进行分箱。
# 自动分箱
# 可以指定分箱方法,如 'tree' (决策树), 'quantile' (分位数), 'step' (等距) 等
bins = scpy.woebin(train, y='creditability',
breaks_list=None, # 可以手动指定某些变量的分箱点
positive='bad') # 定义“坏客户”的标签
# 查看分箱结果
# print(bins)
# 使用分箱结果对训练集和测试集进行 WOE 转换
train_woe = scpy.woebin_ply(train, bins)
test_woe = scpy.woebin_ply(test, bins)
步骤 5: 变量筛选
woebin_mult 函数基于逻辑回归的 p 值进行多变量筛选,剔除不显著的变量。
# 基于逻辑回归的 p 值进行变量筛选
# x: WOE 转换后的自变量
# y: 目标变量
# exclude: 不参与筛选的变量
# sls: 剔除变量的 p 值阈值
train_woe_selected = scpy.woebin_mult(train_woe, y='creditability',
exclude=[],
sls=0.05)
# 获取筛选后的变量列表
selected_vars = list(train_woe_selected.columns)
selected_vars.remove('creditability') # 移除目标变量
print("筛选后的变量:", selected_vars)
步骤 6: 模型训练
使用 sklearn 的逻辑回归模型进行训练。
from sklearn.linear_model import LogisticRegression # 准备数据 X_train = train_woe[selected_vars] y_train = train_woe['creditability'] X_test = test_woe[selected_vars] # 训练逻辑回归模型 # C 是正则化强度的倒数,较小的 C 表示更强的正则化 lr = LogisticRegression(penalty='l1', C=0.1, solver='liblinear') lr.fit(X_train, y_train)
步骤 7: 评分卡转换
这是最神奇的一步!scorecard 函数可以将逻辑回归的系数转换成我们熟悉的信用分数。
# 创建评分卡
# 默认的 base_score (基准分) 是 600, base_odds (基准赔率) 是 50, pdo (分数翻倍所需的点数) 是 20
card = scpy.scorecard(bins, lr,
points0=600, # 基准分
odds0=1/50, # 基准赔率 (好/坏)
pdo=20) # PDO (Point to Double the Odds)
# 查看评分卡
print(card)
# 将评分卡应用到数据上
train_score = scpy.scorecard_ply(train, card)
test_score = scpy.scorecard_ply(test, card)
print("\n训练集前5条记录的分数:")
print(train_score.head())
步骤 8: 模型评估
scorecardpy 提供了非常方便的评估函数。
# 预测概率 train_pred = lr.predict_proba(X_train)[:, 1] test_pred = lr.predict_proba(X_test)[:, 1] # 训练集评估 train_perf = scpy.perf_eva(y_train, train_pred, title='train') # test_perf = scpy.perf_eva(y_test, test_pred, title='test') # 测试集评估 y_test = test['creditability'] test_perf = scpy.perf_eva(y_test, test_pred, title='test') # 绘制 KS 图和 ROC 曲线 scpy.perf_pie(y_train, train_pred, title='train') scpy.perf_pie(y_test, test_pred, title='test')
步骤 9: 评分卡监控
模型上线后,需要监控其稳定性,PSI 是一个常用的指标。
# 假设我们有一个新的样本数据 new_data # new_score = scpy.scorecard_ply(new_data, card) # 计算训练集和新样本集的分数分布 PSI # psi = scpy.perf_psi(train_score, new_score, x='credit_score', title='PSI')
总结与对比
| 特性 | scorecardpy |
pandas + sklearn (手动实现) |
|---|---|---|
| 易用性 | 高,流程化,API 简洁 | 低,需要自己编写大量代码,逻辑复杂 |
| 效率 | 高,底层优化好 | 取决于代码实现,可能较低 |
| 功能完整性 | 高,覆盖评分卡全流程 | 低,需要自己集成多个库的功能 |
| 灵活性 | 中,封装度高,定制化修改较难 | 高,完全掌控每个细节,易于定制 |
| 学习曲线 | 平缓 | 陡峭 |
- 如果你需要快速、标准地构建一个信用评分卡,或者刚接触评分卡业务,
scorecardpy是首选工具,它能让你专注于业务理解和模型调优,而不是被繁琐的代码细节所困扰。 - 如果你需要进行高度定制化的开发,比如实现一种全新的分箱算法,或者需要将评分卡流程深度集成到现有的复杂系统中,那么使用
pandas+sklearn等基础库进行手动实现会更有优势。
scorecardpy 是金融风控领域一个非常有价值的工具,极大地提升了评分卡开发的效率和标准化水平。
