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