Skip to content

第五章 本体与语义层 ​

5.1 实体解析:把两套会员 ID 变成一份主数据 ​

承前:第二章的本体草图上,"会员"对象旁边插着两面小旗——"新旧双轨 ID"和"标签塞备注"。第三章口径公式里,复购率的 JOIN 显式依赖那张"双轨 ID 映射表",覆盖率 87% 这个数字反复出现。到现在,这颗雷一直在被"标注"和"绕行",没有被真正排掉。这一节我们正面拆它:实体解析(Entity Resolution)的完整方法论——从精确匹配、模糊匹配到概率匹配,从匹配置信度阈值到人工审核队列,再到合并后的主数据管理。这是 W5 专题周的第一块硬骨头。


5.1.1 为什么"会员数"算不对:同一个问题的技术表达 ​

先把青禾的病灶翻译成技术语言。青禾 2023 年上了新会员系统,老 CRM 没有下线,两套系统并行跑了近两年:

  • 老 CRM:约 40 万条会员记录,主键 old_member_id,注册时只留手机号和姓名,大量一人多号;
  • 新会员系统:约 66 万条记录,主键 new_member_id,绑定了实体卡和支付账户;
  • 两个 ID 之间没有官方映射表。约 30 万会员两边都有记录,但因为手机号录错、一人多卡、换手机号,同一人在两边经常"长得不一样"。

这就是实体解析问题:**判断两条记录是否指向现实世界中的同一个实体,并把它们合并成一条唯一的主记录。**它不是青禾独有的病——这是数据集成领域几十年的经典难题。人口普查局要合并普查数据和抽查数据,医院要合并不同系统的病历,电商要合并 App 注册和门店扫码——凡是有"两套系统记录同一群人"的地方,就有实体解析。

这个问题在 Agent 项目里的权重被急剧放大:北极星指标"90 天会员复购率"的计算链条上,每一个 JOIN 都踩在这套映射上。ID 不通,指标在数学上就是错的——不是偏差,是错。

5.1.2 三级匹配:精确、模糊、概率 ​

匹配策略分三级,强度递增、误杀风险也递增。

**第一级:精确匹配(Deterministic Matching)。**用一个或多个字段完全相等做判断。青禾的第一版规则是"手机号 + 姓名"双字段精确匹配。这一级快、准(基本不会误合并),但召回低:手机号录错一位、姓名多个空格,两条本应匹配的记录就被漏掉。精确匹配跑完,30 万双端会员只匹配上约 17 万——剩下的 13 万不能就当作"不是同一个人"。

**第二级:模糊匹配(Fuzzy Matching)。**容忍字段内的误差:编辑距离处理"王小辉/王小挥",拼音归一化处理同音字,标准化处理"+86"前缀和分隔符。模糊匹配把召回率拉上来了,但引入了灰色地带:两个"王伟,138xxxx"可能真是两个人。

第三级:概率匹配(Probabilistic Matching)。不再问"相等还是不相等",而是问"这对记录是同一个人的概率有多大"。这套方法的数学根基是 Fellegi 和 Sunter 1969 年提出的记录链接理论(Record Linkage):把每对候选记录在各字段上的"一致/不一致"累加成对数似然比,得到一个匹配分数。关键洞察是:字段的区分度不同,权重就不同——"性别相同"几乎不提供信息(全国一半人性别相同),"手机号相同"提供极强的信息。姓氏权重低(王伟满街都是),生僻字姓氏权重高。

工程上还有个绕不开的前置步骤:分块(Blocking)。40 万 × 66 万 = 264 亿对候选,全比一遍不现实。先用便宜的键(手机号前 7 位、姓名拼音首字母、门店+日期桶)把记录分到同"块"里,只在块内做精细比较——把比较对数降几个数量级。

5.1.3 置信度阈值:不是"对/错",是"自动/人工" ​

概率匹配的输出是一个 0-100 的置信度分数。FDE 要做的核心决策是:**阈值划在哪里?**这不是技术参数,是风险预算。

青禾项目的匹配置信度分层表(示意):

置信度区间处置策略青禾沙盘实际占比理由
95-100自动合并,直接进主数据61%手机号+姓名+办卡门店全一致,误合率 <0.1%
85-95自动合并,标记"机器合并"待抽检17%抽检 5%,错误反馈回权重
60-85进人工审核队列15%手机号一致但姓名差异大,或一人多卡场景
40-60挂起,标记"疑似同人待验证"5%等新证据(下次到店消费时补录)
<40判为不同人2%仅弱信号重合

三条设计原则:

  • **阈值向"宁可不并"倾斜。**把两个不同的人合并成一条主数据,后果是发错券、算错指标、隐私串号——错误是外溢的。该并没并,后果只是会员数多算一个——错误是内部的。不对称的代价决定不对称的阈值。
  • **灰区不是失败区,是流程区。**60-85 区间那 15%(约 4.5 万对)进人工审核队列,不是让运营经理点 4.5 万次鼠标,而是让一线门店在顾客下次到店时顺手核一句"您是不是也办过我们的老卡"。人工审核要嵌进业务动线,而不是变成数据团队的加班。
  • **阈值是给客户的决策,不是你替客户拍板。**把这张表投到评审会上,让增长副总裁亲手圈"自动合并的下限划在哪"。他划的线,他认账。

5.1.4 合并之后:主数据管理才刚开始 ​

匹配完成不等于工作结束。两条记录合并成一条,立刻面临幸存者规则(Survivorship Rules):合并后的每个字段取哪边的值?

  • 手机号取新系统的(更新鲜)、姓名取老 CRM 的(录入时人工核过身份证)、积分取两边之和?还是取大?
  • 每条规则都要写进主数据管理(MDM)规范:谁产生记录、谁负责维护、字段级优先级、冲突裁决人。
  • 每次合并保留审计链:master_id → 两个 source_id → 匹配分数 → 匹配时间 → 依据字段。任何一次误合并都可以回滚,任何一次质疑都可以追查。

这里有个容易被忽视的政治维度:**合并会消灭权力。**老 CRM 的 40 万会员归营销部门"所有",合并后主数据归谁管?这在青禾吵了一周。最终方案是新成立数据治理小组管 member_master,营销和门店系统都变成主数据的"订阅方"——写入走统一接口,不允许各改各的。实体解析的技术产物(主数据表),最终以组织制度(唯一写入方)的形式存活下来。这是 FDE 反复会遇到的规律:数据问题的最终解药一半在制度里。

5.1.5 沙盘实况:87% 覆盖率是怎么来的 ​

把整个流程在青禾跑一遍,三周的节奏:

**第一周:分块与精确匹配。**按手机号分块跑精确匹配,17 万对自动匹配。同时做"一人多号"检测:老 CRM 里手机号相同但 old_member_id 不同的记录群——挖出 8000 多个"会员注册了两次"的簇。

**第二周:模糊与概率匹配。**对剩余 13 万未匹配记录,用编辑距离 + 拼音归一 + 消费行为特征(常去门店、客单价区间)构建概率评分。累计匹配再 +1.9 万,4.5 万对进人工队列。

**第三周:审核与落主数据。**人工队列借门店动线消化 +1 万,合并生成 member_master,全量对账:主数据会员数 76.4 万——这就是第三章那个"你算出 76 万"的技术来源。双端应匹配人群的映射覆盖率 87%(13 万应匹配中解决约 11.3 万),剩余 13% 挂起待验证。

覆盖率 87% 而不是 100%,是诚实的上限:剩余 13% 依赖"新证据出现"(顾客下次到店),强行匹配只会制造假数据。指标语义层里所有依赖会员数的指标,都带着"覆盖率 87%"的 caveat——误差条不是缺陷,是工程成熟度的标志。

双轨ID合并 · 产出清单(进SOW交付物附录)
├─ member_master            主数据表(含幸存者规则文档)
├─ id_mapping               old/new → master 映射 + 分数 + 审计链
├─ review_queue             人工审核队列(带消化动线设计)
├─ match_spec.md            分块键、字段权重、阈值表(客户签认版)
└─ coverage_report          覆盖率与误合率抽检报告

5.1.7 常见陷阱与反模式 ​

实体解析工程里,有几类错误反复出现,提前打疫苗:

**陷阱一:拿"全字段一致"当银弹。**有团队把姓名、手机号、地址、注册时间全部设为必匹配字段,精确匹配的召回率跌到 40% 以下,然后得出结论"这数据没法合并"。正确认知是:匹配字段的选择本身就是建模——区分度高的字段(手机号)给高权重做主键级判断,区分度低的(性别、城市)只做加分项,缺失字段不是"不一致"而是"无信息"(Fellegi-Sunter 框架里的 missing 处理)。

**陷阱二:合并完就删源表。**有人为了"彻底统一",合并后想把老 CRM 的表归档下线。千万别——在青禾,老 CRM 还承载着营销部门的触达功能,主数据是"身份层"不是"功能替代层"。正确姿势是源系统保留、加同步标记(5.4 节的回写阀门),等功能真正迁移完成(彩排+对账通过)再谈下线。实体解析解决"是谁",不解决"存在哪"。

陷阱三:一次性项目思维。合并做完、映射表交付,团队解散——三个月后新会员继续在新系统注册,老系统也还在收数据,映射表开始腐烂。实体解析是持续过程不是一次性工程:新记录进来要走同样的匹配管道,人工审核队列要有人长期值守,字段权重要随数据质量变化调优。这也是为什么交付物清单里有 match_spec.md——分块键、权重、阈值都要文档化,让客户数据团队接得住、养得起。

**陷阱四:对"一人多号"过度合并。**真有一人注册三号的(家里老人小孩共用),也有同名不同人的。手机号相同+姓名相似就合并,可能把一家人的消费记录并到一个人头上——复购率虚高,触达打扰错误的人。青禾的解法是给"疑似家庭共用号"单独分簇处理,标记 household_flag 而不是强行合并成一个人。合并粒度的选择(个人 vs 家庭)是业务决策,要在口径会上和客户确认,不是算法能自动决定的。

5.1.8 要点总结 ​

  • 实体解析 = 判断"两条记录是不是同一个人/物"并合并成主数据;三级策略(精确→模糊→概率)召回递增、灰色地带递增,分块(Blocking)是控制算力成本的前置工程。
  • 概率匹配的理论根基是 Fellegi-Sunter 记录链接(1969):按字段区分度加权,输出置信度分数而不是对错判断。
  • 阈值表是风险预算表:向"宁可不并"倾斜(误合并的错误外溢),灰区配人工审核动线而不是加班,阈值由客户签认。
  • 合并之后是主数据管理:幸存者规则、审计链、唯一写入方制度。数据问题的最终解药一半在制度里。
  • 87% 覆盖率是诚实上限,不是失败;所有依赖映射的指标都应带着覆盖率 caveat 走。

参考资料 ​