3. 数据基础与变量准备:催收相关数据源与特征工程要点

催收评分模型(Collection Score)的预测能力高度依赖底层数据的质量与广度。本章将系统梳理催收场景的核心数据源、数据清洗的关键步骤以及特征工程的核心方法,帮助学员构建稳健、可解释的评分变量体系。

3.1 催收核心数据源分类

催收数据源通常分为三大类:内部还款行为数据、联系信息数据、外部征信数据。下表对比了三类数据源的核心字段、更新频率与典型用途。

数据源类别 核心字段示例 更新频率 典型用途
还款行为数据 逾期天数、还款金额、还款方式、历史逾期次数、最近还款日期 每日/实时 评估当前还款意愿与能力,预测短期回收概率
联系信息数据 手机号状态、座机有效性、地址变更次数、联系人接通率、紧急联系人数量 每周/每月 评估失联风险,优化催收触达策略
外部征信数据 征信查询次数、其他平台逾期记录、多头借贷指数、法院执行信息 每月/按需 补充信用画像,识别欺诈与共债风险
实践提示: 还款行为数据是催收评分最敏感的预测因子,建议优先保证其完整性与时效性。外部征信数据虽价值高,但获取成本与合规要求也最高,需按策略分层使用。

3.2 数据清洗关键要点

原始数据通常包含缺失、异常、重复与不一致等问题。以下列出催收场景下必须处理的四类数据质量问题。

  • 缺失值处理: 对于关键字段(如逾期天数、还款金额),缺失率超过30%时建议标记为“未知”类别;低于5%时可用中位数或最近一次有效值填充。
  • 异常值识别: 还款金额出现负数或超出贷款本金10倍以上,需结合业务规则剔除或截断;联系号码长度异常(如少于10位)直接标记为无效。
  • 重复记录去重: 同一笔贷款在多个系统重复上报时,以核心系统(如账务系统)为准,保留最新一条记录。
  • 时间一致性校验: 逾期开始日期必须早于当前日期,还款日期不能早于放款日期,否则标记为数据异常并退回上游系统。
避坑提醒: 不要对催收数据做全局均值填充,因为不同逾期阶段的还款行为差异极大。建议按“逾期天数区间”分组后分别填充,避免引入偏差。

3.3 特征工程核心方法

特征工程是将原始数据转化为模型可用变量的过程。催收场景下,以下四类特征工程方法最为常用。

  1. 统计聚合特征: 对历史还款行为按时间窗口(7天、30天、90天)计算均值、最大值、最小值、标准差。例如“过去30天平均还款金额”比单次还款金额更具稳定性。
  2. 比率与趋势特征: 构造“已还金额/应还总额”、“逾期天数变化率”等比率变量,反映还款进度与恶化速度。
  3. 类别编码与交叉特征: 将城市、职业、产品类型等类别变量进行目标编码(Target Encoding),或构造“产品类型×逾期阶段”交叉特征,捕捉组合效应。
  4. 时间衰减特征: 对历史事件(如最近一次还款、最近一次联系)按时间距离赋予指数衰减权重,越近的事件权重越高。
# 示例:时间衰减特征计算(Python伪代码)
import pandas as pd
import numpy as np

def time_decay_feature(df, date_col, value_col, decay_rate=0.1):
    """
    计算时间衰减加权特征
    :param df: 包含日期与数值的DataFrame
    :param date_col: 日期列名
    :param value_col: 数值列名
    :param decay_rate: 衰减速率
    :return: 衰减加权均值
    """
    df['days_diff'] = (pd.Timestamp.now() - df[date_col]).dt.days
    df['weight'] = np.exp(-decay_rate * df['days_diff'])
    decayed_value = (df[value_col] * df['weight']).sum() / df['weight'].sum()
    return decayed_value

3.4 催收数据源与特征工程架构图

下图展示了从多源数据接入到特征变量生成的整体架构,帮助学员理解数据流转与特征加工的全链路。

催收数据源与特征工程架构图 催收数据源与特征工程架构图 还款行为数据 逾期/还款/交易 联系信息数据 手机/地址/联系人 外部征信数据 征信/多头/执行 数据清洗与预处理 缺失值处理 | 异常值识别 | 重复去重 | 时间一致性校验 特征工程加工 统计聚合特征 均值/标准差/极值 比率与趋势特征 还款率/变化率 类别与交叉特征 目标编码/组合 时间衰减特征 指数加权/近因 催收评分模型特征变量集 50~200个经过筛选与验证的预测变量

3.5 特征筛选与变量稳定性评估

生成大量特征后,必须进行筛选与稳定性评估,避免过拟合与跨时间失效。以下为常用筛选方法。

筛选方法 核心指标 筛选标准 适用场景
缺失率过滤 缺失比例 缺失率 > 70% 直接剔除 所有特征初筛
单变量预测力 IV值(信息量) IV < 0.02 剔除;0.02~0.1 弱变量 分类目标变量
相关性分析 Pearson相关系数 |r| > 0.9 保留其一 避免多重共线性
稳定性评估 PSI(群体稳定性指标) PSI > 0.25 需重新开发 跨时间样本外验证
关键原则: 催收评分模型的特征集应保持简洁(通常不超过100个变量),优先选择业务可解释性强、跨时间稳定的特征。避免使用“黑盒”特征导致合规风险。

3.6 变量分箱与证据权重转换

对于逻辑回归等线性模型,连续变量通常需要分箱并转换为证据权重(WOE)形式,以捕捉非线性关系并提升模型稳健性。

# 变量分箱与WOE转换示例(Python伪代码)
import pandas as pd
import numpy as np

def woe_calculation(df, feature, target):
    """
    计算单变量的WOE与IV值
    :param df: 数据集
    :param feature: 特征名称
    :param target: 目标变量(0/1)
    :return: WOE字典与IV值
    """
    grouped = df.groupby(feature)[target].agg(['count', 'sum'])
    grouped['good'] = grouped['count'] - grouped['sum']
    grouped['bad'] = grouped['sum']
    grouped['bad_rate'] = grouped['bad'] / grouped['bad'].sum()
    grouped['good_rate'] = grouped['good'] / grouped['good'].sum()
    grouped['woe'] = np.log(grouped['good_rate'] / grouped['bad_rate'])
    grouped['iv'] = (grouped['good_rate'] - grouped['bad_rate']) * grouped['woe']
    iv_total = grouped['iv'].sum()
    return grouped['woe'].to_dict(), iv_total

分箱时需注意每个箱体的样本量不低于总样本的5%,且坏样本占比呈单调趋势,以保证业务可解释性。

实操建议: 对于树模型(如XGBoost、LightGBM),WOE转换并非必需,但分箱后的变量仍有助于降低过拟合风险。建议在建模初期同时准备原始连续变量与WOE分箱变量,通过交叉验证选择最优方案。