先给结论:不要只保留一份“干净”的转化日志,也不要让修复前的重复数据直接覆盖原始记录。更稳妥的做法是把修复前记录冻结存档,修复后另建一套可对照的转化口径,并在报表中明确哪一套用于出价、哪一套用于对账。这样做的代价是短期报表会显得更复杂,但能避免修复动作本身把问题证据一起抹掉。
重复触发通常有两个来源,处理方式完全不同。第一种是页面或应用端的事件重复发送,例如同一次提交被按钮连点、页面回退重放或容器规则重复命中触发两次。第二种是回传或导入环节的重复,例如同一批离线转化被多次上传,或服务端与浏览器端同时上报同一动作。前者属于采集层问题,后者属于传输层问题。判断依据是看重复记录的时间戳和标识:如果两条记录几乎同时出现、标识相同,多半是采集层;如果两条记录相隔较久、来自不同批次,多半是传输层。
这个区分决定了你要不要动历史数据。采集层的重复往往集中在某个时间窗内,适合按时间范围隔离;传输层的重复可能持续数周,适合按批次或来源隔离。如果跳过这一步直接去重,你很可能把本来正常的两次独立转化也合并掉,反而制造新的数据缺口。
适用条件是重复触发已经影响到出价或预算判断,同时你还需要向业务方解释历史数字。具体动作是:在修复前导出一次完整转化明细,包含时间戳、转化动作名称、来源标识和去重键,存为只读文件;修复后再建立一套新的转化动作或新的报表视图,只统计修复之后的数据。两套口径并行一段时间,直到新口径稳定。
代价是短期内两个报表数字不一致,需要有人解释差异。好处是修复前后的证据链完整,后续如果发现修复方案本身有误,还能回到原始记录重新判断。这个动作会直接影响下一步:当你确认新口径连续稳定后,才考虑把旧口径降为仅存档,而不是立刻删除。
适用条件是重复量很小、影响窗口很短,且业务方只关心去重后的最终数字,不需要追溯单条记录。具体动作是保留原转化动作,通过去重键或时间窗规则过滤重复,不新建动作。代价是原始重复记录被过滤后不可见,一旦去重规则设错,你很难发现被误删的是真实转化。
因此这种做法需要额外留一份过滤规则的说明和过滤前后的计数对照。如果过滤前后计数差异无法解释,就说明去重规则可能过宽,应退回做法一。
假设某账户在三天内出现同一表单动作被重复上报,每天原始计数约为实际提交量的两倍。若选择冻结原始记录,你会得到修复前三天的高计数、修复后正常计数,以及一份说明差异原因的备注。若选择直接去重,你会得到一条平滑曲线,但无法回答“这三天里有多少是重复、有多少是真实新增”。在前一种情况下,下一步是核对新口径是否稳定;在后一种情况下,下一步只能靠外部线索(如销售收到的线索数)反推,证据强度更弱。
需要提醒的是,转化计数下降或某项统计归零,并不能单独证明修复正确。它也可能是跟踪代码未触发、归因窗口变化或用户行为变化造成的。要排除这些解释,至少需要同时对照原始明细、修复动作记录和独立来源的线索数量。
当修复后口径连续稳定,且你能用原始存档解释修复前后的差异时,才考虑把旧口径降为存档、日常只看新口径。如果差异始终无法解释,就不要合并,继续并行,并把未解释的差异标注出来。对账用的口径和出价用的口径可以不同,但必须写清楚各自用途,否则后续优化会建立在混用的数据上。
把修复前记录冻结、修复后口径独立,再配合一份能解释差异的说明,是这类问题里代价可控且可回退的选择。