Disco 推荐系统实战:用 Ahoy 用户行为数据打造隐式反馈推荐

发布时间:2026/8/27 18:20:54
Disco 推荐系统实战:用 Ahoy 用户行为数据打造隐式反馈推荐 Disco 推荐系统实战用 Ahoy 用户行为数据打造隐式反馈推荐【免费下载链接】discoRecommendations for Ruby and Rails using collaborative filtering项目地址: https://gitcode.com/gh_mirrors/disco6/discoDisco是一款面向 Ruby 和 Rails 的高性能推荐引擎采用协同过滤与矩阵分解算法支持基于用户和基于物品的两种推荐模式。本文带你走通一套完整流程从 Ahoy 埋点数据中提取隐式反馈用户浏览、点击、购买等行为训练 Disco 推荐器再将结果持久化到 Rails 数据库中。什么是隐式反馈推荐 传统推荐依赖用户打分显式反馈但现实中大多数用户并不会主动评分。隐式反馈则从行为中读心 用户浏览了某篇文章 → 对文章感兴趣 用户购买了某件商品 → 强偏好信号⭐ 用户反复访问某个页面 → 高意向用户Ahoy 正是收集这类行为数据的利器。你在 Rails 中埋点记录Viewed post事件后Disco 就能把这些行为转化为个性化推荐。安装与初始化在 Gemfile 中加入依赖gem disco创建一个推荐器实例核心参数是factors隐因子维度和epochs训练轮数recommender Disco::Recommender.new(factors: 8, epochs: 20) 如果推荐效果不理想优先调整factors参数默认 8某些场景 3 更好某些场景 300 才合适。从 Ahoy 提取行为数据这是整个流程的关键一步。假设你已用 Ahoy 记录了 Viewed post 事件用一条分组查询即可得到用户 × 文章的行为矩阵views Ahoy::Event.where(name: Viewed post).group(:user_id).group_prop(:post_id).count data views.map do |(user_id, post_id), _| {user_id: user_id, item_id: post_id} end注意两个要点不传rating字段——Disco 会自动识别为隐式反馈模式内部采用坐标下降算法biased MF每对user_id/item_id只应出现一次分组聚合天然保证了这一点数据也可以直接传入 Rover 数据帧例如从 CSV 读取Rover.read_csv(views.csv)训练推荐器recommender.fit(data)fit内部会完成 ID 映射、构建训练矩阵、运行矩阵分解源码见 recommender.rb并保留每个用户的历史行为集合用于在推荐时自动过滤已浏览过的物品。训练完成后为每位用户生成像你的人也喜欢的推荐recommender.user_recs(user_id, count: 10)也可以做物品推荐——浏览了这篇文章的人还看了什么recommender.item_recs(post_id)如果数据量足够大可用验证集评估效果recommender.fit(data, validation_set: validation_set)推荐结果持久化到 RailsDisco 内置 Rails 集成一键生成存储表recommendation_generator.rbrails generate disco:recommendation rails db:migrate迁移会创建disco_recommendations表多态关联 context score见 migration 模板模型定义在 recommendation.rb。在 User 模型中声明推荐关系实现在 model.rbclass User ApplicationRecord has_recommended :posts end离线批量刷新推荐User.find_each do |user| recs recommender.user_recs(user.id) user.update_recommended_posts(recs) end渲染页面时一行取值user.recommended_posts⚠️ 注意has_recommended要求 Active Record 7.2低版本会直接抛出明确错误。冷启动与性能优化新用户问题协同过滤对没有行为记录的新用户只能返回空数组。常见解法是向新用户展示全局热门recommender Disco::Recommender.new(top_items: true) recommender.fit(data) recommender.top_items大规模场景当用户或物品数量很大时安装 Faiss 并建立近似最近邻索引可显著加速查询recommender.optimize_user_recs recommender.optimize_item_recs完整落地流程回顾步骤动作产出1️⃣Ahoy 埋点 Viewed post 等行为行为事件数据2️⃣分组聚合为user_id/item_id对隐式反馈数据集3️⃣Recommender#fit训练用户/物品隐因子4️⃣user_recs批量生成推荐推荐结果列表5️⃣has_recommended 数据库持久化毫秒级页面读取6️⃣定期重训练如每周 cron推荐保持新鲜写在最后Disco 的设计哲学非常简洁把复杂的矩阵分解封装在fit、user_recs、item_recs三个动词后面让 Rails 开发者用熟悉的模型风格消费推荐结果。搭配 Ahoy 的行为数据你可以在不引入任何机器学习框架的前提下为产品加上猜你喜欢能力。想深入了解版本演进可查看 CHANGELOG.md项目说明详见 README.md。【免费下载链接】discoRecommendations for Ruby and Rails using collaborative filtering项目地址: https://gitcode.com/gh_mirrors/disco6/disco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考