构建一个简单的推荐引擎

时间:2011-05-03 21:17:54

标签: php mysql

我网站上的用户和网页都有ID。当用户访问某个页面时,他们的userID和pageID将被写入MySQL表中:

 userID | pageID
    3   |    1
    2   |    1
    3   |    2
       etc...

在这个名为user_pages的表中,我最终会得到一堆可以转换为推荐引擎的原始数据。我的意思是推荐引擎 - 我想分析历史数据,并能够根据一组查看的页面预测用户可能喜欢的下一页。假设在转到ID为4,9,15的页面后,访问ID为3的页面之间存在很强的相关性。如果用户进入第4,9和15页,则引擎应该推荐第3页。

我认为我拥有创建它所需的所有数据输入代码。我如何编写一些分析数据以便页面相关的内容(即几乎每个访问过第5页的人都访问过第1页),并以某种方式使用它来预测用户最终可能喜欢的页面?

2 个答案:

答案 0 :(得分:7)

推荐系统是A.I研究的重要组成部分。我相信您对一组称为协同过滤的算法感兴趣。自2007年netflix奖项以来,这个领域发展很快。我建议你去here并阅读。它以简洁明了的方式解释了推荐系统的基本概念,并提供了一个指向Netflix项目MemReader方法的Java源代码的链接。您可以检查此源代码并推断构建推荐引擎的基本算法。

或者,如果您想要对所用算法进行更多数学解释,请here

实施起来不应该花太长时间。

答案 1 :(得分:1)

这篇文章提出了类似的问题:Advanced MySQL: Find correlations between poll responses

如果您的主数据表中包含一个附加字段,我认为您将能够生成类似的响应,特别是上次访问时使用的页面的ID或紧随其后访问的页面。

这样的事情:

+------+----------+--------------+----------+
| id   | page_id  | next_page_id | user_id  |
+------+----------+--------------+----------+
|    1 | 1        | 1            | 1        |
|    2 | 1        | 2            | 2        |
|    3 | 1        | 2            | 3        |
|    4 | 1        | 2            | 4        |
|    5 | 2        | 3            | 1        |
|    6 | 2        | 3            | 2        |
|    7 | 2        | 3            | 3        |
|    8 | 2        | 4            | 4        |
|    9 | 3        | 5            | 1        |
+------+----------+--------------+----------+

然后,您应该能够使用其中建议的SQL查询之一的修改版本生成当前页面和下一页之间的高相关性建议列表。