转载于http://qing.blog.sina.com.cn/2090594487/7c9bf0b733001jsa.html
以搜索为例,点击类似。所有变换和简化须不影响排序结果。
排位变化
最初的算法参考电影排行榜,统计昨日Top词、前日Top词,然后计算每个词w两天的排位差,排位变化最大的就是最热的词。
排序取出取出排位前 N 的词语集合。
WZ为昨日搜索词TopN集合,WQ为前日搜索词TopN集合。
SortBySearchCount(WZ, Desc)
SortBySearchCount(WQ, Desc)
for each(w in WZ)
{
if(w in WQ)
PositionChange = Position( w,昨日) - Position( w,前日 )
else
PositionChange = Position( w,昨日) - ( N + 1 )
}
SortByPositionChange( WZ)
此算法比较笨,必需做三次排序,但是挑选出的词语效果还是比较好的。
注意,根据上述方法,词条这两天的排位差PositionChange 越小,表示其越火。PositionChange 可以为负值。
----------备注----------
举例:对于在集合WZ中的词条w,给出几种情况:
(1)假设词条w这两天比较火,即分别出现在昨天和前天的词条集合WZ和WQ中了,则
假设昨天拍在第3位,前天排在第5位,则该词条上升了两位。此时PositionChange = -2.
假设昨天拍在第5位,前天排在第3位,则该词条下降了两位。此时PositionChange = 2.
(2)假设词条w只在昨天的集合WZ中,但是不在前天的集合WQ中,则
假设昨天拍在第3位,又因为N = 100,则98位。此时PositionChange = -98.
又因为PositionChange 越小(-98<-2<2),表示其越火,根据排序,可以得到第三情况的词条最火。此时也符合实际情况。
变化率
算法很简单:今日次数/昨日次数,按照变化率排序即可。
WZ为昨日搜索词全集,WQ为前日搜索词全集。
CZ为昨日搜索总次数,CQ为前日搜索总次数。
Cz某词w昨日的次数,Cq某词w前日的次数
for each(w in WZ)
{
if(w not in WQ) {
Cq = 0
}
ChangeRate = (Cz+1)/(Cq+1) - 1
}
SortByChangeRate(WZ, Desc)
算法很简单,但是哪些前日访问很少的词语,就很占便宜了。
加权变化率
加权变化率是对于算法2的修正,考虑搜索量因素,将搜索量较小的词语加权小,而对于搜索量大的词语加权大,平衡一下访问量因素。此处的权值取两天内此词总共的搜索次数在全部搜索次数中的比例。
WZ为昨日搜索词全集,WQ为前日搜索词全集。
CZ为昨日搜索总次数,CQ为前日搜索总次数。
Cz某词w昨日的次数,Cq某词w前日的次数
for each(w in WZ)
{
if(w not in WQ) {
Cq = 0
}
ChangeRate = (Cz+1) / (Cq+1) - 1
Weight = (Cz+Cq) / (CZ+CQ)
RateWithWeight = ChangeRate * Weight
}
SortByRateWithWeight (WZ, Desc)
因为我们只考虑排序,所以可以对词算法进一步简化
RateWithWeight = ChangeRate * Weight
= ( (Cz+1) / (Cq+1) - 1 ) * (Cz+Cq) / (CZ+CQ)= (Cz-Cq) * (Cz+Cq) / (Cq+1) / (CZ+CQ)
因为CZ、CQ对于两天内的所有值都是一样的,所以可以不计算,不影响最后的排序结果。
可以取简化后的
RateWithWeight = (Cz-Cq) * (Cz+Cq) / (Cq+1)
-------------------------------分割线------------------------------------
小结
方法一:排位差
算法思想:根据词语每天出现次数求出其排在老几,之后计算两天的排位差,根据排位差求热度。
具体步骤:
(1)统计每一个词在昨天和前天出现的次数,并找出排位前 N 的词语集合
(2)对每一个词,计算每个词w两天的排位差
(3)根据词语的排位差进行排序,其中排位变化最大的就是最热的词。
评价:此算法比较笨,必需做三次排序,但是挑选出的词语效果还是比较好的。
方法二:变化率
算法思想:根据词语两天的出现次数求出其出现次数的比值,根据比值求出其热度。
具体步骤:
(1)统计每一个词在昨天和前天出现的次数,并找出排位前 N 的词语集合
(2)对每一个词,计算每个词w两天的变化率,即今日次数/昨日次数。
(3)根据词语的变化率进行排序,其中变化率最大的就是最热的词。
评价:算法简单,但是对于访问次数少但变化率大的词语会占便宜。
方法三:加权变化率
算法思想:根据词语两天的出现次数和其在总搜索次数的站的份额求出比值,根据比值求出其热度。
具体步骤:
(1)统计每一个词在昨天和前天出现的次数,并找出排位前 N 的词语集合
(2)对每一个词,计算每个词w两天的加权变化率,即(今日次数/昨日次数)* 该词这两天的总搜索次数在全部搜索次数中的比例。
(3)根据词语的加权变化率进行排序,其中加权变化率最大的就是最热的词。
评价:算法简单,弥补了变化率的缺点。
注意:求热词时,单纯比较每天词条的出现次数是不行的,重要的是比较多天之间的出现次数。