
做电商产品这几年我越来越觉得Shopee的推荐算法像一个黑箱但你每天都能看见它在“工作”。同样是打开首页我同事刷出来是清一色3C配件我这边全是家居日用上午刚搜过“蓝牙耳机”下午首页就冒出一堆耳机壳和充电仓。这种“仿佛被看穿”的感觉实际上就是平台算法在背后不断做用户画像、召回、排序和重排的结果。这篇博文是我给自己定的一个长期分析任务的第一篇。我不打算碰任何破解、抓包或者侵犯数据隐私的手段纯靠黑盒观察、行为实验和公开界面信息把Shopee APP的算法逻辑一层层拆开看。内容适合对电商推荐机制感兴趣的产品经理、做跨境独立站的卖家和算法方向的同学参考我会尽量把实验方法写清楚让每个人都可以自己动手复现。1. 分析目标与整体方法设计1.1 为什么选择“黑盒观察”而不是别的路子很多人听说“算法分析”第一反应是逆向了、脱壳了、抓包了我明确说这条路我完全不碰。一方面合规风险太高Shopee的服务协议里明确禁止任何自动化采集和逆向行为一旦被风控识别账号被限制还是小事给自己惹上麻烦就得不偿失了。另一方面做产品机制研究其实根本用不到那套东西——推荐算法不管内部多复杂终归要通过界面呈现给我看我只需要设计合理的实验用“输入行为”换“输出结果”再对比控制组和实验组的差异就能推断出算法的偏好。这个思路有点像盲测我不需要知道厨房里用了哪几种调料只需要反复点几道菜对比每次味道的差异就能猜出大厨大概的偏好。黑盒分析的精髓也在这——不关心“怎么实现的”只关心“什么条件下会呈现什么结果”。1.2 实验环境与数据记录方案做黑盒分析最怕的不是算法难猜而是实验环境不干净。我自己的标准化配置是这样的两台安卓真机一台日常使用一台专门做实验系统语言都设为目标站点本地语言我做泰国站就切泰语做印尼站就切印尼语因为语言本身就影响推荐结果。每个实验用独立账号账号之间绝不交叉浏览避免画像污染。固定网络环境同一WiFi下手机的位置信息保持一致排除LBS基于位置的推荐干扰。所有观察结果用表格记录包括时间、动作、商品标题、价格、销量、评分、广告标识、所在坑位。这是我在初期踩过最大的坑一开始图省事用一个大号边买边测结果数据混在一起完全分不清哪个结果是哪次行为触发的。后来才老老实实做了多账号矩阵每次实验开新号或者用“干净”的老号记录才变得可解释。提示实验账号最好提前养几天每天正常刷一刷、点点商品模拟真实用户行为。新号冷启动的推荐策略和老号完全不同如果直接用刚注册的号做实验观察到的只是“冷启动算法”不是常态算法。1.3 分析边界与可复现性原则我必须先说清楚边界。这套分析全部基于App正常操作界面上可以看到的信息不涉及任何对用户数据的采集、对接口的调用、对流量内容的截取。换句话讲一个普通用户在手机上能看的我都能看一个普通用户不能看的我也不看。可复现性是这类研究里经常被忽略的一环。我踩过的教训是同一个实验昨天做和今天做结果可能完全不一样用A账号和B账号做结果也可能不一样。后来我总结了一个“三遍原则”——同一个实验至少做三遍如果三遍结论一致才认为这个发现可信如果三遍结论不一致就要排查是变量没控制好还是算法本身有随机性。现在我把这个原则分享出来帮你少走弯路。2. 首页信息流推荐机制观察2.1 冷启动阶段新账号到底看到了什么我做的第一个实验是在泰国站注册一个全新账号不点任何东西打开首页记录Feed里前50个商品的类目分布。结果非常有意思家居收纳类占比最高约24%美妆个护约18%3C配件约16%女装约12%剩下的零散分布在母婴、食品、宠物用品这些类目上。这说明什么在新账号没有任何行为数据的情况下Shopee是沿着“地域热销全局热榜”这个路线做冷启动推荐的。用户画像此时是空白的算法的确定性最强基本等同于打开一个“该地区热销商品榜”。这个阶段的推荐拼的是平台当下的热销品类结构和区域供给分布跟用户个人的偏好还没有半毛钱关系。第二个冷启动观察是账号性别设置对结果的影响。我注册了两个新号一个选“男”一个选“女”其余条件完全一致。结果女号首页出现了大量女装和彩妆男号首页则是手机配件和运动户外占比明显更高。也就是说即便没有历史行为算法也会用注册信息里的性别字段做初步的画像预估。2.2 行为反馈周期点击、浏览、加购的影响权重冷启动之后我开始验证算法对用户行为的敏感度。实验设计是这样的用一个干净的账号先刷首页完成冷启动记录前30个Feed的类目分布作为基线然后不看其他类目只连续点击美妆类商品每件商品点进去停留15到30秒再返回首页每个商品都完成一次完整的浏览行为但故意不加购、不收藏、不搜索。连续操作12个商品后我重新打开首页记录新的类目分布。结果如下美妆类目从基线的18%直接跳到46%3C配件从16%降到了8%。这个反馈速度非常快12次点击就能让首页信息流产生明显变化说明Shopee的用户行为反馈链路是实时的点击权重在短期偏好修正中相当高。我又做了一个对照实验同样点美妆商品但点进去后3秒就退出不等待页面加载完模拟“误触”行为。结果首页变化明显慢了很多同样的12次“秒退点击”美妆占比只提升了5个百分点。这说明算法对流量的“质量”是有判断的——停留时长太短会被判定为低质量点击权重被显著压低。这个设计逻辑很聪明它能防住那些恶意刷点击的商家保证推荐信号的真实性。2.3 推荐刷新机制下拉刷新与冷启动重进的差异很多人以为下拉刷新就是重新请求一批商品我实测下来发现没那么简单。在连续下拉刷新30次的过程中我记录到两类现象大部分商品出现位移排序变化但商品池本身几乎没有变化前50个Feed里大约有75%的商品在前面几轮出现过只有少数几次刷新会出现少量此前没见过的商品像“试探性”混入新内容。这种情况说明Shopee的推荐Feed不是纯粹的实时重新排序而是“先构建候选池再在池子里做排序调整”。下拉刷新只是换了个排序方案没有真正扩充候选池。真正让候选池发生变化的操作是什么是彻底杀掉App进程再重新打开或者在搜索结果页、分类页里发生了新的行为。我实测杀进程后重进首页大约有20%到30%的商品是此前从未见过的。对电商从业者来说这个机制的启示是想让自己的商品进入更多用户的推荐池靠“优化现有商品标签”不如靠“让商品在更宽泛的类目搜索里获得曝光”因为候选池的扩充渠道主要来自搜索行为和类目浏览而不是Feed内部循环。3. 搜索排序与匹配逻辑拆解3.1 关键词匹配层级从字符到语义搜索算法比推荐算法好分析得多因为输入输出都很清晰——你输入什么词它返回什么结果。我做的第一组实验是关键词匹配程度的对照。搜索“手机壳”这个泛词前10个结果的价格区间在59泰铢到399泰铢之间销量跨度从几十到几万。这里有个有趣的细节销量最高的商品并不在第一位排第一的是一个带有“广告”标识的商品。这个现象在多个关键词下重复出现说明搜索排序里广告坑位的权重是单独计算的不跟自然排名的因子放在同一套逻辑里比较。再搜索“手机壳 iphone14”这个带具体型号的长尾词结果就不一样了。前10个结果里8个标题明确包含“iphone14”字样另外2个标题是英文“for iPhone 14”或泰文写法变体。这说明Shopee的搜索匹配已经做到了语义级——不是单纯的字符匹配它知道“iphone14”、“iPhone 14”、“ไอโฟน14”泰文的iPhone 14指的是同一个东西。我做了一个更极端的测试搜索“手机壳 苹果14”也就是用户口语化的表达并没按官方型号来写。搜索结果里同样出现了大量iPhone 14手机壳。这就是电商搜索里常说的“查询理解”和“语义扩展”平台会把用户输入做归一化和改写再去匹配商品库里的标准化标签。3.2 排序因子权重推测销量、评分、价格带如何博弈为了拆解排序因子我在同一关键词“蓝牙耳机”下做了多维度对比实验。核心方法把搜索结果页前30个商品的数据全部记录下来并按不同维度排序观察规律。首先是销量与排名的关系。我统计了前30个商品里销量排名前10的商品发现它们的平均排序位置并不靠前大约在12位左右。这有点反常识——很多人以为销量越高排名越靠前实测发现高销量是必要条件但不是充分条件。其次是价格带与排名的关系。我对前30个商品做了价格分布统计发现200到500泰铢这个相对中低价位段的商品占比最高约47%。太便宜的低于100泰铢和太贵的高于1000泰铢商品都很难进入搜索前排。这说明搜索算法里有一个隐形的价格带偏好——平台倾向于把“可能转化率最高”的价格区间推给用户而不是把最便宜或最贵的商品推出来。最后是评分与排名的关系。我对比了评分4.9分以上商品的平均排序位置和4.5分以下商品的平均排序位置发现前者明显靠前但这个因子只在同等销量水平下起作用。一个销量10000但评分4.3的商品排名通常高于销量100但评分4.9的商品。销量和评分不是简单的加和关系更像是阶梯式的门槛先看销量过没过线过了线再看评分两者都满足才进入前排候选。注意以上观察是单一账号、单一关键词下的结论不代表Shopee搜索权重的完整公式。搜索算法是动态的不同类目、不同站点的因子权重差异可能很大。但这个方法是可以迁移的换个关键词换个站点照样能跑出那个市场自己的规律。3.3 个性化对搜索排序的影响程度搜索结果的个性化程度是个关键问题。我分别用了“干净新号”和“养了15天、长期浏览高价3C产品的老号”在同一个时间段、同一个网络下搜索同一个词“蓝牙耳机”。两个账号的结果差异非常明显。新号的前10个商品里价格在200到500泰铢的高性价比商品占大头老号的前10个结果里则出现了大量800到1500泰铢的高价商品甚至有几个是新号首页完全没出现过的品牌型号。销量上老号看到的结果并不比新号高甚至略有降低说明算法为了适配老号的“高价偏好”主动牺牲了一部分销量权重。这个实验给了一个重要结论Shopee的搜索排序不是纯文本匹配而是“文本相关性个性化重排”的两段式结构。文本相关性确定了候选集个性化再在这个基础上做二次排序。对卖家来说这意味着同样的标题和关键词优化策略在不同用户面前呈现的排名可能差异很大。说极端一点一个只做低价市场、靠跑量起店的卖家和一个只做高端线、靠利润撑场的卖家其实是在跟不同“口味”的用户池对话——平台算法会自动把他们的商品分别推到对应的人群面前。4. 价格与促销背后的算法策略4.1 价格带分层算法眼中的“消费能力”电商算法对用户消费能力的判断最直观的体现就是价格带分层。我设计了一个长达一周的行为实验用一个账号只看300泰铢以下的家居商品不点任何高价商品用另一个账号只看800泰铢以上的同类商品其他行为完全一致。一周后两个账号的首页信息流价格分布出现了肉眼可见的分化。低价账号的Feed里商品平均价格从基线的400泰铢降到了250泰铢左右高价账号的Feed里商品平均价格升到了900泰铢以上。更关键的是如果偶尔出现一个价格特别低的商品算法给它展示的位置非常靠后像是“确认一下你是不是真的只喜欢便宜货”。这个观察揭示了一个做电商运营值得深想的点平台其实在持续给每个用户“打标签”价格偏好就是其中最重要的一类。对商家来说与其追求“全人群可见”不如从一开始就明确定位你的价格带——你是想做下沉市场走量还是做中高端拿利润把目标人群的价格偏好和商品定价对齐让算法更容易把你匹配给对的人比盲目降价更有价值。4.2 优惠券发放的算法逻辑新客、沉睡、比价不离优惠券是另一个能观察到算法逻辑的窗口。我做了三组对照观察分别模拟新用户、沉睡用户和比价中用户的场景。新用户注册后我收到的是全站无门槛券金额不小但用券商品范围很宽。这里的关键观察是新客券的有效期很短通常只有7天左右。这说明平台对新客转化的预期非常激进——“给你一个好价格但这笔转化必须在短期内完成过期不候”。沉睡用户场景是怎么观察的我养了一个号正常购物一段时间后接下来15天完全不打开App。第16天重新打开页面上弹出了“限时回归礼”同样是无门槛券但面额比新客券还大。这说明平台对“流失用户召回”的预算投入比对“拉新转化”还要高——反正这个用户已经花过钱只要让他回来复购概率是很大的。比价不离开用户我在App里反复浏览同一款商品然后切换到别的电商平台搜同款再切回Shopee。几次之后那个商品页面上突然多出一张“专属优惠券”价格直接降了一截。这说明Shopee的智能投放系统能识别“用户在犹豫比价”的信号并自动触发价格优惠来留住用户。这个机制对卖家来说是有参考意义的——如果你的商品被系统纳入这类“抢单推荐”店铺的转化率上限会高很多但单均利润也会被压下来。4.3 同款商品的流量倾斜与动态定价观察最后说说平台对同款商品的流量倾斜策略。我搜索“无线吸尘器”后在结果页里找到了三款参数高度相似的商品价格分别是1890、2290和2990泰铢。我分别记录了它们三天的日均销量和排名变化。第一天三款的价格和排名都稳定中价位2290泰铢的商品排名最靠前。第二天我点了高价位2990泰铢的商品并在它的商品页停留了较长时间还查看了评价。晚上再搜同一个词时该商品排名提到了第二位。第三天中价位商品仍然排在第一位高价位商品稳定在第二到第三位。这里我注意到一个细节被我点击加权的商品价格没变但页面上多了一条“限时降价200泰铢”的标签。这更像平台在“试探”我对价格是否敏感——如果我在降价后仍然加购说明价格不是障碍如果降价后我反而没动作可能说明我对这个商品的需求没那么强烈算法就会降低对这个商品和这个价位段对我的推送权重。这次观察也让我理解了一个逻辑电商算法追求的本质不是“让你买到最便宜的”而是“让你以你愿意接受的价格完成购买”。平台和商家之间的利益在这件事上是微妙的——他既要让你感觉“占到了便宜”又要保证商家有利润可赚所以动态调价的幅度通常很小但刚好能触及你的心理阈值。5. 常见观察误区和排查经验5.1 把AB实验当成算法常态我最常出现的误判是把平台跑AB实验时的临时策略当成普遍规律。有一次我在同一个站点观察搜索排序连续三天记录同关键词的结果发现价格带权重变化非常大第一天低价商品占优第二天中高价占优第三天又回到低价占优。我开始怀疑是不是自己的操作触发了什么变化后来才发现平台那几天刚好在测试新的价格带权重策略一批账号被分到了实验组另一批留在对照组两批用户看到的结果是不同版本的算法。排除这个问题的方法只有一个做足够长的连续观察并且同时用多个独立账号平行记录。如果只是单个时间点、单个账号的数据很容易把平台的临时实验、随机探索或者活动期策略当成“稳定规律”这样得出的结论完全没有参考价值。5.2 单账号实验导致数据污染这个坑我前面提到过但值得单独拿出来再说一次。用同一个账号做多个实验最麻烦的问题是“前一个实验的行为会变成后一个实验的画像输入”。比如你先点了大量美妆产品然后想测3C产品的排名规律这时候系统已经把你的账号标成了“美妆兴趣用户”你看到的3C搜索结果里混进了跟美妆兴趣相关的个性化重排结论完全不准。我的经验做法是每个实验前要评估“这个实验会不会污染账号画像”如果会就新建一个干净号或者在当前实验开始前让账号“静默”两三天把之前的兴趣权重弱化。宁可通过养号付出时间成本也不要用污染数据换几天时间因为后面的纠错成本更高。5.3 忽略LBS、时段和季节因素LBS因素很好理解——同一个账号在曼谷和在清迈看到的推荐结果肯定不一样城市级别的消费习惯差异非常大。时段因素则很容易被忽略我在深夜和白天分别刷同一个关键词发现部分类目的商品结构会变化晚上休闲食品和居家用品的占比明显高于白天白天则3C配件的权重更高。季节因素更是直接改变整个类目的流量分配比如泰国雨季前后雨具、防水手机的曝光量成倍上升。做了快两个月的Shopee算法观察我个人的体会是这类研究最考验的不是聪明而是耐心。一次实验什么也说明不了十次实验才能看到趋势这里面的噪声远比想象中大。但反过来讲一旦你建立起自己的观察体系和方法论这个App对你的“黑箱”属性就会越来越弱。后续我还会继续更新这个系列下篇准备重点拆解“猜你喜欢”的重排策略和视频带货的流量分配逻辑感兴趣的话可以先自己动手记录一下你首页Feed的类目分布你会发现一些意料之外的东西。