原文:
www.kdnuggets.com/2022/07/ten-key-lessons-implementing-recommendation-systems-business.html
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你组织的 IT
推荐系统的全球任务是从一个大型目录中挑选出最适合特定用户的内容。这些内容可以各不相同——从在线商店的产品和文章到银行服务。FunCorp 产品团队处理的是最有趣的内容——我们推荐的是表情包。
为了做到这一点,我们依赖于用户与服务互动的历史记录。但从用户和业务的角度来看,“好的推荐”并不总是相同的。例如,我们发现,通过更准确的推荐增加用户点击的点赞数并不会影响留存率,这是对我们业务很重要的指标。所以我们开始专注于优化在应用中的停留时间的模型,而不是点赞。
这就是为什么专注于你业务中最重要的目标如此重要。目标可以有所不同,例如:
-
用户留存,
-
收入增加,
-
成本降低,
-
以此类推。
推荐系统肯定能让你改善用户体验,用户将更快和/或更频繁地采取目标行动。剩下的就是确保你同时实现你的业务目标。双赢!在我们的案例中,实施我们资讯中的推荐系统后,我们看到点赞数相对增加了 25%,观看深度几乎增加了 40%。
iFunny 的主要目标是增加留存率,你会看到我们有时会进行一些对留存率有很大负面影响的实验。
当你确定了全球目标后,你需要弄清楚展示推荐的最佳方式是什么:
-
在信息流中——这对新闻网站或像我们的 iFunny 这样的娱乐应用程序是相关的,
-
推送通知,
-
电子邮件通讯,
-
个人账户中的个性化推荐部分。
-
或网站/应用程序上的其他部分。
影响接触点选择的因素有很多——例如,此点的日活跃用户比例(对于某些用户,推送通知可能已被禁用)或与机器学习微服务的集成复杂性。
在我们的例子中,无效的选择可能是这样的。iFunny 应用有一个探索部分,我们在其中收集每周最佳的表情包。可以用机器学习来收集这样的选择,但只有少量的日活跃用户会访问这个部分。
此时使用机器学习是不切实际的。
这里的主要规则是将机器学习集成到能够带来最大业务指标提升的地方。因此,在 FunCorp 的情况下,我们首先决定在信息流中实施机器学习,因为它被最多的用户看到。其次,我们开始为推送通知创建推荐系统——因为有一个明显但较小的受众群体在与之互动。
在我们的案例中,反馈是用户可以采取的行动,以展示他们对应用内容的感受。为了构建推荐系统,您需要学会收集不同类型的反馈:
-
显式——这可以是任何尺度的评分或点赞/点踩。
-
并且隐式:
-
用户在内容上的停留时间,
-
访问内容页面的次数,
-
用户在社交网络上分享内容的次数或将其发送给朋友的次数。
-
反馈应该与推荐系统的业务目标相关。例如,如果目标是减少流失率,那么添加反馈表单并向从服务中退订的用户显示它是合理的。
以下是一些重要的技术要点:
-
使用户反馈渠道能够扩展。例如,除了页面上的停留时间外,您还可以开始收集用户评论并确定其语气。积极的评论会告诉您需要更多此类内容。反之亦然。
-
长时间保留用户反馈历史——至少几个月。这是为了两个目的。首先,您在训练推荐系统模型时拥有的数据越多,模型就会越好——您将能够发现长期用户行为中的见解。其次,大量的历史数据将使我们能够在离线格式下比较模型,而无需进行 AB 测试。
-
你需要一个数据质量控制系统。实际案例:当我们开始收集内容观看时间的统计数据并使用这些数据训练模型时,我们发现数据仅来自 iOS 平台。Android 平台上未实现该功能。也就是说,我们期望个性化有所改进,但没有整个平台的数据。
不要忘记渠道的限制。例如,只有 30-40% 的用户通过点赞提供反馈。如果你仅仅基于点赞来构建推荐系统,那么 60-70% 的观众将会收到非个性化的推荐。因此,你拥有的用户反馈渠道越多越好。
在 iFunny,我们只有 50% 的用户提供了明确的反馈,因此我们需要开发基于隐性反馈的模型来改进我们的指标。
机器学习专家习惯于处理 ML 算法的指标:精度、召回率、NDCG……但实际上,企业对这些指标并不感兴趣,其他指标发挥作用:
-
会话深度,
-
转化为购买/查看,
-
留存,
-
每用户平均消费。
所以你需要选择最适合你关键业务目标的指标。你可以这样做:
-
计算各种指标。
-
在离线数据上,找到业务指标和长期指标之间的相关性:用户留存、收入增长等。
结果是,你会得到一组在 AB 测试中需要提升的业务指标。
从商业角度来看,网站的观众可能在多种方式上非常异质(这些指标有时称为切片):
-
社会人口特征,
-
服务上的活动(反馈数量,访问频率),
-
地理位置,
-
等等。
很多时候,你的模型对不同的观众群体会产生不同的效果——例如,针对新用户显示指标增长,而对老用户则没有增长。
报告系统应该能够计算不同用户部分的指标,以便注意到每个特定群体中的指标改善(或恶化)。
例如,iFunny 有两个大群体:
-
“高活动”——用户频繁访问应用程序并观看大量内容,
-
“低活动”——用户很少访问应用程序。
我们过去习惯于整体计算指标,但当我们在报告中将这些用户分开时,我们发现模型变化对他们的影响不同。有时只有在高活动群体中会有增长——而当你没有进行分段计算指标时,可能不会注意到。
当反馈数据收集完成且业务指标已选择时,就需要选择离线指标来优化我们的模型,例如:
-
precision@k,
-
recall@k,
-
NDCG,
-
MAP。
推荐系统有很多指标。那么如何选择合适的指标呢?答案很简单:选择与业务指标相关的离线指标。你可以通过计算离线指标与在线指标之间的相关性来实现这一点。例如,在 FunCorp,我们曾经认为每用户的笑容数量与留存等业务指标相关,但我们的实验显示情况并非如此。于是我们开始优化其他业务指标,例如花费的时间。
分析,在这种情况下,你将学习如何避免当离线指标良好的模型导致业务指标恶化时的错误。
不要试图立即使用最复杂的模型来解决问题——从简单的方法开始。例如,使用基于流行度的产品推荐,而不是神经网络。这个简单的模型被称为基线模型。
在这种情况下,你将立即看到产品指标的增长,同时避免了大量的基础设施和开发成本。在未来,你所有更复杂的模型将与基线模型进行比较。
例如,在 FunCorp,我们首先使用基于 K 最近邻算法的简单方法创建了一个用于推送通知的内容推荐服务,只有在第二次迭代中,我们才转向更复杂的提升模型。提升模型需要更多的计算资源进行训练,因此我们首先确保机器学习具有小幅的积极效果——为了增强这一效果,花时间开发更复杂的模型是有意义的。
下一步是训练更复杂的模型。推荐系统通常使用神经网络和经典机器学习算法:
-
矩阵分解,
-
LogisticRegression,
-
KNN(基于用户,基于项目),
-
boosting。
在这个阶段,我们会计算离线指标,并且凭借反馈系统中已经积累的数据,我们选择最佳模型进行测试。
这种方法有一个明显的缺点。离线数据是当时生产环境中正在运行的模型的结果,因此离线实验将被当前模型最准确地“重复”所获胜。
因此,使用离线数据,我们只能区分非常糟糕的模型和“不是很糟糕的模型”,以便将“不是很糟糕的模型”投入测试。或者,我们可以在没有离线测试的情况下进行实验——例如,使用多臂老虎机机制。如果指标很差,老虎机会自动停止将流量导向“糟糕”的模型。但这种测试新模型的方法大大复杂化了架构,因此我们在离线数据上测试模型。
任何对推荐算法的更改,例如从基线模型切换到高级模型,必须经过 AB 测试系统。
如果没有良好的分析,你可能无法看到推荐系统的效果,或者误解数据,这可能导致业务指标恶化。例如,如果你开始推荐更多 NSFW 内容,那么“每个用户的点赞数”会暂时增加。但从长远来看,这种内容可能会导致服务的退订增加。
这就是为什么 AB 测试需要测量短期和长期效果的原因。
在进行 AB 测试时,你需要确保测试组和对照组的样本具有代表性。在 FunCorp,我们根据期望的指标增长计算样本大小。
我们还需要避免一些测试对其他测试的影响。这是成熟产品中的一个问题,当大量变化并行测试时,其中一些可能会影响 ML 输出。例如,如果我们同时对推荐 feed 和审核规则(可能会被审核员拒绝的内容)进行测试,则测试和对照指标可能会出现偏差,这并非因为模型差异,而是因为内容排序差异。
在“生产环境”中推出算法时,必须提供解决一系列经典问题的方案。
-
用户的冷启动:如何推荐给那些没有留下反馈的用户?我们建议制作全球热门内容的列表,并尽可能使其多样化,以更有可能“吸引”用户。
-
内容的冷启动:你如何推荐那些还没有时间积累统计数据的内容?为了解决这个问题,冷启动内容通常会在推荐中以较小的比例出现。
-
反馈循环是推荐系统中的一个经典陷阱。我们向用户展示内容,然后收集反馈,并在这些数据上运行下一个学习周期。在这种情况下,系统从它自己生成的数据中学习。为了避免这个陷阱,我们通常会分配一小部分用户接受随机输出而不是推荐——通过这种设计,系统将不仅仅在自己的数据上进行训练,还将在用户与随机选择的内容的互动上进行训练。
祝你在构建推荐系统时好运,感谢你的关注!
亚历山大·朱穆拉特 是 FunCorp 数据科学团队的负责人,该公司创建了具有数百万活跃用户的娱乐性 UGC 应用(如 iFunny, ABPV),并帮助实现最佳个性化。之前,亚历山大曾领导在线影院 IVI 的数据科学团队。