Contexto:
Eu tenho um grupo de sites onde eu registro o número de visitas diariamente:
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
Pergunta Geral:
- Como determino quais sites são os mais ativos?
Com isso, quero dizer receber mais visitas ou ter um aumento repentino de visitas durante os últimos dias. Para fins de ilustração, no pequeno exemplo acima, W0 seria inicialmente popular, mas está começando a mostrar abandono, W1 está mostrando uma popularidade constante (com algum pico isolado) e W3, um aumento importante após um início silencioso).
Pensamentos iniciais:
Encontrei este tópico no SO, onde uma fórmula simples é descrita:
// 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
Parece bom e fácil o suficiente, mas estou tendo um problema com isso.
O cálculo é baseado em inclinações. Isso é bom e é um dos recursos que me interessam, mas IMHO tem problemas para séries não monotônicas. Imagine que durante alguns dias tenhamos um número constante de visitas (portanto, a inclinação = 0), a tendência acima seria zero.
Questões:
- Como lidar com os dois casos (aumento / diminuição monotônicos) e o grande número de ocorrências?
- Devo usar fórmulas separadas?