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àyClick
Thứ 2 tuần 14100
Thứ 3 tuần 14300
Thứ 4 tuần 14350
Thứ 5 tuần 14200
Thứ 6 tuần 14400
Thứ 7 tuần 12800
CN tuần 12500
Thứ 2 tuần 24150
Thứ 3 tuần 24350
Thứ 4 tuần 24400
Thứ 5 tuần 24300
Thứ 6 tuần 24450
Thứ 7 tuần 22700
CN tuần 22600
Thứ 2 tuần 34180
Thứ 3 tuần 34320
Thứ 4 tuần 33450 ❗️← đột nhiên thấp bất thường
Thứ 5 tuần 34290
Thứ 6 tuần 34430
Thứ 7 tuần 32750
CN tuần 32580

Mục tiêu:

Tìm xem ngày Thứ 4 tuần 3 – 3450 clickphả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ápNhận diện được anomaly?Nhận ra đặc thù theo ngày?Độ chính xác
Trung bình tổng thểKhôngKhôngThấp
Trung bình gần đâyTạm đượcKhôngTrung bình
Độ lệch chuẩnTốtCó nếu group theo ngàyKhá tốt
SmoothingTốtKhôngKhá tốt
Holt-WintersXuất sắcRấ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.

Add a Comment

Scroll Up