1. 课程导入

课程导入 学习卡片

在信用风险建模、消费金融风控与客户经营分析中,账户余额、额度利用率与还款行为是最常见、也最具业务解释力的一类数据。它们看似只是几个数值字段,但真正决定模型效果的,往往不是“有没有这些字段”,而是“能否把它们加工成稳定、可解释、可复用的特征”。本课程的第1章不急于进入代码细节,而是先建立全局认知:我们要学什么、为什么值得学、知识如何组织、最终会完成怎样的实战项目。

一、学习目标:从原始字段到可用特征

本课程的学习目标可以概括为四个层次。第一,理解账户余额、利用率和还款行为三类数据的业务含义,知道它们分别反映客户的资金占用、风险暴露与履约意愿。第二,掌握特征工程的基本方法,包括缺失值处理、异常值识别、时间窗口聚合、趋势构造、比率与交叉特征生成。第三,能够围绕真实业务问题设计特征,而不是机械地做“列变换”。第四,完成一个可运行的实战项目,把原始账单与还款流水加工成建模可用的特征表,并输出特征字典与验证结果。

具体来说,学完本课程后,你应当能够独立回答以下问题:

  • 某个账户当前余额很高,究竟代表优质消费能力,还是潜在违约风险?
  • 额度利用率是看最新一期,还是看近3期、6期、12期的均值、最大值与趋势?
  • 还款行为中,最低还款、全额还款、逾期还款分别应如何编码?
  • 如何避免把“未来信息”泄露到特征中,导致离线评估虚高?
  • 如何把加工后的特征接入逻辑回归、树模型或评分卡流程?

二、核心价值:为什么这三类特征值得单独学习

账户余额、利用率与还款行为之所以重要,是因为它们同时具备三种价值:业务价值、统计价值与工程价值。业务价值在于,它们直接对应授信额度管理、风险预警和客户分层;统计价值在于,它们通常具有较强的时间序列结构,可以衍生出均值、方差、斜率、波动率等特征;工程价值在于,它们来源明确、更新频率稳定,适合批量化、自动化生产。

核心判断:余额反映“用了多少”,利用率反映“相对额度用了多少”,还款行为反映“是否按约归还”。三者结合,才能较完整地刻画一个账户的信用状态。

如果只使用原始余额,模型很难区分“高余额但全额还款”和“高余额且长期最低还款”的客户。前者可能是高消费优质客户,后者则可能进入风险关注名单。因此,特征工程的目标不是简单保留字段,而是构造能够区分业务语义的组合特征。

三、整体知识框架:从数据理解到特征交付

本课程的知识框架分为五层。第一层是数据理解,明确账单表、还款表、账户表和客户表之间的关系。第二层是特征设计,围绕余额、利用率和还款行为分别设计基础特征、窗口特征和趋势特征。第三层是特征计算,使用SQL、Pandas或Spark完成聚合与拼接。第四层是特征验证,检查缺失率、覆盖率、稳定性、区分度和泄漏风险。第五层是特征交付,形成特征字典、训练集与线上可复用的加工逻辑。

层级 核心任务 典型产出 常见风险
数据理解 梳理表关系、时间字段、主键与更新频率 数据字典、ER关系说明 主键不唯一、时间口径不一致
特征设计 定义余额、利用率、还款行为特征 特征清单、业务解释 特征含义模糊、重复表达
特征计算 窗口聚合、趋势计算、表连接 特征宽表、加工脚本 数据倾斜、空值扩散
特征验证 缺失、稳定性、区分度、泄漏检查 验证报告、筛选后的特征集 未来信息泄露、过拟合
特征交付 文档化、版本化、线上复用 特征字典、训练集、上线配置 离线在线不一致

四、实战项目概览:一个可复用的特征工程流水线

课程实战项目围绕一个模拟消费金融账户数据集展开。数据包含账户基本信息、每月账单余额、授信额度、应还金额、实还金额、还款日期和逾期状态。项目目标是构造一份用于违约预测的特征表,并完成基础验证。

项目流程如下:

  1. 读取账户、账单与还款数据,统一客户与账期口径。
  2. 构造基础特征:最新余额、平均余额、额度利用率、还款率、逾期天数。
  3. 构造窗口特征:近3期、6期、12期的均值、最大值、最小值与标准差。
  4. 构造趋势特征:余额斜率、利用率变化率、还款行为迁移。
  5. 拼接标签,划分训练集与验证集,输出特征字典。
# 示例:构造近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元两个账户中,风险含义完全不同。第二,只做静态聚合,忽略时间趋势。一个利用率持续上升的账户,和一个利用率稳定但偶尔波动的账户,风险信号并不相同。第三,不做泄漏检查,把还款后的结果字段用于预测还款前行为。

警告:如果特征计算时使用了标签期之后的数据,模型评估会失真。必须严格按“观察期—表现期”划分数据,并确保所有特征只来自观察期。

复盘时建议按以下清单逐项检查:

  • 每个特征是否有明确业务含义和计算口径?
  • 是否同时保留了绝对值和相对值?
  • 是否覆盖了近期、中期和长期窗口?
  • 是否检查了缺失率、异常值和分布稳定性?
  • 是否存在时间泄漏、主键重复或线上线下不一致?