В чем смысл формулы, используемой в программе hive_trend_mapper.py
для этого урока Hadoop по вычислению трендов в Википедии?
На самом деле есть два компонента: месячный тренд и дневной тренд. Я собираюсь сосредоточиться на дневном тренде, но подобные вопросы относятся к месячному.
В дневном тренде 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
, так что коэффициент масштабирования неотрицательный ). Это можно рассматривать как отношение общего количества просмотров страниц за месяц к весу, но оно уменьшается по мере роста - таким образом, общее количество просмотров страниц перестает иметь значение для вещей, которые являются «достаточно популярными», но в то же время большие изменения для незначительного донора. весят столько же.
Но почему делает это? Почему мы хотим сбрасывать со счетов вещи, которые изначально были непопулярны? Разве большие дельты не должны иметь значения больше для предметов, которые имеют низкую постоянную популярность, и меньше для предметов, которые уже популярны (для которых большие дельты могут выпасть в пределах доли стандартное отклонение)? Как соломенный человек, почему бы просто не взять y2-y1
и покончить с этим?
А для чего будет полезен error
? Учебник не использует его снова и снова. Опять же, это не говорит нам, как используется trend
- это то, что нанесено на конечный продукт, правильно?
Где я могу прочитать здесь (желательно вводный) фон по теории? Есть имя для этого безумия? Это где-то формула из учебника?
Заранее спасибо за любые ответы (или обсуждения!).