Tổng quan về anomaly detection cho người mới
Bài 1: Một ngày đẹp trời, dữ liệu sai bét và bạn không hề hay biết
1. Một ngày bình thường ở công ty F
8 giờ sáng, bạn mở dashboard tracking như mọi khi.
Các job chạy hôm qua đều thành công, ít nhất là theo báo cáo mới nhất.
Nhưng rồi Slack bắt đầu đổ chuông.
PM gửi thông báo alert
“Ê sao report hôm qua mất hết dữ liệu TikTok vậy?”
“Campaign hôm thứ Ba doanh thu = 0 là sao trời?”
Bạn mở log ETL, mở tab Snowflake, lục lại S3 và thấy điều gì đó lạ lạ.
Hình như hôm qua pipeline thành công nhưng dữ liệu chưa đủ, mà cũng chẳng ai phát hiện ra.
Hoặc cũng có thể dữ liệu đã sai cả tuần mà bạn chưa từng được cảnh báo.
Và thế là câu chuyện bắt đầu…
2. Khi nào là ‘bình thường’? Khi nào là ‘bất thường’?
Trong thế giới dữ liệu, “bất thường” (anomaly) là bất kỳ điểm nào không đi theo “dòng chảy” thường ngày.
- Point anomaly: Một ngày doanh thu = 0, trong khi bình thường là vài trăm triệu.
- Contextual anomaly: Lượt click thứ Sáu thấp hơn thứ Tư, trong khi lịch sử luôn ngược lại.
- Collective anomaly: 5 ngày liền traffic giảm 20% — không một ai để ý vì nhìn từng ngày thì “có vẻ ổn”.
Câu hỏi là: Làm sao bạn biết một điểm dữ liệu là bình thường hay bất thường nếu không ai báo?
3. Data sai không đáng sợ bằng việc… bạn không biết nó sai
Khi bạn scale hệ thống:
- từ vài bảng lên vài trăm bảng
- từ một pipeline lên hàng chục pipeline
- từ 1 source dữ liệu lên 5-10 source khác nhau
… thì việc “nhìn bằng mắt” hay “đợi user feedback” không còn hiệu quả.
Bạn cần một con mắt thứ ba – một thứ cảm quan kỹ thuật số, để luôn canh chừng data có chệch khỏi kỳ vọng hay không.
4. Có những cách nào để phát hiện anomaly?
Cách thủ công:
- “Nếu số lượng record < 1000 thì cảnh báo”
- “Nếu revenue ngày hôm nay lệch 50% so với hôm qua thì gửi Slack”
Nhưng data có seasonality (VD: traffic giảm vào Chủ nhật)?
Số đơn tăng vào cuối tháng? → Rule tĩnh dễ báo sai hoặc bỏ sót.
Cách thống kê:
- Z-score: điểm cách bao xa so với trung bình
- Standard deviation: nằm ngoài khoảng mức dao động thông thường thì coi là bất thường
- Rolling average: dùng dữ liệu của thời gian gần nhất để so sánh.
- Exponential smoothing: làm mịn dữ liệu, tự cân nhắc theo. thời gian dể so sánh. Ví dụ dữ liệu hôm qua quan trọng hơn tuần trước.
Cách thông minh hơn:
- Holt-Winters: hiểu trend và seasonality → dự báo hợp lý hơn
- Isolation Forest, Autoencoder, Prophet: học sâu để hiểu pattern phức tạp
5. Ví dụ thực chiến
Rồi, ta sẽ đi một ví dụ duy nhất – số lượt click mỗi ngày từ Facebook Ads – và lần lượt dùng các cách thống kê để soi nó. Mục tiêu là thấy rõ từng phương pháp phát hiện anomaly làm được gì, hạn chế gì.
Bối cảnh:
Bạn đang tracking số lượt click quảng cáo mỗi ngày, dữ liệu 21 ngày gần nhất như sau:
Ngày | Click |
---|---|
Thứ 2 tuần 1 | 4100 |
Thứ 3 tuần 1 | 4300 |
Thứ 4 tuần 1 | 4350 |
Thứ 5 tuần 1 | 4200 |
Thứ 6 tuần 1 | 4400 |
Thứ 7 tuần 1 | 2800 |
CN tuần 1 | 2500 |
Thứ 2 tuần 2 | 4150 |
Thứ 3 tuần 2 | 4350 |
Thứ 4 tuần 2 | 4400 |
Thứ 5 tuần 2 | 4300 |
Thứ 6 tuần 2 | 4450 |
Thứ 7 tuần 2 | 2700 |
CN tuần 2 | 2600 |
Thứ 2 tuần 3 | 4180 |
Thứ 3 tuần 3 | 4320 |
Thứ 4 tuần 3 | 3450 ❗️← đột nhiên thấp bất thường |
Thứ 5 tuần 3 | 4290 |
Thứ 6 tuần 3 | 4430 |
Thứ 7 tuần 3 | 2750 |
CN tuần 3 | 2580 |
Mục tiêu:
Tìm xem ngày Thứ 4 tuần 3 – 3450 click có phải là anomaly không?
1. So với trung bình tổng thể
Tính trung bình tất cả ngày:mean ≈ 3800 click
So sánh:
- 3450 < 3800 → Thấp hơn trung bình khoảng 350
- Nhưng nếu so với thứ 7/CN thì lại cao hơn.
Hạn chế: Không nhận ra rằng Thứ 4 thường cao hơn trung bình, nên không thấy đây là vấn đề nghiêm trọng.
Ưu điểm: Cách đơn giản nhất, dễ làm.
2. Trung bình gần nhất (3–5 ngày trước đó)
3 ngày gần nhất:
- Thứ 2 tuần 3: 4180
- Thứ 3 tuần 3: 4320
- Thứ 4 tuần 3: 3450 → Trung bình 2 ngày trước = 4250
So với hôm nay: 3450 là kém 800 click (~19%)
Cảm thấy có gì đó sai sai, nhưng chưa chắc do lỗi hay bình thường dao động.
Ưu điểm: Phản ứng nhanh với các thay đổi gần đây
Nhược điểm: Không phân biệt ngày trong tuần → dễ hiểu sai nếu có chu kỳ
3. So với mức dao động bình thường (standard deviation)
Nhìn các ngày Thứ 4:
- Tuần 1: 4350
- Tuần 2: 4400
- Tuần 3: 3450
Trung bình Thứ 4 = 4400
Độ lệch chuẩn giữa tuần 1–2 gần như 0 → cực kỳ ổn định
→ Tuần 3 bị lệch ~950 click (~21%)
→ Cảnh báo rõ ràng: Anomaly nghiêm trọng
Ưu điểm: Chính xác khi dữ liệu ổn định
Nhược điểm: Nhạy cảm với outlier
4. Smoothing (Exponential smoothing)
Smoothing tạo ra “đường dự đoán” mượt mà theo thời gian.
- Với dữ liệu ổn định, nó sẽ dự đoán Thứ 4 tuần 3 vào khoảng ~4380
- 3450 lệch rất nhiều → Flag
Ưu điểm: Giảm nhiễu, nhạy với thay đổi mạnh
Nhược điểm: Không hiểu “Thứ 4 thường cao” – chưa biết đến seasonality
5. Holt-Winters (có nhận biết seasonality + trend)
Model học được rằng:
- Click mỗi tuần cao nhất là Thứ 4–6
- Thứ 4 thường dao động quanh 4370–4400
→ Thứ 4 tuần 3 chỉ có 3450 → lệch ~22%
→ Flag anomaly, cực kỳ tự tin
Ưu điểm:
- Nhận diện được ngày nào là ngày “cao”
- Không bị lừa bởi Chủ nhật thấp
- Biết khi nào sự lệch là bình thường, khi nào là báo động
Nhược điểm: Cần đủ dữ liệu lịch sử và setup mô hình
Tổng kết so sánh
Phương pháp | Nhận diện được anomaly? | Nhận ra đặc thù theo ngày? | Độ chính xác |
---|---|---|---|
Trung bình tổng thể | Không | Không | Thấp |
Trung bình gần đây | Tạm được | Không | Trung bình |
Độ lệch chuẩn | Tốt | Có nếu group theo ngày | Khá tốt |
Smoothing | Tốt | Không | Khá tốt |
Holt-Winters | Xuất sắc | Có | Rất cao |
6. Kết lại – Data đang sống, hãy để nó tự báo cho bạn
Bạn không thể viết rule cho từng tình huống.
Bạn không thể ngồi nhìn job dashboard cả ngày.
Bạn cần mô hình đủ thông minh để hiểu:
- Dữ liệu hôm nay nên như thế nào?
- Nếu lệch, có đáng lo không?
- Có nên cảnh báo không?
Và đó là lý do Anomaly Detection tồn tại – như người canh cổng cho hệ thống dữ liệu.
🔜 Trong bài tiếp theo…
Chúng ta sẽ đào sâu vào một mô hình cụ thể: Holt-Winters – vị cứu tinh của dữ liệu có chu kỳ và xu hướng.
Và bạn sẽ thấy nó hoạt động thế nào, bằng ví dụ từ chính quảng cáo Facebook mà ta gặp hàng ngày.