3. 数据采集:催收系统数据源梳理
催收触达 A/B 测试的特征工程,其质量上限由原始数据源的完整性与准确性决定。本章系统梳理催收系统核心数据源,覆盖通话记录、短信记录、还款行为、客户画像四大关键域,并明确每个域中可用于特征构造的关键字段。
3.1 数据源全景架构
催收数据源通常分布在多个业务系统中,包括外呼平台、短信网关、核心账务系统、客户关系管理(CRM)系统以及第三方数据服务。下图展示了数据源之间的逻辑关系与采集流向。
实践建议:在搭建数据管道时,优先保证通话记录与还款行为两个数据源的实时性(延迟 < 5 分钟),因为这两个域的特征对触达策略的即时调整最为敏感。短信记录与客户画像可接受 T+1 更新。
3.2 通话记录关键字段
通话记录是催收触达最核心的数据源,直接反映催收员与客户的交互过程。以下字段是构造 A/B 测试特征的基础。
| 字段名称 | 数据类型 | 说明 | 特征构造示例 |
|---|---|---|---|
call_id |
string | 通话唯一标识 | — |
case_id |
string | 案件编号,关联客户 | 案件维度聚合 |
call_start_time |
datetime | 通话开始时间 | 时段特征(早/中/晚) |
call_duration |
int (秒) | 通话时长 | 平均时长、极值、趋势 |
call_result |
string | 通话结果码(接通/未接/拒接/空号等) | 接通率、拒接率 |
agent_id |
string | 催收员编号 | 催收员效能特征 |
call_direction |
string | 外呼/呼入 | 外呼占比 |
ivr_path |
string | IVR 按键路径 | 客户主动交互意图 |
recording_url |
string | 录音文件地址 | NLP 语义特征(可选) |
关键指标:在 A/B 测试中,
call_result 字段的标准化编码至关重要。建议将结果码映射为三级分类:有效触达(接通且对话 > 30 秒)、无效触达(接通但无人应答/挂断)、未触达(未接/拒接/空号)。此映射直接影响触达率指标的计算。
3.3 短信记录关键字段
短信触达具有成本低、可批量发送的特点,在 A/B 测试中常用于对比不同文案或发送时点的效果。
| 字段名称 | 数据类型 | 说明 | 特征构造示例 |
|---|---|---|---|
sms_id |
string | 短信唯一标识 | — |
case_id |
string | 案件编号 | 案件维度聚合 |
send_time |
datetime | 发送时间 | 发送时段、发送间隔 |
sms_template_id |
string | 短信模板编号 | 模板类型特征 |
delivery_status |
string | 送达状态(成功/失败/未知) | 送达率 |
click_url |
string | 短链点击地址(如有) | 点击率、点击时间 |
reply_content |
string | 客户回复内容 | 回复率、关键词匹配 |
注意:短信送达状态字段在不同网关中定义不一致。例如,部分网关将“发送成功”定义为提交到运营商,而非客户手机实际接收。在特征工程中,建议额外计算“有效送达率”(运营商回执为 DELIVERED 的比例),避免指标虚高。
3.4 还款行为关键字段
还款行为是衡量催收效果的最终标尺,也是 A/B 测试中核心的因变量数据源。
| 字段名称 | 数据类型 | 说明 | 特征构造示例 |
|---|---|---|---|
payment_id |
string | 还款交易唯一标识 | — |
case_id |
string | 案件编号 | 案件维度聚合 |
payment_time |
datetime | 还款时间 | 还款时段、响应速度 |
payment_amount |
decimal | 还款金额 | 还款比例、部分还款次数 |
payment_channel |
string | 还款渠道(APP/网银/柜台等) | 渠道偏好特征 |
overdue_days |
int | 逾期天数(还款时) | 逾期阶段特征 |
promise_to_pay |
boolean | 是否在催收中承诺还款 | 承诺履约率 |
3.5 客户画像关键字段
客户画像数据为 A/B 测试提供分层与随机化的基础,同时也可作为协变量纳入效果评估模型。
| 字段名称 | 数据类型 | 说明 | 特征构造示例 |
|---|---|---|---|
customer_id |
string | 客户唯一标识 | — |
age |
int | 年龄 | 年龄分段 |
gender |
string | 性别 | 性别哑变量 |
credit_score |
int | 征信评分 | 信用等级 |
product_type |
string | 贷款产品类型 | 产品类别特征 |
loan_amount |
decimal | 贷款金额 | 金额分段 |
city_level |
string | 城市等级(一线/二线/三线等) | 地域特征 |
contact_count |
int | 联系人数量 | 社交关系强度 |
past_due_history |
int | 历史逾期次数 | 逾期惯性特征 |
3.6 数据源字段映射与对齐
在实际采集过程中,不同系统对同一业务概念的字段命名与格式可能不一致。下图展示了字段映射与对齐的标准流程。
最佳实践:建议在数据采集层建立统一的字段映射字典(YAML 或 JSON 格式),包含源字段、目标字段、转换规则、默认值四列。每次新增数据源或修改字段定义时,只需更新字典文件,避免在 ETL 代码中硬编码映射逻辑。
3.7 数据质量检查清单
在进入特征构造之前,必须对采集到的原始数据执行以下质量检查,确保 A/B 测试的结论可信。
- 完整性检查:每个案件在实验周期内是否都有对应的通话记录、短信记录和还款记录?缺失比例超过 5% 的数据源需标记并评估影响。
- 一致性检查:同一案件在不同数据源中的
case_id是否完全匹配?时间戳是否存在跨时区问题? - 时效性检查:数据延迟是否在可接受范围内?例如,通话记录延迟超过 1 小时可能影响实时特征计算。
- 异常值检查:通话时长是否为负数?还款金额是否超过贷款本金?短信发送时间是否在未来?
- 重复记录检查:是否存在重复的
call_id或payment_id?重复记录需按业务规则去重(通常保留最早或最晚的一条)。
常见陷阱:部分催收系统会将“外呼未接通”记录为一条通话记录,但时长为 0。在特征构造时,如果直接计算平均通话时长,这些 0 值会严重拉低均值。建议在聚合前先按
call_result 过滤,分别计算“接通通话”与“全部通话”的统计量。