先给结论:不要一边修一边覆盖原记录。把重复触发当成一次数据事故来处理,修复前后各留一份可对照的原始事件,才能判断重复是来自页面重复上报、回传接口重试,还是同一用户多入口归因。是否保留全部重复记录,取决于你能否区分“同一事件的重复上报”和“两次真实发生的转化”——这两者在日志里长得很像,但处理方式相反。
修复前先做一次分流。把可疑时段的事件按用户标识、时间戳、事件名、来源参数四个字段拉出来,看同一用户在同一秒或相邻几秒内是否出现多条同事件记录。
假设一个样本:某表单提交事件在十分钟内对同一用户产生了三条记录,时间戳相差不到两秒,来源参数完全相同。这更像页面重复上报,而不是用户提交了三次。但如果三条记录分别来自手机和桌面、点击标识不同,就不能按重复处理。这个判断直接决定下一步是删记录还是改逻辑。
确认是上报冗余后,第一步不是删数据,而是把修复前的原始事件导出并单独存放,保留完整字段和接收时间。这份冻结记录是后续对账的基准,不能因为“看起来是脏数据”就提前清理。
第二步再改触发逻辑。常见做法是加去重键:把用户标识、事件名、时间窗口组合成一个键,同一键在窗口内只接受第一条或最后一条。选择保留第一条还是最后一条,取决于你的业务口径——如果以首次完成为准,保留第一条;如果以最终状态为准,保留最后一条。这个选择要在修复记录里写明,否则后续对账时无法解释数字差异。
第三步是记录修复动作本身:修改了什么、何时生效、影响了哪个时间段。这样修复后的数据才能和冻结记录分段对照,而不是混在一起看。
条件一:重复只发生在个别样本,规模化后没有扩散。此时优先保留修复前的全部原始记录,只在上报层加去重,不改历史数据。理由是样本量小,人工核对成本可控,保留原始记录能防止误删真实转化。
条件二:重复在规模化后出现例外,比如某些浏览器、某些回传通道或某些投放位置持续产生重复。此时除了加去重,还要按通道分别统计重复率,并对受影响时段做标记。不能直接把所有重复记录删掉,因为不同通道的重复原因不同,统一处理会掩盖问题来源。
一个实际动作:在修复上线后,取修复前后各一段等长时间的数据,对比事件总数和去重后事件数。如果修复后总数下降但去重后数量稳定,说明去重生效;如果去重后数量也下降,说明可能有真实转化被误判为重复,需要回查冻结记录。这个对比结果决定下一步是扩大去重窗口还是回滚逻辑。
个别样本成立的处理方式,不一定适合规模化场景。样本阶段可以人工逐条核对,规模化后必须靠规则和监控。样本阶段可以接受短暂的数据波动,规模化后波动会直接影响出价和预算判断。
另外,重复触发的原因可能不在你的页面上。回传接口重试、第三方统计工具重复加载、同一用户多标签页操作,都会产生类似记录。修复前先确认重复发生在哪一层,否则改错地方只会让问题换个形式出现。
最后,修复前后记录要分开存放,但不必永久保留全部原始重复记录。保留期限取决于你的对账周期和合规要求。关键是:在确认修复生效并完成一次完整对账之前,不要删除冻结记录。