4. 特征工程入门

在贷后逾期概率预测中,模型算法决定上限,而特征工程决定下限。同一份贷后数据,不同特征构建方式带来的KS差异可能超过0.1。本节围绕五类核心特征——客户画像、还款行为、额度使用、历史逾期、外部征信,讲清构建方法与常见陷阱。

一、核心原理:特征工程是把业务知识翻译成模型语言

贷后预测的本质是回答一个问题:这个客户在未来某个观察窗口内逾期概率有多高? 特征工程的任务,就是把与这个问题相关的历史信息,压缩成模型可计算的数值向量。好的特征具备三个属性:

  • 预测性:与目标变量(如M1+逾期)有稳定相关性;
  • 时效性:特征计算时点严格早于观察窗口起点,避免未来信息泄露;
  • 可解释性:业务人员能理解特征含义,便于策略落地与监管沟通。
特征工程的核心纪律:任何特征的计算截止时间,必须早于标签观察窗口的起始时间。这条纪律一旦破坏,离线AUC再高也是幻觉。

二、五类特征的构建方法

1. 客户画像特征

刻画客户“是谁”,包括年龄、性别、地域、职业、学历、婚姻状况、收入区间、行业类别等。构建要点:连续变量分箱(如年龄按18-25、26-35、36-45、46+分段),类别变量做目标编码或WOE编码。注意职业与行业字段缺失率高,需单独设置“未知”类别而非直接填充众数。

2. 还款行为特征

刻画客户“怎么还钱”,是贷后预测中最强的特征族。常见构建方式:

  • 近3/6/12期按时还款次数、比例;
  • 平均还款提前天数、最大提前天数、是否经常踩点还款;
  • 还款金额波动率(标准差/均值);
  • 最近一次还款距今天数。

3. 额度使用特征

刻画客户“用了多少钱”,反映资金紧张程度。核心指标包括:额度使用率(已用额度/授信额度)、近3月使用率变化趋势、是否长期满额、提额后使用率跳升幅度。使用率突然从60%升至95%往往是风险信号。

4. 历史逾期特征

刻画客户“过去是否违约”。构建时需区分严重程度与时间衰减:

  • 历史最大逾期天数、逾期次数、逾期期数;
  • 最近一次逾期距今天数(越近权重越高);
  • 是否出现过M2+、M3+;
  • 逾期后是否结清、结清用时。

5. 外部征信特征

刻画客户“在别处表现如何”。包括多头借贷机构数、近3月查询次数、外部负债总额、担保信息、征信评分等。外部特征需注意数据获取时点与更新频率,避免用T+30的数据预测T+1的标签。

三、方法流程与代码示例

标准流程为:确定观察点 → 划分观察窗口与表现窗口 → 按客户聚合特征 → 时间切分验证 → 缺失值与异常值处理。以下为按客户聚合还款行为的示例:

import pandas as pd

# 假设 repay_df 含 customer_id, repay_date, due_date, repay_amt
repay_df['early_days'] = (repay_df['due_date'] - repay_df['repay_date']).dt.days

feat = repay_df.groupby('customer_id').agg(
    repay_cnt=('repay_amt', 'count'),
    avg_early_days=('early_days', 'mean'),
    max_early_days=('early_days', 'max'),
    repay_amt_std=('repay_amt', 'std'),
    last_repay_days=('repay_date', lambda x: (obs_date - x.max()).days)
).reset_index()

# 近6期按时还款比例
recent = repay_df[repay_df['repay_date'] >= obs_date - pd.Timedelta(days=180)]
on_time_rate = recent.groupby('customer_id').apply(
    lambda g: (g['early_days'] >= 0).mean()
).rename('on_time_rate_6m')
feat = feat.merge(on_time_rate, on='customer_id', how='left')

四、特征清单与业务含义对照

特征族 代表特征 业务含义 风险方向
客户画像年龄、收入区间、行业还款能力与稳定性收入越低风险越高
还款行为平均提前天数、按时还款率还款意愿与习惯提前天数越少风险越高
额度使用额度使用率、近3月变化资金紧张程度使用率越高风险越高
历史逾期最大逾期天数、最近逾期距今历史违约严重度逾期越近越严重风险越高
外部征信多头机构数、查询次数外部负债与借贷冲动多头越多风险越高

五、案例场景:一次特征泄露导致的模型翻车

某消费金融团队在贷后模型中加入了“近30天还款成功次数”,离线AUC达到0.82,上线后KS仅0.21。复盘发现:该特征计算时使用了标签观察窗口内的还款记录,而逾期客户在观察窗口内往往不会产生成功还款,导致特征与标签高度共线。修正方法是将特征计算截止时间前移至观察窗口起点,AUC回落至0.71,但上线KS稳定在0.38。

常见误区:用全量数据做分箱和WOE编码,再切分训练测试集。正确做法是只在训练集上拟合分箱边界与WOE映射,再应用到验证集和测试集。

六、复盘要点

  1. 时间切分优先于随机切分:贷后数据具有强时间性,随机切分会导致同客户跨期泄露。
  2. 缺失值本身是信息:外部征信缺失可能意味着客户从未借贷,应单独编码而非简单填充。
  3. 特征稳定性监控:上线后按月监控PSI,PSI超过0.25需触发特征重训。
  4. 可解释性优先:贷后策略常需向风控委员会解释,优先保留业务含义清晰的特征。
建议每构建一个特征,都在特征字典中记录:特征名、计算逻辑、数据来源、更新频率、预期风险方向、负责人。这份字典是后续模型迭代与合规审计的基础资产。