Bài toán phát hiện bất thường trong cấp nước
Các công ty cấp nước đang mất trung bình 25–40% lưu lượng do rò rỉ và gian lận. Phần lớn những trường hợp này không thể phát hiện bằng kiểm tra thủ công vì dữ liệu quá lớn.
Dữ liệu đầu vào
Mỗi điểm đo cung cấp:
- Chỉ số tiêu thụ mỗi 15 phút (4 điểm/giờ × 24 giờ = 96 điểm/ngày)
- Áp suất đường ống
- Nhiệt độ môi trường
Isolation Forest cho phát hiện bất thường điểm
from sklearn.ensemble import IsolationForest
import pandas as pd
df = pd.read_sql("""
SELECT meter_id, recorded_at, value_m3
FROM meter_readings
WHERE recorded_at > NOW() - INTERVAL '7 days'
""", conn)
model = IsolationForest(contamination=0.02, random_state=42)
df['anomaly'] = model.fit_predict(df[['value_m3']])
anomalies = df[df['anomaly'] == -1]
LSTM cho phát hiện bất thường chuỗi thời gian
Isolation Forest tốt cho điểm đơn lẻ, nhưng LSTM phát hiện tốt hơn các pattern bất thường kéo dài nhiều giờ – đặc điểm của rò rỉ thực sự:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
model = Sequential([
LSTM(64, input_shape=(96, 1), return_sequences=True),
Dropout(0.2),
LSTM(32),
Dense(1)
])
Kết quả tại khách hàng thực tế
Sau 6 tháng triển khai:
- Phát hiện 94% các vụ rò rỉ (so với 61% kiểm tra thủ công)
- False positive rate: 3.2%
- Tiết kiệm 18% thất thoát nước