4. 特征工程基础:从原始数据中提取与违约风险相关的特征

特征工程是贷后预警模型的基石。原始数据(还款行为、多头借贷、设备指纹)往往包含大量噪声和冗余信息,直接输入模型会导致过拟合或泛化能力下降。本节将系统讲解如何从三类核心数据源中提取高区分度的违约风险特征。

核心原则:特征工程的目标不是“堆砌变量”,而是通过业务理解与统计变换,将原始数据转化为能稳定区分“好样本”与“坏样本”的数值化指标。

4.1 还款行为特征:刻画用户的履约能力与意愿

还款行为是预测违约最直接的信号。原始数据通常包含每期应还金额、实还金额、还款日期、逾期天数等字段。我们需要从还款及时性、还款金额完整性、还款稳定性三个维度进行特征提取。

特征维度 原始字段 衍生特征示例 业务含义
还款及时性 还款日期、应还日期 近6期平均逾期天数、最大逾期天数、逾期次数占比 反映用户对还款日期的重视程度
还款金额完整性 实还金额、应还金额 近3期还款率(实还/应还)、最低还款次数、足额还款次数 反映用户资金链紧张程度
还款稳定性 还款金额序列、还款间隔 还款金额变异系数、还款间隔标准差、提前还款次数 反映用户收入与支出的规律性
实战技巧:对于“还款及时性”特征,建议使用滑动窗口(如近3期、近6期、近12期)分别计算,观察用户行为的变化趋势。例如,近3期逾期天数递增,是违约风险上升的强烈信号。

以下是一个典型的还款行为特征衍生代码示例(Python伪代码):

import pandas as pd
import numpy as np

def extract_repayment_features(df):
    """
    输入:包含每期还款记录的DataFrame
    输出:衍生特征DataFrame
    """
    # 按用户分组,按还款期数排序
    df = df.sort_values(['user_id', 'period'])
    
    # 1. 还款及时性特征
    df['overdue_days'] = (df['repay_date'] - df['due_date']).dt.days
    features = df.groupby('user_id').agg(
        avg_overdue_days_3=('overdue_days', lambda x: x.tail(3).mean()),
        max_overdue_days_6=('overdue_days', lambda x: x.tail(6).max()),
        overdue_ratio=('overdue_days', lambda x: (x > 0).mean())
    ).reset_index()
    
    # 2. 还款金额完整性特征
    df['repay_rate'] = df['actual_amount'] / df['due_amount']
    features['avg_repay_rate_3'] = df.groupby('user_id')['repay_rate'].apply(
        lambda x: x.tail(3).mean()
    ).values
    
    # 3. 还款稳定性特征
    features['repay_amount_cv'] = df.groupby('user_id')['actual_amount'].apply(
        lambda x: x.std() / (x.mean() + 1e-8)  # 变异系数
    ).values
    
    return features

4.2 多头借贷特征:量化用户的负债压力与资金饥渴度

多头借贷是指用户在多个平台同时申请或持有贷款。原始数据通常来自征信报告或第三方数据源,包含查询机构数、放款机构数、当前未结清笔数等字段。多头借贷特征的核心在于数量、时间密度和机构类型三个维度。

多头借贷特征提取框架 原始多头数据 数量维度 时间密度维度 机构类型维度 近3月查询机构数 当前未结清笔数 历史累计放款机构数 近7天查询次数 查询间隔标准差 单日最大查询次数 银行类机构占比 网贷类机构占比 小额贷款公司占比 多头借贷风险评分
避坑指南:多头借贷特征容易陷入“越多越坏”的线性思维。实际上,查询次数突然激增(如近7天查询次数是前30天均值的3倍以上)比单纯的高查询次数更具预测力。建议构建“变化率”特征,如查询次数环比增长率。

4.3 设备指纹特征:识别欺诈团伙与异常操作

设备指纹是反欺诈和贷后预警的重要数据源。原始数据包括设备ID、IP地址、GPS位置、应用列表、通讯录等。设备指纹特征的核心在于唯一性、关联性和异常性三个维度。

特征维度 原始字段 衍生特征示例 业务含义
唯一性 设备ID、IMEI、MAC地址 设备关联用户数、设备关联手机号数、设备ID变更次数 识别设备是否被多人共用或频繁更换
关联性 IP地址、GPS位置、WiFi名称 同IP下用户数、同GPS下用户数、常用位置与申请地距离 识别团伙欺诈或伪冒申请
异常性 应用列表、Root状态、模拟器检测 是否Root、是否模拟器、高危应用数量、通讯录空置率 识别设备是否被篡改或用于欺诈
关键指标:“设备关联用户数”是识别团伙欺诈的黄金特征。正常用户通常1个设备对应1-2个用户(如家庭成员),而欺诈团伙可能1个设备对应10个以上用户。建议设置阈值(如≥3)进行二值化处理。

设备指纹特征工程中,图特征(Graph Features)是近年来的重要方向。通过构建“设备-用户-手机号”的关联图,可以提取节点的度数、PageRank、连通分量大小等图结构特征。

# 设备关联图特征提取示例
import networkx as nx

def extract_device_graph_features(edges_df):
    """
    输入:包含 (device_id, user_id) 关系的DataFrame
    输出:每个设备的图特征
    """
    G = nx.Graph()
    G.add_edges_from(edges_df[['device_id', 'user_id']].values)
    
    features = {}
    for node in G.nodes():
        if G.degree(node) > 0:
            features[node] = {
                'degree': G.degree(node),
                'clustering_coefficient': nx.clustering(G, node),
                'pagerank': nx.pagerank(G, alpha=0.85)[node]
            }
    return features

4.4 特征筛选与降维:避免维度灾难

经过上述步骤,我们可能衍生出数百个特征。直接全部输入模型会导致过拟合和计算效率低下。特征筛选通常遵循以下流程:

  1. 缺失率筛选:删除缺失率超过80%的特征。
  2. 方差筛选:删除方差接近0的常数特征。
  3. 相关性筛选:删除相关系数绝对值大于0.95的冗余特征对。
  4. IV值筛选:保留IV值大于0.02的特征(IV值衡量特征对坏样本的区分能力)。
  5. 业务验证:与业务团队确认特征的可解释性和稳定性。
推荐工具:Python的 feature_engine 库提供了完整的特征筛选Pipeline,支持缺失率、方差、相关性、IV值等筛选方法,建议在项目中直接使用。

特征工程不是一次性工作,而是需要随着业务变化和模型迭代持续优化的过程。建议建立特征仓库,记录每个特征的衍生逻辑、计算时间、IV值变化趋势,便于后续特征管理和模型监控。