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天三个窗口的均值、最大值和趋势(如当前窗口均值 / 上一窗口均值),以覆盖短期响应、中期习惯和长期趋势三个维度。
滚动时间窗口特征计算流程 滚动时间窗口特征计算流程 原始行为数据 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 还款行为时序特征

还款行为时序特征关注借款人在时间轴上的还款动作模式,包括还款金额、还款频率、还款间隔等。这类特征能有效区分“习惯性逾期但最终还款”与“恶意逃废债”两类客群。

核心时序特征类别:

  1. 还款金额特征: 单次还款金额、累计还款金额、还款金额占应还比例、还款金额波动系数。
  2. 还款频率特征: 近30天还款次数、平均还款间隔天数、最长未还款间隔。
  3. 还款规律性特征: 还款日期是否集中在某几天、是否在催收电话后立即还款、还款时间是否在节假日。
  4. 还款序列模式: 是否连续还款、是否出现“还了又借”的循环模式、还款金额是否逐渐减少。
实战案例:某消费金融公司发现,借款人在逾期后第3天、第7天、第15天是三个关键的还款时间节点。通过构造“是否在逾期后第3天还款”的二值特征,模型AUC提升了约2.3%。这说明时序特征能捕捉催收策略与借款人行为的交互效应。
还款行为时序特征分类 还款行为时序特征分类 还款行为时序特征 还款金额特征 金额 / 比例 / 波动 还款频率特征 次数 / 间隔 / 最长空窗 还款规律性特征 日期集中度 / 响应模式 还款序列模式 连续 / 循环 / 递减 单次还款金额 累计还款金额 还款金额占比 近30天还款次数 平均还款间隔 最长未还款间隔 还款日期集中度 催收后响应率 节假日还款倾向 连续还款标记 还了又借模式 还款金额递减趋势 时序特征需要按时间顺序排列,建议使用LSTM或Transformer等序列模型进行特征提取,或直接构造统计量作为传统模型的输入。

4.4 特征构造实战流程

综合以上三类时间窗口特征,推荐以下特征构造流程:

  1. 数据准备: 清洗还款流水表、通话记录表、投诉记录表,确保每条记录有时间戳和唯一借款人ID。
  2. 窗口划分: 对每个借款人,以当前评估日为基准,向前滑动7天、30天、90天,分别提取窗口内的行为数据。
  3. 统计量计算: 在每个窗口内计算均值、最大值、最小值、标准差、趋势(当前窗口/上一窗口)、占比等。
  4. 逾期天数衍生: 基于窗口内的逾期天数序列,计算Max DPD、Avg DPD、DPD Trend、DPD Ratio等。
  5. 还款时序特征: 提取还款金额序列、还款间隔序列、还款日期模式等,构造频率和规律性特征。
  6. 特征拼接与筛选: 将所有窗口特征横向拼接成宽表,使用方差阈值、相关系数、IV值等方法筛选有效特征。
效率提示: 如果数据量较大(百万级以上),建议使用Spark或Polars进行窗口计算,避免Pandas内存溢出。同时,窗口特征可以预先计算并存储,在模型训练时直接读取,避免重复计算。

4.5 本章小结

  • 滚动时间窗口(7天/30天/90天)是捕捉借款人行为动态变化的基础工具,不同窗口长度互补。
  • 逾期天数衍生特征(Max DPD、Avg DPD、DPD Trend等)能有效刻画逾期严重程度和变化趋势。
  • 还款行为时序特征(金额、频率、规律性、序列模式)是区分不同还款类型客群的关键。
  • 特征构造应遵循“先窗口划分、再统计计算、最后拼接筛选”的标准化流程,确保可复现性和稳定性。