Bağlam:
Ziyaret sayısını günlük olarak kaydettiğim bir grup web sitem var:
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
Genel Soru:
- Hangi sitelerin en aktif olduğunu nasıl belirlerim?
Bununla, son birkaç gün içinde daha fazla ziyaret almak veya ziyaretlerde ani bir artış demek. Örnekleme amacıyla, yukarıdaki küçük örnekte W0 başlangıçta popüler olacaktır, ancak terk etmeyi göstermeye başlamaktadır, W1 sabit bir popülerlik göstermektedir (bazı izole tepe noktaları ile) ve W3 sessiz bir başlangıçtan sonra önemli bir artıştır.
İlk düşünceler:
Basit bir formül açıklandığı gibi SO bu iş parçacığı bulundu :
// 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
Bu yeterince iyi ve kolay görünüyor, ama onunla bir sorunum var.
Hesaplama eğimlere dayanmaktadır. Bu iyi ve ilgilendiğim özelliklerden biri, ancak IMHO monotonik olmayan seriler için sorunları var. Bazı günlerde sürekli ziyaretlerimiz olduğunu (eğim = 0), yukarıdaki eğilimin sıfır olacağını düşünün.
Sorular:
- Her iki vakayı (monotonik artış / azalma) ve çok sayıda isabetle nasıl başa çıkarım?
- Ayrı formüller kullanmalı mıyım?