1. 15:19 14/10/2026
Khi mô hình machine learning đi vào production, hiệu suất thường giảm dần do sự thay đổi của dữ liệu đầu vào (data drift) hoặc mối quan hệ giữa đặc trưng và nhãn (concept drift). Việc phát hiện sớm các dạng drift này giúp đội ngũ kịp thời retrain hoặc điều chỉnh pipeline, tránh tổn thất doanh nghiệp.
**1. Tại sao cần giám sát drift?**
- Data drift: phân phối feature thay đổi so với tập huấn luyện (ví dụ: độ tuổi khách hàng dịch chuyển).
- Concept drift: quan hệ feature‑label thay đổi (ví dụ: xu hướng mua sắm theo mùa).
- Nếu không giám sát, mô hình sẽ đưa ra dự đoán sai lệch, gây ảnh hưởng trực tiếp đến KPI.
**2. Kiến trúc giám sát đơn giản**
- **Evidently AI**: thư viện Python tạo báo cáo drift (statistical tests, PSI, KS‑test) và xuất JSON/HTML.
- **Prometheus**: thu thập metrics drift (drift_score, p_value) từ Evidently qua exporter tùy chỉnh.
- **Grafana**: dashboard hiển thị xu hướng drift theo thời gian, cảnh báo khi vượt ngưỡng.
- **Airflow/Prefect**: lên lịch chạy job kiểm tra drift hàng ngày/tiết.
**3. Quy trình triển khai chi tiết**
1. **Chuẩn bị reference dataset** – lưu tập dữ liệu huấn luyện (hoặc validation) làm baseline.
2. **Viết script Evidently** – nạp reference và current batch, tính DataDriftPreset, TargetDriftPreset, xuất metrics ra file JSON.
3. **Exporter Prometheus** – đọc JSON, push metrics lên Pushgateway hoặc expose endpoint `/metrics`.
4. **Cấu hình Alertmanager** – đặt ngưỡng (ví dụ PSI > 0.2 hoặc p‑value < 0.05) để gửi cảnh báo Slack/Email.
5. **Dashboard Grafana** – tạo panel line chart cho drift_score theo ngày, heatmap cho từng feature.
6. **Tích hợp CI/CD** – thêm step drift_check vào pipeline retrain; nếu drift vượt ngưỡng thì tự động trigger job retrain.
**4. Ví dụ mã nguồn tối giản**
```python
from evidently.dashboard import Dashboard
from evidently.dashboard.tabs import DataDriftTab
import pandas as pd
ref = pd.read_parquet("s3://bucket/reference.parquet")
cur = pd.read_parquet("s3://bucket/current_batch.parquet")
dashboard = Dashboard(tabs=[DataDriftTab()])
dashboard.calculate(ref, cur)
dashboard.save("drift_report.html")
# xuất metrics JSON
metrics = dashboard.as_dict()
import json, requests
requests.post("http://pushgateway:9091/metrics/job/drift_check", data=json.dumps(metrics))
```
**5. Lời khuyên thực chiến**
- Chọn baseline đại diện (không chỉ tập train, có thể dùng validation gần nhất).
- Theo dõi cả feature‑level và prediction‑level drift để bắt concept drift sớm.
- Thiết lập ngưỡng động: dùng rolling quantile của drift_score thay vì giá trị cố định.
- Kết hợp human‑in‑the‑loop: khi cảnh báo, yêu cầu data scientist review trước khi retrain tự động.
- Log toàn bộ artifacts (report HTML, metrics JSON) vào MLflow để truy vết.
Với kiến trúc nhẹ này, đội ngũ có thể triển khai trong vài giờ, chi phí vận hành thấp (Prometheus + Grafana open‑source) mà vẫn đảm bảo khả năng phát hiện drift tin cậy cho mọi mô hình production.