资讯详情

资讯详情

推荐算法核心思想拆解:从协同过滤到冷启动实战指南

推荐算法这两年几乎成了人工智能落地最热闹的赛道之一。做电商的靠它提转化做内容平台的靠它拉时长做工具的靠它做个性化体验。但不管应用场景怎么变推荐算法的基本思想始终就那么几类。我最初接触推荐系统时最深的感受是这东西不像图像识别或语音识别有一套统一的、清晰的评测标尺推荐效果的好坏取决于你在什么场景下、给什么用户、推什么内容。所以理解推荐算法的基本思想本质上是理解“我到底凭什么把某个东西推荐给某个人”。这篇文章写给两类人一类是刚入行、准备做推荐系统相关项目的开发者另一类是产品经理或业务方想弄明白推荐系统能做些什么、不能做什么。我会把推荐算法的基本思想拆开讲清楚包括每种思想背后的假设、适用场景、优缺点以及我实际落地过程中踩过的坑。没有晦涩的公式推导但会给出足够明确的思路框架和实操建议。1. 推荐系统到底在解决什么问题一个比“猜你喜欢”大得多的命题很多人一说到推荐算法第一反应就是“猜你喜欢”好像推荐系统就是个自动猜用户偏好的工具。实际做了推荐之后会发现这个理解太窄了推荐系统的核心使命是解决信息过载下的“需求匹配效率”问题。在互联网早期信息量小靠搜索和分类目录就能完成供需对接。那时候的用户体验是“人找货”用户明确知道自己要什么去搜索引擎里输入关键词系统把结果列出来。但后来内容量爆炸了尤其是短视频、直播、电商这种场景用户在大部分时候其实并不清楚自己“此刻”想看到什么。这时候就需要“货找人”推荐系统做的是把海量候选物品里用户大概率会喜欢的那一小撮主动拿到用户面前。这个“大概率会喜欢”就是核心。推荐算法的一切工作都是围绕“如何估计用户对物品的偏好程度”来展开。但难点在于用户偏好不是一个静态的、能被准确记录的数值它受时间、场景、心情、身边环境的影响是一个动态变化的隐变量。你只能通过用户的历史行为、物品的属性、以及其他用户的行为模式去推断这个隐变量。我经常用一个比喻来给别人解释推荐系统的处境你是一个新搬进小区的中介手里掌握着周边五百家餐厅的信息。你现在的任务是在一位只在小区住了一周、只吃过两次外卖的住户面前猜他今晚想吃什么。你能利用的信息只有他两次点餐的时间、菜品、价格以及小区里其他住户的口味偏好。这就是推荐系统面对的真实约束数据稀疏、信息不全、极具时效性但系统还得给出一个排序列表。理解了这个问题本质再看各种推荐算法的基本思想就会清晰很多它们本质上是不同的“猜用户偏好”的策略只是用的信息源和假设不同罢了。推荐系统在业务层面的价值也不只是提升点击率。它同时承担着挖掘长尾内容、降低用户流失、提高转化效率甚至塑造平台心智的任务。不同业务目标下你对“好推荐”的定义完全不同。内容平台更关注用户浏览时长和留存电商平台更关注GMV和复购率社交平台更关注互动率。推荐算法的基本思想只是提供底层框架落地时你需要围绕业务目标做大量调整。2. 五类基础推荐思想的拆解与对比推荐系统几十年的发展产生了大量论文和算法但底层的推荐算法基本思想归纳起来就那么几类协同过滤、基于内容、基于关联规则、基于统计人口属性以及混合推荐。绝大多数工程场景里的推荐系统都能归入其中一类或它们的组合。2.1 协同过滤用户行为驱动的群体智慧协同过滤是推荐系统最经典、应用最广泛的一类思想基本假设是历史行为相似的用户未来偏好也会相似或者一个用户曾经喜欢的物品相关的物品未来他也会喜欢。它通常被分成两种实现路线。第一种是基于用户的协同过滤核心动作是找“邻居”。系统先把每个用户或访客和TA有过正反馈交互的物品映射成一个向量计算用户之间的相似度然后找到与当前用户最相似的一批用户把这批用户喜欢过、但当前用户没碰过的物品推荐出来。这个思路很直觉本质上就是大众点评里那套“和你口味相同的人都去过这家店你要不要试试”的逻辑。第二种是基于物品的协同过滤核心动作是找“相似物品”但它不是靠物品本身的内容特征找相似而是靠“用户行为”找相似。系统统计的是同一批用户对哪些物品同时产生了交互如果大量用户同时收藏了物品A和物品B那A和B就在该系统的语境下被视为“相似物品”。基于物品的协同过滤在电商领域的应用尤其成功因为商品集合相对稳定用户行为数据量大且行为意图明确算出的相关关系往往比基于商品文本分类的相似性更精准。这里有个容易被新人忽略的细节基于物品的协同过滤计算物品相似矩阵时对“用户行为”的定义极其关键。用“点击”和用“购买”算出来的相似矩阵几乎两回事。点击行为噪声大但覆盖率高购买行为信号强但极端稀疏。我早期做电商推荐时用点击数据给商品算相似性结果把奶粉和啤酒算成了强关联——因为很多买奶粉的人是顺手点一下啤酒但并没有想收藏的关系。后来改用加权方案点击、收藏、加购、购买分别给不同的权重相似度结果才变得合理可用。协同过滤的最大优势是它对物品内容“一无所知”也能工作得很好。你不需要给物品打标签、做文本理解模型完全从行为数据中自动挖掘关系。但它的困境也很明显冷启动。新用户没有行为历史新物品没有交互记录几乎无法被推荐出去。这个问题后面我会专门展开讲。2.2 基于内容的推荐从物品属性到用户画像的映射基于内容的推荐走了另一条路它不关心“别人怎么看这个物品”而是关注这个物品本身的属性以及用户历史上喜欢过什么属性。基本思路是先为每个物品建立内容特征向量。在文本场景下这是关键词、主题、分类在电商场景下是类目、品牌、价格带、材质在视频场景下是标签、时长、题材。然后基于用户过往的正反馈交互历史计算得到用户的画像其实就是一组特征权重最后计算新物品特征与用户画像之间的匹配得分按得分排序输出推荐结果。这种方法的信息来源纯粹是“用户自己的历史”和“物品自己的属性”所以它不依赖其他用户的行为数据新物品只要完成内容特征入库就能被推荐给匹配的用户。这一点在新闻推荐、论文推荐等领域特别有意义因为新闻和论文这类物品时效性极强冷启动是常态协同过滤根本等不及积累交互数据。但基于内容的方法也有明显的天花板推荐结果容易“窄化”。因为系统只会推荐和用户历史上喜欢过物品相似的物品用户很难有意外惊喜也就是所谓的“信息茧房”。我之前做过一个音乐推荐项目基于内容的算法给某用户推了半年民谣用户偶尔听了一首电子音乐但由于系统画像更新滞后接下来两周依然全推民谣。后来我们做了一轮算法改造将“短期兴趣漂移检测”加入画像更新策略才让推荐列表能较快捕捉用户的兴趣切换。另外基于内容的方法依赖高质量的内容特征。物品内容特征的提取质量直接决定推荐效果上限。早期做内容标签时我们用人工标注准确率高但覆盖率和实时性差后来换成自动抽取模型覆盖率上来了但噪声也多了。做特征工程时不建议追求“完美的单点特征”而应该保证特征体系的健壮性——多来源、多粒度、可校验。2.3 基于关联规则的推荐把“常被一同购买”变成规则体系在数据挖掘早期关联规则挖掘是非常热门的方向最经典的场景就是购物篮分析分析用户一次购买了哪些东西挖掘物品之间的共现关系生成“买了A的人经常买B”这类强规则规则。这类思想跟基于物品的协同过滤有相似之处区别在于关联规则倾向于挖掘的是“包含关系”和“顺序关系”而且它在业务上有极强的解释性。实际工程中关联规则推荐适合用在购物车加购阶段或结算前最后一步。比如用户把手机加入购物车后系统基于“手机手机壳”的高置信度规则立即推荐手机壳。这种推荐不需要复杂的模型推理直接用规则查询匹配响应速度极快且因为解释性强产品上可以做成“搭配购”、“猜你喜欢”等文案用户接受度高。但关联规则推荐的适用面比较窄。它对数据形态有硬性要求需要有明确的“交易集合”来定义物品的共现比如一笔订单、一次结账。在纯浏览场景用户今天看了手机、明天看了耳机很难定义“共现”。此外规则挖掘容易产生高频物品的虚假关联比如热门商品会跟几乎所有商品产生强关联这会在落地时影响推荐结果的多样性。因此用关联规则时要注意做“受欢迎度修正”不应当让推荐结果持续扎堆在畅销爆款上。2.4 基于人口统计学特征的推荐最朴素也最稳的兜底方案当系统的行为数据极度稀疏时基于人口统计学特征做推荐往往是最先能跑起来的方案。它按年龄段、性别、职业、地域、设备等属性将用户分群给同一族群内的用户推荐相同的物品。背后的假设是同一社会属性人群具有相近的消费或内容偏好。我在一个教育类App项目里就采用过这个思想做第一版“推荐”。当时新用户量很大但行为数据很少冷启动必须靠注册时收集的人口属性。上线后效果虽然粗糙——很多用户在评论区反馈“系统推的东西太傻”——但业务方仍然满意因为点击率比纯热门排行高了接近50%。这就是这类推荐的价值粗糙但有效能快速让系统从零到一跑起来。这类推荐的局限是颗粒度太粗。同样是25岁北京男性程序员喜欢摇滚乐和喜欢古典乐的可能同时存在仅靠人口属性无法区分。所以它通常只作为冷启动的兜底策略或混合推荐中的一个权重因子不能作为长期主推方案。2.5 混合推荐算法组合不是堆砌而是各取所长实际工业界的推荐系统极少只用单一算法。因为不同算法的推荐算法基本思想各有侧重单独使用总有死角协同过滤有冷启动问题基于内容容易窄化关联规则受限于共现数据人口属性太粗。混合推荐就是把多种算法组合起来在一个框架内统一输出最终推荐列表。组合方式有几种常见的套路。一是加权式多个算法各自给物品打分最终得分是各分数加权求和。权重可以固定也可以跟随场景动态调整比如用户新注册时期内容算法的权重调高用户行为数据充足后协同过滤的权重调高。二是切换式根据场景条件选择最合适的算法比如当物品是重度新闻类内容时直接切基于内容的当品类是标品商品时切协同过滤。三是瀑布式先由一个粗排算法从海量物品里筛出一个精排候选集再由另一个精细模型对候选集做排序典型的粗排精排架构。四是元级组合将一个算法的输出特征作为另一个算法的输入这种在深度学习时代尤其常见比如用向量召回结果作为排序模型的特征输入。我在实践中比较推荐“瀑布式加权式”的组合因为这种结构最可解释、最容易分模块调优。先说召回协同过滤、内容匹配、关联规则、热门兜底分别各自召回一批候选做合并去重。再说排序用一个统一的排序模型逻辑回归、GBDT、深度排序模型均可对候选集做打分排序。最后做业务重排过滤掉用户已购内容、屏蔽广告内容、插入运营强制内容等。这样整个推荐系统的可诊断性和迭代速度都远胜于单模型端到端方案。3. 推荐效果落地必须面对的四个核心难题懂得了一些算法、能跑通流程只能说你跨过了门槛。真正做推荐系统你会发现大部分精力都不是花在调模型上而是在解决下面这四个长期存在的工程和算法难题。3.1 冷启动没有历史行为的用户和物品该怎么推冷启动是推荐系统场景里最经典的问题几乎没有之一。它分为三个子问题。第一新用户冷启动用户刚刚注册没有任何行为历史。此时协同过滤完全失效基于内容的算法也没有用户画像可用。我见过比较有效的方式是结合“注册信息即时交互反馈热门商品修正”。注册信息包括年龄、性别、职业、兴趣标签等系统先按统计属性推送第一屏内容用户随即产生几次点击或跳过行为实时信号立刻被加载到画像中同时混入一定比例的泛热门内容做探索防止首屏内容过于单一。第二新物品冷启动新物品刚入库没有用户交互。这条在协同过滤视角下很致命——一个没有行为记录的物品计算不出跟任何物品的相似度。解决办法通常是给新物品打上高质量的内容标签让基于内容的算法能把它匹配给潜在感兴趣的用户或者在策略层给新物品一段时间内的“探索加权”让它们有机会出现在用户面前获取初始反馈数据。第三新系统冷启动从零开始搭建推荐系统的首周仓库里既没有足量用户行为也没有物品内容标签。我的建议是分三步走第一步用基于人口统计学特征的热门榜兜底第二步上线内容标签系统这部分只覆盖核心品类的头部物品就能带来效果提升第三步开始积累用户行为等到单品类行为交互量超过百万级时再上协同过滤和排序模型。3.2 流行度偏差与长尾挖掘推荐系统天然有“马太效应”。越热门的物品被推荐的频率越高收集到的行为数据越多然后越容易被推荐。这个循环会让推荐结果严重集中到少数爆款上用户的个性化体验名存实亡变成另类的热门榜。我在电商项目中遇到过如此一幕排序模型上线一个月后推荐列表里前五十名基本被畅销Top 100霸占很多小而美的长尾商品永远沉底。后期复盘时发现不仅是排序模型学出了“推荐热门物品”的捷径召回阶段也出了问题——热门物品因为行为数据丰富在向量召回和协同过滤召回中得分天然偏高。长尾挖掘的核心在于调整候选集合的采样分布和对多样性的约束。工程上常用的手段包括召回阶段按类目和价格带做强制配额避免单一维度垄断排序模型的训练样本里对热门物品降采样让模型学会“在长尾物品里分辨好坏”排序后的重排阶段引入MMR最大边际相关性等多样性算法让推荐列表同时兼顾精准度和内容多样性。不要指望单靠模型就能自动解决流行度偏差策略层的干预往往是必不可少的。3.3 精准度与多样性的权衡推荐不只是越准越好很多刚做推荐的同学会陷入一个误区认为指标越高推荐越好。准确率、点击率做得越高推荐效果真的就越好吗不一定。如果推荐结果永远是用户最可能点击的那三样东西短期内指标好看长期来看用户会觉得内容太单调逐渐流失。一个真实的例子参考某视频平台的推荐团队做过一次实验将推荐列表中的相似度阈值调低允许更多“弱相关”内容混入结果。离线评估时准确率下降了约6%但线上用户人均使用时长不降反升次周留存提升了2%。这说明用户对“多样性”的隐性需求往往被低估了。所谓精准度和多样性的权衡最终要比的是“体验的置信度”。推荐系统的目标不是预测最准而是让用户持续发现更好的内容。实际操作中我会给推荐列表预留一个“探索位”比如每屏1-2条内容不按模型得分排序而是从探索池新内容、长尾内容、不同类目内容里抽样展示。这样既保证了主列表的精准度又给系统留出了探索用户新兴趣的空间。3.4 用户兴趣漂移昨天的推荐不是今天的推荐用户的兴趣从来不是静止的。一个平时只看纪录片的人可能因为朋友分享开始刷起了萌宠短视频一个在备婚的用户婚礼结束后的第30天大概率就不会再看婚纱广告了。推荐系统如果对用户最近的行为不敏感就会持续消费历史画像给用户推一批早已不合时宜的内容。解决兴趣漂移的两个基本策略一是时间衰减给用户行为样本按时间做加权越近的行为权重越大越远的行为权重越小二是窗口化在计算用户画像时只使用最近7天或30天的数据超过窗口的旧行为不再参与计算。我在音乐推荐场景里做过对比加上时间衰减后新歌的曝光比例提升了约35%说明画像确实能更及时地捕捉兴趣迁移。此外对于短期会话型场景比如短视频的连续滑动我们还可以用“上下文状态”来增强推荐用户当前会话里最近浏览的N条内容是什么、停留时长的变化趋势如何这些短期信号往往比长期画像更能反映用户此刻的意图。4. 从想法到落地推荐系统评估指标与实操路径聊完了推荐算法基本思想接下来聊聊我对落地和评估的理解。有不少项目在实验室里指标很漂亮一到线上就崩原因就是对推荐效果的评估体系理解得不够全面。4.1 离线评估指标不能只看准确率离线评估时最直接的思路是拿历史数据切出训练集和测试集模型在测试集上算预测准确度。但推荐场景的特殊性在于你预测的对象是“用户会交互哪些物品”是一个排序问题而不是简单的分类问题。长期实践中我会同时盯几组指标准确率与召回率在Top-K推荐列表里有多少是用户真正交互过的。这只是最基础的参考单独使用时容易误导尤其在数据稀疏时指标会虚高。覆盖率推荐系统能够推荐出去的物品占总物品的比例。覆盖率过低说明推荐集中在少量头部长尾挖掘能力差。多样性/新颖性推荐列表里物品之间的相异程度以及推荐结果中用户未看过物品的比例。NDCG归一化折损累计增益衡量推荐排序质量给排在前面的正确推荐更高权重。核心要点是离线评估只能验证模型的相对优劣不能代表线上真实效果。原因很简单离线评估用的是历史行为而线上推荐会影响用户行为这之间存在反馈循环。你无法用离线的静态数据模拟“推荐了A后用户决定不去看B”这种动态变化。4.2 在线效果验证A/B测试是唯一的最终准绳真正判断推荐算法是否有效最终要依赖于线上A/B测试。把流量分成几组一组用新算法一组用旧算法比较业务核心指标点击率、人均时长、转化率、复购率等的变化。做A/B测试最需要注意的坑是只盯着单一指标结果被“夹带私货”。比如你把推荐列表改得更长、塞进更多位置点击率可能上升看起来新算法赢了但实际是因为曝光位置多了。这时需要同时监测探索位点击率、人均推荐消费深度、负反馈率、次日留存等多个指标。另外A/B测试的时间窗口要拉够。推荐系统有很强的“训练-服务闭环”新算法上线后模型还在持续利用新数据做更新短期一两天看不出最终效果通常建议观察至少7天。如果业务周期有明显的周末效应还需要保证实验组和对照组在时间上对齐比较同一星期几的数据。4.3 我推荐的最小可行落地路径如果你是第一次搭建推荐系统我建议不要一上来就引深度神经网络做端到端模型。最小可行路径是先做规则和热门榜再做基于内容的相似推荐接着上协同过滤召回最后再考虑做重排向量模型和精排模型。每一步都以离线评估在线A/B测试作为验证门槛保证每一次迭代都有明确的效果增幅。我过去带过一个模拟项目X功能是给垂直社区做内容流推荐。启动第一周只上线了按分类加权的热门榜业务点击率有了但也只算及格第二周加入基于内容的标签匹配点击率和时长都有提升到第三周引入基于用户协同过滤人均曝光到点击的转化率提高了接近两成。这个过程中没有用任何复杂的模型框架就靠理解推荐算法基本思想和工程细节效果已经相当可观。5. 我踩过的那些坑和总结的经验做推荐系统的过程中我踩过的坑不少每一个都让我对推荐算法基本思想的理解更务实。挑几个印象最深的写下来希望能帮后人避坑。第一个坑是把排序模型优化成了“热门度模型”。具体表现在模型训练数据里的正样本大多数是热门物品负样本大多是长尾物品。模型只要学到“推荐热门物品”这条捷径离线指标还不差线上就是灾难。这个问题的解法是重排阶段的流行度控制以及训练样本的降偏采样。我后来在排序模型的特征里强制加入“物品热度”这一列并在训练时单独做样本加权才把模型的真实泛化能力逼出来。第二个坑是对用户反馈定义得太单薄。误以为用户“没点”就是“不喜欢”忽略了大量曝光但未被点击的样本里其实有很多是根本没看见。后来我们把负反馈的定义从“曝光未点击”改进为“露出超过一定时长且未点击”的精排反馈并引入“用户主动点了不感兴趣”这类明确负信号模型效果提升明显。第三个坑是推荐结果解释性被忽视。协同过滤和深度模型给出来的推荐很难直接解释“为什么推这个”。用户端如果完全不理解推荐理由很容易产生不信任感甚至怀疑平台偷窥隐私。后来我们在产品层给每个推荐卡片加上了“相似推荐理由”——比如“因为你收藏了A所以推荐B”解释性带动的点击提升超过了10%。这让我明白推荐不只是算法问题也是用户体验问题。再分享一个并行经验推荐系统一定要做模型之外的行为日志采集设计。你用来训练和评估模型的能力上限由日志字段决定。搭建数据管道时就要考虑这个需求日志里除了用户ID、物品ID、行为时间还需要场景ID、曝光位置、来源模块等上下文信息。这些字段在离线验证时看起来没什么用但做在线A/B分析和实验归因时缺了它们简直寸步难行。最后补充一点工具上的体会工程上不必迷信最前沿的大模型框架。在一个中小型限定的推荐场景里成熟的I2I协同过滤加一个调好参数的GBDT排序模型往往就能达到上线线目标。先把基础思想吃透把数据处理和指标体系做扎实再去考虑复杂的深度模型才是更稳妥的路线。推荐系统的上限是模型决定的但它的下限是数据质量和工程水平决定的。6. 经验沉淀推荐系统诞生的完整环节回顾文章到这里主要思想都覆盖了。我再用尽量简短的方式回顾一下做推荐系统的完整脉络方便你回头自查。推荐系统的输入端永远是业务目标和约束条件。你在做推荐系统之前最先想清楚的应该是我服务的用户是谁物品是什么样的业务核心指标是什么这些决定了你会选择哪种推荐算法基本思想作为主线选择什么作为辅助策略。接下来是数据处理和画像建设。用户画像、物品画像、行为日志质量决定了推荐系统的地基。这部分工作有时候枯燥但值得花时间。然后才是推荐算法的主体工程。在上面我们讨论的几类基础思想中选定适合的作为召回策略构建候选物品池再设计一个排序模型对候选集打分排序最后通过重排规则完成业务约束和用户体感优化。这就是工业界最常见的推荐系统主流程。最后评估和迭代是贯穿始终的环节。每上线一个策略都应该配套对应的离线评估和在线A/B实验。把每一次迭代当作一次“有假设、有验证、有总结”的实验来对待你的推荐系统会越走越稳。我个人的体会是只要把推荐算法的基础思想理解扎实、对用户行为保持敬畏心态、在工程落地上不做虚功推荐系统的效果是不会差的。它不需要你有什么天才般的灵感需要的只是耐心、严谨和持续用数据做决策的习惯。这一点无论在哪个行业做推荐都一样。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →