Những thuật toán hoặc phương pháp nào có thể được sử dụng để phát hiện ngoại lệ từ tập dữ liệu này?


8

Giả sử tôi có một bộ dữ liệu : Amount of money (100, 50, 150, 200, 35, 60 ,50, 20, 500). Tôi đã google web tìm kiếm kỹ thuật có thể được sử dụng để tìm một outlier có thể trong tập dữ liệu này nhưng tôi đã kết thúc nhầm lẫn.

Câu hỏi của tôi là : Những thuật toán, kỹ thuật hoặc phương pháp nào có thể được sử dụng để phát hiện ngoại lệ có thể có trong tập dữ liệu này?

PS : Xem xét rằng dữ liệu không tuân theo phân phối bình thường. Cảm ơn.


Làm thế nào để bạn nhận ra một ngoại lệ trên bộ nhỏ này? Làm thế nào bạn sẽ làm "bằng tay" trên dữ liệu lớn hơn một chút?
Laurent Duval

Câu trả lời:


5

Bạn có thể sử dụng BoxPlot để phân tích ngoại lệ. Tôi sẽ chỉ cho bạn cách làm điều đó trong Python:

Xem xét dữ liệu của bạn dưới dạng một mảng:

a = [100, 50, 150, 200, 35, 60 ,50, 20, 500]

Bây giờ, sử dụng seaborn để vẽ ô vuông:

import seaborn as sn
sn.boxplot(a)

Vì vậy, bạn sẽ có được một cốt truyện trông giống như thế này:

nhập mô tả hình ảnh ở đây

Có vẻ như 500 là ngoại lệ duy nhất với tôi. Nhưng, tất cả phụ thuộc vào phân tích và mức độ khoan dung của nhà phân tích hoặc nhà thống kê và cũng là tuyên bố vấn đề.

Bạn có thể xem một trong những câu trả lời của tôi trên CrossValidated SE để biết thêm các bài kiểm tra.

Và có một số câu hỏi hay về ngoại lệ và các thuật toán và kỹ thuật để phát hiện ra chúng.

Yêu thích cá nhân của tôi là kỹ thuật khoảng cách Mahalanobis .


Vâng, cảm ơn, một lời giải thích tốt đẹp thực sự. Tôi có thể áp dụng kỹ thuật khoảng cách Mahalanobis trong trường hợp này hay nó hoạt động cho dữ liệu đa biến?
Nation Chirara 04/11/2015

Bạn có thể. Nhưng, nó quá đủ điều kiện cho dữ liệu đơn biến. Chỉ cần phân tích Boxplot với một số giá trị ngưỡng được đặt sẽ thực hiện công việc cho dữ liệu này.
Dawny33

5

Một cách nghĩ về phát hiện ngoại lệ là bạn đang tạo một mô hình dự đoán, sau đó bạn đang kiểm tra xem liệu một điểm có nằm trong phạm vi dự đoán hay không. Từ quan điểm lý thuyết thông tin, bạn có thể thấy mỗi quan sát làm tăng bao nhiêu entropy của mô hình của bạn.

Nếu bạn đang coi dữ liệu này chỉ là một tập hợp các số và bạn không có một số mô hình được đề xuất cho cách chúng được tạo, bạn cũng có thể chỉ nhìn vào mức trung bình. Nếu bạn chắc chắn các số không được phân phối bình thường, bạn không thể đưa ra tuyên bố về mức độ trung bình của một số nhất định, nhưng bạn chỉ có thể nhìn vào số đó một cách tuyệt đối.

Áp dụng điều này, bạn có thể lấy trung bình của tất cả các số, sau đó loại trừ từng số và lấy trung bình của các số khác. Bất kỳ trung bình nào khác với trung bình toàn cầu là ngoại lệ lớn nhất. Đây là một con trăn:

def avg(a):
    return sum(a)/len(a)

l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
m = avg(l)
for idx in range(len(l)):
    print("outlier score of {0}: {1}".format(l[idx], abs(m - avg([elem for i, elem in enumerate(l) if i!=idx]))))
>>
outlier score of 100: 4
outlier score of 50: 10
outlier score of 150: 3
outlier score of 200: 9
outlier score of 35: 12
outlier score of 60: 9
outlier score of 50: 10
outlier score of 20: 14
outlier score of 500: 46 

Vâng, cảm ơn đã trả lời. Tôi chắc chắn rằng các số không được phân phối bình thường, phương pháp của bạn vẫn áp dụng trong bối cảnh đó?
Nation Chirara 04/11/2015

Có, luôn có một mô hình cơ bản ngụ ý dự đoán về dữ liệu. Nếu chúng tôi nhận được một điểm dữ liệu mới, chúng tôi có thể đoán xem giá trị đó là gì. Nếu chúng ta không có thông tin nào khác về mô hình (nó chỉ là một tập hợp các số), thì dự đoán tốt nhất là nó sẽ trông giống với các số chúng ta đã có. Nếu bạn kết thúc với một mô hình cụ thể cho dữ liệu, điều quan trọng là kết hợp nó vào dự đoán của bạn. Sử dụng trung bình không có nghĩa là chúng tôi giả định phân phối bình thường, nhưng các mô hình khác có thể sử dụng một cái gì đó khác với giá trị trung bình.
Tristan Reid

Xin chào. Tôi thường không thấy đó là một ý tưởng tốt để sử dụng trung bình cho dữ liệu phân phối không bình thường. Trong thực tế, ví dụ, nhiều thử nghiệm thống kê không tham số đang sử dụng trung bình thay vì trung bình. Nhưng đó chỉ là một ý kiến ​​...
Michael Hooreman 10/11/2015

Đủ công bằng, nhưng tôi nghĩ sẽ an toàn nếu bạn tin rằng dữ liệu của bạn được phân phối đối xứng, có nghĩa là một ý tưởng khá hay, nếu không thì trung bình là thước đo tốt hơn cho giá trị 'điển hình'.
Tristan Reid

3

Một cách tiếp cận đơn giản sẽ sử dụng điều tương tự như các ô hình hộp: cách xa hơn 1,5 (trung vị-q1) hoặc 1,5 (q3-trung vị) = ngoại lệ.

Tôi thấy nó hữu ích trong nhiều trường hợp thậm chí nó không hoàn hảo và có thể quá đơn giản.

Nó có lợi thế để không giả sử bình thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.