2010-02-20 34 views
27

Tôi có một kịch bản mà tôi có hàng nghìn trường hợp dữ liệu. Bản thân dữ liệu được biểu diễn dưới dạng một giá trị số nguyên duy nhất. Tôi muốn có thể phát hiện khi một cá thể là một ngoại lệ cực đoan.Kỹ thuật phát hiện bất thường được đề xuất cho kịch bản đơn giản, một chiều?

Ví dụ, với ví dụ dữ liệu sau:

a = 10 
b = 14 
c = 25 
d = 467 
e = 12 

d rõ ràng là một sự bất thường, và tôi muốn thực hiện một hành động cụ thể trên cơ sở này.

Tôi rất muốn thử sử dụng kiến ​​thức về miền cụ thể để phát hiện bất thường. Ví dụ, tìm ra khoảng cách từ giá trị trung bình hữu ích và kiểm tra điều đó, dựa trên chẩn đoán. Tuy nhiên, tôi nghĩ rằng nó có lẽ tốt hơn nếu tôi điều tra kỹ thuật phát hiện bất thường tổng quát hơn, mạnh mẽ hơn, có một số lý thuyết đằng sau chúng.

Vì kiến ​​thức làm việc của tôi về toán học bị giới hạn, tôi hy vọng tìm được một kỹ thuật đơn giản, chẳng hạn như sử dụng độ lệch chuẩn. Hy vọng rằng bản chất duy nhất của dữ liệu sẽ làm cho vấn đề này khá phổ biến, nhưng nếu cần thêm thông tin cho kịch bản, vui lòng để lại nhận xét và tôi sẽ cung cấp thêm thông tin.


Chỉnh sửa: nghĩ rằng tôi muốn thêm thông tin về dữ liệu và những gì tôi đã cố gắng trong trường hợp câu trả lời chính xác hơn dữ liệu khác.

Giá trị tất cả đều dương và khác 0. Tôi hy vọng rằng các giá trị sẽ tạo thành một phân phối bình thường. Kỳ vọng này dựa trên trực giác của miền thay vì thông qua phân tích, nếu đây không phải là điều xấu để giả định, vui lòng cho tôi biết. Về mặt phân cụm, trừ khi cũng có các thuật toán chuẩn để chọn giá trị k, tôi sẽ thấy khó có thể cung cấp giá trị này cho thuật toán k-Means.

Hành động tôi muốn đưa ra ngoài/dị thường là trình bày cho người dùng và đề xuất rằng điểm dữ liệu về cơ bản bị xóa khỏi tập dữ liệu (tôi sẽ không hiểu cách họ thực hiện điều đó, nhưng nó có ý nghĩa đối với miền của tôi), do đó nó sẽ không được sử dụng làm đầu vào cho một chức năng khác.

Cho đến nay tôi đã thử ba sigma và kiểm tra ngoại lệ IQR trên tập dữ liệu hạn chế của tôi. Các giá trị cờ IQR không đủ mạnh, ba sigma chỉ ra các trường hợp phù hợp hơn với trực giác của tôi về miền.


Thông tin về thuật toán, kỹ thuật hoặc liên kết đến tài nguyên để tìm hiểu về trường hợp cụ thể này là câu trả lời hợp lệ và chào mừng.

Kỹ thuật phát hiện bất thường được đề xuất cho dữ liệu đơn giản, một chiều là gì?

+0

Đừng đánh giá thấp giá trị của tri thức khoa học. Thủ tục hộp đen hiếm khi là con đường để đi. Cố gắng thể hiện kiến ​​thức khoa học của bạn về số liệu thống kê đơn giản. – Tristan

+0

@Tristan: có phải bạn đang nói bạn nghĩ rằng tôi nên cố gắng đưa ra một mô hình có một số nền tảng trong thống kê, nhưng cuối cùng là cụ thể cho miền vấn đề của tôi? – Grundlefleck

+1

Tôi chỉ nói rằng kiến ​​thức của bạn về những gì là hợp lý (tức là, mô hình tạo ra dữ liệu tốt và dữ liệu xấu) là thông tin quan trọng. Bạn nên thiết kế một quy trình, chẳng hạn như sử dụng IQR, được thúc đẩy bởi kiến ​​thức khoa học của bạn về miền. Tôi không thích những thứ như k-means bởi vì nó không có động cơ tốt và vốn không linh hoạt, theo quan điểm của tôi. – Tristan

Trả lời

40

Kiểm tra các three-sigma rule:

mu = mean of the data 
std = standard deviation of the data 
IF abs(x-mu) > 3*std THEN x is outlier 

Một phương pháp khác là IQR outlier test:

Q25 = 25th_percentile 
Q75 = 75th_percentile 
IQR = Q75 - Q25   // inter-quartile range 
IF (x < Q25 - 1.5*IQR) OR (Q75 + 1.5*IQR < x) THEN x is a mild outlier 
IF (x < Q25 - 3.0*IQR) OR (Q75 + 3.0*IQR < x) THEN x is an extreme outlier 

xét nghiệm này thường được sử dụng bởi Box plots (chỉ định bởi các râu):

boxplot


EDIT:

Đối với trường hợp của bạn (đơn giản dữ liệu đơn biến 1D), tôi nghĩ rằng câu trả lời đầu tiên của tôi là rất thích hợp. Tuy nhiên, không thể áp dụng cho dữ liệu đa biến.

@smaclell đề xuất sử dụng K-means để tìm các ngoại lệ. Bên cạnh thực tế là nó chủ yếu là một thuật toán phân cụm (không thực sự là một kỹ thuật phát hiện ngoại lệ), vấn đề với k-means là nó đòi hỏi phải biết trước một giá trị tốt cho số cụm K.

Một kỹ thuật phù hợp hơn là DBSCAN: thuật toán phân cụm dựa trên mật độ. Về cơ bản nó phát triển các khu vực có mật độ đủ cao thành các cụm sẽ là tập hợp tối đa các điểm kết nối mật độ.

dbscan_clustering

DBSCAN đòi hỏi hai thông số: epsilonminPoints. Nó bắt đầu với một điểm tùy ý chưa được truy cập. Sau đó nó tìm thấy tất cả các điểm lân cận trong khoảng cách epsilon của điểm bắt đầu.

Nếu số lượng hàng xóm lớn hơn hoặc bằng minPoints, cụm được tạo thành. Điểm bắt đầu và hàng xóm của nó được thêm vào cụm này và điểm bắt đầu được đánh dấu là đã truy cập. Thuật toán sau đó lặp lại quá trình đánh giá cho tất cả các người hàng xóm đệ quy.

Nếu số lượng hàng xóm nhỏ hơn minPoints, điểm được đánh dấu là tiếng ồn.

Nếu cụm được mở rộng hoàn toàn (tất cả các điểm trong phạm vi tiếp cận được truy cập) thì thuật toán tiến hành lặp qua các điểm chưa được xem trước đó cho đến khi chúng cạn.

Cuối cùng, tập hợp tất cả các điểm được đánh dấu là tiếng ồn được xem là các ngoại lệ.

+2

COOL! Cảm ơn bạn đã trả lời và giải thích tuyệt vời của bạn. – smaclell

+2

+1 ba-sigma và IQR trông giống như kỹ thuật tốt, cảm ơn cho câu trả lời sâu sắc. – Grundlefleck

+2

Tôi thích lời khuyên đơn giản này. Thống kê dựa trên IQR có lợi thế là không bị ảnh hưởng bởi các ngoại lệ cực đoan sẽ làm thay đổi giá trị trung bình/sd. – Tristan

2

Có nhiều kỹ thuật phân cụm mà bạn có thể sử dụng để cố gắng xác định xu hướng trung tâm trong dữ liệu của mình. Một thuật toán như vậy chúng tôi đã sử dụng rất nhiều trong khóa học nhận dạng mẫu của tôi là K-Means. Điều này sẽ cho phép bạn xác định liệu có nhiều bộ dữ liệu có liên quan, chẳng hạn như bimodal distribution. Điều này đòi hỏi bạn phải có một số kiến ​​thức về số lượng cụm mong đợi nhưng khá hiệu quả và dễ thực hiện.

Sau khi bạn có phương tiện, bạn có thể thử tìm hiểu xem có bất kỳ điểm nào cách xa bất kỳ phương tiện nào không. Bạn có thể xác định 'xa' tuy nhiên bạn muốn nhưng tôi sẽ đề xuất các đề xuất của @Amro như là một điểm khởi đầu tốt.

Để có cuộc thảo luận sâu hơn về các thuật toán phân cụm, hãy tham khảo mục nhập wikipedia về phân cụm.

+0

Đồng ý. K-Means là một giải pháp đơn giản, hiệu quả và thích nghi cho vấn đề này. Tạo hai cụm, khởi tạo đúng cách và một trong các cụm phải chứa dữ liệu có ý nghĩa trong khi các cụm khác nhận được các ngoại lệ. Nhưng hãy cẩn thận; nếu bạn không có ngoại lệ, thì cả hai cụm sẽ chứa dữ liệu có ý nghĩa. –

+0

Vâng đó là nơi nó được vui vẻ. Thường rất khó để xác định số lượng cụm và thậm chí sẽ khó thực hiện hơn trong một hệ thống trực tiếp. Ngay cả trong trường hợp đó của một cụm thực và một cụm ngoại lệ khác, có thể lập luận rằng các ngoại lệ đang bắt đầu đại diện cho một chế độ thực cho dữ liệu. Tôi sẽ thêm nhiều liên kết hơn để cung cấp các tùy chọn khác. – smaclell

+0

Điều này đánh tôi là công cụ sai cho công việc. Ông chủ yếu quan tâm đến đuôi chất béo, không phải phân phối lưỡng tính. – Tristan

0

Cả quy tắc ba sigma và kiểm tra IQR thường được sử dụng, và có một vài thuật toán đơn giản để phát hiện sự bất thường.

The three-sigma rule is correct 
mu = mean of the data 
std = standard deviation of the data 
IF abs(x-mu) > 3*std THEN x is outlier 

Các thử nghiệm IQR nên là:

Q25 = 25th_percentile 
Q75 = 75th_percentile 
IQR = Q75 - Q25   // inter-quartile range 
If x > Q75 + 1.5 * IQR or x < Q25 - 1.5 * IQR THEN x is a mild outlier 
If x > Q75 + 3.0 * IQR or x < Q25 – 3.0 * IQR THEN x is a extreme outlier 
+0

Tôi chỉ nhận thấy điều này và bạn đã đúng, bài kiểm tra IQR của tôi không chính xác. Tôi sẽ cập nhật câu trả lời của tôi, cảm ơn. – Amro

Các vấn đề liên quan