4. 时间窗口特征:滚动时间窗口与逾期行为时序
在催收场景中,借款人的还款意愿和能力并非静态不变,而是随时间动态演化。时间窗口特征的核心思想是:将历史行为按固定长度的时间段切分,在每个窗口内统计关键指标,从而捕捉行为趋势、波动和突变。本章聚焦三类最常用的时间窗口特征:滚动时间窗口、逾期天数衍生、还款行为时序特征。
4.1 滚动时间窗口(7天 / 30天 / 90天)
滚动时间窗口以当前日期为基准,向前滑动固定天数,统计该窗口内的行为汇总。不同窗口长度捕捉不同粒度的行为模式:
| 窗口长度 | 适用场景 | 典型特征示例 | 业务含义 |
|---|---|---|---|
| 7天 | 短期行为监控、催收响应 | 近7天通话次数、近7天还款金额 | 捕捉借款人近一周的紧急联系或还款动作 |
| 30天 | 月度还款习惯、收入周期 | 近30天逾期天数、近30天投诉次数 | 反映借款人月度内的还款稳定性 |
| 90天 | 长期信用趋势、风险分层 | 近90天最大逾期天数、近90天还款率 | 评估借款人中长期信用表现 |
关键原则:窗口长度越长,特征越平滑,对短期波动的敏感度越低;窗口越短,特征越灵敏,但噪声也越大。实际建模中常将多个窗口特征同时入模,让模型自动学习最佳时间尺度。
滚动窗口特征计算示例(Python伪代码):
import pandas as pd
def rolling_window_features(df, date_col, value_col, windows=[7, 30, 90]):
"""
df: 包含日期和数值的DataFrame
date_col: 日期列名
value_col: 待统计的数值列名(如还款金额、通话次数)
windows: 窗口长度列表
"""
df = df.sort_values(date_col)
for w in windows:
df[f'{value_col}_rolling_{w}d_sum'] = (
df[value_col].rolling(window=w, min_periods=1).sum()
)
df[f'{value_col}_rolling_{w}d_mean'] = (
df[value_col].rolling(window=w, min_periods=1).mean()
)
df[f'{value_col}_rolling_{w}d_max'] = (
df[value_col].rolling(window=w, min_periods=1).max()
)
return df
实战建议:对于催收场景,建议至少同时计算7天、30天、90天三个窗口的均值、最大值和趋势(如当前窗口均值 / 上一窗口均值),以覆盖短期响应、中期习惯和长期趋势三个维度。
4.2 逾期天数衍生特征
逾期天数是催收模型中最核心的标签之一,但原始逾期天数往往信息量不足。通过衍生变换,可以提取更丰富的风险信号:
- 当前逾期天数(DPD): 距离应还款日未还的天数,直接反映逾期严重程度。
- 最大逾期天数(Max DPD): 历史所有逾期中的最大值,刻画借款人的“最差表现”。
- 逾期天数均值(Avg DPD): 近N次逾期的平均天数,反映逾期严重程度的平均水平。
- 逾期天数标准差(Std DPD): 逾期天数的波动性,波动越大说明还款行为越不稳定。
- 逾期天数趋势(DPD Trend): 近期逾期天数与历史均值的比值,判断逾期是恶化还是好转。
- 逾期天数占比(DPD Ratio): 逾期天数占整个借款周期的比例,衡量逾期时间密度。
| 衍生特征 | 计算公式 | 业务解读 |
|---|---|---|
| 当前DPD | 当前日期 - 应还款日 | 实时风险状态 |
| Max DPD | max(历史所有DPD) | 历史最差信用表现 |
| Avg DPD | sum(DPD) / 逾期次数 | 平均逾期严重程度 |
| DPD Trend | 近3次DPD均值 / 全部DPD均值 | >1 表示恶化,<1 表示好转 |
| DPD Ratio | 逾期天数 / 借款总天数 | 逾期时间密度 |
注意:逾期天数衍生特征容易与目标变量(如是否还款)产生高度相关性,导致过拟合。建议在特征筛选阶段使用时间序列交叉验证,避免未来信息泄露。
4.3 还款行为时序特征
还款行为时序特征关注借款人在时间轴上的还款动作模式,包括还款金额、还款频率、还款间隔等。这类特征能有效区分“习惯性逾期但最终还款”与“恶意逃废债”两类客群。
核心时序特征类别:
- 还款金额特征: 单次还款金额、累计还款金额、还款金额占应还比例、还款金额波动系数。
- 还款频率特征: 近30天还款次数、平均还款间隔天数、最长未还款间隔。
- 还款规律性特征: 还款日期是否集中在某几天、是否在催收电话后立即还款、还款时间是否在节假日。
- 还款序列模式: 是否连续还款、是否出现“还了又借”的循环模式、还款金额是否逐渐减少。
实战案例:某消费金融公司发现,借款人在逾期后第3天、第7天、第15天是三个关键的还款时间节点。通过构造“是否在逾期后第3天还款”的二值特征,模型AUC提升了约2.3%。这说明时序特征能捕捉催收策略与借款人行为的交互效应。
4.4 特征构造实战流程
综合以上三类时间窗口特征,推荐以下特征构造流程:
- 数据准备: 清洗还款流水表、通话记录表、投诉记录表,确保每条记录有时间戳和唯一借款人ID。
- 窗口划分: 对每个借款人,以当前评估日为基准,向前滑动7天、30天、90天,分别提取窗口内的行为数据。
- 统计量计算: 在每个窗口内计算均值、最大值、最小值、标准差、趋势(当前窗口/上一窗口)、占比等。
- 逾期天数衍生: 基于窗口内的逾期天数序列,计算Max DPD、Avg DPD、DPD Trend、DPD Ratio等。
- 还款时序特征: 提取还款金额序列、还款间隔序列、还款日期模式等,构造频率和规律性特征。
- 特征拼接与筛选: 将所有窗口特征横向拼接成宽表,使用方差阈值、相关系数、IV值等方法筛选有效特征。
效率提示: 如果数据量较大(百万级以上),建议使用Spark或Polars进行窗口计算,避免Pandas内存溢出。同时,窗口特征可以预先计算并存储,在模型训练时直接读取,避免重复计算。
4.5 本章小结
- 滚动时间窗口(7天/30天/90天)是捕捉借款人行为动态变化的基础工具,不同窗口长度互补。
- 逾期天数衍生特征(Max DPD、Avg DPD、DPD Trend等)能有效刻画逾期严重程度和变化趋势。
- 还款行为时序特征(金额、频率、规律性、序列模式)是区分不同还款类型客群的关键。
- 特征构造应遵循“先窗口划分、再统计计算、最后拼接筛选”的标准化流程,确保可复现性和稳定性。