跳到正文

更多文章

数据周刊|BigQuery 开始回流数据库,AI 问数也终于能看 token 账单 上游只改 1 个字段,17 张报表一起报错:先查哪 3 层依赖 财务月结后订单金额少了 12 万:分析师用 5 张对账表定位差异 仓库说缺货,系统却显示还有 800 件:零售分析师先核对哪 4 个库存时间点 供应商文件每天准时到,3 个字段却悄悄变了:数据分析师用 9 条门槛验收外部数据
一位顾客在三套系统里变成 5 个人,复购率为什么越算越低?

周三上午,零售分析师把新看板投到会议室的大屏上。

会员数涨了,订单数也没少,复购率却从上个月开始一路往下走。

运营负责人盯着折线看了半分钟,问:“最近来的顾客,怎么都只买一次?”

分析师没有马上回答。他刚查完一位投诉顾客:订单系统里是手机号 A,小程序里是一个 OpenID,门店会员系统保留着旧手机号 B,客服系统又按设备号建过两条访客记录。三套系统摊开以后,同一个人安安静静地坐在那里,却有 5 个客户 ID。

这位顾客过去半年买了 3 次。

在人看来,她显然是复购顾客;在看板看来,可能只是 5 个互不相识的新人。

复购率变低,不一定是顾客没回来

复购率常见的一种算法,是:

购买两次及以上的客户数 ÷ 购买客户总数

公式很简单,难处藏在“客户”两个字里。

假设一位顾客买了 3 次。三笔订单都挂在同一个稳定身份下,结果是:

  • 购买客户数:1;
  • 复购客户数:1;
  • 这位顾客对应的复购判断:是。

如果三笔订单分别落在 3 个客户 ID 下,结果会变成:

  • 购买客户数:3;
  • 复购客户数:0;
  • 三个 ID 对应的复购判断:全都不是。

分母被撑大,分子又被压小。于是业务没有突然失去一位老顾客,数据却凭空多出了三个新客。

这也是身份碎片最麻烦的地方。它不只让客户总数偏高,还会一起影响复购率、新老客占比、获客成本、会员贡献、跨渠道转化和生命周期价值。团队若只盯着复购率公式,很容易在一个没有变化的购买行为上,解释出一段很有气势的消费趋势。

同一顾客被拆成多个身份后,复购判断如何失真

三套系统里的“人”,其实是三种业务对象

订单系统关心的是谁完成了交易。

会员系统关心的是谁注册、领券、积分和升级。

客服系统关心的是谁发起了咨询,以及下一次能不能接着服务。

它们都在记录顾客,却未必用同一种方式认识顾客。

订单可能优先保存下单手机号和收货信息;会员系统把会员号当主键;小程序依赖平台内标识;客服在未登录时只能看到设备或会话;门店导入的老会员还可能只有一张卡号。

所以,把三套表 UNION ALL 到一起并不叫客户统一。那只是把不同系统对“人”的认识,搬进了同一个仓库。

真正需要解决的问题叫实体解析,也就是在没有共同主键时,判断多条记录是否指向同一个真实对象。AWS Entity Resolution 的规则匹配会为匹配记录返回 Match ID 和命中的规则;Google Cloud 对实体解析的介绍也把它定义为:在没有公共标识时匹配不同记录。

这些工具能帮助计算,却不会替团队决定“什么证据足以说明是同一个人”。

手机号不是人,设备号也不是人

发现身份碎片以后,最诱人的动作是按手机号合并。

这比什么都不做快,也比什么都不做危险。

手机号会更换,会被重新分配;一家人可能共用一个收货电话;企业客户可能统一留前台号码;门店员工也可能替顾客下单。设备号同样会遇到多人共用、清缓存、换手机和隐私设置变化。

反过来,“手机号不同”也不能直接判定为两个人。有人下单留工作手机,会员注册用私人号码,客服咨询又从另一台设备发起。系统看到三条路,人只走了一趟。

因此,身份判断不能只看一个字段相不相等,而要看证据组合:

  • 强证据:同一实名会员、同一经过验证的账号关系;
  • 中等证据:手机号与姓名、收货地址等组合长期一致;
  • 弱证据:相同设备、相同网络、相似地址或相似姓名。

强证据可以支持自动归并;弱证据更适合提示“可能相关”,等待更多记录或人工复核。不要因为算法能给出一个答案,就假装这个答案没有不确定性。

这里还有另一面:不能为了把复购率算得好看,把一家人、共享设备用户或接手旧手机号的人合成一个顾客。漏合会让人数偏多,错合则会把几个人的消费、偏好甚至敏感信息塞进同一份画像。

一个错误的统一身份,往往比五个碎片身份更难发现。

OneID 不是原始字段,而是一项可以追溯的判断

不少项目会新建一列 one_id,然后宣布客户统一完成。

可一列 ID 本身说明不了什么。真正重要的是:它由哪些原始记录组成,靠哪条规则合并,证据强度如何,什么时候生成,后来有没有拆分或重算。

我更愿意把 OneID 看成一张会变化的关系图。

图的一端是订单、会员、客服、活动等来源记录;另一端是暂时归到一起的客户实体。中间每条连接都要带理由:同一会员号、验证手机号一致、人工确认,或只是设备上的弱关联。

这样做有两个好处。

第一,业务追问“为什么这两条算一个人”时,分析师能顺着连接找到证据,而不是只说“模型判的”。

第二,发现错并以后可以拆。若 OneID 只是覆盖式写入的一列结果,错误常常会一路传播到标签、推荐、人群包和报表里,想回去找原始关系已经很困难。

从来源记录、匹配证据到统一客户身份的关系图

先别重算看板,做三次小检查

身份解析项目很容易一上来就讨论平台、算法和客户 360。

我建议先做三次小检查。它们不够把 OneID 系统做完,却足以判断复购率是不是被身份碎片拖偏了。

第一,冻结当前口径,留下可比较的旧版本

先记录今天的客户去重规则、复购率分子分母、时间窗口和结果快照。

不要在同一张看板里静默替换客户 ID。否则新口径上线以后,历史曲线会整体变化,团队只看到“数字好了”,却说不清是顾客行为变了,还是身份规则变了。

旧口径不是永远保留,而是给新口径一面镜子。

第二,抽 50 个身份,画出证据关系

可以从三类样本开始:

  • 订单多、客户 ID 也多的高频购买者;
  • 同一手机号对应多个会员号的记录;
  • 被判定为新客、却有历史地址或设备线索的人。

数字 50 不是统计标准,只是一个便于人工看完的起点。把每个来源 ID、关键标识、时间和匹配理由画在一张表或关系图上,看看问题主要来自换手机号、未登录下单、门店导入,还是系统重复建档。

样本不必完美,却要覆盖最常见的碎片来源。

第三,新旧身份双跑一个完整业务周期

新 OneID 不要直接接管正式复购率。

先同时计算:

  • 原客户 ID 口径;
  • 新身份规则口径;
  • 两者在客户数、复购人数和复购率上的差异;
  • 差异最大的渠道、门店和版本。

然后对差异最大的样本做人工核对。若新口径让客户数下降、复购率上升,也别急着宣布成功。先确认下降的是重复身份,不是被错合的一家人或共享设备用户。

双跑的目的不是证明新规则更漂亮,而是解释每一块主要差异从哪里来。

复购率看板要多写一句身份说明

一张可信的复购率看板,不只要写购买次数和时间窗口。

还应说明客户如何识别。例如:

客户按已验证会员账号优先去重;未登录订单使用手机号与订单账号关系匹配;仅设备相同不自动合并。身份规则版本为 customer_identity_v2,2026 年 7 月 1 日起生效,历史数据已按同一版本回算。

这句话不够性感,却能回答几个重要问题:

  • 客户数为什么和会员系统不一样;
  • 新老客为何在某天发生跳变;
  • 复购率变化是行为变化还是规则变化;
  • 下次修改身份规则时,哪些报表会受到影响。

如果身份规则仍在验证,也应该直说:“跨渠道未登录用户尚未完全归并,复购率可能偏低。”承认已知边界,比给一条过分精确的曲线更有用。

明天可以先做的 3 个动作

第一,找出一位“买了三次却算成三个新客”的顾客。

不用先做全量工程。把他的订单、会员、客服和设备记录按时间排开,确认身份到底在哪一步断了。

第二,把客户 ID 数和可解释的人数分开。

在看板旁增加几个诊断数:每位客户平均对应多少来源 ID、一个验证手机号对应多少客户 ID、多少订单只有弱身份。它们能提醒团队,客户数是否正在被系统建档方式推高。

第三,给身份合并留一条撤销路径。

每次合并都保存来源记录、命中规则和版本。发现共享手机号或错误关联时,能够拆开并重算,而不是在结果表上手工改一个 ID。

三件事做完,复购率未必马上变高。

但团队至少知道,它现在低在顾客没有回来,还是低在系统没有认出回来的人。

看板里的“新客”,有时只是一个老朋友换了件外套

数据分析最容易令人安心的部分,是公式。

分子、分母、窗口都写清以后,表格显得很有秩序。可如果“一个人”在三套系统里没有同一个名字,再正确的除法也会得到一个整齐的误会。

所以复购率下降时,别急着给运营写一份用户忠诚度分析。

先找一位具体顾客,看看他在订单、会员和客服系统里分别叫什么。他可能没有离开,只是换了手机号、换了入口,又被系统当成第一次见面。

人还是那个人。

数据得重新学会认出他。


我叫石头,在数据行业里摸爬滚打了十几年,见过不少趋势最后追到源头,只是系统把同一个人叫了好几个名字。这里写的,就是这些教训——我觉得值得说出来的那部分。

来源:AWS Entity Resolution:What is AWS Entity Resolution? · AWS Entity Resolution:Creating a rule-based matching workflow · Google Cloud:Introduction to the BigQuery entity resolution framework

Elazer (石头)
Elazer (石头)

11 年数据老兵,从分析师到架构专家。用真实经历帮数据人少走弯路。

加入免费社群

和数据从业者一起交流成长

了解详情 →

成为会员

解锁全部内容 + 知识库

查看权益 →

1v1 咨询

有具体职业困惑?一小时说清楚

预约咨询 →
← 上一篇 同事催着要生产库全权限,数据负责人用 15 分钟拆成最小授权 下一篇 → 一家人共用手机号,数据工程师用 5 层匹配规则避免 OneID 错并