当前位置:  开发笔记 > 编程语言 > 正文

了解用于衡量趋势的算法

如何解决《了解用于衡量趋势的算法》经验,为你挑选了1个好方法。

在计算维基百科趋势的Hadoop教程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)==0,因此这个缩放因子是非负的).它可以看作是将月份的总浏览量视为一个权重,但随着它的增长而缓和 - 这样,总浏览量不再对"足够受欢迎"的内容产生影响,但同时对无关紧要的内容进行了重大改变. t尽可能地称重.

为什么这样呢?为什么我们想要打折最初不受欢迎的东西?对于那些持续受欢迎程度较低的项目而言,大三角洲不应该重要,而对于那些已经很受欢迎的项目(大三角洲可能落在标准偏差的一小部分内)来说,不应该更少吗?作为一个稻草人,为什么不简单地采取y2-y1和完成它?

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

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

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



1> Dingle..:

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

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

至于错误,我认为它来自(相对)标准误差,其具有因子1/sqrt(n),其中n是数据点的数量.在代码中,错误等于(1/sqrt(n))*(1/sqrt(mean)).它大致转化为:数据点越多,趋势越准确.我不认为它是一个精确的数学公式,只是一个粗暴的趋势分析算法,无论如何相对值在这个背景下更重要.

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

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有