Python phát hiện ngoại lệ đa biến

Là phần tiếp theo của bài viết dành cho người mới bắt đầu về phân tích ngoại lệ [liên kết], chúng ta sẽ thảo luận về một số kỹ thuật giúp phát hiện các ngoại lệ trong dữ liệu. Các ngoại lệ có thể là một tính năng cụ thể hoặc một phiên bản có nhiều thuộc tính có thể là một ngoại lệ [bất thường] nói chung

Hãy xem xét bộ dữ liệu Tín dụng nổi tiếng của Đức với mục đích tìm hiểu hoạt động của các phương pháp mà chúng ta sẽ thảo luận để phát hiện các ngoại lệ đơn biến và đa biến

Ở đây, chúng tôi đã lấy một tập hợp con chỉ có các cột số chỉ vì mục đích đơn giản

Phương pháp phát hiện ngoại lệ đơn biến

Phần 1 của bài viết này tập trung vào các phương pháp phát hiện ngoại lệ đơn biến được sử dụng thường xuyên trong Python

1. Biểu đồ IQR và Box-and-Whisker

Một phương pháp mạnh mẽ để ghi nhãn các ngoại lệ là phương pháp IQR [Phạm vi tứ phân vị] được phát triển bởi John Tukey, người tiên phong trong phân tích dữ liệu khám phá. Biểu đồ Box-and-Whiskers sử dụng các phần tư để vẽ hình dạng của một biến. Phạm vi liên vùng là phạm vi giữa phần tư thứ nhất và phần tư thứ ba [các cạnh của hộp]. Bất kỳ điểm dữ liệu nào nằm ngoài 1. 5 lần IQR dưới phần tư đầu tiên hoặc 1. 5 lần IQR trên phần tư thứ ba được coi là ngoại lệ

Hộp đại diện cho phần tư thứ 1 và thứ 3, tương đương với phần trăm thứ 25 và 75. Dòng bên trong hộp đại diện cho phần tư thứ 2, là trung vị

Nếu IQR = quartile_3 — quartile_1, thì giá trị thấp hơn là 'quartile_1 — [1. 5 lần IQR]’ và cận trên là ‘quartile_3 + [1. 5 lần IQR]'. Vì vậy, bất kỳ giá trị nào bên dưới giới hạn dưới và trên giới hạn trên đều được coi là ngoại lệ

Mã trong python để lấy các chỉ số của các ngoại lệ có thể có trong tính năng Credit_Amount

2. Sử dụng độ lệch chuẩn Quy tắc phân phối chuẩn

Một hạn chế của phương pháp này là nó chỉ có thể được sử dụng khi dữ liệu 'không' bị sai lệch nhiều. Nó yêu cầu dữ liệu phải gần với bình thường

Như trong hình trên, nếu dữ liệu được phân phối bình thường, 99. 7% giá trị của dữ liệu phải nằm giữa +/- 3 độ lệch chuẩn và 95. 4% giá trị nằm trong khoảng +/-2 độ lệch chuẩn của dữ liệu. Vì vậy, chúng tôi có thể coi bất kỳ điểm dữ liệu nào cách xa +/- 2 hoặc 3 độ lệch chuẩn là ngoại lệ

Điều này có thể đạt được bằng cách tính điểm tiêu chuẩn hoặc điểm z của các điểm dữ liệu. Wikipedia tuyên bố điểm z là

Điểm chuẩn hoặc điểm z là số độ lệch chuẩn đã ký theo đó giá trị của một điểm quan sát hoặc điểm dữ liệu cao hơn giá trị trung bình của những gì đang được quan sát hoặc đo lường

Chúng tôi tính điểm z bằng cách trừ giá trị trung bình của tất cả các giá trị dữ liệu từ một điểm dữ liệu và chia cho độ lệch chuẩn. Thay vì sử dụng 'hàm zscore của scipy', hãy xác định một hàm tương tự và sau đó chúng ta thêm một ngưỡng để đưa ra các chỉ số của các điểm dữ liệu ngoại lệ

Thực hiện trong python

Chúng tôi thấy rằng một vài điểm tại các chỉ số 63,105, 236, v.v. thường được phát hiện là ngoại lệ bởi cả hai phương pháp

Chúng tôi có thể sử dụng nhiều phương pháp và xử lý các ngoại lệ thường được xác định. Ngoại lệ có thể được cố định bằng cách

  • Giới hạn ở giá trị tối đa ở râu
  • Thay thế bằng một miền giá trị thích hợp cho biến
  • Trước tiên, thay thế các giá trị ngoại lệ bằng các giá trị null và sử dụng các phương thức gán giá trị còn thiếu. Một cách tiếp cận tốt hơn nhiều có thể là sử dụng mô hình cây quyết định với tính năng có ngoại lệ làm biến mục tiêu. Điều này được khuyến nghị khi một tập hợp con lớn của dữ liệu là ngoại lệ và nếu những bản ghi này không thể bị xóa hoặc gán giá trị trung bình hoặc giá trị trung bình
  • Xóa bản ghi- Tuy nhiên, việc xóa toàn bộ bản ghi khách hàng chỉ vì 'Số tiền_tín dụng' của khách hàng được xác định là ngoại lệ không phải là một việc làm khôn ngoan

Phương pháp phát hiện ngoại lệ đa biến

  • Sử dụng khoảng cách Mahalanobis
  • Phương pháp phân cụm DBScan
  • Rừng cách ly

Những phương pháp này có nhiều ứng dụng thực tế và sẽ được thảo luận chi tiết trong blog tiếp theo. Chúng ta sẽ xem cách thức và liệu từng trường hợp [ở đây là khách hàng] có thể được gắn thẻ là ngoại lệ hay không, bằng cách sử dụng ba phương pháp trên

Như đã đề cập, Hệ mét Euclide không tìm được khoảng cách chính xác vì nó cố lấy khoảng cách đường thẳng thông thường. Do đó, nếu chúng ta có không gian đa chiều của các biến, hai điểm có thể có cùng khoảng cách với Giá trị trung bình, nhưng một trong số chúng cách xa đám mây dữ liệu [i. e. đó là một ngoại lệ]

Giải pháp là Khoảng cách Mahalanobis tạo ra thứ gì đó tương tự như tính năng chia tỷ lệ thông qua việc lấy các vectơ riêng của các biến thay vì trục ban đầu

Nó áp dụng công thức sau

ở đâu

  • x là quan sát để tìm khoảng cách của nó;
  • inv_covariance_matrix = np.linalg.inv[covariance_matrix]
    
    0 là giá trị trung bình của các quan sát;
  • inv_covariance_matrix = np.linalg.inv[covariance_matrix]
    
    1 là Ma trận hiệp phương sai

bồi dưỡng

Hiệp phương sai thể hiện hướng của mối quan hệ giữa hai biến [i. e. dương, âm hoặc bằng không], vì vậy nó cho thấy sức mạnh của cách một biến có liên quan đến sự thay đổi của các biến khác

Thực hiện

Hãy xem xét tập dữ liệu 6x3 này, trong đó mỗi hàng đại diện cho một mẫu và mỗi cột đại diện cho một tính năng của mẫu đã cho

Trước tiên, chúng tôi cần tạo Ma trận hiệp phương sai của các đặc điểm của từng mẫu và đó là lý do tại sao chúng tôi đặt tham số

inv_covariance_matrix = np.linalg.inv[covariance_matrix]
2 thành
inv_covariance_matrix = np.linalg.inv[covariance_matrix]
3 trong numpy. cov, vì vậy mỗi cột hiện đại diện cho một biến

covariance_matrix = np.cov[data, rowvar=False]  
# data here looks similar to the above table
# in the picture

Tiếp theo, chúng ta tìm Nghịch đảo của Ma trận hiệp phương sai

inv_covariance_matrix = np.linalg.inv[covariance_matrix]

Nhưng trước khi tiếp tục, chúng ta nên kiểm tra, như đã đề cập ở trên, nếu ma trận và ma trận nghịch đảo của nó là Đối xứng và Xác định Dương. Chúng tôi sử dụng cho Thuật toán phân tách Cholesky này, may mắn thay, thuật toán này đã được triển khai trong numpy. linalg. nghẹn ngào

def is_pos_def[A]:
    if np.allclose[A, A.T]:
        try:
            np.linalg.cholesky[A]
            return True
        except np.linalg.LinAlgError:
            return False
    else:
        return False 

Sau đó, chúng tôi tìm giá trị trung bình _______0_______0 của các biến trên mỗi tính năng [tôi sẽ nói thứ nguyên] và lưu chúng vào một mảng như thế này

________số 8_______

Lưu ý rằng tôi đã lặp lại từng hàng chỉ để tận dụng phép trừ ma trận như sẽ được hiển thị tiếp theo

Tiếp theo, chúng tôi tìm thấy

inv_covariance_matrix = np.linalg.inv[covariance_matrix]
5 [i. e. vi phân], nhưng vì chúng ta đã có
inv_covariance_matrix = np.linalg.inv[covariance_matrix]
6 được véc tơ hóa, nên tất cả những gì chúng ta cần làm là

diff = data - vars_mean
# here we subtract the mean of feature
# from each feature of each example

Cuối cùng, áp dụng công thức như thế này

md = []
for i in range[len[diff]]:
    md.append[np.sqrt[diff[i].dot[inv_covariance_matrix].dot[diff[i]]]] 

Lưu ý những điều sau

  • Thứ nguyên của nghịch đảo của ma trận hiệp phương sai là.
    inv_covariance_matrix = np.linalg.inv[covariance_matrix]
    
    7
  • Kích thước của ma trận
    inv_covariance_matrix = np.linalg.inv[covariance_matrix]
    
    8 tương tự như ma trận dữ liệu gốc.
    inv_covariance_matrix = np.linalg.inv[covariance_matrix]
    
    9
  • Như vậy, mỗi
    def is_pos_def[A]:
        if np.allclose[A, A.T]:
            try:
                np.linalg.cholesky[A]
                return True
            except np.linalg.LinAlgError:
                return False
        else:
            return False 
    
    0 [i. e. hàng] là
    def is_pos_def[A]:
        if np.allclose[A, A.T]:
            try:
                np.linalg.cholesky[A]
                return True
            except np.linalg.LinAlgError:
                return False
        else:
            return False 
    
    1
  • Vậy theo quy tắc Nhân ma trận, ma trận kết quả từ
    def is_pos_def[A]:
        if np.allclose[A, A.T]:
            try:
                np.linalg.cholesky[A]
                return True
            except np.linalg.LinAlgError:
                return False
        else:
            return False 
    
    2 sẽ là
    def is_pos_def[A]:
        if np.allclose[A, A.T]:
            try:
                np.linalg.cholesky[A]
                return True
            except np.linalg.LinAlgError:
                return False
        else:
            return False 
    
    1; . e.
    def is_pos_def[A]:
        if np.allclose[A, A.T]:
            try:
                np.linalg.cholesky[A]
                return True
            except np.linalg.LinAlgError:
                return False
        else:
            return False 
    
    6]; . e. không cần chuyển vị]

Để phát hiện các ngoại lệ, chúng ta nên chỉ định một

def is_pos_def[A]:
    if np.allclose[A, A.T]:
        try:
            np.linalg.cholesky[A]
            return True
        except np.linalg.LinAlgError:
            return False
    else:
        return False 
7; . 1, sau đó chúng ta có thể sử dụng chi2. phương pháp cdf từ
def is_pos_def[A]:
    if np.allclose[A, A.T]:
        try:
            np.linalg.cholesky[A]
            return True
        except np.linalg.LinAlgError:
            return False
    else:
        return False 
8, như thế này

1 - chi2.cdf[square_of_mahalanobis_distances, degree_of_freedom]

Vì vậy, bất kỳ điểm nào có [1 - CDF chi bình phương] nhỏ hơn hoặc bằng ngưỡng, đều có thể được phân loại là ngoại lệ

Phát hiện bất thường đa biến là gì?

Phát hiện bất thường đơn biến tìm kiếm điểm bất thường trong từng chỉ số riêng lẻ, trong khi phát hiện bất thường đa biến tìm hiểu một mô hình duy nhất cho tất cả chỉ số trong hệ thống . Các phương pháp đơn biến đơn giản hơn, vì vậy chúng dễ dàng mở rộng quy mô cho nhiều chỉ số và tập dữ liệu lớn.

Là rừng cô lập đa biến?

Chúng ta đã thảo luận về các phương pháp Khu rừng cách ly và OC-SVM được sử dụng để thực hiện phát hiện Bất thường đa biến . Một trong những ưu điểm của phương pháp này là chúng không yêu cầu dữ liệu thuộc về một phân phối cụ thể. OC-SVM là một phương pháp có thể được sử dụng để phát hiện Bất thường Không giám sát và Bán giám sát.

Sự khác biệt giữa phát hiện ngoại lệ và phát hiện tính mới là gì?

Do đó, các công cụ ước tính phát hiện ngoại lệ cố gắng khớp với các vùng tập trung nhiều dữ liệu huấn luyện nhất, bỏ qua các quan sát sai lệch. phát hiện tính mới. Dữ liệu đào tạo không bị ô nhiễm bởi các ngoại lệ và chúng tôi quan tâm đến việc phát hiện xem một quan sát mới có phải là ngoại lệ hay không

Chủ Đề