4、特征工程基础:特征构建思路、时间窗口切片、聚合统计特征

在贷后预警场景中,原始数据通常以交易流水、还款记录、催收日志等形式存在,无法直接用于模型训练。特征工程的核心任务是将这些原始数据转化为能够有效区分“好样本”与“坏样本”的数值特征。本章聚焦于特征构建的三大基础模块:特征构建思路、时间窗口切片以及聚合统计特征。

4.1 特征构建思路

特征构建并非盲目堆砌变量,而是基于业务逻辑与数据形态的系统性设计。贷后预警特征通常从以下三个维度出发:

  • 行为维度:借款人的还款行为、消费行为、联系行为等。例如:近30天还款次数、逾期天数、联系客服频率。
  • 状态维度:借款人在某一时间点的静态属性。例如:当前逾期金额、授信额度、剩余本金。
  • 趋势维度:行为或状态随时间的变化方向。例如:近3个月逾期天数环比变化、月均消费金额的增长率。
业务提示: 特征构建应优先选择与“坏样本”定义(如逾期90天以上、核销、失联)有明确因果或强相关关系的变量。避免引入过多噪声特征,导致模型过拟合。

下表总结了三种维度的典型特征示例及其在贷后预警中的意义:

维度 典型特征示例 预警意义
行为维度 近7天还款失败次数 反映借款人短期资金链紧张程度
状态维度 当前逾期金额占比 衡量当前违约严重程度
趋势维度 近3个月月均消费金额变化率 捕捉收入或消费能力下降趋势

4.2 时间窗口切片

时间窗口切片是特征工程中处理时序数据的关键技术。它通过定义固定的时间区间,将连续的行为序列切分为可比较的片段,从而提取出不同时间段内的行为模式。

常见的时间窗口类型包括:

  • 固定长度窗口:如近7天、近30天、近90天。适用于捕捉短期与中期行为变化。
  • 滑动窗口:以当前时间点为基准,向前滑动固定步长。例如:近30天、近60天、近90天的还款行为。
  • 日历窗口:按自然月、季度或年划分。适用于与账单周期、考核周期对齐的场景。
  • 事件窗口:以特定事件(如首次逾期、催收联系)为起点或终点。适用于分析事件前后的行为变化。
关键原则: 窗口长度的选择需平衡信息量与时效性。窗口过短可能无法反映稳定模式,窗口过长则可能引入过时信息,降低预警灵敏度。

下图展示了贷后预警中常用的时间窗口切片策略:

贷后预警时间窗口切片策略 当前 近7天 近30天 近90天 滑动窗口1 滑动窗口2 滑动窗口3 事件前窗口 事件 事件后窗口 说明:固定窗口用于捕捉短期/中期行为;滑动窗口用于观察趋势变化;事件窗口用于分析特定事件前后影响

4.3 聚合统计特征

在确定时间窗口后,需要对窗口内的原始数据进行聚合计算,生成具有统计意义的特征。最常用的聚合统计量包括:最大值、最小值、均值和标准差。

这些统计量从不同角度刻画了借款人在窗口内的行为特征:

  • 最大值:反映窗口内的极端行为。例如:近30天最大逾期天数、单日最大消费金额。
  • 最小值:反映窗口内的最低水平。例如:近90天最低还款金额、最低账户余额。
  • 均值:反映窗口内的平均水平。例如:近7天日均消费金额、月均还款次数。
  • 标准差:反映窗口内的波动程度。例如:近30天还款金额的标准差,波动越大说明还款行为越不稳定。
避坑提醒: 标准差特征对异常值敏感,在数据清洗不充分时可能导致特征失真。建议在计算标准差前先进行分位数截断或异常值处理。

下表以“还款行为”为例,展示不同聚合统计量的业务含义:

聚合统计量 特征名称 计算方式 业务含义
最大值 近30天最大还款金额 max(还款金额) 反映借款人短期内的最大还款能力
最小值 近30天最小还款金额 min(还款金额) 反映借款人短期内的最低还款意愿或能力
均值 近30天日均还款金额 avg(还款金额) 反映借款人短期内的平均还款水平
标准差 近30天还款金额标准差 std(还款金额) 反映借款人还款行为的稳定性,波动越大风险越高

4.4 特征构建实战:代码示例

以下代码展示了如何使用Python对贷后数据进行时间窗口切片与聚合统计特征构建:

import pandas as pd
import numpy as np

# 示例数据:用户还款流水
data = {
    'user_id': ['A001', 'A001', 'A001', 'A002', 'A002'],
    'repay_date': ['2024-01-05', '2024-01-20', '2024-02-10', '2024-01-15', '2024-02-05'],
    'repay_amount': [500, 300, 600, 1000, 800]
}
df = pd.DataFrame(data)
df['repay_date'] = pd.to_datetime(df['repay_date'])

# 定义当前时间点
current_date = pd.Timestamp('2024-02-15')

# 时间窗口切片:近30天
df['window_30d'] = (current_date - df['repay_date']).dt.days <= 30

# 聚合统计特征计算
features = df[df['window_30d']].groupby('user_id').agg(
    repay_max_30d=('repay_amount', 'max'),
    repay_min_30d=('repay_amount', 'min'),
    repay_mean_30d=('repay_amount', 'mean'),
    repay_std_30d=('repay_amount', 'std')
).reset_index()

print(features)
输出说明: 上述代码为每个用户生成了近30天内的还款金额最大值、最小值、均值与标准差。这些特征可直接用于贷后预警模型的训练。

4.5 特征构建流程总览

下图总结了从原始数据到聚合统计特征的完整构建流程:

特征构建流程总览 原始数据 时间窗口切片 聚合计算 特征输出 流程说明 1. 原始数据:交易流水、还款记录、催收日志等 2. 时间窗口切片:定义近7天/30天/90天等窗口 3. 聚合计算:计算最大值、最小值、均值、标准差等统计量

通过上述流程,我们可以将原始的时序数据转化为结构化的特征矩阵,为后续的坏样本归因分析提供高质量的输入变量。