1. 课程导入
在信用风险建模、消费金融风控与客户经营分析中,账户余额、额度利用率与还款行为是最常见、也最具业务解释力的一类数据。它们看似只是几个数值字段,但真正决定模型效果的,往往不是“有没有这些字段”,而是“能否把它们加工成稳定、可解释、可复用的特征”。本课程的第1章不急于进入代码细节,而是先建立全局认知:我们要学什么、为什么值得学、知识如何组织、最终会完成怎样的实战项目。
一、学习目标:从原始字段到可用特征
本课程的学习目标可以概括为四个层次。第一,理解账户余额、利用率和还款行为三类数据的业务含义,知道它们分别反映客户的资金占用、风险暴露与履约意愿。第二,掌握特征工程的基本方法,包括缺失值处理、异常值识别、时间窗口聚合、趋势构造、比率与交叉特征生成。第三,能够围绕真实业务问题设计特征,而不是机械地做“列变换”。第四,完成一个可运行的实战项目,把原始账单与还款流水加工成建模可用的特征表,并输出特征字典与验证结果。
具体来说,学完本课程后,你应当能够独立回答以下问题:
- 某个账户当前余额很高,究竟代表优质消费能力,还是潜在违约风险?
- 额度利用率是看最新一期,还是看近3期、6期、12期的均值、最大值与趋势?
- 还款行为中,最低还款、全额还款、逾期还款分别应如何编码?
- 如何避免把“未来信息”泄露到特征中,导致离线评估虚高?
- 如何把加工后的特征接入逻辑回归、树模型或评分卡流程?
二、核心价值:为什么这三类特征值得单独学习
账户余额、利用率与还款行为之所以重要,是因为它们同时具备三种价值:业务价值、统计价值与工程价值。业务价值在于,它们直接对应授信额度管理、风险预警和客户分层;统计价值在于,它们通常具有较强的时间序列结构,可以衍生出均值、方差、斜率、波动率等特征;工程价值在于,它们来源明确、更新频率稳定,适合批量化、自动化生产。
核心判断:余额反映“用了多少”,利用率反映“相对额度用了多少”,还款行为反映“是否按约归还”。三者结合,才能较完整地刻画一个账户的信用状态。
如果只使用原始余额,模型很难区分“高余额但全额还款”和“高余额且长期最低还款”的客户。前者可能是高消费优质客户,后者则可能进入风险关注名单。因此,特征工程的目标不是简单保留字段,而是构造能够区分业务语义的组合特征。
三、整体知识框架:从数据理解到特征交付
本课程的知识框架分为五层。第一层是数据理解,明确账单表、还款表、账户表和客户表之间的关系。第二层是特征设计,围绕余额、利用率和还款行为分别设计基础特征、窗口特征和趋势特征。第三层是特征计算,使用SQL、Pandas或Spark完成聚合与拼接。第四层是特征验证,检查缺失率、覆盖率、稳定性、区分度和泄漏风险。第五层是特征交付,形成特征字典、训练集与线上可复用的加工逻辑。
| 层级 | 核心任务 | 典型产出 | 常见风险 |
|---|---|---|---|
| 数据理解 | 梳理表关系、时间字段、主键与更新频率 | 数据字典、ER关系说明 | 主键不唯一、时间口径不一致 |
| 特征设计 | 定义余额、利用率、还款行为特征 | 特征清单、业务解释 | 特征含义模糊、重复表达 |
| 特征计算 | 窗口聚合、趋势计算、表连接 | 特征宽表、加工脚本 | 数据倾斜、空值扩散 |
| 特征验证 | 缺失、稳定性、区分度、泄漏检查 | 验证报告、筛选后的特征集 | 未来信息泄露、过拟合 |
| 特征交付 | 文档化、版本化、线上复用 | 特征字典、训练集、上线配置 | 离线在线不一致 |
四、实战项目概览:一个可复用的特征工程流水线
课程实战项目围绕一个模拟消费金融账户数据集展开。数据包含账户基本信息、每月账单余额、授信额度、应还金额、实还金额、还款日期和逾期状态。项目目标是构造一份用于违约预测的特征表,并完成基础验证。
项目流程如下:
- 读取账户、账单与还款数据,统一客户与账期口径。
- 构造基础特征:最新余额、平均余额、额度利用率、还款率、逾期天数。
- 构造窗口特征:近3期、6期、12期的均值、最大值、最小值与标准差。
- 构造趋势特征:余额斜率、利用率变化率、还款行为迁移。
- 拼接标签,划分训练集与验证集,输出特征字典。
# 示例:构造近6期额度利用率均值与最大值
import pandas as pd
bill['utilization'] = bill['balance'] / bill['credit_limit'].replace(0, pd.NA)
util_feat = (
bill.sort_values(['account_id', 'bill_month'])
.groupby('account_id')['utilization']
.rolling(window=6, min_periods=1)
.agg(['mean', 'max', 'std'])
.reset_index()
.rename(columns={
'mean': 'util_mean_6m',
'max': 'util_max_6m',
'std': 'util_std_6m'
})
)
提示:窗口特征一定要明确“截至哪个账期”。如果使用未来账期计算当前特征,离线指标会明显虚高,线上效果却会下降。
五、常见误区与复盘思路
初学者最容易陷入三个误区。第一,把余额直接当作风险高低,忽略额度差异。余额10000元在额度12000元和额度100000元两个账户中,风险含义完全不同。第二,只做静态聚合,忽略时间趋势。一个利用率持续上升的账户,和一个利用率稳定但偶尔波动的账户,风险信号并不相同。第三,不做泄漏检查,把还款后的结果字段用于预测还款前行为。
警告:如果特征计算时使用了标签期之后的数据,模型评估会失真。必须严格按“观察期—表现期”划分数据,并确保所有特征只来自观察期。
复盘时建议按以下清单逐项检查:
- 每个特征是否有明确业务含义和计算口径?
- 是否同时保留了绝对值和相对值?
- 是否覆盖了近期、中期和长期窗口?
- 是否检查了缺失率、异常值和分布稳定性?
- 是否存在时间泄漏、主键重复或线上线下不一致?