Projects

Dự án AI: dự đoán hỏng hóc máy từ dữ liệu cảm biến

Tạo đặc trưng theo thời gian, chia dữ liệu đúng cách, huấn luyện gradient boosting và đánh giá theo góc nhìn bảo trì.

Dự án AI: dự đoán hỏng hóc máy từ dữ liệu cảm biến
Nội dung bài viết
  1. Dữ liệu
  2. Tạo đặc trưng theo thời gian
  3. Chia dữ liệu theo thời gian
  4. Huấn luyện
  5. Đánh giá theo góc nhìn bảo trì
  6. Đưa vào vận hành

Máy dừng đột ngột giữa ca có thể gây thiệt hại lớn: dây chuyền đứng, đơn hàng trễ, sửa chữa khẩn cấp tốn kém. Bảo trì dự đoán (predictive maintenance) dùng dữ liệu cảm biến và Machine Learning để cảnh báo trước khi hỏng. Dự án này xây mô hình dự đoán hỏng hóc từ dữ liệu rung, nhiệt độ, dòng điện.

Dữ liệu

Mỗi dòng là trạng thái máy trong một khoảng thời gian (ví dụ 10 phút), kèm nhãn "có hỏng trong 24 giờ tới hay không":

thoi_gian, may, rung_rms, nhiet_do, dong_dien, toc_do, hong_24h
2026-09-01 08:00, M03, 2.1, 61.5, 12.3, 1480, 0
...

Nhãn được tạo từ lịch sử sửa chữa: những khoảng thời gian trong 24 giờ trước một lần hỏng được gán nhãn 1. Nếu chưa có bộ dữ liệu, có thể luyện tập với các bộ dữ liệu bảo trì dự đoán công khai trên Kaggle hoặc UCI.

Tạo đặc trưng theo thời gian

import pandas as pd

df = pd.read_csv("sensor.csv", parse_dates=["thoi_gian"]).sort_values(["may", "thoi_gian"])
g = df.groupby("may")
for col in ["rung_rms", "nhiet_do", "dong_dien"]:
    df[f"{col}_tb_6"] = g[col].transform(lambda s: s.rolling(6, min_periods=1).mean())   # TB 1 giờ
    df[f"{col}_xu_huong"] = g[col].transform(lambda s: s.diff(6))                       # thay đổi trong 1 giờ
df = df.dropna()

Xu hướng tăng dần của độ rung hay nhiệt độ thường báo hiệu sớm hơn giá trị tức thời.

Chia dữ liệu theo thời gian

split = df["thoi_gian"].quantile(0.8)
train, test = df[df.thoi_gian <= split], df[df.thoi_gian > split]
features = [c for c in df.columns if c not in ("thoi_gian", "may", "hong_24h")]

Không chia ngẫu nhiên: dữ liệu liền kề rất giống nhau, chia ngẫu nhiên làm mô hình "nhìn thấy tương lai" và cho kết quả ảo.

Huấn luyện

from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.metrics import classification_report

clf = HistGradientBoostingClassifier(max_iter=300, class_weight="balanced", random_state=0)
clf.fit(train[features], train["hong_24h"])
proba = clf.predict_proba(test[features])[:, 1]
print(classification_report(test["hong_24h"], proba > 0.5))

Hỏng hóc là sự kiện hiếm, nên dùng class_weight="balanced" và đánh giá bằng precision/recall thay vì accuracy.

Đánh giá theo góc nhìn bảo trì

  • Bao nhiêu lần hỏng thật được cảnh báo trước? Trước bao lâu?
  • Mỗi tuần có bao nhiêu cảnh báo giả? Đội bảo trì có đủ người kiểm tra không?
  • Chi phí một lần hỏng bất ngờ so với chi phí một lần kiểm tra không cần thiết: dùng để chọn ngưỡng.

Đưa vào vận hành

  • Chạy mô hình định kỳ, gửi cảnh báo kèm các đặc trưng bất thường nhất để kỹ thuật viên biết nên kiểm tra gì.
  • Ghi nhận phản hồi (kiểm tra thực tế có vấn đề hay không) để cải thiện mô hình.
  • Máy mới, sau đại tu, thay đổi chế độ chạy: dữ liệu thay đổi, mô hình cần được theo dõi và huấn luyện lại.
Ban biên tập HọcFree

Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.