资讯详情

推荐系统全链路拆解:从数据埋点到排序模型与冷启动实践

📅 2026/10/20 18:50:40 | 华诺云谱 👁 阅读
推荐系统全链路拆解:从数据埋点到排序模型与冷启动实践
打开任何一个内容型App底部的推荐流几乎已经成了标配。你刷某款视频应用前三屏全是算法算出来的你用某个电商平台首页banner下面紧跟的就是“猜你喜欢”。说句实话个性化推荐这玩意儿在今天已经不是“亮点功能”而是产品的基础设施。我这两年经手的几个项目从资讯分发到电商场景几乎每一个都需要一套能用的推荐系统。踩过的坑不少沉淀下来的方法论也不少这篇就集中把“推荐系统从零到可用”这整条链路拆开讲清楚。这篇内容会覆盖推荐链路里的每个关键环节本质问题、数据层、召回、排序、冷启动、评估再到一个最简系统的落地参考。适合三种人看一是刚接触推荐系统、想建立全局认知的工程师二是被业务方追着问“推荐效果为什么又跌了”的产品经理三是想在自己的独立应用里加推荐逻辑的独立开发者。我尽量用大白话把原理和坑都讲透。1. 个性化推荐解决的本质问题不是猜你喜欢是降低选择成本很多人一提推荐就想到“猜你喜欢”好像系统的目标是读心术。我自己做了几轮之后才意识到这个理解其实偏了。推荐系统从来不负责猜你内心深处想要什么它真正解决的是在海量候选内容中把用户当下最可能点击、消费、转化的那一小撮内容以最低成本呈现在用户面前。你可以把推荐理解成一个漏斗。内容库里有一千万条商品、视频或文章用户的注意力只有黄金几秒。如果没有算法用户得自己翻页、搜索、筛选项这个选择成本高到让很多人直接放弃。推荐做的是把这一千万压成二十个让用户几乎不用动脑就能找到自己想要的。所以衡量推荐系统的核心指标从来不是“猜得准不准”而是“用户停留了多久、消费了多少”。举个例子一家做资讯阅读的产品改版前是编辑人工推荐编辑判断“今天所有读者都应该看这篇头条”。改版后换成了个性化推荐流每个用户看到的头条都不一样。结果可能是单篇内容的人均阅读时长下降了因为文章不再那么“普适爆款”但用户整体使用时长、次日留存反而明显上升了。原因很简单——每个人都看到了自己更愿意点进去的内容整体体验更顺滑。这个案例我印象很深它说明了推荐的商业价值不在“单篇流量最大”而在“整体体验最优”。我在实际项目里还遇到过一个很容易被忽略的问题推荐越准用户的视野反而可能越窄。这也是推荐系统的一个本质矛盾——它既要帮你快速找到喜欢的东西又不能让你困在信息茧房里。所以真正成熟的推荐系统会在排序阶段主动引入一些“你可能没看过但大概率会喜欢”的新品类。这个在后面讲重排和冷启动时还会详细展开。2. 推荐系统的完整链路从埋点到渲染的每个环节都在干什么一套标准的工业级推荐系统从用户打开App到看到内容中间大概要经过五个环节数据采集、召回、粗排、精排、重排。很多刚入行的同学容易把注意力全放在排序模型上其实整条链路环环相扣任何一环弱了排序模型再强也白搭。2.1 数据层行为日志与特征平台是推荐的燃料推荐系统是数据喂养出来的数据层是所有环节的地基。这个环节要解决两件事采什么数据、怎么存储和服务这些数据。采数据方面至少要覆盖几类信号显式反馈用户主动点击的赞、踩、评分、收藏等隐式反馈曝光、点击、浏览时长、滑动速度、加购、下单等上下文信息设备类型、网络环境、地理位置、当前时间等用户画像注册时填写的性别、年龄段、兴趣标签或第三方补充的画像数据采集方式主要是前端埋点。这里有一条我的经验曝光数据和点击数据必须分开记。很多项目一开始图省事只记录“用户点了什么”结果后面做排序模型需要构造负样本曝光但未点击时完全没有数据可用只能拍脑袋造负样本效果很糟糕。正确的做法是每次推荐结果渲染时把返回的物品ID列表连同场景ID、请求ID一起记录下来用户后续的点击行为再和这条曝光记录关联。有这个关联你才能知道“哪些推荐被展示但用户没理”这是排序模型最宝贵的负样本来源。存储和服务层面用户的实时行为通常写进消息队列再经过流式计算更新到用户实时特征里离线行为则落Hive表供离线训练使用。特征服务一般用KV存储比如把用户最近点击的50个物品ID拼接成一个字符串塞进缓存线上模型推理时毫秒级取出来拼特征。这块没有什么高深的算法重点是时效性和稳定性的取舍——你不能让线上推理服务去查一张要跑3秒的分析型数据库。2.2 召回层把候选集从千万级降到百级假设内容库有一千万条物品排序模型再强也不可能对一千万条逐条打分。一个是算力不允许一个是延迟不允许。所以召回层的任务很简单快速、粗略地从全量候选里筛出一批“看起来靠谱”的候选数量一般是几百到几千。召回策略通常是多路并行的。常见的有协同过滤召回基于用户相似或物品相似找候选向量召回把用户和物品都映射成向量用近似最近邻搜索找最相似的物品热门召回兜底策略保证冷启动用户也能刷到内容语义召回基于文本、标签、类目的匹配同城召回基于地理位置信息召回通道越多候选集的覆盖度越广后面排序模型的发挥空间就越大。但通道太多也会带来工程复杂度每条通道的分数不在一个量级上没法直接比较。实际做法是召回阶段不做精细打分只负责“把可能相关的都划拉进来”排序阶段再统一打分。你可以把召回理解成海选——标准放宽松先保证“英雄不问出处”。2.3 排序层衡量“点击概率”的精细活儿排序层是推荐系统的技术核心也是绝大多数论文和工程师精力投入的地方。它的任务是对召回回来的候选逐条精准打分估计用户对每个物品的点击概率或转化概率然后按分数递减排列。排序模型的输入是特征特征可以简单理解为三个维度的组合用户特征年龄、性别、历史行为序列、物品特征标题、类目、价格、历史表现、上下文特征时间、位置、设备。模型本身从最早的逻辑回归到梯度提升树再到深度模型一路演进但特征的质量和样本的质量始终比模型结构更影响线上效果。这句话我反复跟团队强调因为大家总想try最新的模型结构却忽视了特征工程的细致活。排序阶段还要考虑业务目标。做电商目标是下单率不能光看点击率做内容社区目标是阅读时长和互动率。所以排序模型的目标函数经常是多个目标的加权结合比如点击率、点赞率、评论率各占一定权重。具体怎么定权重没有标准答案得靠线上实验调。2.4 重排层多样性、新鲜度与业务规则的最终博弈排序模型给的是一串按分数降序的列表但如果真按这个列表直接展示用户很快就会审美疲劳。试想一下如果你连续刷到十条内容全是同一个博主发的哪怕每条都符合你的口味体验也非常糟糕。重排层就是做“列表层面的优化”。重排要解决的主要问题有三个多样性打散相邻物品不能同质化比如视频场景要控制同一作者、同一题材的连续出现次数新鲜度保证不能让用户每次刷新看到的都是老面孔要强行插入一些新发布的物品业务规则兜底比如广告位、运营置顶位、法律法规要求的过滤内容等我见过一个有意思的案例某内容社区上线重排之前人均点击率挺高但用户跳出率也很高因为用户看完第一条觉得“哦又是这类内容”然后就走人了。重排引入多样性控制之后虽然单次点击率略微下降但用户会话时长明显增长。这说明核心指标必须在“用户体验的长期健康度”上来权衡不能只看单次点击的短期指标。3. 召回算法选型协同过滤、矩阵分解与向量召回聊完链路回到最基础的算法选型问题。总有人问“现在还用不用协同过滤”“是不是必须上深度模型”。我的答案是看数据量和业务阶段。数据量小或者初期冷启动阶段经典方案足够用数据量大了再往向量召回迁移。3.1 UserCF与ItemCF经典方案依然没过时协同过滤分两种基于用户的UserCF和基于物品的ItemCF。UserCF的思路是“物以类聚人以群分”。找到和当前用户兴趣最相似的一群人把这些群体用户喜欢的、但当前用户没见过的物品推荐给他。相似度可以用余弦相似度或皮尔逊相关系数计算。ItemCF的思路是“喜欢这个物品的用户通常也会喜欢另一个物品”。根据用户历史行为找出和用户之前喜欢的物品最相似的物品来推荐。这两种方法选型的关键点在于场景差异。UserCF更偏“发现惊喜”适合用户量不大、个性化需求不强的场景比如新闻资讯ItemCF更注重“稳定相似”适合电商、视频这类用户兴趣相对稳定的场景比如“看了这个又看那个”。实际落地中ItemCF的实现和维护成本更可控因为它依赖物品间的相似度矩阵而物品数量通常比用户数量少一个数量级相似度矩阵的更新频率也低得多。3.2 矩阵分解把评分矩阵压成隐向量协同过滤的直接问题是稀疏性——用户-物品打分矩阵太稀疏了大量位置是空的直接算相似度误差很大。矩阵分解的思路是把巨大的稀疏矩阵拆解成两个矮胖矩阵的乘积一个代表用户的隐向量一个代表物品的隐向量。用户和物品的匹配程度就是两个向量做点积。我早期做推荐时用过交替最小二乘算法原理不复杂固定物品矩阵求解用户矩阵再固定用户矩阵求解物品矩阵交替迭代直到收敛。工业界用得比较多的分布式实现是Spark MLlib里的ALS。效果上矩阵分解相比直接协同过滤泛化能力更强尤其在行为数据足够的情况下能为后续的向量召回打底。但矩阵分解也有明显的天花板它只能利用用户-物品交互信息没法利用用户和物品本身的属性特征。所以后来的趋势是把特征工程和深度模型结合起来用更丰富的信号做向量化。3.3 向量召回与双塔模型工业化的事实标准到了大数据量阶段业界普遍走向向量召回。做法是训练一个双塔模型左边塔输入用户特征输出用户向量右边塔输入物品特征输出物品向量训练目标让“正样本对”的向量距离尽量近“负样本对”的距离尽量远。线上使用时把全量物品向量提前算好并建索引用户请求来时只算一次用户向量然后在向量索引里做近邻搜索。为什么双塔是事实标准因为它天然适合工业落地。物品向量可以完全离线算好用户向量也可以缓存线上推理成本极低而且近邻搜索有成熟的工具和一套完整的优化方法。向量检索的召回速度能做到几十毫秒级别吞吐量也扛得住大流量。我用一个类比来解释双塔和矩阵分解的关系矩阵分解是只有ID特征的双塔模型双塔是加入了更多特征的“矩阵分解Plus”。技术演进的路径本质上是特征越来越丰富、模型容量越来越大的过程。提示向量召回虽然效果好但一定要注意向量索引的更新时效。全量向量每天重建一次是可以接受的增量向量比如半小时内新发布的物品要设计单独的通道送进索引否则刚发布的内容永远召回不出来冷启动就无从谈起。3.4 召回质量的评估不要把召回当排序评估召回通道的好坏常用的是召回率和命中率指标。比如用户最终点击了物品A那么在所有召回通道里面有多少通道把A召回了。单通道的召回率不是越高越好因为会把一堆不相关的也划拉进来关键是多通道整体的召回覆盖以及在召回集合上的后续排序效果。这里我踩过的坑是团队一开始为了追求召回率把召回集合放到一万人排序模型跑一遍要几十毫秒线上接口直接超时。后来改成两级——先粗排用轻量模型过滤到五百再精排打分性能问题一下解决了。召回不是越多越好而是“够用且不拖垮下游”最好。4. 排序模型的进阶之路特征工程比模型结构更值得投入排序层是兵家必争之地。我接触过不少团队一说优化排序就是换模型今天试一下某个新出的深度学习框架明天试一下注意力机制结果线上效果纹丝不动。原因往往是样本、特征、训练目标这些基础问题没解决好。4.1 从LR到GBDT再到DeepFM排序模型的演进路线简单概括是逻辑回归 → 因子分解机 → 梯度提升树 → 深度模型。每一代模型解决的核心问题不一样逻辑回归简单、可解释、训练快但没法自动捕捉特征交叉因子分解机引入了二阶特征交叉比LR强一些梯度提升树对特征的非线性关系建模很强很长一段时间是排序竞赛的霸主深度模型能自动学高阶特征交叉但训练和调优成本更高实际项目里梯度提升树依然是非常能打的baseline。它的效果往往超过不少结构花哨的深度模型而且对特征工程的要求没那么苛刻。我个人的建议是把梯度提升树作为默认选择跑通基线然后再试深度模型。除非你有大量行为序列数据需要建模否则一开始就上深度模型很容易陷入调参泥潭。4.2 特征体系用户、物品、上下文一个都不能少特征工程决定排序效果的上限这不是虚话。一个典型的排序特征体系大概长这样特征类型特征示例说明用户静态特征年龄、性别、城市、注册时长变化慢离线算好用户行为特征近7天点击类目分布、近24小时交互物品ID序列时效性强对效果影响大物品静态特征标题、类目、品牌、价格、上线时长物品的基本属性物品热度特征近24小时点击量、收藏量、转化率反映物品的近期表现上下文特征当前时间、星期几、设备类型、网络环境影响用户当下的行为模式交叉特征用户近期点击类目与物品类目是否一致体现个性化匹配程度在这些特征里用户行为序列特征对效果的影响最大。很多深度模型的核心卖点就是可以对用户行为序列建模。如果你做电商用户最近浏览和购买的物品序列基本决定了他的即时意图如果你做内容用户最近交互的内容话题分布则决定了内容推荐的调性。4.3 样本构造曝光未点击是容易被忽视的金矿排序模型的训练样本正样本一般取“曝光且点击”的记录负样本取“曝光但未点击”的记录。这个看似简单实际操作中坑很多。第一个坑是样本偏差。线上的曝光数据本身是经过排序模型筛选过的结果用这个数据训练新模型会存在一种“人以群分”的偏置问题——模型只见过“以前被推荐出来的内容”没见过“全量候选内容”。解决思路里比较常用的是引入随机曝光流量让部分流量完全随机展示这样采集到的正负样本更接近真实分布。第二个坑是负样本的采样比例。曝光未点击的样本数量往往远大于点击样本比如100:1甚至更高的比例。如果直接用全量负样本训练模型会严重偏向预测“不点击”。通常的做法是控制正负样本比例比如1:3到1:10之间并通过负样本采样来调整训练分布。第三个坑是时间穿越。用未来的数据预测过去的行为会造成指标虚高。训练集和测试集的切分必须严格按时间顺序来这一点我在初做推荐时犯过错误测试集上AUC做到了很高的数值上线一测稀碎就是因为特征里混入了未来信息。注意做排序模型的训练数据流水线时一定要把“特征是否只是用历史信息计算”当成一条重要原则来审查。任何一列特征如果用了“当前预测时刻”之后的信息都有可能导致离线指标和线上表现严重背离。4.4 线上推理延迟、缓存与特征对齐排序模型训练好了上线还有一个硬骨头线上推理性能和特征对齐。推荐接口的整体延迟要求在几百毫秒以内所以排序服务一般做成独立服务输入是用户ID和推荐候选ID列表输出是每个候选的预测分。为了控制延迟要做三件事特征做两级缓存用户静态特征和用户行为序列提前缓存物品特征和物品热度特征也可以提前算好存Redis模型做批量推理一次请求进来把所有候选ID批量过一遍模型而不是逐个预测特征对齐仔细核对线上特征拼接的代码逻辑必须和离线训练时完全一致否则模型“学的时候看到的特征”和“线上用的特征”不是一回事效果会莫名其妙地差5. 冷启动新用户和新内容该怎么破局冷启动是推荐系统最尴尬的阶段没有历史数据再强的模型也巧妇难为无米之炊。但产品又必须面对大量新用户和新内容的涌入。我自己做内容社区的时候冷启动问题一度是流失率最高的原因——新用户来了刷不到感兴趣的东西三天就走光了。5.1 用户冷启动用一切可获取的信号先动起来对新用户系统能拿到的信号非常有限可能只有设备信息、注册手机号归属地、注册时勾选的兴趣标签。但依然有章可循热门兜底新用户先推全站热门内容保证基础体验画像引导利用注册时选择的兴趣标签做初筛设备特征关联通过设备ID关联同类设备用户的偏好分布做粗粒度的兴趣推断实时探索新用户的前几次行为极其宝贵每产生一次点击就立刻更新实时特征让推荐尽可能快地收敛这里面最容易忽视的是“新用户早期体验的节奏设计”。我一贯的建议是前几次推荐要“稳中带一点惊喜”“稳”体现在多推一些大众化的热门内容“惊喜”体现在试探性地给一两条不同领域的内容。如果用户对试探内容产生了交互系统就能很快锁定他的兴趣方向收敛速度提升非常明显。5.2 物品冷启动内容属性与泛化召回新物品同样没有交互数据排序模型很难对它打高分。解决思路是利用物品本身的属性让它先通过冷启动阶段。内容理解给新物品打标签、分好类目提取标题关键词、封面图特征利用相似物品基于内容属性找到和新物品最像的“老物品”把老物品的热度迁移一部分过来独立冷启动通道在召回阶段单独设置一个“新物品通道”保证新发布的内容有一定概率进入排序候选比如每刷十条至少有一条新内容我踩过的坑是为了提升新内容曝光简单粗暴地给新物品加了一个权重分结果新内容大量涌入点击率被拉低很多连带老内容的推荐位也变少了。后来调整策略新物品的流量扶持按“小时级衰减”来做——发布后第1小时给强力扶持之后每隔一小时降一截直到进入常规竞争。这样既给了新内容机会又控制了对整体体验的冲击。5.3 探索与利用一定比例的随机不是bug冷启动背后有一个经典的理论框架叫“探索与利用的权衡”利用是推荐已知用户喜欢的内容探索是尝试推荐用户没接触过的内容。如果永远只做利用推荐系统会越来越僵化用户的兴趣边界也会越缩越窄如果永远在探索用户又可能因为刷不到喜欢的内容而流失。实操层面比较朴素的做法是在推荐流里固定保留5%到10%的探索位。探索位的候选来源可以是新发布的内容、新物品通道召回的内容、用户历史上没怎么曝光过的类目。通过控制探索比例系统就在“讨好用户”和“拓展边界”之间找到了动态平衡。6. 效果衡量与迭代离线指标、线上实验与长期收益推荐系统的效果衡量是整个项目里最容易被低估的环节。我见过太多团队模型上线之后只盯着一个点击率指标涨了皆大欢喜跌了手足无措完全没有一套体系化的评估方法。6.1 离线指标AUC、RecallK、NDCG的适用范围离线阶段常用的指标有三个AUC衡量排序模型把正样本排在负样本前面的概率取值0.5到1之间越接近1越好。AUC对排序结果的整体好坏敏感但它对头部排名的变化不敏感RecallK在Top K条推荐里有多少比例的正样本被召回衡量“推荐列表里有没有用户想要的东西”NDCGK不仅看推荐列表里有没有正样本还看正样本排得够不够靠前越靠前NDCG越高离线指标的意义是快速筛选模型但千万不要迷信离线指标。我见过离线AUC提升了0.02的模型上线点击率反而下降的情况。原因在于离线评估的样本分布和线上实时分布存在偏差加上离线评估无法体现“用户与推荐结果之间的多轮动态交互”。所以离线指标只做初筛真正的标尺是线上实验。6.2 线上指标CTR、转化率之外还要看什么线上实验的核心指标要分两层看。第一层是短期行为指标CTR点击率推荐结果被点击的比例人均点击次数每个用户平均点击了几条转化率电商场景的下单率、内容场景的关注率/分享率人均时长用户在使用时长上的表现第二层是长期体验指标次日/7日/30日留存人均使用天数兴趣探索多样性指标短期指标是过程长期指标才是目的。一个很常见的陷阱是团队为了短期内把点击率提上去大量推荐用户已经反复看过的高热度内容单次点击率确实上升了但用户的新鲜感快速消耗一周后留存反而跌了。这是典型的“涸泽而渔”。我在项目里会同时盯短期转化和长期留存并且对后者的权重放得更高。6.3 AB实验的常见问题分层、分流和样本量线上验证的统一手段是AB实验。这里面有几个高频问题值得特别注意样本量不足实验组的流量太小指标波动受随机性影响太大得到的结果不可信。一般要保证每组至少上万级用户且跑足一周以上分流不均匀实验组和对照组的用户构成差异过大比如一组全是老用户结果天然偏差。分流要基于用户ID做哈希保证随机均匀指标口径不统一不同实验之间点击率的统计口径不同没法横比。团队内部必须统一指标口径和统计脚本多个实验叠加冲突推荐场景同时跑好几个实验互相影响实验结果。要用分层实验框架让实验之间互不干扰提示做AB实验时建议每个实验都配置一个“反向指标”清单。比如你优化点击率的同时必须盯人均时长和次日留存如果点击率涨了但留存降了这个实验同样不能推全量。7. 从零搭建一个最小推荐系统的参考路径前面讲了不少原理可能有些抽象。最后这部分我给一条可落地的参考路径用较小的成本搭出第一个可用版本。很多起步阶段的团队或独立应用按这个路径足以支撑到十万级用户规模。7.1 数据准备与选型用什么数据练手如果你手头没有现成的用户行为数据可以用公开的推荐数据集起步比如MovieLens。它包含了用户对电影的评分记录非常适合用来练手。如果是自己的产品则从日志表里整理出三张核心表用户表用户ID、注册时间、年龄段、城市物品表物品ID、标题、类目、发布时间行为表用户ID、物品ID、行为类型、行为时间、场景ID第一版不建议一上来就搞流式计算和实时特征先把离线表数据跑通。用离线任务每天算好推荐结果写入结果表线上接口按时取。虽然做不到秒级个性化但对早期验证已经足够了。7.2 一个可运行的ItemCF示例以ItemCF为例我用Python给一个最小可运行的思路。核心步骤是构建物品共现矩阵计算物品相似度根据用户历史行为生成推荐。import pandas as pd import numpy as np from collections import defaultdict # 假设behavior是行为表字段user_id, item_id, behavior, timestamp # 只保留点击行为或评分行为 behavior pd.read_csv(behavior.csv) behavior behavior[behavior[behavior] click] # 构建用户对物品的交互记录 user_items defaultdict(set) for row in behavior.itertuples(): user_items[row.user_id].add(row.item_id) # 统计物品共现次数 item_pair_count defaultdict(int) for user, items in user_items.items(): items list(items) for i in range(len(items)): for j in range(i1, len(items)): a, b items[i], items[j] item_pair_count[(a, b)] 1 item_pair_count[(b, a)] 1 # 统计每个物品的交互用户数 item_user_count defaultdict(int) for item, cnt in item_pair_count.items(): item_user_count[item[0]] cnt # 计算物品相似度余弦相似度的简化版 item_sim defaultdict(dict) for (a, b), cnt in item_pair_count.items(): if a ! b: item_sim[a][b] cnt / np.sqrt(item_user_count[a] * item_user_count[b]) # 推荐对用户历史物品找最相似的Top N def recommend(user_id, top_k10): history user_items.get(user_id, set()) scores defaultdict(float) for item in history: for sim_item, sim_score in item_sim.get(item, {}).items(): if sim_item not in history: scores[sim_item] sim_score ranked sorted(scores.items(), keylambda x: x[1], reverseTrue) return [item for item, score in ranked[:top_k]]这个版本能跑通但性能一般因为相似度矩阵是稠密的。工业级实现会砍掉相似度很低的边只保留Top N近邻并且用稀疏矩阵存储。如果你的数据量到了百万级建议直接用Spark ALS或者成熟的向量召回方案别自己手写协同过滤的分布式版本。7.3 从Demo到生产接口、缓存与日志Demo跑通之后往生产环境迁移时要做三件事接口设计推荐接口输入是用户ID、场景ID、请求时间输出结构化推荐列表物品ID、分数、召回来源、排序分方便线上排查问题结果缓存每个用户每天首次请求后把推荐结果缓存起来一两分钟内重复请求直接走缓存省算力也省延迟日志闭环接口层必须记录完整的曝光日志这是下一轮样本迭代的生命线。没有曝光日志后续排序模型就是无米之炊我自己带过的项目里最快的从零到上线第一版推荐用这个流程大约花了三周第一周整理数据、第二周跑通ItemCF、第三周做接口和上线。当然前提是数据已经采了一段时间至少有两周以上的行为日志可供分析。最后说一点个人体会推荐系统这东西听起来高大上做起来其实是“三分算法七分数据九十分细节”。你可能花了两周调模型线上效果纹丝不动也可能仅仅修正了一个特征构造的细节效果立刻上涨。我越来越觉得做推荐最核心的能力不是会调模型而是能理解业务、吃透数据、盯得住线上效果。每个项目的数据质量不同、场景不同、约束不同把通用方法落到自己的土壤里才算是真正掌握了个性化推荐。以上这些经验都是我在一个又一个项目里用流量和用户耐心换来的写出来希望能帮你少走几步弯路。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑