[关闭]
@chanvee 2014-07-11T05:34:09.000000Z 字数 1991 阅读 2728

趋势预测与社区推荐

趋势预测 社区推荐


基于演化推荐网络的流行趋势预测(2)

最流行商品的变化趋势


Degree Trend

Remain Popular

动图一表示的是初始时的top500流行商品随着时间的推移排名的变化,红色的点表示初始排名为前250,绿色点表示初始排名为后250名。图二表示的是初始时排名在前250的商品随着时间变化仍在前250的个数。由上面两图可以发现大部分的top流行商品仍然会流行,但是最流行的前20商品一般是会一直变化的,同时随着时间的演化会有越来越多的后250个商品进入前250。那么如何发现这些会进入前250的“潜力股”商品,以及即将掉出前250的产品就成为了非常重要且有意思的问题。

新晋商品分析


New Item

在曾安的工作中][1],主要介绍了两种想法:根据当前item的度;以及根据相比前一个时间段增长的度来与预测商品的趋势。从中可以得到的结论包括:第一种方法对新晋流行的商品准确率较高,第二种方法可以提高预测那些商品不会掉出最流行的商品。又如上一次的结果有说道很多新进入前250的商品往往是最近新加进系统的商品,这些商品往往会在某一个月存在着突变,一下由几百或是几千的评分次数跃升到几万的评分次数。在没有做具体的完全统计情况下,只是肉眼的看了10个左右的这类商品的样本,发现一般从加入到爆发的隐藏时间大概在5个月左右(上图表示的是新商品的爆发现象)。所以另一个工作是如何找到新商品中哪些可能更具有爆发增长性,应该是解决上述进入前250的“潜力股”商品问题的一个解决思路。

对于这种爆发性的商品根据它当前的流行度(即度的大小)和最近流行度都不能够准确的预测出其流行趋势,于是我又做了一下这些新加进来的商品他们的平均评分,看看这种具有爆发特性的商品是否与他的评分相关。只不过实验结果得出的结论是两者似乎没有什么关系,前100,前1000-1100,前2000-2100的平均评分都在3.2左右,也就是说爆发性商品也不是想象中评分比较高的商品。目前遇到了这个瓶颈,没有想到太好的方法去解决。

问题

  1. 如何确定这类爆发性的商品?目前没什么好的想法。
  2. 关于数据的采样,我不太清楚怎样采样比较合理。

参考文献


[1] Trend prediction in temporal bipartite networks: the case of Movielens, Netflix, and Digg.


社区推荐系统报告

本次报告主要是按着邵老师提供的思想进行试验得到的结果,其中略作了一些改动,后文会说明原因。

方法


        Item1     Item2     Item3
User1     5         0         4
User2     3         1         3

同样以邵老师给的例子为例:

第一步是学习Item1, Item2, Item3等对于用户聚类的作用,即得到各个item对聚类作用的一个权值。这里使用的方法是:首先计算每一个Item相对于其他Item的Person Correlation(即列求相关系数),然后将所有的这些相关系数求和,以此类推,这样对每一个Item就都得到了一个相关系数的和,然后将这些相关系数“归一化”。需要说明的是,考虑到权值感觉是非负的,我把这些和(范围大概是-5-200左右,不精确)映射到了[0,1]的区间,原理y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;,所以这些权值的和不为1,我觉得也不需要为1,因为赋权值的本质是为了刻画该Item对于聚类的作用。

第二步在计算用户的相关系数矩阵的时候,也不是采用的邵老师提到的欧氏距离,因为欧氏距离越大表示越不相关,与程序有点矛盾,所以我把它改成了计算余弦相似度。计算式为:S((U1,U2)| (Item1, Item2, Item3))= (w1(5 * 3)+w2(0*1)+w3(4*3))/(sqrt(5^2+4^2)*sqrt(3^2+1^2+3^2));由此得到了一个新的用户的相似度矩阵。

第三步则是根据用户相似的矩阵进行社区划分,采用的方法是k-means++。

结果


此实验根据上述方法以及传统方法分别计算了推荐的准确率、召回率和F1值,其结果如表一、表二所示:

表一

L=5 L=10 L=15 L=20
Precision 0.2916 0.2429 0.2107
Recall 0.0617 0.0957 0.1179
F1 0.0881 0.1138 0.1232

表二

L=5 L=10 L=15 L=20
Precision 0.2664 0.2130 0.1853
Recall 0.0539 0.0724 0.0869
F1 0.0769 0.0900 0.0976

上面两个表分别表示两种不同的方法得到的结果,表1是根据邵老师的方法得到的结果,L表示推荐列表长度,即给每个用户推荐L个商品(下同);表二是传统的社区推荐算法。由图可知,新方法对推荐结果是有提高的。

[1] Markdown原文

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注