Kontekst:
Mam grupę witryn, na których codziennie rejestruję liczbę odwiedzin:
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
Pytanie ogólne:
- Jak ustalić, które witryny są najbardziej aktywne?
Rozumiem przez to otrzymywanie większej liczby wizyt lub nagły wzrost liczby wizyt w ciągu ostatnich kilku dni. Dla celów ilustracyjnych, w powyższym małym przykładzie W0 byłby początkowo popularny, ale zaczyna wykazywać rezygnację, W1 wykazuje stałą popularność (z pewnym izolowanym szczytem), a W3 ważne podwyższenie po spokojnym starcie).
Wstępne przemyślenia:
Znalazłem ten wątek na SO, gdzie opisano prostą formułę:
// 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
Wygląda to dobrze i łatwo, ale mam z tym problem.
Obliczenia oparte są na zboczach. Jest w porządku i jest to jedna z funkcji, które mnie interesują, ale IMHO ma problemy z seriami niemonotonicznymi. Wyobraź sobie, że w ciągu kilku dni mamy stałą liczbę odwiedzin (więc nachylenie = 0), to powyższy trend wynosiłby zero.
Pytania:
- Jak radzić sobie z obydwoma przypadkami (monotoniczny wzrost / spadek) i dużą liczbą trafień?
- Czy powinienem używać oddzielnych formuł?