Контекст:
У мене є група веб-сайтів, де щодня фіксую кількість відвідувань:
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), то зазначена вище тенденція була б нульовою.
Запитання:
- Як вирішувати як випадки (монотонне збільшення / зменшення), так і велику кількість звернень?
- Чи варто використовувати окремі формули?