algorithm - 如何不断过滤用户感兴趣的数据?

标签 algorithm design-patterns recommendation-engine

以一个带有“浏览”幻灯片的问答网站为例,一次显示一个问答页面。用户点击“下一步”按钮,一个新的问题/答案就会呈现给他。

我需要决定每次用户点击“下一步”时应该返回哪些页面。我不想要的一些东西及其原因:

  • 按降序显示“最新”问题:

    假设输入了 100 个问题,那么没有用户会点击到第 100 个项目,并且永远不会得到任何响应。这也意味着,如果最近没有提出新问题,用户每次访问网站时,他都会看到相同的重复陈旧数据。

  • 显示“最活跃”的问题,根据大量建议的答案/评论进行判断:

    这不会返回那些 liveness 较低的问题,而这些问题正是需要更多可见性的问题

  • 显示“低活跃度”问题,根据不多的答案/评论来判断:

    一旦问题开始活跃,它就会停止显示。当我真的很想鼓励讨论时,这会阻碍问题的事件。

我觉得将它们混合使用效果会很好,但我不确定如何判断应返回哪些页面。我要强调的是,我不希望用户必须选择要查看的项目类别(比如 SO 如何具有未回答/事件/最新过滤器)。

是否有执行此操作的任何常见做法,或如何执行此操作的任何想法?

谢谢!

编辑:

以下是我目前的倾向,非常感谢 Tim 的评论: 到目前为止,我正在考虑按事件计数/查看计数对页面进行排名,每次用户在页面上执行操作(如投票、评论、回答等)时,事件都会增加。每次每个页面的 View 都会增加一个人查看页面。

然后,我将根据事件/查看比率对所有页面进行排名,并更频繁地显示比率高的页面。这样,低活跃度和高浏览量的页面将显示最少,而高活跃度和低浏览量的页面将被最频繁地显示。低活跃度/低浏览量和高活跃度/高浏览量将处于我想象的中间位置,但我必须在测试版中密切关注这一点。我还计划存储用户在过去 24 小时内浏览过的页面,这样他们就不会在给定的一天看到幻灯片中的任何重复内容。

防止“过时”数据的一些想法(如果以上所有方法似乎都不能阻止它):也许运行一个 cron 作业,它会定期检查最近没有查看过的页面并提高它们的比率以放置它们在顶部。

最佳答案

在我看来,您正在触及两个有趣的问题:

  1. 如何定义帖子是否对用户感兴趣:在这里,您可以对可能有助于帖子有趣的各种因素进行加权组合。事件量,条目的新鲜程度,如果您有办法知道该项目是否符合用户的兴趣等等。您可以根据直觉选择权重,看看结果与您的期望有多吻合。如果您有时间和意愿,您可以收集有关用户对条目的 react 情况的数据,并尝试使用机器学习技术了解每个因素的最佳权重。

  2. 如何给新帖子一个机会,也称为探索-利用权衡。 基本上,如果你只是继续访问已知的有趣条目,那么你将最大限度地提高用户的即时幸福感,但你永远不会了解新的有趣的东西,因此,总体而言,你的用户是不满意的。

这是一个很好研究的问题,根据您想深入研究的程度,您可以阅读有关 k 臂老虎机问题等问题的文献。

但一个简单的解决方案是不选择得​​分最高的条目,而是根据概率分布选择条目,这样高分条目出现的概率更高。大多数情况下,您会通过这种方式展示有趣的内容,但每个帖子都有机会偶尔出现。

关于algorithm - 如何不断过滤用户感兴趣的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3794464/

相关文章:

c# - 在 C# 中将数字转换为字母以在 Microsoft Excel 中使用

c++ - 检测 2 个长方体是否碰撞给出边界的算法

design-patterns - 在haskell中存储一些状态的任务的设计模式是什么

amazon-web-services - 如何在 Amazon Machine Learning 上构建推荐系统

algorithm - 将 bool 矩阵转换为行,其中没有一个条目是另一个的超集

algorithm - 这种类型的软件可以吗

c++ - 这个单例实现有问题吗?

objective-c - 设计决策 : Loading an NSArray up front vs. 询问代表特定项目

c# - 没有构造函数的依赖项注入(inject) : really a bad practice?

python - SGD算法从头开始预测电影评级