2. 催收数据基础:数据来源与ETL

催收模型的效果高度依赖底层数据的广度、深度与质量。本章系统梳理催收数据的三大来源体系,并介绍数据仓库与ETL的核心概念,为后续特征工程打下坚实基础。

2.1 催收数据来源全景

催收数据按来源可分为内部系统、外部征信与三方数据三大类。下表从数据内容、更新频率、获取成本三个维度进行对比:

数据来源 典型数据内容 更新频率 获取成本 核心用途
内部系统 客户基本信息、账户信息、还款记录、历史催收记录、通话录音 实时/每日 低(自有) 基础画像、行为特征、催收策略
外部征信 央行征信报告、百行征信、朴道征信等 每月/按需 中 信用评分、多头借贷、逾期历史
三方数据 运营商数据、电商数据、社保公积金、黑名单、设备指纹 实时/每日 高(按调用量计费) 失联修复、反欺诈、还款能力评估

2.2 内部系统数据详解

内部系统是催收建模最核心、最可控的数据源,通常包含以下关键模块:

  • 核心账务系统: 合同金额、已还金额、剩余本金、逾期天数、逾期期数、罚息金额等。
  • 客户关系管理(CRM): 客户姓名、身份证号、手机号、家庭地址、工作单位、联系人信息。
  • 催收作业系统: 催收员分配记录、催收动作(电话、短信、信函)、催收结果(承诺还款、无效、失联)、通话时长与频次。
  • 行为日志: 客户登录APP频次、浏览页面、点击行为、还款操作时间戳。
实战要点: 内部数据虽然成本低,但常存在字段缺失、格式不统一、历史数据迁移错误等问题。建模前必须进行严格的数据质量探查(Data Profiling)。

2.3 外部征信与三方数据

外部数据主要用于补充内部数据无法覆盖的信息维度,尤其在失联修复和反欺诈场景中不可或缺。

2.3.1 外部征信数据

  • 央行征信: 包含个人信贷记录、公共记录(欠税、民事判决)、查询记录。更新周期通常为T+1月。
  • 百行/朴道征信: 覆盖互联网信贷、消费金融等新兴业态,数据维度更广,更新频率更高。

2.3.2 三方数据

  • 运营商数据: 通话时长、通话频次、联系人数量、在网时长、流量使用情况。常用于失联修复和稳定性评估。
  • 电商/支付数据: 消费金额、消费频次、消费类别、收货地址稳定性。用于评估还款能力和消费习惯。
  • 黑名单/反欺诈数据: 法院失信被执行人、网贷黑名单、设备指纹关联风险。
合规风险提示: 外部数据采集必须遵循《个人信息保护法》和《征信业管理条例》。严禁非法获取、买卖个人敏感信息。三方数据调用需获得用户明确授权,并确保数据脱敏处理。

2.4 数据仓库与ETL基础

原始数据分散在多个异构系统中,无法直接用于建模。数据仓库(Data Warehouse)与ETL(Extract, Transform, Load)是解决这一问题的核心基础设施。

2.4.1 数据仓库分层架构

催收数据仓库通常采用分层设计,以提升数据复用性和管理效率:

  • ODS(操作数据存储层): 从源系统直接抽取的原始数据,保持与源系统一致,不做任何清洗。
  • DWD(明细数据层): 对ODS数据进行清洗、去重、格式标准化,形成统一的明细数据。
  • DWS(汇总数据层): 按客户、账户、时间等维度进行轻度汇总,如客户月度还款汇总、催收员月度绩效。
  • ADS(应用数据层): 面向具体业务场景(如催收模型训练)生成的特征宽表,直接供建模使用。
催收数据仓库分层架构 催收数据仓库分层架构 数据源层:内部系统 / 外部征信 / 三方数据 ODS 操作数据存储层(原始数据镜像) DWD 明细数据层(清洗、去重、标准化) DWS 汇总数据层(轻度汇总、宽表) ADS 应用数据层(模型特征宽表)

2.4.2 ETL核心流程

ETL是数据从源系统进入数据仓库的完整过程,每个环节都有特定的技术要点:

阶段 核心任务 常见技术/工具 催收场景典型问题
Extract(抽取) 从源系统读取数据,支持全量/增量抽取 Sqoop、DataX、Kafka Connect 源系统接口不稳定、增量字段缺失
Transform(转换) 数据清洗、字段映射、格式转换、衍生计算 Spark SQL、Hive、Python Pandas 手机号格式不统一、身份证号校验、逾期天数计算逻辑
Load(加载) 将转换后的数据写入目标数据仓库表 Hive、ClickHouse、MySQL 数据倾斜、分区策略不合理导致加载缓慢

2.4.3 催收ETL实战示例

以下是一个典型的催收ETL脚本片段(使用Spark SQL),用于将原始催收记录转换为建模可用的特征宽表:

-- 1. 从ODS层抽取原始催收记录
CREATE TEMP VIEW raw_collection AS
SELECT 
    account_id,
    collector_id,
    call_time,
    call_duration_sec,
    call_result,
    promise_amount,
    promise_date
FROM ods.collection_records
WHERE dt = '${biz_date}';

-- 2. 数据清洗与转换
CREATE TEMP VIEW cleaned_collection AS
SELECT 
    account_id,
    collector_id,
    call_time,
    -- 过滤异常通话时长(小于5秒视为无效)
    CASE WHEN call_duration_sec < 5 THEN 0 ELSE call_duration_sec END AS valid_duration,
    -- 标准化催收结果
    CASE 
        WHEN call_result IN ('承诺还款', '部分承诺') THEN 'promise'
        WHEN call_result IN ('无人接听', '关机', '停机') THEN 'unreachable'
        ELSE 'other'
    END AS result_category,
    -- 承诺金额空值填充为0
    NVL(promise_amount, 0) AS promise_amount,
    promise_date
FROM raw_collection;

-- 3. 按账户汇总生成特征
INSERT OVERWRITE TABLE ads.account_collection_features PARTITION(dt = '${biz_date}')
SELECT 
    account_id,
    COUNT(*) AS total_calls,
    SUM(valid_duration) AS total_valid_duration,
    AVG(valid_duration) AS avg_call_duration,
    SUM(CASE WHEN result_category = 'promise' THEN 1 ELSE 0 END) AS promise_count,
    SUM(promise_amount) AS total_promise_amount,
    MAX(promise_date) AS last_promise_date
FROM cleaned_collection
GROUP BY account_id;
关键设计原则: 催收ETL脚本必须考虑数据回溯能力。当模型上线后发现特征计算逻辑有误时,需要能够重新跑历史日期的ETL任务,生成修正后的特征数据,避免模型重训时数据不一致。

2.5 数据质量与治理

数据质量是催收模型的生命线。以下是在数据接入阶段必须关注的几个核心维度:

  • 完整性: 关键字段(如逾期天数、手机号)缺失率是否超过阈值?缺失值如何处理?
  • 准确性: 数据是否与源系统一致?是否存在逻辑矛盾(如逾期天数大于0但还款金额也为0)?
  • 一致性: 不同系统间的同一字段(如客户ID)是否能够关联?编码规则是否统一?
  • 时效性: 数据从产生到进入数据仓库的延迟是否满足建模要求?实时场景需要秒级延迟,离线场景可接受T+1。
催收数据质量治理流程 催收数据质量治理流程 数据探查 缺失率/分布/异常值 规则定义 完整性/准确性/一致性 清洗转换 填充/修正/标准化 质量监控 告警/日志/回溯 持续反馈与规则迭代

2.6 本章小结

催收数据来源的多样性和复杂性决定了数据基建的重要性。内部系统提供基础画像与行为数据,外部征信与三方数据补充信用与风险维度。数据仓库的分层架构(ODS→DWD→DWS→ADS)与ETL流程是数据从原始状态转化为可用特征的关键路径。在实际项目中,建议优先夯实内部数据质量,再逐步引入外部数据,并建立完善的数据质量监控体系,确保模型训练数据的可靠性与一致性。