你问一个做产品的同事,你们用户标签做得怎么样了?他大概率会甩给你一张满是字段的表单,里面躺着“性别”“年龄”“注册时间”。但你要是问他,哪些用户是“高价值但快流失”的,哪些是“爱分享的新客”,他多半会愣住。这就是我最近折腾用户标签功能时最直观的感受:标签这东西,看似人人都会说,真正落到业务上能打胜仗的,没有几个。
这篇内容就是把我自己从需求梳理、标签设计、数据加工到业务应用那一整圈走下来的心得做个沉淀。它不是教科书式的“标签体系白皮书”,而是我自己摸爬滚打之后,觉得真正有用、能直接抄作业的那部分。不管你是产品经理、运营同学,还是刚接手用户数据系统的开发,这篇都值得你花十分钟读完。
1. 内容整体设计与思路拆解
1.1 标签到底解决什么问题
先说个场景。你是一个电商运营,手里有十万注册用户。你想做一次“老客召回”,是谁给你发优惠券都行吗?显然不是。那些每个月都买东西的忠实用户,你给他发“你很久没来了”的券,他不仅不领情,还可能觉得你脑子有问题。反过来,那些注册完就消失、再也没有回来过的沉睡用户,你给他发券,他大概率也看不见。真正值得你花成本去触达的,是“以前常买、最近不来了”的那一小撮人。你怎么在十万用户里把这一小撮人捞出来?
靠脑子记,不现实。靠Excel筛,勉强能做但效率太低,而且没法持续更新。这个时候,打标签就是唯一靠谱的解法。用户标签本质上是把用户的行为、属性、偏好,通过某种规则或算法,抽象成一个个可理解、可筛选、可运营的记号。
说得更直白一点,标签就是给用户做“画像速写”。它把复杂的、零散的用户行为数据,聚合成几个关键词,让你一眼就知道这人大概什么样。它能解决三个核心问题:第一,让运营从“盲人摸象”变成“精准制导”;第二,让数据从“躺在库里的死数字”变成“能驱动业务的活资产”;第三,让决策从“拍脑袋”变成“有依据”。
1.2 为什么不能只做用户画像
很多人会把用户标签和用户画像混为一谈,我也犯过这个迷糊。用户画像的核心是“描述”,它回答的是“用户是谁”——30岁、男性、一线城市、喜欢数码产品,这是一种画像。标签的核心是“行动”,它回答的是“用户此刻是什么状态、我该拿他怎么办”——高价值、易流失、待激活,这是一种标签。
我用一个生活化的类比来解释:画像就是你交友软件上的个人资料——身高、体重、职业、家乡,这些信息相对静态。标签则是你对一个人的实时判断——今天他心情好、最近他好像缺钱、这个人可以深交。前者让你“认识”一个人,后者让你“应对”一个人。
所以在设计标签功能的时候,我的核心思路是:不能让标签变成一堆泛泛的用户画像属性,而是要让它服务于具体的业务动作。标签的价值不在于“贴上去”,而在于“用起来”。如果一个标签被打上之后,运营从来不用它做筛选、做推送、做分析,那这个标签就是无效的,甚至是有害的——因为它白白消耗了数据加工和存储的成本。
1.3 标签体系的三个层次
在动手做标签之前,我先把整个体系拆成了三层,每一层都有自己清晰的职责。这个分层结构帮了我大忙,强烈建议你也这么做。
第一层叫基础数据层。这一层是标签的原材料,包括用户的注册信息、消费记录、浏览日志、客服反馈、APP埋点事件等。这里我踩过一个坑:一开始以为把所有的数据都灌进来就可以了,后来发现数据质量参差不齐,很多字段是空的,或者格式不统一,导致后面的标签计算大面积出错。所以基础数据层的核心关键词是“清洗”和“统一”。
第二层叫标签加工层。这一层是核心引擎,负责把底层数据“翻译”成业务语言。比如用户“近30天消费金额”是一个加工逻辑,“高消费力用户”是一个标签。这两者之间的桥梁,就是一套定义明确的规则或算法。我强烈建议在这一层把“加工逻辑”和“标签名称”分开管理,因为同一个加工逻辑,未来可能对应多个不同的标签。
第三层叫标签应用层。这一层是面向业务人员的入口,大家在这里检索标签、组合标签、圈选人群、创建营销活动。应用层做得好不好,直接决定了业务人员愿不愿意用这套系统。如果查询一个标签要等五分钟,或者组合条件要写SQL,那这个系统大概率会被大家抛弃。
2. 核心细节解析与实操要点
2.1 标签的五种分类法,别再只会分“静态动态”
我在做标签分类的时候,看了不少资料,发现大家最常说的是“静态标签”和“动态标签”。这个分类当然没错,但太粗了,没法指导实际的加工工作。我自己在实践里沉淀了一套分类方法,把标签分成五种,对工作非常有指导意义。
第一类是事实标签。这类标签最“硬”,它来自用户主动提供或系统记录的事实,不需要任何推算。比如性别、职业、注册渠道、所在城市。这类标签的特点是准确度高,但覆盖范围有限,而且需要依赖用户授权或填写。实际加工时,绝大多数来自用户注册表单和实名认证信息。
第二类是规则标签。这类标签是我个人最喜欢的,因为它加工逻辑透明、解释成本低,业务人员自己就能理解。它基于明确的规则定义,比如“近30天登录次数>=10次”定义为“高频活跃用户”,“近90天购买次数>=3次且最近一次购买在30天内”定义为“复购用户”。这类标签的加工过程不涉及复杂的算法,SQL就能搞定,非常适合作为标签体系的起点。
第三类是模型标签。这类标签是数据科学家的主场,它通过机器学习算法对用户进行预测或评分。比如“流失概率预测”就是一个典型的模型标签,它的底层可能是一个XGBoost或逻辑回归模型,输入是用户近30天的行为特征,输出是一个0到1的概率值,再根据阈值划分成“高流失风险”“中流失风险”“低流失风险”三档。模型标签的优点是突破人工规则的局限,能发现数据里的隐含模式;缺点是对数据质量和算法能力要求高,而且需要定期迭代模型。
第四类是偏好标签。这类标签专门回答“用户喜欢什么”这个问题。它通常基于用户的浏览、点击、收藏、搜索等行为数据,通过统计或算法得出。比如“偏好品类:数码3C”就是一个偏好标签。做这类标签时最需要注意的是时间衰减——用户上个月喜欢的东西,这个月不一定还喜欢。所以我在设计偏好标签时,会引入时间窗口和衰减因子,让近期的行为权重更高。
第五类是价值标签。这类标签直接指向用户的钱包,回答“用户能带来多少价值”和“用户现在还值不值得投入”。比如“累计消费金额>=5000元”就是“高价值用户”,“近30天消费金额较前30天下降50%以上”就是“价值萎缩用户”。价值标签是运营做预算分配和策略制定的核心依据,一定要做得足够准确。
2.2 标签命名与口径统一里的血泪教训
我接下来说的这个坑,几乎每个做标签的人都会踩,而且踩了之后往往要花几周时间来消化。那就是标签的命名和口径不统一。
我举一个真实案例。我们公司市场和运营两个部门都建了“高价值用户”标签。市场部的定义是“累计消费金额排名前10%的用户”,运营部的定义是“近90天消费金额>=3000元且客单价>=500元的用户”。结果就是,同样叫“高价值用户”,市场部圈出来的人,运营部完全不认账,两边开会吵了一个下午也没吵出个结果来。
从此我定了一条死规矩:任何标签上线前,必须有且仅有一个明确的业务负责人,负责确认标签的名称、定义、计算口径和更新频率。而且这个定义要写成文档,挂在标签系统首页,让所有人随时都能查到。只有这样才能避免“同名不同义”的混乱。
在命名规范上,我推荐采用“业务维度_属性_描述_更新频率”的格式。比如“消费_频率_近30天购买3次及其以上_日更新”这个标签,一看就明白它在说什么。切忌直接写“VIP用户”“重要客户”这种模糊的叫法。
口径统一这件事,除了靠制度约束,还要靠数据层面的“黄金指标”来兜底。我给自己的团队定了一个小目标:公司级核心指标,比如“活跃用户”“付费用户”“留存用户”,必须由数据中心统一发布定义模板,各业务部门只能在此基础上做衍生,不能另起炉灶。
2.3 标签的数据模型怎么建,别一上来就上大而全
标签的数据模型,业界最常用的就是“宽表 + 标签库”的组合模式。宽表解决“一个用户一行记录、字段多到一眼看不完”的问题,标签库解决“标签怎么被业务方灵活查询”的问题。
宽表的设计核心就是把一个用户的所有特征字段尽量放在同一张表里,行数等于用户数,列数是所有的标签。这种结构对OLAP分析非常友好,跑SQL做人群筛选时性能很好。但宽表有一个要命的缺点——列数无节制膨胀。一开始可能只有十几个标签,加着加着就到了几百列,每次刷新全表都要跑很久。
所以我后来改成了“宽表 + 窄表”混合模式。宽表只放核心的高频查询标签,比如价值类、活跃类;窄表存放长尾标签,一行一个标签,方便灵活扩展。查询时通过标签API动态聚合,既保证了查询性能,又不至于让宽表变成“垃圾桶”。
这个改造的经验是:标签体系要预留扩展性,但不要在一开始就追求大而全。先从最核心的20个标签跑起来,业务验证有效后再逐步扩展。一上来就想把标签做到1000个,通常半年后你会发现其中一半都是没人用的僵尸标签。
3. 实操过程与核心环节实现
3.1 标签体系从零搭建的七步流程
这个流程是我在一次全量重构标签系统的项目中总结出来的,前后跑了差不多两个月。你完全可以按这个流程来落地,能少走很多弯路。
第一步是业务目标对齐。在写任何一行代码之前,先问清楚:公司当下的核心经营目标是什么?是提高新客转化,还是降低老客流失,还是提升客单价?目标决定了标签体系的设计优先级。我们当时是“老客召回”,所以标签体系最先建设的就是“生命周期状态”和“流失预警”两个模块。
第二步是数据资产盘点。把现有产品、数据库中所有涉及用户的数据源都列出来,包括用户表、订单表、行为日志表、客服工单表、营销活动表等。盘点过程中最重要的产出物是一张“数据字典”,标记每个字段的含义、来源、更新频率和数据质量状况。这一步听起来枯燥,但它是整个标签体系的“地基”,地基不稳,上面的楼全是危楼。
第三步是标签草稿设计。拉着业务方一起脑暴,列出所有业务上一看就能用的标签。这个阶段不要去讨论技术能不能实现,只问“如果给你一个这样的标签,你能不能做出更精准的运营动作”。收集完毕之后,把所有标签草案做个优先级排序,分出P0(必须)、P1(应该)、P2(可以)三档。
第四步是定义与口径审核。这一步是我最强调的。每个P0标签都要填写一张“标签定义卡”,包含标签名称、业务定义、计算口径、数据来源、更新频率、负责人。卡片填完之后,必须由业务方和数据方共同签字确认。这步省下的口水,比后期扯皮的十分之一都少。
第五步是技术实现与加工。采用“先离线、后实时”的策略。离线标签用批处理,每天凌晨跑一次全量计算,T+1更新;核心的、对时效要求高的标签,比如“正在浏览但未下单”的实时意向标签,才上实时计算。加工环境我用的是大数据套件里的Spark和Flink,SQL能解决的问题绝不用写代码硬写。
第六步是质量检验与验收。标签上线不能拍拍脑袋就完事。我会抽一批样本用户,人工验证他们的标签值是否符合业务直觉。比如抽取100个被标记为“高流失风险”的用户,人工查看他们近30天的行为日志,看是否真的是访问频次锐减、加购但没支付。如果准确率低于85%,这个标签就不能上线。
第七步是持续运营与迭代。标签系统不是盖完楼就竣工了,它更像一个花园,需要修剪和灌溉。我每个月会看一次标签使用报表,哪些标签被高频查询、哪些标签从没被用过。对于三个月内零使用的标签,直接下线,绝不手软。
3.2 标签加工的高频代码模板
这里分享几个我在做标签加工时反复使用的代码模板。不管公司用的是什么数据仓库,这几个SQL模式几乎都能用上。
第一个模板:统计型标签。比如“近30天消费金额”。
SELECT user_id, SUM(pay_amount) AS recent_30d_amount FROM fact_order WHERE pay_time >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND order_status = 'paid' GROUP BY user_id;这段SQL跑完之后,你得到一个userId和金额的映射。接下来根据业务规则打标签:金额>=5000打“高消费力”,500-5000打“中消费力”,50-500打“低消费力”,<50打“微消费力”。打标签的SQL就是简单的CASE WHEN,不再赘述。
第二个模板:时间衰减偏好标签。用户偏好不是“有没有”的问题,而是“最近还喜不喜欢”的问题。所以我在处理偏好标签时要加时间衰减权重。
SELECT user_id, category_id, SUM(score) AS total_score FROM ( SELECT user_id, category_id, CASE WHEN days_diff <= 7 THEN 3.0 WHEN days_diff <= 30 THEN 2.0 ELSE 1.0 END AS score FROM ( SELECT user_id, category_id, DATEDIFF(CURRENT_DATE, visit_date) AS days_diff FROM dwd_user_category_visit WHERE visit_date >= DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY) ) ) GROUP BY user_id, category_id HAVING total_score >= 10;这个SQL的逻辑是:用户最近7天访问某品类得3分,7到30天内访问得2分,30到90天内访问得1分。90天内的访问记录全部加起来都不超过10分的品类,就不算用户偏好。这个阈值可以按业务调整,我的经验是先用历史数据做过拟合分析再定。
第三个模板:高价值且易流失的复合标签。这类标签是运营最喜欢用的,因为它直接给出了行动建议。它的核心是“价值分”和“风险分”的双维交叉。
SELECT a.user_id, CASE WHEN a.total_amount >= 5000 AND b.risk_score >= 80 THEN '高价值高流失' WHEN a.total_amount >= 5000 AND b.risk_score >= 60 THEN '高价值中流失' WHEN a.total_amount < 5000 AND b.risk_score >= 80 THEN '低价值高流失' ELSE '正常' END AS user_tag FROM dws_user_value a JOIN dws_user_risk b ON a.user_id = b.user_id;这里的风险分是一个模型标签,我用的是基于XGBoost训练的流失概率模型,输入特征是近7天登录次数、最近一次加购时间间隔、优惠券核销率等,输出0到100之间的分数。具体的模型训练过程以后有机会单独写一篇,这里只说一句:模型标签要和业务方一起定义标签阈值,不能单纯看AUC。
3.3 实时标签与离线标签的分工协同
我见过团队一开始做标签就上实时计算,Flink、Kafka搞了一堆,结果业务方根本用不上。实时的不是不好,是要分清场景。
我的原则是:能用离线解决的,坚决不上实时;实时只解决离线解决不了的问题。哪些问题离线解决不了?比如用户在APP上刚点了某个商品,你希望在他犹豫的黄金5分钟里推一张优惠券,这个场景必须实时。再比如风险控制场景,用户正在操作的当下就需要判断他是不是欺诈用户,这也必须实时。
我落地过的实时标签架构并不复杂:APP埋点数据通过Kafka进入Flink,在Flink里做会话拼接和行为序列分析,输出结果写入Redis,供推荐和营销系统实时读取。离线标签则是每天凌晨用Spark批量跑,结果写入Hive和MySQL,供运营做人群圈选和数据报表使用。
这套架构跑起来以后,两条链路的数据做了“一致性兜底”:实时链路输出临时标签,T+1被离线链路重算的全量标签覆盖,保证最终数据是正确的。这么设计的原因很简单——实时计算在极端情况下可能丢数据,离线重算就是那个恢复真相的保险丝。
3.4 标签上线前的验证清单
为了尽量减少上线后出幺蛾子,我的团队把验收环节固化为一张验证清单,逐项确认后才允许标签对外开放。清单内容大致如下:
标签的业务定义是否和业务方书面确认过:是/否。数据源是否来自数据质量达标的基础表:是/否。加工逻辑是否经过代码Review:是/否。抽样50名用户的标签值是否通过人工核验:是/否。标签的更新频率是否明确并且任务调度是否正常:是/否。标签是否存在敏感合规风险(如涉及用户隐私):是/否,如有,是否已做脱敏处理。标签是否分配了唯一的业务负责人和到期复核时间:是/否。
别小看这份清单,它救过我很多次。有一次就是在人工核验环节发现“近30天有购买的活跃用户”里混入了3个退款用户,一查发现是订单表里有几条退款状态的脏数据没有过滤干净。如果不是提前做了抽样核验,这个标签上线后,运营照着名单发一轮召回券,发到那些刚退款的人手里,接投诉电话的就是我了。
4. 常见问题与排查技巧实录
4.1 标签数据不准?可能不是因为技术
我遇到过好多次,业务方急匆匆跑过来跟我说“标签算错了”。我第一反应是查SQL、查数据源,查来查去没毛病,最后发现居然是“定义变了”。比如业务方之前说“近30天”就是自然月,后来又改口说“近30天”是滚动窗口,代码没更新,标签自然显示的“不对”。
这事给我的教训非常大。标签准确的问题,80%都不是技术问题,而是定义问题没有提前对齐。所以我现在的做法是:每次接到关于标签不准的反馈,先不急着看代码,先问业务方三句话——你说的这个标签是哪一个?你的判断标准是什么?你期望的数值是多少?把这三句话对完,一半以上的问题已经解决了。
4.2 标签冲突了怎么办
有时候用户会同时被打上“高活跃用户”和“需要挽回的流失风险用户”,这看起来自相矛盾。但仔细想想,是可以同时成立的——他最近几天活跃度骤增,但购物车一直没清空,下单转化率极低,模型判定他有流失风险,但因为一直在浏览,活跃度标签也跳到了“高”。
解决这类冲突有两个思路。第一个思路是设置标签优先级:业务上最关键的标签优先展示,比如“流失风险类”优于“活跃类”。第二个思路是复合标签前置:与其让“高活跃”和“流失风险”同时挂在一个用户身上,不如把这两个标签合并成“高活跃但流失风险”,这样运营拿到手里的信息反而更具体。我在实践中更倾向第二种,因为复合标签能把冲突变成洞察。
4.3 空标签和覆盖不全,根因和应对
标签打不上,或者是批量空值,是让我前期最头疼的一类问题。排查的思路无非是三步:第一步看数据源有没有数据,第二步看加工逻辑有没有条件过滤过度,第三步看关联键能不能对齐。
举个例子。我给“新注册用户”打“渠道来源”标签,结果发现iOS端的用户全是空。仔细排查后发现,埋点采集渠道参数时,iOS和Android埋点用的字段名不一样,我们的加工逻辑只处理了Android的字段名。这种低级错误,数据质量规范就能防住——所有平台的埋点字段必须统一命名,这个规范真的能救命。
4.4 标签系统的权限与安全设置
标签涉及大量的用户隐私数据,这一块如果不小心,很容易出事故。我的做法是给标签系统做了三层权限控制:第一层是数据权限,某些敏感标签(比如“高消费力”“疑似孕妇”)只有特定角色和特定部门的人才能查看;第二层是功能权限,普通运营只能用标签做筛选,不能直接查看标签背后的明细用户数据;第三层是留痕审计,所有标签的读取、导出、创建、修改操作都有日志记录,出了事情能追溯到人。
这里我要特别说一句,“疑似孕妇”这类敏感标签,我实际上一律不允许上系统。不是说技术上做不到,而是这类标签的商业价值远远覆盖不了可能带来的合规和安全风险。标签功能的底线就是,宁可少一点,不能错一点。
5. 关于标签运营的几点心得
标签上线只是开始,真正让标签产生价值的是持续的运营。我自己总结了三句话:标签要挂在业务动作上才有意义,标签要跟着业务变化而迭代,标签要有人专门负责维护。
标签挂业务动作,意思是每次营销活动完成后,要复盘这个活动用了哪些标签、效果如何。效果好,标签保留并且加大使用频率;效果差,分析是标签圈人不准,还是活动本身设计有问题。标签迭代,意思是用户的偏好和行为在变,标签的生命周期也要跟着调整。我每个月会做一次“标签体检”,把使用频次低、数据质量差的标签清理掉。专人维护,意思是标签系统必须有一个明确的owner,不能是“人人都管、人人不管”的状态。我们团队这颗“标签管家”的活交给了数据产品经理,她负责统筹所有标签的定义、评审、排期和下线。
做标签功能这件事,我觉得最挑战人的不是技术有多难,而是你能不能一直保持对业务的敏感和对数据的敬畏。技术选型、SQL优化、模型训练,这些都是有标准答案的;唯独“这个标签到底该不该做、怎么做才真正有用”这个问题,没有标准答案,只能靠对业务的理解和一次次的试错。
最后分享一个我一直在用的习惯:每做一个标签之前,先问自己一句——“这个标签做出来,业务方会真真切切用它做一个以前做不了的决策吗?”如果答案不是斩钉截铁的“会”,那这个标签就先放一放。