杰瑞科技汇

Python scorecard包如何快速构建评分卡模型?

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

Python scorecard包如何快速构建评分卡模型?-图1
(图片来源网络,侵删)

什么是 scorecardpy

scorecardpy(简称 scpy)是一个开源的 Python 库,其目标是提供一个完整、高效、用户友好的信用评分卡开发工具链,它的设计理念是 R 语言中 scorecard 包的 Python 移植版,并针对 Python 生态进行了一些优化和扩展。

它将复杂的评分卡开发流程封装成了简单易用的函数,主要包括以下几个核心模块:

  1. 数据预处理:变量分箱、WOE(Weight of Evidence)转换。
  2. 变量筛选:基于 IV(Information Value)和单变量/多变量逻辑回归进行特征选择。
  3. 模型构建:逻辑回归模型训练。
  4. 评分卡转换:将逻辑回归的系数转换为可读的信用分数。
  5. 模型评估:KS、AUC、ROC 曲线、PSI 等评估指标。
  6. 评分卡监控:PSI(Population Stability Index)监控模型稳定性。

为什么选择 scorecardpy

相比于使用 pandas, numpy, sklearn 等基础库从头搭建评分卡流程,scorecardpy 的优势非常明显:

  • 流程化:它将评分卡开发的每一步都模块化了,代码逻辑清晰,易于理解和维护。
  • 高效:内置的 binning 功能(特别是使用 treequantile 方法)非常高效,能快速完成变量分箱和 WOE 转换。
  • 功能全面:从数据清洗、特征工程到模型评估、监控,覆盖了评分卡开发的完整生命周期。
  • 易于使用:API 设计简洁,参数清晰,文档和示例也比较丰富,降低了上手门槛。
  • 结果直观:生成的报告和图表(如 WOE 图、IV 图、ROC 曲线)非常专业,便于向业务方展示。

scorecardpy 的核心功能详解

下面我们通过一个简单的例子,介绍 scorecardpy 的主要功能。

Python scorecard包如何快速构建评分卡模型?-图2
(图片来源网络,侵删)

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.csvy 是目标变量(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 是金融风控领域一个非常有价值的工具,极大地提升了评分卡开发的效率和标准化水平。

分享:
扫描分享到社交APP
上一篇
下一篇