【问题标题】:Understanding algorithms for measuring trends了解衡量趋势的算法
【发布时间】:2012-04-30 09:41:28
【问题描述】:

this Hadoop tutorialhive_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) 的日志,所以这个比例因子是非负的)。它可以被视为将当月的总浏览量视为权重,但随着它的增长而缓和 - 这样,总浏览量不再对“足够流行”的事物产生影响,但同时对无关紧要的事物产生重大变化。没有那么重。

但是为什么要这样做呢?为什么我们要打折最初不受欢迎的东西?大增量不应该更多对于持续流行度较低的商品,而less对于已经流行的商品(大增量可能在一小部分范围内)标准差)?作为稻草人,何不干脆把y2-y1 搞定?

error 有什么用处?本教程并没有真正有意义地再次使用它。再说一次,它也没有告诉我们trend 是如何使用的——这是最终产品中绘制的内容,对吗?

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

提前感谢您的任何回答(或讨论!)。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 对,我了解它的机制。我只是不同意说 B 的增长应该小于 A 的权重是直观的——尽管 B 没有那么受欢迎,但关于它的相对和突然的点击量激增也有一些话要说;相反,A 的增长完全在其标准偏差范围内,应该被视为不那么显着。我想这个特殊的公式实际上更多是衡量基线受欢迎程度。至于书籍 - 我真的希望得到具体的建议!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我和 Google 都无法找到在 Wikibook 基线趋势中引入的位置。你有指针吗?
    • 那本书正在处理基本的统计数据,在尝试使用更深奥的概念之前应该理解这些统计数据。
    【解决方案3】:

    通过点击量来调整衡量标准的原因不是为了惩罚热门页面,而是确保您可以通过单一衡量标准来比较大小变化。如果您只使用 y2 - y1,您只会看到大容量页面上的点击变化。这试图表达的是“重大”变化。如果您吸引 100 次点击,那么 1000 次点击就会发生变化,这一点非常重要。如果您吸引 100,000,则 1000 次点击更改会更少。这个公式试图做的是让这两个都可见。

    在 Excel 中尝试几个不同的比例,您会很好地了解它的运作方式。

    希望对您有所帮助。

    【讨论】:

    • 我不关注。对数比例因子显然夸大了热门项目的分数。在 Python 中: >>> [(d, d*math.log(1.+t)) for (d,t) in [(1000,100),(1000,100000)]] [(1000, 4615.1205168412598), (1000, 11512.935464920229)]
    【解决方案4】:

    另一种看待它的方式是:

    假设你的页面和我的页面是在同一天制作的,你的页面总浏览量约为一千万,而我的浏览量约为 100 万。然后假设某个点的斜率对我来说是一百万,对你来说是 50 万。如果你只使用坡度,那么我就赢了,但是你的页面在那个时候每天已经有更多的浏览量,urs 有 500 万,我有 100 万,所以我的 100 万仍然是 200 万,而 urs 是 5.5那天百万。所以可能这个缩放概念是为了尝试调整结果以表明你的页面也可以作为趋势设定者,它的斜率较小但已经更受欢迎,但缩放只是一个对数因子,所以似乎没有对我来说太麻烦了。

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2012-09-23
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多