3. 数据采集与清洗:催收系统数据源与质量治理

催收触达优化的起点是高质量、全链路的数据。本章聚焦于催收系统数据源的采集范围、数据质量检查方法、缺失值处理策略以及异常值检测与修复技术。只有经过严格清洗的数据,才能为后续特征工程提供可靠基础。

3.1 催收系统数据源全景(贷前/贷中/贷后)

催收特征工程所需的数据横跨信贷全生命周期。根据数据产生的时间节点和业务归属,可划分为三大数据域:

数据域 典型数据源 关键字段示例 采集频率
贷前数据 申请系统、征信报告、反欺诈平台 申请人基本信息、收入负债比、征信查询次数、多头借贷数 申请时点一次性采集
贷中数据 账务系统、交易流水、行为监控 还款记录、额度使用率、消费行为标签、设备指纹 每日/实时增量同步
贷后数据 催收系统、通话记录、短信平台、外访系统 逾期天数、承诺还款金额、接通率、失联状态、投诉记录 每日批量 + 实时事件
实战要点:贷前数据是静态画像,贷中数据反映实时行为,贷后数据是催收策略的直接反馈。三者必须通过统一的 loan_id 和 user_id 进行关联,否则特征工程将出现严重的数据断层。

下图展示了催收数据源在信贷全生命周期中的位置与流转关系:

催收数据源全生命周期流转图 催收数据源全生命周期流转图 贷前数据源 申请系统 · 征信 · 反欺诈 贷中数据源 账务 · 交易 · 行为监控 贷后数据源 催收系统 · 通话 · 外访 统一特征存储(宽表) loan_id + user_id 关联 说明:贷前、贷中、贷后数据通过统一主键汇聚到特征宽表,是催收触达优化的数据基石

3.2 数据质量检查

数据质量是特征工程的生命线。在催收场景中,数据质量问题通常表现为以下四类:

  • 完整性缺失:关键字段(如逾期天数、联系电话)存在空值,导致策略无法执行。
  • 准确性偏差:字段值超出合理范围(如逾期天数为 -5 天),或与业务逻辑矛盾。
  • 一致性冲突:同一笔贷款在账务系统和催收系统中的逾期天数不一致。
  • 时效性滞后:贷后催收记录未及时同步,导致特征滞后于当前状态。
质量检查清单(每日必检):
  1. 检查 loan_id 主键唯一性,去重后记录数是否与账务系统一致。
  2. 检查数值字段(如逾期本金、逾期天数)的分布范围,识别负值或异常大值。
  3. 检查类别字段(如催收阶段、案件状态)的取值是否在枚举范围内。
  4. 检查时间字段(如最后还款日、最后催收时间)是否在合理时间窗口内。
  5. 检查跨系统关联字段(如 user_id)的匹配率,低于 95% 需告警。

3.3 缺失值处理

催收数据中的缺失值处理需要结合业务含义,不能简单使用统计填充。以下是针对不同字段类型的处理策略:

字段类型 典型字段 缺失含义 推荐处理方式
数值型(连续) 收入、负债总额 用户未提供或系统未采集 中位数填充 / 模型预测填充 / 单独标记缺失指示变量
数值型(离散) 历史催收次数、承诺还款次数 无历史行为 填充为 0,并增加 has_history 标记
类别型 职业类型、居住城市 信息缺失 填充为 "未知" 类别,保留缺失信息
时间型 最后联系时间、承诺还款日期 从未联系或无承诺 填充为默认值(如 1970-01-01)或空值标记
文本型 催收备注、通话摘要 未记录 填充为空字符串,并增加 has_note 标记
避坑指南:不要对催收场景中的“缺失”做无脑均值填充。例如,承诺还款金额 缺失意味着用户从未做出承诺,填充为均值会严重扭曲模型对“承诺行为”的识别能力。建议优先使用 缺失指示变量 配合业务含义填充。

3.4 异常值检测与处理

催收数据中的异常值通常由系统故障、数据录入错误或极端业务场景引起。常用的检测方法包括:

  • 统计阈值法:基于 3σ 原则或 IQR(四分位距)识别离群点。
  • 业务规则法:根据业务常识设定硬性阈值(如逾期天数不能超过合同期限)。
  • 聚类检测法:使用 DBSCAN 或孤立森林识别异常模式。
  • 时序异常检测:针对时间序列字段(如每日通话次数),检测突增或突降。

下图展示了异常值检测与处理的完整流程:

异常值检测与处理流程图 异常值检测与处理流程图 原始数据输入 统计阈值法 业务规则法 聚类/时序检测 异常值标记与分类 截断 / 替换 单独建模 / 标记 剔除 / 人工审核

处理异常值时,建议遵循以下优先级:

  1. 业务规则优先:凡是违反业务常识的异常值(如逾期天数 < 0),直接修正或剔除。
  2. 统计方法辅助:对无明显业务边界的字段,使用 IQR 或 3σ 识别离群点。
  3. 保留异常信息:对于无法确认是否错误的异常值,可增加 is_outlier 标记,让模型自行学习其影响。
  4. 记录清洗日志:每次清洗操作必须记录原始值、清洗规则、清洗后值,便于回溯审计。
代码示例:异常值检测与标记(Python 伪代码)
import pandas as pd
import numpy as np

def detect_outliers_iqr(df, column, multiplier=1.5):
    Q1 = df[column].quantile(0.25)
    Q3 = df[column].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - multiplier * IQR
    upper_bound = Q3 + multiplier * IQR
    return (df[column] < lower_bound) | (df[column] > upper_bound)

# 应用示例:对逾期天数进行异常检测
df['overdue_days_outlier'] = detect_outliers_iqr(df, 'overdue_days')

# 业务规则:逾期天数不能为负
df.loc[df['overdue_days'] < 0, 'overdue_days'] = 0
df.loc[df['overdue_days'] < 0, 'overdue_days_corrected'] = True

通过系统化的数据采集与清洗,催收特征工程才能建立在可靠的数据基础之上。下一阶段将基于清洗后的数据,进行特征构建与衍生。