结论取决于重复触发发生在数据链路哪一层:如果只是广告后台的归因窗口把同一次点击算进两个转化,先冻结原始回传、不要改写历史;如果重复来自落地页或订单系统的真实重复提交,则要在源头去重并单独留一份修复前快照。两种做法不能混用,否则后续对账会失去可比性。
归因重复的典型证据是:同一订单号或同一用户标识在广告平台出现两条转化记录,但业务库里只有一条成功订单。业务重复的证据相反,业务库本身出现两条订单或两条提交,广告平台只是如实接收。判断动作是拉一份含时间戳、订单号、用户标识的原始回传日志,与业务库做左连接。若业务库唯一而平台重复,属于归因层;若两边都重复,属于业务层。这个区分决定你该修回传参数还是修表单与接口。
适合业务重复已经污染了历史数据、且你需要向下游解释差异的场景。做法是:把修复前所有重复记录导出为只读快照,标注导出时间和判定依据;修复上线后,新产生的记录写入新序列,不覆盖旧快照。代价是短期内报表会出现两个口径,需要人工说明哪一份用于结算、哪一份用于趋势观察。好处是任何时候都能回答“这条记录当时为什么被算进去”。
适合重复量小、且业务系统支持幂等键的场景。动作是给提交接口加唯一键,重复请求直接返回已存在结果,同时在记录上打一个修正标记,保留第一次的时间戳。代价是如果唯一键选错,会把两次真实转化误判为一次。判断依据是:同一用户在同一短时间窗内提交两次、但商品或金额不同,通常不是重复,不能简单合并。此时应保留两条,只在广告回传侧做去重。
假设你为了清理重复,直接把广告平台的转化回传全部暂停三天,再重新开启。表面上重复消失了,但暂停期间的真实转化也不会被回传,后续再归因时会把这段空白误读为效果下降。这个动作的问题在于把“停止记录”当成了“修复记录”。只要你的判断依据是回传量归零,就不能证明去重逻辑正确,因为归零还可能来自回传中断、参数失效或平台侧未接收。此时正确顺序是先保留暂停前后的两份日志,再对比同一批订单号在两侧的出现情况。
在动手前,用一段可执行规则固定下来:同一订单号在业务库唯一、在广告侧出现两条,标记为归因重复;业务库出现两条且金额相同、时间间隔小于你设定的窗口,标记为疑似业务重复;金额或商品不同则标记为独立转化。把这段规则写成脚本或查询,跑一遍历史数据,输出三类计数。若归因重复占多数,优先调整回传参数与去重键;若业务重复占多数,优先修表单与接口。修复上线后,保留修复前快照至少一个完整对账周期,并在报表中并列展示两个口径,直到你能解释每一次差异的来源,再决定是否合并口径。