数据清洗中started_at晚于ended_at的负时长异常处理咨询
started_at晚于ended_at且差值近24小时的异常数据标准处理方案 不存在“直接互换字段”或“直接删除”的通用一刀切处理方案,按以下优先级操作即可:
- 第一步先做根因排查,不要上来就修改或删除数据。你遇到的差值刚好接近24小时的场景,基本不是随机录入错误,优先排查两类高频诱因:
- 跨天业务的日期计算错误:比如跨零点的会话、订单、行程记录,系统记录结束时间时没有把日期位+1,或者开始/结束时间混用了不同时区的日期,刚好差整24小时
- ETL流程的字段映射错误:数据抽取环节把两个时间字段的列对应关系写反了
- 有明确校验依据的场景可以直接修正:
拉取异常记录的关联字段交叉验证(比如对应记录的创建时间、操作日志、上下游节点上报时间、业务侧自带的时长统计字段),如果能100%确认异常根因,再做对应修正:- 确认是字段映射错位、两个值写反:直接互换
started_at和ended_at的值,修正后校验时长落在业务合理区间即可留用 - 确认是跨天/时区导致的固定24小时偏移:给对应时间戳加/减24小时匹配真实逻辑即可,不要直接互换字段——我之前处理出行行业行程数据时踩过这个坑,一批跨零点的短行程因为结束日期没跳天,出现近24小时的负时长,一开始差点直接换字段,抽了样本核对轨迹才发现是日期偏移,给结束时间加1天后的时长和实际轨迹时长完全匹配,要是直接换字段会得到20多小时的错误时长,完全偏离真实值
- 确认是字段映射错位、两个值写反:直接互换
- 无明确依据确认根因的场景不要强行修正:
没法定位异常来源时,人为互换字段属于无依据篡改数据,会给后续分析埋更大的隐患,按异常占比选择处理方式:- 异常数据占总样本量比例低于3%:可以直接删除异常行,但是必须在数据清洗文档里明确标注删除规则、删除量级、占比,避免后续分析结论出现偏差
- 异常数据占比高于3%:禁止批量删除,否则会直接导致样本失真。给这批异常数据单独打标记字段(比如
is_time_abnormal = 1),后续分析时做敏感性测试:分别输出剔除异常值、保留异常值的两组结果对比结论差异,同时同步给数据生产端排查系统问题,拿到准确数据后再补全
红线规则:任何情况下都不要在没有业务逻辑校验的前提下,直接默认负时长就是字段写反、批量互换值,这种操作制造的错误数据比异常本身的影响大得多。
内容的提问来源于stack exchange,提问作者Dimitra Nikoloutsou
相关产品推荐
相关产品推荐

