续期数据基础:核心字段、清洗与质量监控
做续期策略,第一关不是模型,不是算法,而是数据。我见过太多团队,模型跑得飞起,结果上线一看,宽限期字段是空的,缴费日格式乱成一锅粥。说白了,数据基础不牢,后面全是空中楼阁。
这一章,我们就来聊聊续期数据的三个核心问题:该拿哪些字段、怎么把脏数据洗干净、如何保证数据一直干净。
续期数据的核心字段
续期业务涉及的数据表通常有几十个字段,但真正关键的,其实就那么几个。我个人习惯把它们分成三类:保单标识、时间节点、产品属性。
| 分类 | 字段名 | 说明 | 常见问题 |
|---|---|---|---|
| 保单标识 | 保单号 | 唯一标识一张保单 | 存在重复、前后空格、大小写不一致 |
| 保单标识 | 投保人ID | 关联客户信息 | 空值、格式不统一 |
| 时间节点 | 缴费日 | 本期应缴费日期 | 日期格式混乱、逻辑错误(早于生效日) |
| 时间节点 | 宽限期截止日 | 最晚可缴费日期 | 计算错误、未更新 |
| 时间节点 | 保单生效日 | 合同起始日期 | 与缴费日逻辑矛盾 |
| 产品属性 | 险种代码 | 产品唯一编码 | 编码规则不统一、新旧版本混用 |
| 产品属性 | 缴费方式 | 年缴/月缴/季缴 | 枚举值不规范 |
| 产品属性 | 缴费年期 | 总缴费年限 | 与已缴年期逻辑冲突 |
我的经验: 保单号这个字段,看着简单,坑最多。我曾经接手一个项目,两套系统的保单号规则不同,一套是纯数字,一套是字母+数字。合并时没做归一化,结果同一个客户在两张表里被识别成两个人。所以,我建议一开始就定好统一的保单号编码规范。
数据清洗与预处理
拿到原始数据后,别急着建模。先花 30% 的时间做清洗,后面能省 70% 的麻烦。我一般按下面几步走:
第一步:缺失值处理
续期数据里,缺失值最常见的是宽限期截止日和缴费方式。为什么会这样?因为很多老系统的宽限期是写死在代码里的,没有落库。
我的处理原则:
- 关键时间字段缺失:根据险种和生效日推算。比如宽限期,大部分产品是 60 天,少数是 30 天。我会建一个宽限期规则表,按险种映射。
- 缴费方式缺失:看历史缴费记录。如果之前都是年缴,那大概率还是年缴。
- 投保人ID缺失:这属于严重数据质量问题,必须标记并反馈给上游系统。
第二步:格式标准化
日期格式是重灾区。有的系统用 2024-01-15,有的用 2024/01/15,还有用 20240115 的。我习惯统一转为 YYYY-MM-DD 字符串,同时校验合法性。
-- 一个简单的日期清洗示例(SQL)
UPDATE policy_table
SET due_date = STR_TO_DATE(due_date_raw, '%Y%m%d')
WHERE due_date_raw REGEXP '^[0-9]{8}$';
-- 标记非法日期
UPDATE policy_table
SET data_quality_flag = 'INVALID_DATE'
WHERE due_date IS NULL AND due_date_raw IS NOT NULL;
第三步:逻辑校验
字段之间是有约束关系的。我常用的校验规则:
- 缴费日不能早于保单生效日
- 宽限期截止日 = 缴费日 + 宽限期天数
- 已缴年期不能大于缴费年期
- 险种代码必须在产品目录中存在
避坑指南: 我曾经遇到一个案例,某产品的宽限期在合同里写的是 60 天,但系统里配成了 30 天。结果大量保单在 30 天后被标记为失效,引发大量投诉。所以,逻辑校验不仅要检查字段本身,还要跟合同条款做交叉验证。
数据质量监控体系
清洗是一次性的,监控才是长期的。我建议搭建一个三层监控体系,覆盖从数据产生到使用的全链路。
核心思路: 不是出了问题再查,而是让问题在萌芽阶段就被发现。
第一层:源端监控
在核心系统(保单系统、收付费系统)出口处做校验。比如:
- 每日新增保单的字段完整率
- 缴费日期的格式正确率
- 险种代码的合法率
第二层:加工层监控
在数据仓库或数据中台里,对清洗后的数据做质量检查。比如:
- 宽限期截止日与缴费日的差值分布是否合理
- 同一保单号在不同表中的记录数是否一致
- 关键字段的空值率是否超过阈值(比如 1%)
第三层:应用层监控
在续期策略系统里,对最终使用的数据做实时校验。比如:
- 跑批前检查当日待缴费保单的数据质量
- 如果某险种的宽限期字段空值率突然升高,自动告警并暂停策略执行
下面这张图,是我自己项目里用的数据质量监控框架,你可以参考一下:
监控指标与阈值
指标不能拍脑袋定。我一般先跑一个月的历史数据,看正常波动范围,然后取 P95 或 P99 作为告警阈值。下面是一些常用指标:
| 监控指标 | 计算方式 | 建议阈值 | 告警级别 |
|---|---|---|---|
| 字段完整率 | 非空记录数 / 总记录数 | ≥ 99.5% | P0(严重) |
| 格式正确率 | 格式合法记录数 / 总记录数 | ≥ 99.9% | P0(严重) |
| 逻辑一致率 | 通过逻辑校验的记录数 / 总记录数 | ≥ 99.8% | P1(重要) |
| 跨表一致率 | 两表匹配记录数 / 主表记录数 | ≥ 99.5% | P1(重要) |
| 空值率变化 | 当日空值率 - 前7日均值 | ≤ 0.5% | P2(一般) |
一个小技巧: 告警级别别设太多,三级就够了。P0 是数据不能用,必须立刻停掉所有下游任务;P1 是数据有问题,但可以继续跑,需要人工排查;P2 是数据有波动,记录下来观察趋势。我以前见过有人设了五级告警,结果运维根本分不清优先级,最后全都不看了。
嗯,数据基础这块,说到底就是三个字:清、准、稳。字段要清,数据要准,监控要稳。把这三点做到位,后面的续期策略才能站得住脚。