了解用于衡量趋势的算法

时间:2009-10-28 07:42:23

标签: algorithm

计算维基百科趋势的hive_trend_mapper.py 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)==0y2-y1的日志,所以这缩放因子是非负的)。它可以看作是将月份的总浏览量视为一个权重,但随着它的增长而缓和 - 这样,总浏览量不再对“足够受欢迎”的内容产生影响,但同时对无关紧要的内容进行了重大改变。得到的重量一样多。

为什么这样做?为什么我们想要打折最初不受欢迎的东西?对于具有低持续受欢迎程度的项目,大型增量不应该更多,而对于已经受欢迎的项目(对于这些项目来说,大增量可能落在一小部分内)更少标准偏差)?作为一个稻草人,为什么不简单地采取error并完成它?

trend会对什么有用?该教程并没有真正有意义地再次使用它。然后,它没有告诉我们如何使用{{1}} - 这是最终产品中绘制的,是正确的吗?

我在哪里可以阅读理论上的(最好是介绍性的)背景知识?有这个疯狂的名字吗?这是一个教科书公式吗?

提前感谢任何答案(或讨论!)。

4 个答案:

答案 0 :(得分:10)

正如在线评论所说,这是一个简单的“基线趋势算法”, 这基本上意味着在比较两个不同页面的趋势之前,你必须建立 一个基线。在许多情况下,使用平均值,如果你这么直接 根据时间轴绘制综合浏览量。该方法广泛用于监测 水质,空气污染物等,以检测基线的任何重大变化。

在OP的情况下,浏览量的斜率由总页面浏览量的日志加权。 此sorta使用totalpageviews作为斜率的基线校正。正如西蒙所说,这取得了平衡 两页之间的总页面浏览量非常不同。 例如,A的总浏览量超过1000,000的斜率500,B超过1,000的1000。 日志基本上意味着1000,000只比1,000(而不是1000次)重要两倍。 如果你只考虑斜率,A不如B。 但是有了重量,现在衡量A的受欢迎程度与B相同。我认为它非常直观: 虽然A的网页浏览量只有500次网页浏览量,但那是因为它已经饱和了,你还是要给它足够的信用。

至于错误,我相信它来自(相对)standard error,它有一个因子1 / sqrt(n),其中 n是数据点的数量。在代码中,错误等于(1 / sqrt(n))*(1 / sqrt(mean))。 它大致转化为:数据点越多,趋势越准确。我没有看到 它是一个精确的数学公式,只是一个粗暴的趋势分析算法,无论如何相对 在这种情况下,价值更重要。

总之,我认为这只是一个经验公式。在一些生物统计学教科书中可以找到更高级的主题(非常类似于监测流感等的突破。)

答案 1 :(得分:1)

代码实现了统计信息(在这种情况下是“基线趋势”),您应该对此进行自我教育,一切都变得更加清晰。 Wikibooks有一个很好的instroduction

该算法考虑到新页面根据定义比现有页面更不受欢迎(因为 - 例如 - 它们是从相对较少的其他地方链接的),并建议这些新页面随着时间的推移会越来越受欢迎。

error是系统预期的预测误差范围。 error越高,趋势将越不可能像预期的那样继续。

答案 2 :(得分:1)

通过点击量调节度量的原因不是要惩罚热门页面,而是要确保您可以使用单个度量来比较大小变化。如果您只使用y2 - y1,您将只看到大卷页面上的点击更改。试图表达的是“重大”变化。如果您吸引100次点击,则1000次点击更改非常重要。 1000次点击更改,如果你吸引100,000则不那么。这个公式试图做的是使这两个都可见。

在Excel中以几种不同的比例进行试用,您可以很好地了解它的运作方式。

希望有所帮助。

答案 3 :(得分:1)

另一种看待它的方法是:

假设您的页面和我的页面是在同一天制作的,并且您的页面获得的总观看次数大约为一千万,并且直到某一点我的大约一百万。然后假设我的某个点的坡度对我来说是一百万,而对你来说就是五十万。如果你只是使用斜率,那么我赢了,但是你的页面每天已经有更多的观看次数,urs有500万,我的100万,所以我的一百万仍然是200万,而urs是5.5那一天是百万。所以这个缩放概念可能是尝试调整结果,以显示你的页面也是一个好的趋势设置器,它的斜率较小,但它已经更受欢迎,但缩放只是一个对数因子,所以似乎没有对我来说太有问题了。