Le contexte:
J'ai un groupe de sites Web où j'enregistre quotidiennement le nombre de visites:
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
Question générale:
- Comment déterminer quels sites sont les plus actifs?
J'entends par là recevoir plus de visites ou avoir une augmentation soudaine des visites au cours des derniers jours. À des fins d'illustration, dans le petit exemple ci-dessus, W0 serait initialement populaire mais commence à montrer un abandon, W1 affiche une popularité constante (avec un pic isolé), et W3 une augmentation importante après un démarrage silencieux).
Pensées initiales:
J'ai trouvé ce fil sur SO où une formule simple est décrite:
// 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
Cela semble assez bon et facile, mais j'ai un problème avec ça.
Le calcul est basé sur les pentes. C'est très bien et c'est l'une des fonctionnalités qui m'intéresse, mais à mon humble avis, il a des problèmes pour les séries non monotones. Imaginez que pendant quelques jours nous ayons un nombre constant de visites (donc la pente = 0), alors la tendance ci-dessus serait nulle.
Des questions:
- Comment gérer les deux cas (augmentation / diminution monotone) et un grand nombre de hits?
- Dois-je utiliser des formules distinctes?