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 在数据清洗、特征衍生、分箱统计等环节不可替代。
- 业务定义与数据采集 — 确定观察期、表现期、好坏标签定义。
- 数据探索与清洗 — 缺失值、异常值、重复记录处理。
- 特征工程 — 衍生变量、分箱、WOE 编码、IV 筛选。
- 模型训练 — 逻辑回归或决策树。
- 评分卡转换 — 将模型系数映射为整数分值。
- 模型验证与监控 — KS、AUC、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 计算客户过去 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 中的日期过滤条件需要与业务定义保持一致。