此Hadoop教程hive_trend_mapper.py程序中用于计算Wikipedia趋势的公式背后的原理是什么?
hive_trend_mapper.py
实际上有两个组成部分:每月趋势和每日趋势。我将专注于每日趋势,但类似的问题也适用于每月趋势。
在每日趋势中,pageviews是该主题每天的页面浏览量数组,每天一个元素,并且total_pageviews是该数组的总和:
pageviews
total_pageviews
# pageviews for most recent day y2 = pageviews[-1] # pageviews for previous day y1 = pageviews[-2] # Simple baseline trend algorithm slope = y2 - y1 trend = slope * log(1.0 +int(total_pageviews)) error = 1.0/sqrt(int(total_pageviews)) return trend, error
我知道它在做什么表面上:它只是看起来在过去的一天(的变化slope),而这个扩展到日志1+total_pageviews(log(1)==0,所以这个比例系数非负)。可以将其视为一个月的总浏览量,但随着它的增长而有所缓和- 这样,总浏览量就不会对“受欢迎”的事物产生影响,但与此同时,无关紧要的变化却很大不会那么重。
slope
1+total_pageviews
log(1)==0
但是 为什么 要这样做呢?为什么我们要打折最初不受欢迎的东西?不宜大三角洲重要 多 了具有低恒定的普及项目, 少 对于已经流行(针对大三角洲可能的标准偏差的一小部分内下降井)项目?作为一个稻草人,为什么不简单地接受y2-y1并完成它呢?
y2-y1
会有什么error用?本教程并没有真正有意义地再次使用它。再说一次,它也没有告诉我们如何trend使用-这是最终产品中的内容,对吗?
error
trend
在这里,我可以在哪里阅读有关该理论的(最好是介绍性的)背景?有这种疯狂的名字吗?这是某个地方的教科书公式吗?
在此先感谢您提供任何答案(或讨论!)。
正如在线注释所言,这是一个简单的“基线趋势算法”,这基本上意味着在比较两个不同页面的趋势之前,您必须建立基线。在许多情况下,使用的是平均值,如果您根据时间轴绘制综合浏览量,则很简单。该方法被广泛用于监测水质,空气污染物等,以检测基线的任何重大变化。
在OP的情况下,浏览量的斜率由totalpageviews的对数加权。这种排序使用totalpageviews作为斜率的基线校正。正如西蒙(Simon)所说,这在总浏览量非常不同的两个页面之间取得了平衡。例如,A的斜率500超过1000,000,000总浏览量,B的斜率是1000,超过1,000。日志基本上意味着1000,000的重要性仅是1,000的两倍(而不是1000倍)。如果仅考虑坡度,则A的受欢迎程度不及B。但是按权重,现在A的受欢迎程度与B相同。我认为这很直观:尽管A的综合浏览量只有500个综合浏览量,但这是因为它已经饱和,您仍然要给它足够的信誉。
至于错误,我相信它来自(相对)标准误差,其标准误差为1 / sqrt(n),其中n是数据点的数量。在代码中,误差等于(1 / sqrt(n))*(1 / sqrt(mean))。粗略地解释为:数据点越多,趋势越准确。我看不到它是一个精确的数学公式,只是一个蛮横的趋势分析算法,在这种情况下,相对值更为重要。
总而言之,我相信这只是一个经验公式。在一些生物统计学教科书中可以找到更高级的主题(非常类似于监视流感等的爆发)。