Contesto:
Ho un gruppo di siti Web in cui registro il numero di visite su base giornaliera:
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
Domanda generale:
- Come determinare quali sono i siti più attivi?
Con questo intendo ricevere più visite o avere un improvviso aumento delle visite negli ultimi giorni. A scopo illustrativo, nel piccolo esempio sopra W0 sarebbe inizialmente popolare ma sta iniziando a mostrare abbandono, W1 sta mostrando una popolarità costante (con qualche picco isolato) e W3 un importante rilancio dopo un inizio tranquillo).
Pensieri iniziali:
Ho trovato questo thread su SO in cui è descritta una formula semplice:
// 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
Questo sembra buono e abbastanza facile, ma sto avendo un problema.
Il calcolo si basa sulle pendenze. Questo va bene ed è una delle caratteristiche che mi interessano, ma IMHO ha problemi per le serie non monotone. Immagina che durante alcuni giorni abbiamo un numero costante di visite (quindi la pendenza = 0), quindi la tendenza sopra sarebbe zero.
Domande:
- Come gestisco entrambi i casi (aumento / diminuzione monotonico) e un gran numero di hit?
- Dovrei usare formule separate?