Phương pháp phát hiện giá trị ngoại lai và giao dịch bất thường (Anomaly Detection): ứng dụng Z-Score, dải phân vị IQR và Rolling Average để kiểm soát sai sót đơn hàng.
1. Tầm quan trọng của Anomaly Detection trong doanh nghiệp
Trong các hệ thống thương mại điện tử hoặc tài chính, việc xuất hiện các giao dịch sai lệch (như đơn hàng có giá trị cao bất thường do lỗi nhập liệu, hoặc các giao dịch gian lận thẻ tín dụng) có thể gây hậu quả nghiêm trọng.
Thực hiện phát hiện bất thường trong dữ liệu giúp doanh nghiệp chủ động khoanh vùng các rủi ro, bảo vệ tài chính và duy trì sự toàn vẹn của cơ sở dữ liệu.
2. Phương pháp 1: Sử dụng Z-Score để tìm điểm ngoại lai
Z-Score đo lường khoảng cách từ một điểm dữ liệu đến giá trị trung bình (Mean), tính bằng số độ lệch chuẩn (Standard Deviation).
Thông thường, các điểm có trị số Z-Score lớn hơn 3 hoặc nhỏ hơn -3 được xem là điểm bất thường:
import numpy as np
import pandas as pd
# Tính Z-Score trên cột giá trị đơn hàng
df['Z_Score'] = (df['GiaTriDonHang'] - df['GiaTriDonHang'].mean()) / df[
'GiaTriDonHang'
].std()
# Lọc ra các giao dịch bất thường
outliers_z = df[abs(df['Z_Score']) > 3]
print(outliers_z)
3. Phương pháp 2: Sử dụng khoảng tứ phân vị (IQR)
Đối với dữ liệu có độ lệch lớn (không tuân theo phân phối chuẩn), sử dụng khoảng tứ phân vị (IQR) là phương pháp kiểm soát ngoại lai an toàn và hiệu quả hơn:
-
Tính Q1 (phân vị thứ 25) và Q3 (phân vị thứ 75).
-
Tính khoảng IQR = Q3 – Q1.
-
Ngưỡng giới hạn trên = $Q3 + 1.5 \times IQR$.
-
Ngưỡng giới hạn dưới = $Q1 – 1.5 \times IQR$.
Q1 = df['GiaTriDonHang'].quantile(0.25)
Q3 = df['GiaTriDonHang'].quantile(0.75)
IQR = Q3 - Q1
# Xác định ngưỡng
upper_bound = Q3 + 1.5 * IQR
lower_bound = Q1 - 1.5 * IQR
# Lọc điểm bất thường theo IQR
outliers_iqr = df[
(df['GiaTriDonHang'] > upper_bound) | (df['GiaTriDonHang'] < lower_bound)
]
4. Phương pháp 3: Sử dụng Rolling Average cho dữ liệu chuỗi thời gian
Khi phân tích doanh thu theo giờ hoặc theo ngày, các biến động đột ngột so với chu kỳ trung bình trước đó sẽ được phát hiện bằng Rolling Average (trung bình trượt):
# Tính trung bình trượt 7 ngày và độ lệch chuẩn
df['Rolling_Mean'] = df['DoanhThu'].rolling(window=7).mean()
df['Rolling_Std'] = df['DoanhThu'].rolling(window=7).std()
# Phát hiện ngày có doanh thu sụt giảm hoặc tăng vọt bất thường
df['Anomaly'] = (
df['DoanhThu'] > (df['Rolling_Mean'] + 2.5 * df['Rolling_Std'])
) | (df['DoanhThu'] < (df['Rolling_Mean'] - 2.5 * df['Rolling_Std']))
5. Ứng dụng thực tế cho Data Analyst
-
Kiểm toán dữ liệu tự động: Phát hiện nhanh các lỗi hệ thống nhập trùng số tiền hoặc nhập sai dấu phẩy thập phân.
-
Ngăn chặn gian lận (Fraud Detection): Nhận diện các hành vi quẹt thẻ hoặc đặt đơn hàng đáng ngờ trong thời gian ngắn.
-
Tối ưu chất lượng báo cáo: Loại bỏ các giá trị nhiễu trước khi đưa vào xây dựng mô hình dự báo kinh doanh.
6. Tổng kết
Thành thạo các kỹ thuật phát hiện bất thường trong dữ liệu giúp Data Analyst nâng cao tư duy kiểm soát chất lượng dữ liệu, bảo vệ doanh nghiệp trước các rủi ro tiềm ẩn từ những con số sai lệch.
✍️ Tác giả: Phan Thị Như Phước – Data Analyst tại MCNA Technology School
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: mcna.vn
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

