Bối cảnh:
Tôi có một nhóm các trang web nơi tôi ghi lại số lượt truy cập hàng ngày:
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
Câu hỏi chung:
- Làm cách nào để xác định trang web nào hoạt động nhiều nhất?
Bằng cách này, tôi có nghĩa là nhận được nhiều lượt truy cập hơn hoặc có số lượt truy cập tăng đột ngột trong vài ngày qua. Đối với mục đích minh họa, trong ví dụ nhỏ ở trên, W0 ban đầu sẽ phổ biến nhưng bắt đầu cho thấy việc từ bỏ, W1 đang cho thấy mức độ phổ biến ổn định (với một số đỉnh bị cô lập) và W3 tăng đáng kể sau khi bắt đầu yên tĩnh).
Suy nghĩ ban đầu:
Tôi tìm thấy chủ đề này trên SO trong đó một công thức đơn giản được mô tả:
// 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
Điều này có vẻ tốt và đủ dễ dàng, nhưng tôi có vấn đề với nó.
Việc tính toán dựa trên độ dốc. Điều này là tốt và là một trong những tính năng tôi quan tâm, nhưng IMHO nó có vấn đề đối với loạt không đơn điệu. Hãy tưởng tượng rằng trong một số ngày chúng ta có số lượt truy cập không đổi (vì vậy độ dốc = 0), thì xu hướng trên sẽ bằng không.
Câu hỏi:
- Làm cách nào để xử lý cả hai trường hợp (tăng / giảm đơn điệu) và số lần truy cập lớn?
- Tôi có nên sử dụng các công thức riêng biệt?