Контекст:
У меня есть группа веб-сайтов, где я записываю количество посещений ежедневно:
W0 = { 30, 34, 28, 30, 16, 13, 8, 4, 0, 5, 2, 2, 1, 2, .. }
W1 = { 1, 3, 21, 12, 10, 20, 15, 43, 22, 25, .. }
W2 = { 0, 0, 4, 2, 2, 5, 3, 30, 50, 30, 30, 25, 40, .. }
...
Wn
Общий вопрос:
- Как определить, какие сайты наиболее активны?
Под этим я подразумеваю получать больше посещений или иметь внезапное увеличение посещений в течение последних нескольких дней. В целях иллюстрации, в небольшом примере выше W0 был бы первоначально популярен, но начинает показывать отказ, W1 демонстрирует устойчивую популярность (с некоторым изолированным пиком), а W3 - важный рост после тихого старта).
Начальные мысли:
Я нашел эту ветку на SO, где описана простая формула:
// 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
Это выглядит хорошо и достаточно просто, но у меня проблемы с этим.
Расчет основан на склонах. Это нормально и является одной из функций, которые меня интересуют, но ИМХО у него есть проблемы для немонотонных серий. Представьте, что в течение нескольких дней у нас будет постоянное количество посещений (поэтому наклон = 0), тогда вышеупомянутая тенденция будет нулевой.
Вопросов:
- Как мне обрабатывать как случаи (монотонное увеличение / уменьшение), так и большое количество попаданий?
- Должен ли я использовать отдельные формулы?