JOKER
Dành cho buổi họp có biên bảnTrả lại lá Joker
Bài viết kỹ thuật

Phát hiện bất thường không cần máy chủPhát hiện bất thường không cần máy chủ

Hai mươi bốn cảm biến, mỗi giây hàng trăm điểm dữ liệu. Vài phép cộng trừ là đủ để biết dòng nào đang lệch khỏi chuẩn của chính nó.

17/10/20262 phút đọcDữ liệuThời gian thựcThống kê

Mỗi dòng có chuẩn riêng

Một ngưỡng chung cho mọi cảm biến luôn sai: nhiệt độ lò khác nhiệt độ kho. Thay vào đó, mỗi dòng tự học trung bình và độ dao động của chính nó trong một cửa sổ gần nhất.

Điểm z

Mỗi giá trị mới được đo bằng việc nó cách trung bình bao nhiêu lần độ lệch chuẩn. Vượt ngưỡng thì báo. Ngưỡng thấp thì nhạy nhưng hay báo nhầm; ngưỡng cao thì ít nhầm nhưng dễ bỏ sót.

js
const m = sum / WIN;
const v = Math.max(1e-6, sq / WIN - m * m); // phương sai
const z = (x - m) / Math.sqrt(v);
if (Math.abs(z) > thr) alert(sensor, z);

Tính tăng dần: không tính lại cả cửa sổ

Giữ hai con số chạy: tổng và tổng bình phương. Khi điểm mới vào, cộng nó vào; khi điểm cũ nhất rời cửa sổ, trừ nó ra. Mỗi điểm dữ liệu chỉ tốn vài phép tính, bất kể cửa sổ dài bao nhiêu.

js
const old = win[head];
if (filled) { sum -= old; sq -= old * old; }
win[head] = x; head = (head + 1) % WIN;
sum += x; sq += x * x;

Khi nào cần nhiều hơn

  • Dữ liệu có chu kỳ ngày, tuần: so với cùng giờ hôm trước thay vì vài phút trước
  • Nhiều cảm biến liên quan nhau: xét chúng cùng lúc thay vì từng dòng
  • Xu hướng trôi chậm: thêm bước khử xu hướng trước khi tính điểm z

Trong thí nghiệm trên trang, 720 điểm mỗi giây được xử lý hoàn toàn trên trình duyệt; sự cố chèn vào được phát hiện ngay ở điểm dữ liệu kế tiếp.

Chạy thử điều bài viết nói

05Dữ liệu thời gian thực

Dòng dữ liệu sống

Hai mươi bốn cảm biến, không ai phải ngồi canh.Hàng trăm điểm dữ liệu mỗi giây chảy qua. Máy tự tính chuẩn của từng dòng và báo ngay khi có dòng lệch khỏi chuẩn đó.

Chạy thí nghiệm