3. 数据基础准备:催收数据字段说明、客户分层标签、历史还款行为数据清洗
催收渠道 A/B 分流策略的落地,高度依赖底层数据的完整性与准确性。本章聚焦于数据基础准备的三个核心环节:字段说明、客户分层标签、历史还款行为数据清洗。只有经过严格清洗与特征工程的数据,才能支撑后续的分流规则与模型训练。
3.1 催收核心数据字段说明
催收系统通常涉及以下五类核心数据字段,它们是构建分流策略的原始素材:
| 字段类别 | 字段名称 | 字段说明 | 示例值 |
|---|---|---|---|
| 客户基础信息 | customer_id | 客户唯一标识 | CUST_20231001_001 |
| 客户基础信息 | age | 年龄(周岁) | 32 |
| 客户基础信息 | occupation | 职业类型编码 | 01(企业职员) |
| 借贷信息 | loan_id | 借据编号 | LN_20230915_888 |
| 借贷信息 | loan_amount | 放款金额(元) | 50000.00 |
| 借贷信息 | product_type | 产品类型(现金贷/消费分期) | cash_loan |
| 逾期信息 | overdue_days | 当前逾期天数 | 15 |
| 逾期信息 | overdue_principal | 逾期本金(元) | 12000.00 |
| 逾期信息 | dpd_bucket | 逾期阶段(M1/M2/M3+) | M1 |
| 历史行为 | last_contact_date | 最近一次联系日期 | 2024-01-10 |
| 历史行为 | contact_count_30d | 近30天催收联系次数 | 5 |
| 历史行为 | promise_pay_count | 历史承诺还款次数 | 2 |
| 历史行为 | promise_breach_count | 历史承诺违约次数 | 1 |
| 外部数据 | credit_score | 外部征信评分 | 650 |
| 外部数据 | contact_risk_tag | 联系人风险标签 | high_risk |
字段治理建议:建议在数仓层统一字段命名规范与枚举值字典,避免因字段口径不一致导致分流策略误判。例如“逾期天数”需明确是自然日还是工作日。
3.2 客户分层标签体系
客户分层是 A/B 分流策略的核心输入。基于风险与价值维度,我们将客户划分为以下五个层级:
- S级(高价值低风险):历史还款记录良好,逾期天数短(≤3天),有稳定收入来源,适合优先使用低成本渠道(如短信、IVR)。
- A级(中等价值中等风险):偶有逾期但能快速还款,逾期天数在4-15天之间,可分配至智能外呼渠道。
- B级(低价值高风险):逾期天数较长(16-30天),历史承诺违约率高,需要人工催收介入。
- C级(高风险失联倾向):逾期超过30天,联系不上或频繁更换联系方式,需启动深度催收或委外渠道。
- D级(欺诈或恶意逃废债):存在明显欺诈特征或恶意逃废债行为,直接进入法务或委外渠道。
分层标签生成逻辑:分层标签并非静态不变,建议每月根据最新还款行为数据动态更新。更新频率过高会导致策略不稳定,过低则无法反映客户最新状态。
3.3 历史还款行为数据清洗
历史还款行为数据是客户分层与分流策略建模的关键输入。原始数据通常存在以下问题,需要系统化清洗:
3.3.1 常见数据质量问题
- 缺失值:如联系次数、承诺还款次数等字段为空。
- 异常值:如逾期天数为负数、还款金额超过放款金额。
- 重复记录:同一借据在相同时间点出现多条记录。
- 逻辑矛盾:如承诺还款日期早于逾期开始日期。
- 格式不一致:日期格式混用(YYYY-MM-DD vs YYYY/MM/DD)。
3.3.2 清洗流程与规则
建议按照以下步骤执行数据清洗:
- 去重:基于 loan_id + 操作时间戳,保留最新一条记录。
- 缺失值处理:数值型字段用中位数填充,类别型字段用众数填充或单独标记为“未知”。
- 异常值过滤:逾期天数限制在 0-180 天之间,超出则标记为异常并人工复核。
- 逻辑校验:承诺还款日期必须 ≥ 逾期开始日期,否则视为无效记录。
- 格式标准化:统一日期格式为 YYYY-MM-DD,金额保留两位小数。
清洗注意事项:清洗规则需要与业务方对齐确认,避免过度清洗导致有效数据丢失。例如,逾期天数为 0 的记录可能是当天到期未还,不应直接删除。
3.4 清洗后的数据质量评估
数据清洗完成后,需要从以下维度评估数据质量,确保可用于分流策略建模:
| 评估维度 | 评估指标 | 合格标准 |
|---|---|---|
| 完整性 | 字段缺失率 | 核心字段缺失率 < 5% |
| 准确性 | 异常值占比 | 异常值占比 < 1% |
| 一致性 | 逻辑矛盾记录数 | 逻辑矛盾记录 = 0 |
| 唯一性 | 重复记录占比 | 重复记录占比 < 0.5% |
| 时效性 | 数据延迟时间 | 数据延迟 < 24小时 |
数据清洗脚本示例(Python):
import pandas as pd
import numpy as np
# 加载原始数据
df = pd.read_csv('repayment_history.csv')
# 步骤1:去重
df = df.drop_duplicates(subset=['loan_id', 'operation_time'], keep='last')
# 步骤2:缺失值处理
df['contact_count_30d'].fillna(df['contact_count_30d'].median(), inplace=True)
df['promise_pay_count'].fillna(0, inplace=True)
# 步骤3:异常值过滤
df = df[(df['overdue_days'] >= 0) & (df['overdue_days'] <= 180)]
# 步骤4:逻辑校验
df = df[df['promise_date'] >= df['overdue_start_date']]
# 步骤5:格式标准化
df['operation_time'] = pd.to_datetime(df['operation_time']).dt.strftime('%Y-%m-%d')
print(f"清洗后数据量:{len(df)} 条")
print(f"缺失率:{df.isnull().sum().sum() / len(df):.2%}")
完成数据清洗与质量评估后,即可进入下一阶段——基于清洗后的数据构建客户分层标签,并设计 A/B 分流策略规则。数据基础准备的扎实程度,直接决定分流策略的最终效果。