Google除了给我们提供搜索服务之外,还有大大小小很多的有意思的产品,Google Trends就是其中一个。
前两天beenhero同学花了点时间把Google Trends 每天的热门数据(Hot Trends)全爬过来了,想让我帮忙建立个简单的模型进行一些分析。
Hot Trends是GoogleTrends根据当天用户搜索的关键字,给出的”搜索关键字”排行榜。为了避免数据平庸(最热门往往类似于”天气”等内容),Google自己已经做了一些处理,偏向于显示突然增长的搜索结果。希望能够根据关键字出现的频率、时间和榜上排名,给出一个GoogleTrends中最受关注的前几名。
关于详细的算法,参见文章的后半部分。
这里简单列出部分结果:(如下图)
有意思的是,排名第一的关键字“Missing Money”: http://www.missingmoney.com/ (嗨,都是服务人民,差别咋这么大~)
模型目标:
- 频率,同一个关键词,出现次数越高,权重越高
- 时间, 时间越新,权重越高
- Rank,排名越高,权重越高
模型分析:
抓取后的数据结构:(原始数据:Google Trends )
keyword 关键词
rank 当日排名,1~100位
published_at 排名时间
- 对每个词条评分 keywords( a , b ,c ) a,b,c分别表示频率、时间、rank的评分。例如obama (0.5,0.8,0.7)表示关键字”Obama”,频率得分0.5,时间得分0.8,rank得分0.7。
频率评分: 设频率为F 则 F/ 15 (说明15为常数 可修改)
时间评分: 设距离今天的天数为X 则 (365 – X)/365 (Tip: 认为消息一年后过期 && 多个keyword取rank最近的日期 )
RANK评分: 设频率为R 则 (101 – X) / 100。(多个keyword取rank最靠前的) - 单个词条计算加权总分Score
我们认为时间、频率、RANK的权分别为 0.35 ,0.3 ,0.35
那么keywords( a , b ,c )的总分为: 0.35*a + 0.3*b + 0.35*c 例如Score obama (0.5,0.8,0.7) = 0.35*0.5 + 0.3*0.8 + 0.35*0.7 = 0.66
补充说明:
- 参数可调直观、数据意义明确。
- 线性模型,简单。
- 虽然考虑相同词条 但未考虑相近词条
模型对应的SQL:
SELECT `keyword` ,(
0.35*COUNT(*)/15 +
0.3*(101-MAX(`rank`))/100 +
0.35*(365-DATEDIFF(CURRENT_DATE(),MAX(`published_at`)))/365
) AS myorder
FROM `gtrends`
GROUP BY `keyword`
ORDER BY myorder DESC
Leave a Reply