资讯动态

淘宝用户行为分析:用户画像标签体系与RFM模型实操

发布时间:2026/10/16 10:35:17 来源:尧图企业网站定制
1. 用户画像到底在分析什么1.1 从“淘宝用户行为分析”说起“淘宝用户行为分析——用户画像”这个标题乍一看像是电商数据分析的入门课题但真正动过手的人都知道它远不止跑几条SQL、画几张饼图那么简单。用户画像的本质是把海量、零散、看似无规律的行为日志压缩成一组可解释、可复用、能指导决策的标签体系。你拿到一份用户行为数据里面有浏览、收藏、加购、购买这几类动作还有时间戳、商品类目、用户ID这些原始字段本身没有意义只有把它们按用户维度聚合、按行为权重加权、按时间窗口切片才能回答“这个用户是谁、他想要什么、他值多少钱”这三个核心问题。我做用户画像项目有个习惯先不急着写代码而是拿一张白纸把“我最终想回答的业务问题”列出来。比如运营想知道“哪些用户快流失了该发什么券”产品想知道“新用户第一次购买前平均浏览几个商品”推荐算法团队想知道“哪些用户对价格敏感、哪些对品牌敏感”。这些问题决定了画像标签的粒度、更新频率和存储方式。如果一开始就闷头算RFM最后很可能做出一堆没人看的报表。这个项目适合谁参考我认为有三类人一是刚接触电商数据分析、想找一个完整案例练手的数据分析新手二是需要搭建用户标签体系、但不知道从哪下手的运营或产品人员三是想了解行为数据如何转化为业务策略的技术同学。不管你是哪一类接下来的内容都会从数据理解、标签设计、实操计算到避坑经验一层层拆开讲。1.2 用户画像的四个核心维度在淘宝这类综合电商场景下用户画像通常围绕四个维度展开属性维度、行为维度、价值维度和偏好维度。属性维度包括性别、年龄、地域这些相对静态的信息但在行为数据里往往缺失需要用行为反推行为维度是浏览、收藏、加购、购买、评论、分享等动作的频次和时序价值维度最经典的就是RFM模型即最近一次购买时间、购买频率、购买金额偏好维度则关注用户对类目、价格带、品牌的倾向。这四个维度不是孤立的。举个例子一个用户最近30天频繁浏览高端美妆、加购但不下单他的行为维度显示高活跃价值维度可能因为历史购买少而偏低偏好维度则指向“高客单价美妆潜在客户”。如果你只算RFM可能会把他归为低价值用户而放弃但结合偏好维度他其实是值得用大额券刺激的高潜用户。这就是为什么我说用户画像不能只做一套标签而要做一套能交叉解释的标签体系。注意很多新手一上来就追求标签数量觉得标签越多画像越准。实际上标签之间如果高度相关不仅增加计算成本还会让后续策略互相打架。我一般建议先做20到30个核心标签跑通业务闭环后再逐步扩展。2. 数据理解与预处理的关键细节2.1 行为数据的字段含义与陷阱假设你拿到的是一份典型的淘宝用户行为日志字段通常包括用户ID、商品ID、类目ID、行为类型、时间戳。行为类型一般有四种pv浏览、fav收藏、cart加购、buy购买。有些数据集还会包含地理信息或用户年龄性别但真实场景下这些字段往往缺失严重不能直接依赖。这里有几个容易踩的坑。第一时间戳的格式。很多公开数据集的时间戳是Unix秒级或毫秒级直接转成日期时容易把时区搞错。我一般统一转成UTC8的日期时间再按天、小时、周几做衍生字段。第二行为类型的权重。浏览、收藏、加购、购买对用户兴趣的表达强度完全不同你不能简单地把它们都当成一次“互动”来计数。我的经验权重是浏览1分、收藏3分、加购4分、购买5分这个权重不是拍脑袋而是基于“用户付出成本越高、兴趣越强”的逻辑。第三重复行为的处理。同一个用户对同一个商品在短时间内多次浏览可能只是刷新页面或误触需要做去重或时间窗口合并。还有一个隐蔽的陷阱数据倾斜。淘宝的用户行为分布是典型的长尾分布少数头部用户贡献了大部分行为记录。如果你直接对全量用户做聚合计算资源会大量消耗在头部用户上而长尾用户的画像反而被稀释。我的做法是先按用户ID做一次采样对行为数超过某个阈值的用户单独处理或者用分桶计算再合并。2.2 数据清洗的实操步骤清洗这一步我通常按以下顺序操作每一步都有明确的判断标准去除无效用户行为记录少于3条的用户画像可信度极低直接过滤。这个阈值可以根据数据总量调整但低于3条基本无法判断偏好。去除无效商品商品ID为空或类目ID缺失的记录无法用于偏好分析剔除。时间范围截取选择连续且完整的时间窗口比如最近30天或90天。不要用有缺失的日期范围否则RFM的“最近一次购买”会失真。行为类型编码把pv、fav、cart、buy映射为数值权重方便后续加权计算。去重与合并同一用户对同一商品在同一小时内的多次相同行为只保留一次。跨小时的行为保留因为可能代表持续兴趣。用Python的pandas做这些操作很直接但数据量大时pandas会内存溢出。我一般用Dask或者直接上SQL做聚合把清洗后的结果落地成宽表。下面是一个清洗逻辑的伪代码示例你可以根据实际数据调整import pandas as pd # 读取原始日志 df pd.read_csv(user_behavior.csv) # 时间戳转换 df[datetime] pd.to_datetime(df[timestamp], units) pd.Timedelta(hours8) df[date] df[datetime].dt.date df[hour] df[datetime].dt.hour # 行为权重映射 behavior_weight {pv: 1, fav: 3, cart: 4, buy: 5} df[weight] df[behavior_type].map(behavior_weight) # 过滤低活跃用户 user_counts df.groupby(user_id).size() valid_users user_counts[user_counts 3].index df df[df[user_id].isin(valid_users)] # 去重同一用户同一商品同一小时同一行为只保留一次 df df.drop_duplicates(subset[user_id, item_id, hour, behavior_type])这段代码跑完你得到的就是一份相对干净的、带权重的行为明细表。接下来所有画像计算都基于这张表。提示如果你的数据里包含“用户-商品”交互矩阵注意稀疏性问题。淘宝场景下用户和商品的数量都是百万级以上矩阵稀疏度通常超过99.9%直接做协同过滤会非常慢。用户画像阶段不需要这么细按类目聚合就够了。3. 标签体系设计与计算逻辑3.1 RFM模型的变体与参数选择RFM是用户价值画像的基石但直接套用经典RFM在淘宝场景下有几个问题。经典RFM的R是“最近一次购买时间”但淘宝用户可能最近没有购买却有频繁的加购和收藏这些行为同样代表活跃度。所以我会把R扩展为“最近一次互动时间”互动包括购买、加购、收藏、浏览但购买的时间权重更高。具体做法是取用户最近一次购买时间作为R_buy最近一次任意行为时间作为R_any两个都保留后续分群时交叉使用。F是购买频率通常按最近90天的购买次数计算。这里有个细节同一订单多件商品算一次还是多次我的经验是按订单去重后计数因为用户的一次购买决策对应一个订单多件商品只是决策的延伸。如果你按商品件数算会把批发型用户和普通用户混在一起。M是购买金额但很多公开数据集没有金额字段。如果没有金额可以用“购买商品的平均价格带”或“购买类目的价值分”来替代。比如美妆类目的平均客单价高于日用百货可以用类目均价作为金额的代理变量。这个替代方案在业务上完全可解释而且比直接放弃M维度要好得多。RFM的阈值划分我一般不用固定数值而是用分位数。比如R取最近一次互动距今天数按20%、40%、60%、80%分位切成5档分别赋1到5分。F和M同理。这样分出来的用户群在数量上相对均衡不会出现某一类用户过多或过少的情况。分位数划分的另一个好处是当数据分布随时间变化时阈值会自动调整不需要人工干预。3.2 偏好标签的加权计算偏好标签回答的是“用户喜欢什么”。在淘宝场景下最核心的偏好是类目偏好和价格带偏好。类目偏好的计算逻辑是对每个用户按类目聚合行为权重然后取权重最高的前三个类目作为偏好类目。但这里有个问题如果用户浏览了很多类目但每个都只浏览一次权重最高的类目可能只是随机噪声。所以我会加一个置信度过滤只有当某个类目的行为权重占用户总权重的比例超过15%且行为次数超过5次时才认定为偏好类目。价格带偏好的计算类似但需要先把商品价格映射到价格带。价格带的划分没有统一标准我一般按业务场景定0-50元、50-100元、100-200元、200-500元、500元以上。然后按行为权重聚合取占比最高的价格带。这里要注意浏览价格带和购买价格带可能不一致。一个用户可能经常浏览高端商品但只购买低价商品这代表“向往型消费”。我会把浏览价格带和购买价格带都保留交叉分析时能发现这类用户。除了类目和价格带还可以做品牌偏好、时段偏好、促销敏感度等标签。时段偏好是看用户的行为集中在一天中的哪个时段比如“夜猫型”用户集中在22点到凌晨2点“上班摸鱼型”集中在10点到12点和15点到17点。促销敏感度则需要结合促销活动日期看用户在促销期的行为权重是否显著高于非促销期。这些标签的计算逻辑都不复杂关键是定义清楚“显著高于”的阈值。3.3 用户分群的交叉策略有了RFM和偏好标签下一步是把用户分成可运营的群体。我常用的分群方法是先按RFM的R和F做九宫格再在每个格子里按偏好标签细分。比如R\F低频中频高频近新客/回流客活跃客核心客中沉睡客普通客忠诚客远流失客预流失客历史高价值客这个九宫格的好处是每个格子都有明确的运营动作。比如“近-低频”是刚有过互动但购买少的新客或回流客适合发首单券或新人礼包“远-高频”是曾经买过很多次但最近不来了的历史高价值客适合发召回短信或大额券。在每个格子里再按偏好类目细分比如“近-低频-美妆偏好”和“近-低频-数码偏好”运营文案和选品就能更精准。注意分群不是越细越好。我见过有人把用户分成几百个群结果每个群只有几十个人运营根本没法针对每个群做动作。我的经验是核心运营群控制在10到15个每个群至少占总用户的1%到2%这样才有规模化运营的价值。其他长尾群可以合并为“其他”或只做自动化触达。4. 实操过程与核心环节实现4.1 从原始日志到用户标签宽表整个实操流程可以拆成五步数据加载、清洗、聚合、标签计算、落地存储。我以一份模拟的淘宝用户行为数据为例走一遍完整流程。假设数据文件是CSV格式包含user_id、item_id、category_id、behavior_type、timestamp五个字段时间范围是最近90天。第一步加载数据并做基础清洗。用pandas读取后先检查缺失值和重复值。如果user_id或item_id为空直接删除如果behavior_type不在pv、fav、cart、buy范围内也删除。然后按前面说的规则过滤低活跃用户和无效商品。第二步构建用户-行为聚合表。按user_id分组计算每个用户的总行为次数、购买次数、加购次数、收藏次数、浏览次数以及最近一次行为时间、最近一次购买时间。这里用groupby加agg可以一次算完user_agg df.groupby(user_id).agg( total_behavior(behavior_type, count), buy_count(behavior_type, lambda x: (x buy).sum()), cart_count(behavior_type, lambda x: (x cart).sum()), fav_count(behavior_type, lambda x: (x fav).sum()), pv_count(behavior_type, lambda x: (x pv).sum()), last_behavior_time(datetime, max), last_buy_time(datetime, lambda x: x[df.loc[x.index, behavior_type] buy].max() if (df.loc[x.index, behavior_type] buy).any() else pd.NaT) ).reset_index()第三步计算RFM得分。用当前日期减去last_behavior_time得到R值用buy_count得到F值用购买类目的平均价格乘以购买次数得到M的代理值。然后对R、F、M分别做分位数切分赋1到5分。这里要注意R值越小越好所以分位数切分后要反向赋分最近互动的用户得5分。第四步计算偏好标签。按user_id和category_id分组聚合行为权重然后对每个用户取权重最高的前三个类目。同时按价格带聚合取占比最高的价格带。这一步可以用groupby加apply实现但数据量大时apply会很慢建议用窗口函数或先聚合再排序取TopN。第五步把RFM得分、偏好标签、基础统计量合并成一张用户标签宽表写入数据库或Parquet文件。这张宽表就是后续所有分析和运营动作的基础。4.2 参数计算与阈值选择过程在RFM计算中分位数切分的具体参数需要根据数据分布来定。我一般先用describe()看R、F、M的分布如果F的分布极度长尾比如90%的用户购买次数在1到3次那么按20%分位切分会导致大量用户挤在低分档。这时候我会改用自定义阈值F1为1分F2到3为2分F4到5为3分F6到10为4分F10为5分。这个阈值不是固定的而是根据业务经验调整核心原则是让每个分档都有足够的用户量同时分档之间的行为差异明显。偏好标签的置信度阈值也需要调。我一开始设的是行为权重占比超过10%且行为次数超过3次结果发现很多用户被打了太多偏好标签因为他们的行为分散在多个类目。后来把占比阈值提高到15%、次数阈值提高到5次偏好标签的数量明显减少但准确度提高了。这个调整过程需要反复看样本我一般随机抽100个用户人工检查他们的偏好标签是否合理然后微调阈值。价格带的划分同样需要看数据。如果数据集中大部分商品价格在50到200元之间那么价格带可以细分为50-100、100-150、150-200如果价格分布很广就用更粗的划分。我的经验是价格带的数量控制在5到7个太少区分度不够太多每个价格带的用户太少。4.3 用户画像的存储与更新用户画像不是算一次就完事需要定期更新。淘宝场景下行为数据是实时产生的但画像更新不需要实时通常按天或按周更新就够了。我一般用天级增量更新每天计算最近90天的行为数据覆盖更新用户标签宽表。这样既能反映最新行为又不会因为实时计算带来过高的资源消耗。存储方面如果用户量在百万级以下用MySQL或PostgreSQL就够了如果上千万建议用Hive或ClickHouse。标签宽表的字段设计要预留扩展空间比如用JSON字段存储偏好类目列表用数组字段存储价格带偏好。这样后续增加新标签时不需要改表结构。提示更新画像时要注意数据回刷。如果某天的数据源出现异常比如日志丢失或重复直接覆盖更新会导致画像失真。我的做法是保留最近7天的原始数据快照更新前先做数据质量检查确认无误后再覆盖。5. 常见问题与排查技巧实录5.1 数据质量问题的排查思路用户画像项目里数据质量问题占了排查工作的一半以上。我遇到最多的三类问题是时间戳异常、行为类型缺失、用户ID重复。时间戳异常表现为某些记录的时间戳是未来时间或1970年这通常是数据采集或传输错误直接剔除。行为类型缺失表现为空值或未知类型如果占比低于1%直接删除如果占比高需要联系数据源排查。用户ID重复有两种情况一种是同一用户在不同设备上登录产生多个ID另一种是数据重复写入。前者需要用设备指纹或登录账号做ID映射后者直接去重。ID映射在淘宝场景下很常见但公开数据集通常没有设备信息只能按用户ID去重。还有一个隐蔽问题行为类型的顺序。在真实场景下用户的行为是有时序的比如先浏览再加购再购买。如果数据里购买记录出现在浏览记录之前说明数据有问题。我会按用户ID和时间戳排序检查行为序列是否符合“pv - fav/cart - buy”的常见路径。如果大量记录不符合说明数据采集或清洗环节出了问题。5.2 画像标签不准的调试方法标签不准通常有三种原因阈值不合理、权重设计有偏、数据窗口太短。调试时我一般从样本入手随机抽100个用户人工看他们的行为记录和生成的标签找出明显不合理的案例。比如一个用户明明经常买母婴用品但偏好标签却是“数码”这可能是权重设计问题——数码类目的浏览权重被高估了。调试阈值时我会画标签分布的直方图看是否出现“双峰”或“断崖”。如果某个标签的分布集中在两端说明阈值把用户硬生生切成了两类中间没有过渡。这时候需要调整分位数或改用聚类方法。调试权重时我会做敏感性分析把某个行为的权重调高或调低10%看标签结果变化大不大。如果变化很大说明权重设计不稳定需要重新评估。数据窗口太短是新手常犯的错误。比如只用最近7天的数据算RFMR值会很准但F和M会因为窗口太短而失真。我的经验是行为窗口至少30天购买窗口至少90天。如果数据量允许用180天甚至365天的购买数据算F和M会更稳定。5.3 常见问题速查表问题现象可能原因排查方法解决方案用户标签数量异常多置信度阈值太低检查偏好标签的占比和次数阈值提高占比阈值到15%以上次数阈值到5次以上RFM分群结果不均衡分位数切分不适合长尾分布画F和M的分布直方图改用自定义阈值确保每档用户量均衡画像更新后标签突变数据源异常或窗口滑动对比更新前后的原始数据量保留数据快照更新前做质量检查偏好类目与购买类目不一致浏览和购买行为权重混淆分别计算浏览偏好和购买偏好保留两套偏好标签交叉分析计算速度慢数据倾斜或全量计算检查用户行为分布对头部用户单独处理用增量更新替代全量注意排查问题时先看数据、再看逻辑、最后看代码。我见过太多人一上来就怀疑代码写错了结果查了半天发现是数据源本身有问题。养成先做数据质量检查的习惯能省下大量调试时间。6. 从画像到运营策略的落地经验6.1 不同用户群的触达策略画像算出来不是终点能指导运营动作才有价值。我一般把用户群按RFM九宫格和偏好标签组合给出具体的触达策略。比如“近-低频-美妆偏好”用户他们最近有互动但购买少偏好美妆适合推送美妆类目的首单券或小样试用装。“远-高频-母婴偏好”用户曾经买过很多次母婴用品但最近不来了适合推送母婴用品的召回券或新品通知。触达渠道也要匹配用户群。年轻用户偏好推送和站内信中老年用户可能更习惯短信。时段偏好标签在这里很有用夜猫型用户在晚上10点后推送打开率明显更高。这些策略不是拍脑袋而是基于画像标签的交叉分析。我做过一次A/B测试按画像标签分群推送的转化率比全量推送高了40%以上。6.2 画像效果的评估指标画像做得好不好不能只看标签数量要看业务效果。我常用的评估指标有三个覆盖率、准确率和提升度。覆盖率是指有标签的用户占总用户的比例低于60%说明标签体系覆盖不足。准确率需要人工抽样验证我一般抽200个用户看标签与人工判断的一致率低于80%就需要优化。提升度是看按画像分群运营后转化率、客单价等指标相比全量运营提升了多少。这三个指标里提升度最重要但也最难算。我的做法是设计对照实验随机选一部分用户按画像分群运营另一部分用户全量运营对比两组的转化率差异。如果提升度不显著说明画像标签没有抓住关键差异需要重新设计标签体系。6.3 我踩过的坑与经验总结做用户画像这些年踩过的坑不少。最大的一个坑是过度依赖RFM。早期我做画像只算RFM结果发现很多高价值用户被漏掉了因为他们最近没有购买但一直在浏览和加购。后来加入行为活跃度标签才把这些“沉默高潜”用户找出来。另一个坑是忽略数据时效性。有一次我用三个月前的数据做画像结果运营按画像推送的券全部过期了转化率惨不忍睹。从那以后我坚持画像数据不超过7天重要标签每天更新。还有一个经验是画像要可解释。我见过一些团队用深度学习做用户 embedding效果确实好但运营看不懂不知道怎么用。用户画像的标签必须是运营能理解、能直接对应到动作的。比如“价格敏感型”比“向量维度37的值高”有用得多。所以我现在做画像优先用规则和统计方法只有在规则方法效果不够时才考虑复杂模型。最后分享一个小技巧画像标签的命名要统一规范。我一般用“维度_具体值”的格式比如“偏好类目_美妆”、“价格带_100-200”、“活跃度_高”。这样在SQL查询和报表展示时一目了然不会出现“美妆偏好”和“喜欢美妆”两个标签指同一件事的情况。规范命名看起来是小事但能省下大量沟通成本。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑