SQL信用评分特征提取与优化技巧 - 第1节

1.1 信用评分卡模型简介

信用评分卡(Scorecard)是金融风控领域最经典的量化决策工具。它将借款人的特征数据映射为一个分数,用以预测其违约概率。评分卡的核心优势在于可解释性强、稳定性高、监管友好。

评分卡的核心要素

要素 说明 典型值
分数区间 评分卡输出的分数范围 300 – 850
好坏比(Odds) 好客户数 / 坏客户数 30:1(高分段)
PD(违约概率) Odds = (1-PD)/PD 0.03(对应 Odds=30)
分值刻度 Odds 翻倍时分数增加的值 20 – 60 PDO
关键公式: 分数 = 基准分 + PDO × log₂(Odds)。SQL 在计算 WOE、IV 和最终分值时承担了核心数据加工任务。

1.2 评分卡开发流程

标准评分卡开发遵循结构化流程,其中 特征工程 占据 60% 以上的工作量。SQL 在数据清洗、特征衍生、分箱统计等环节不可替代。

  1. 业务定义与数据采集 — 确定观察期、表现期、好坏标签定义。
  2. 数据探索与清洗 — 缺失值、异常值、重复记录处理。
  3. 特征工程 — 衍生变量、分箱、WOE 编码、IV 筛选。
  4. 模型训练 — 逻辑回归或决策树。
  5. 评分卡转换 — 将模型系数映射为整数分值。
  6. 模型验证与监控 — KS、AUC、PSI 稳定性测试。
评分卡开发流程(SQL 核心环节高亮) 业务定义 数据清洗 特征工程 模型训练 评分转换 SQL 核心战场:数据清洗 → 特征工程 → 评分转换 SQL 分箱与 WOE 计算 SQL 特征衍生(聚合窗口) SQL 评分映射与 PSI 监控

1.3 SQL 在特征工程中的核心作用

在评分卡项目中,SQL 不仅是数据提取工具,更是特征工程的主力军。以下表格总结了 SQL 在各个环节的具体应用场景:

特征工程环节 SQL 技术 典型代码片段
缺失值处理 CASE WHEN + 聚合函数 SUM(CASE WHEN col IS NULL THEN 1 ELSE 0 END)
异常值截断 窗口函数 PERCENTILE_CONT PERCENTILE_CONT(0.99) WITHIN GROUP(ORDER BY amt)
特征衍生 窗口函数 LAG / AVG / SUM AVG(amount) OVER(PARTITION BY user_id ORDER BY date ROWS 5 PRECEDING)
分箱统计 CASE WHEN + GROUP BY GROUP BY CASE WHEN age<30 THEN 'young' ... END
WOE / IV 计算 聚合 + 对数运算 LN((good_dist/total_good)/(bad_dist/total_bad))
评分映射 CASE WHEN + 算术运算 ROUND(score_base + PDO * LOG(odds,2))
实践建议: 在大型数据集(千万级)上,使用 SQL 窗口函数进行特征衍生比 Python 循环快 10–50 倍。将分箱逻辑直接写在 SQL 中,可以避免数据迁移开销。

SQL 特征工程的核心优势

  • 数据不移动: 直接在数据库内完成加工,避免 I/O 瓶颈。
  • 并行计算: 现代 MPP 数据库对窗口函数和聚合有深度优化。
  • 可审计: SQL 脚本天然具备版本控制和可追溯性。
  • 生产部署: 评分卡上线时,SQL 特征逻辑可直接嵌入数据管道。
SQL 在特征工程中的核心位置 SQL 特征工程 数据清洗 特征衍生 分箱与WOE 评分映射 SQL 覆盖特征工程全链路:从原始数据到评分卡分值,无需离开数据库

一个简单的 SQL 特征衍生示例

以下 SQL 计算客户过去 6 个月的平均消费金额和最大逾期天数,这是评分卡中两个经典的行为特征:

-- 特征衍生:近6个月平均消费金额 & 最大逾期天数
SELECT
    user_id,
    AVG(transaction_amount) AS avg_amt_6m,
    MAX(overdue_days)       AS max_overdue_6m
FROM transaction_table
WHERE trans_date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AND CURRENT_DATE
GROUP BY user_id;
注意: 在评分卡开发中,特征衍生必须严格遵循 观察期 与 表现期 的时间窗口隔离,避免未来信息泄露(Look-ahead Bias)。SQL 中的日期过滤条件需要与业务定义保持一致。