Python xử lý dữ liệu ngoại lệ như thế nào?

Sự khác biệt giữa mô hình học máy tốt và trung bình thường là khả năng làm sạch dữ liệu của nó. Một trong những thách thức lớn nhất trong việc làm sạch dữ liệu là xác định và xử lý các giá trị ngoại lai. Nói một cách đơn giản, ngoại lệ là những quan sát khác biệt đáng kể so với các điểm dữ liệu khác. Ngay cả các thuật toán học máy tốt nhất cũng sẽ hoạt động kém hiệu quả nếu các ngoại lệ không được xóa khỏi dữ liệu vì các ngoại lệ có thể ảnh hưởng xấu đến quá trình đào tạo của thuật toán học máy, dẫn đến mất độ chính xác

Trong hướng dẫn này, bạn sẽ tìm hiểu về các kỹ thuật xác định và xử lý ngoại lệ trong Python

Dữ liệu

Trong hướng dẫn này, chúng tôi sẽ sử dụng bộ dữ liệu hư cấu về các đơn xin vay có chứa 600 quan sát và 6 biến

1. Thu nhập - Thu nhập hàng năm của người nộp đơn [bằng đô la Mỹ]

2. Loan_amount - Số tiền vay [bằng đô la Mỹ] mà đơn đăng ký đã được gửi

3. Term_months - Thời hạn của khoản vay [tính theo tháng]

4. Credit_score - Điểm tín dụng của ứng viên có tốt ["1"] hay không ["0"]

5. Tuổi - Tuổi của người nộp đơn tính theo năm

6. Approval_status - Đơn xin vay có được chấp thuận ["1"] hay không ["0"]

Hãy bắt đầu bằng cách tải các thư viện cần thiết và dữ liệu

1# Import required libraries
2import pandas as pd
3import numpy as np 
4import matplotlib.pyplot as plt
5
6# Reading the data
7df = pd.read_csv["data_out.csv"]
8print[df.shape]
9print[df.info[]]

con trăn

đầu ra

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None

Kết quả trên cho thấy có 600 quan sát của 6 biến. Tất cả các biến có 600 bản ghi, cho biết không có giá trị nào bị thiếu trong dữ liệu

Nhận dạng ngoại lệ

Có thể có nhiều lý do cho sự hiện diện của các ngoại lệ trong dữ liệu. Đôi khi các ngoại lệ có thể là chính hãng, trong khi trong các trường hợp khác, chúng có thể tồn tại do lỗi nhập dữ liệu. Điều quan trọng là phải hiểu lý do của các ngoại lệ trước khi làm sạch chúng

Chúng tôi sẽ bắt đầu quá trình tìm kiếm các ngoại lệ bằng cách chạy thống kê tóm tắt về các biến. Điều này được thực hiện bằng cách sử dụng hàm description[] bên dưới, hàm này cung cấp tóm tắt thống kê về tất cả các biến định lượng

1df.describe[]

con trăn

đầu ra

1|       	| Income        	| Loan_amount 	| Term_months 	| Credit_score 	| approval_status 	| Age        	|
2|-------	|---------------	|-------------	|-------------	|--------------	|-----------------	|------------	|
3| count 	| 600.000000    	| 600.000000  	| 600.00000   	| 600.000000   	| 600.000000      	| 600.000000 	|
4| mean  	| 7210.720000   	| 161.571667  	| 367.10000   	| 0.788333     	| 0.686667        	| 51.766667  	|
5| std   	| 8224.445086   	| 93.467598   	| 63.40892    	| 0.408831     	| 0.464236        	| 21.240704  	|
6| min   	| 200.000000    	| 10.000000   	| 36.00000    	| 0.000000     	| 0.000000        	| 0.000000   	|
7| 25%   	| 3832.500000   	| 111.000000  	| 384.00000   	| 1.000000     	| 0.000000        	| 36.000000  	|
8| 50%   	| 5075.000000   	| 140.000000  	| 384.00000   	| 1.000000     	| 1.000000        	| 51.000000  	|
9| 75%   	| 7641.500000   	| 180.500000  	| 384.00000   	| 1.000000     	| 1.000000        	| 64.000000  	|
10| max   	| 108000.000000 	| 778.000000  	| 504.00000   	| 1.000000     	| 1.000000        	| 200.000000 	|

Nhìn vào biến 'Tuổi', có thể dễ dàng phát hiện các giá trị ngoại lệ do dữ liệu không chính xác. Độ tuổi tối thiểu và tối đa lần lượt là 0 và 200. Những điều này là không chính xác và chúng tôi sẽ xử lý chúng sau trong hướng dẫn. Những ngoại lệ này rất dễ phát hiện, nhưng không phải lúc nào cũng vậy. Trong các trường hợp khác, các kỹ thuật toán học và trực quan phải được sử dụng. Những kỹ thuật này được thảo luận trong các phần sau

Xác định các ngoại lệ với Phạm vi liên vùng [IQR]

Phạm vi liên vùng [IQR] là thước đo độ phân tán thống kê và được tính bằng sự khác biệt giữa phần trăm thứ 75 và 25. Nó được biểu diễn bằng công thức IQR = Q3 − Q1. Các dòng mã bên dưới tính toán và in phạm vi liên vùng cho từng biến trong tập dữ liệu

1Q1 = df.quantile[0.25]
2Q3 = df.quantile[0.75]
3IQR = Q3 - Q1
4print[IQR]

con trăn

đầu ra

1    Income             3809.0
2    Loan_amount          69.5
3    Term_months           0.0
4    Credit_score          0.0
5    approval_status       1.0
6    Age                  28.0
7    dtype: float64

Đầu ra ở trên in điểm IQR, có thể được sử dụng để phát hiện các giá trị ngoại lệ. Mã bên dưới tạo đầu ra với các giá trị 'True' và 'False'. Các điểm có giá trị 'True' thể hiện sự hiện diện của giá trị ngoại lệ

1print[df  [Q3 + 1.5 * IQR]]

con trăn

đầu ra

1         Income  Loan_amount  Term_months  Credit_score  approval_status    Age
2    0     False        False        False         False            False  False
3    1     False        False         True         False            False  False
4    2     False        False        False         False            False  False
5    3     False        False        False         False            False  False
6    4     False        False        False         False            False  False
7    5     False        False        False         False            False  False
8    6     False        False        False         False            False  False
9    7     False        False        False         False            False  False
10    8     False        False        False         False            False  False
11    9     False        False        False         False            False  False
12    10    False        False        False         False            False  False
13    11    False        False        False         False            False  False
14    12    False        False         True          True            False  False
15    13    False        False        False         False            False  False
16    14    False        False        False         False            False  False
17    15    False        False        False          True            False  False
18    16    False        False        False         False            False  False
19    17    False        False        False         False            False  False
20    18    False        False        False         False            False  False
21    19    False        False        False          True            False  False
22    20    False        False        False         False            False  False
23    21    False        False        False         False            False  False
24    22    False        False        False          True            False  False
25    23    False        False        False         False            False  False
26    24    False        False        False         False            False  False
27    25    False        False        False         False            False  False
28    26    False        False        False         False            False  False
29    27    False        False         True          True            False  False
30    28    False        False        False         False            False  False
31    29    False        False        False          True            False  False
32    .      ..          ..          ..           ..              ..    ...
33    570   False        False        False         False            False  False
34    571   False        False        False         False            False  False
35    572   False        False        False         False            False  False
36    573   False        False        False          True            False  False
37    574   False        False        False         False            False  False
38    575   False        False        False          True            False  False
39    576   False        False        False         False            False  False
40    577   False        False        False          True            False  False
41    578   False        False        False         False            False  False
42    579   False        False        False         False            False  False
43    580   False        False        False         False            False  False
44    581   False        False        False          True            False  False
45    582   False        False        False          True            False  False
46    583   False        False        False         False            False  False
47    584   False        False         True         False            False  False
48    585   False        False        False         False            False  False
49    586   False        False        False         False            False  False
50    587   False        False        False         False            False  False
51    588   False        False        False         False            False  False
52    589   False        False        False          True            False  False
53    590   False        False        False         False            False  False
54    591   False        False        False         False            False  False
55    592   False        False        False          True            False  False
56    593   False        False        False         False            False  False
57    594   False        False        False         False            False  False
58    595   False        False        False         False            False  False
59    596   False        False        False         False            False  False
60    597   False        False        False         False            False  False
61    598   False        False        False          True            False  False
62    599   False        False        False         False            False  False
63    
64    [600 rows x 6 columns]

Xác định các ngoại lệ với Skewness

Một số thuật toán học máy đưa ra giả định rằng dữ liệu tuân theo phân phối bình thường [hoặc Gaussian]. Điều này rất dễ kiểm tra với giá trị độ lệch, giải thích mức độ phân phối thông thường của dữ liệu. Lý tưởng nhất là giá trị độ lệch phải nằm trong khoảng từ -1 đến +1 và bất kỳ độ lệch lớn nào so với phạm vi này cho thấy sự hiện diện của các giá trị cực trị

Dòng mã đầu tiên bên dưới in giá trị độ lệch cho biến 'Thu nhập', trong khi dòng thứ hai in số liệu thống kê tóm tắt

________số 8

con trăn

đầu ra

1    6.499
2
3    count       600.000000
4    mean       7210.720000
5    std        8224.445086
6    min         200.000000
7    25%        3832.500000
8    50%        5075.000000
9    75%        7641.500000
10    max      108000.000000
11    Name: Income, dtype: float64

Giá trị độ lệch của 6. Hình 5 cho thấy biến 'Thu nhập' có phân phối lệch phải, cho thấy sự hiện diện của các giá trị cực cao. Giá trị 'Thu nhập' tối đa là 108.000 USD đã chứng minh điều này

Xác định các ngoại lệ bằng trực quan hóa

Trong phần trước, chúng tôi đã sử dụng các phương pháp định lượng để xác định ngoại lệ. Điều này cũng có thể đạt được với trực quan hóa. Một số sơ đồ phổ biến được sử dụng để phát hiện ngoại lệ được thảo luận bên dưới

1. Lô hộp

Biểu đồ hộp là một cách tiêu chuẩn hóa để hiển thị phân phối dữ liệu dựa trên tóm tắt năm số [tối thiểu, phần tư thứ nhất [Q1], trung vị, phần tư thứ ba [Q3] và tối đa]. Nó thường được sử dụng để xác định phân phối dữ liệu và phát hiện các ngoại lệ. Dòng mã bên dưới vẽ sơ đồ hộp của biến số 'Khoản_vay'

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
0

con trăn

đầu ra

Trong đầu ra ở trên, các vòng tròn biểu thị các ngoại lệ và có nhiều. Cũng có thể xác định các ngoại lệ bằng cách sử dụng nhiều biến. Chúng ta có thể sửa đổi đoạn mã trên để trực quan hóa các ngoại lệ trong biến 'Khoản_vay' theo trạng thái phê duyệt

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
1

con trăn

đầu ra

Kết quả cho thấy số lượng ngoại lệ cao hơn đối với những người đăng ký khoản vay được phê duyệt [được biểu thị bằng nhãn '1'] so với những người đăng ký bị từ chối [được biểu thị bằng nhãn '0']

2. Biểu đồ

Một biểu đồ được sử dụng để trực quan hóa phân phối của một biến số. Một ngoại lệ sẽ xuất hiện bên ngoài mô hình phân phối tổng thể. Dòng mã bên dưới vẽ biểu đồ tần suất của biến 'Thu nhập', sử dụng hàm hist[]

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
2

con trăn

đầu ra

Biểu đồ trên cho thấy phân phối bị lệch phải và có các giá trị cực cao hơn ở bên phải của biểu đồ. Bước này cũng có thể được lặp lại cho các biến khác

3. biểu đồ phân tán

Biểu đồ phân tán trực quan hóa mối quan hệ giữa hai biến định lượng. Dữ liệu được hiển thị dưới dạng tập hợp các điểm và bất kỳ điểm nào nằm ngoài cụm chung của hai biến có thể biểu thị các giá trị ngoại lệ. Các dòng mã bên dưới tạo ra một biểu đồ phân tán giữa các biến 'Thu nhập' và 'Số_tiền_vay'

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
3

con trăn

đầu ra

Biểu đồ trên chỉ ra rằng hầu hết các điểm dữ liệu được nhóm ở nửa dưới của biểu đồ. Các điểm nằm ở cực bên phải của trục x hoặc trục y biểu thị các giá trị ngoại lệ

Đối xử ngoại lệ

Trong các phần trước, chúng ta đã tìm hiểu về các kỹ thuật phát hiện ngoại lệ. Tuy nhiên, đây mới chỉ là một nửa nhiệm vụ. Một khi chúng tôi đã xác định được các ngoại lệ, chúng tôi cần xử lý chúng. Có một số kỹ thuật cho việc này và chúng tôi sẽ thảo luận về những kỹ thuật được sử dụng rộng rãi nhất bên dưới

Sàn và nắp dựa trên lượng tử

Trong kỹ thuật này, chúng tôi sẽ làm sàn [e. g. , phần trăm thứ 10] cho các giá trị thấp hơn và giới hạn [e. g. , phân vị thứ 90] cho các giá trị cao hơn. Các dòng mã bên dưới lần lượt in phần trăm thứ 10 và 90 của biến 'Thu nhập'. Các giá trị này sẽ được sử dụng cho sàn và nắp dựa trên lượng tử

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
4

con trăn

đầu ra

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
5

Bây giờ chúng tôi sẽ loại bỏ các ngoại lệ, như được hiển thị trong các dòng mã bên dưới. Cuối cùng, chúng tôi tính toán lại giá trị độ lệch, giá trị này hiện tốt hơn nhiều

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
6

con trăn

đầu ra

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
7

cắt tỉa

Trong phương pháp này, chúng tôi loại bỏ hoàn toàn các điểm dữ liệu ngoại lệ. Xem xét biến 'Tuổi', có giá trị nhỏ nhất là 0 và giá trị lớn nhất là 200. Dòng mã đầu tiên bên dưới tạo chỉ mục cho tất cả các điểm dữ liệu trong đó tuổi lấy hai giá trị này. Dòng thứ hai loại bỏ các hàng chỉ mục này khỏi dữ liệu, trong khi dòng mã thứ ba in thống kê tóm tắt cho biến

Sau khi cắt bớt, số lượng quan sát giảm từ 600 xuống 594 và các giá trị tối thiểu và tối đa được chấp nhận nhiều hơn

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
8

con trăn

đầu ra

1    [600, 6]
2    
3    RangeIndex: 600 entries, 0 to 599
4    Data columns [total 6 columns]:
5    Income             600 non-null int64
6    Loan_amount        600 non-null int64
7    Term_months        600 non-null int64
8    Credit_score       600 non-null int64
9    approval_status    600 non-null int64
10    Age                600 non-null int64
11    dtypes: int64[6]
12    memory usage: 28.2 KB
13    None
9

Điểm IQR

Kỹ thuật này sử dụng điểm IQR được tính toán trước đó để loại bỏ các giá trị ngoại lệ. Nguyên tắc chung là mọi thứ không nằm trong khoảng [Q1 - 1. 5 IQR] và [Q3 + 1. 5 IQR] là ngoại lệ và có thể bị xóa. Dòng mã đầu tiên bên dưới loại bỏ các ngoại lệ dựa trên phạm vi IQR và lưu kết quả vào khung dữ liệu 'df_out'. Dòng thứ hai in ra hình dạng của dữ liệu này, kết quả là 375 quan sát của 6 biến. Điều này cho thấy rằng đối với dữ liệu của chúng tôi, rất nhiều bản ghi sẽ bị xóa nếu chúng tôi sử dụng phương pháp IQR

1df.describe[]
0

con trăn

đầu ra

1df.describe[]
1

Chuyển đổi nhật ký

Việc chuyển đổi các biến bị lệch cũng có thể giúp điều chỉnh phân phối của các biến. Đây có thể là các phép biến đổi logarit, căn bậc hai hoặc bình phương. Phổ biến nhất là phép biến đổi logarit, được thực hiện trên biến 'Khoản_vay' trong dòng mã đầu tiên bên dưới. Dòng mã thứ hai và thứ ba in giá trị độ lệch trước và sau khi chuyển đổi

1df.describe[]
2

con trăn

đầu ra

1df.describe[]
3

Đầu ra ở trên cho thấy giá trị độ lệch giảm từ 2. 8 đến -0. 18, xác nhận rằng phân phối đã được xử lý cho các giá trị cực trị

Thay thế các ngoại lệ bằng các giá trị trung bình

Trong kỹ thuật này, chúng tôi thay thế các giá trị cực đoan bằng các giá trị trung bình. Không nên sử dụng các giá trị trung bình vì chúng bị ảnh hưởng bởi các giá trị ngoại lệ. Dòng mã đầu tiên bên dưới in giá trị phần trăm thứ 50 hoặc giá trị trung bình, có giá trị là 140. Dòng thứ hai in giá trị phần trăm thứ 95, xuất hiện vào khoảng 326. Dòng mã thứ ba bên dưới thay thế tất cả các giá trị đó trong biến 'Số_khoản_vay', lớn hơn phân vị thứ 95, bằng giá trị trung bình. Cuối cùng, dòng thứ tư in số liệu thống kê tóm tắt sau khi tất cả các kỹ thuật này đã được sử dụng để xử lý ngoại lệ

1df.describe[]
4

con trăn

đầu ra

1df.describe[]
5

Phần kết luận

Trong hướng dẫn này, bạn đã học các phương pháp xác định giá trị ngoại lai bằng cách sử dụng cả kỹ thuật định lượng và trực quan. Bạn cũng đã học các kỹ thuật để xử lý các ngoại lệ đã xác định. Việc bạn sử dụng các kỹ thuật này sẽ phụ thuộc vào dữ liệu, tuyên bố vấn đề và thuật toán máy học được chọn để xây dựng mô hình

Để tìm hiểu thêm về cách chuẩn bị dữ liệu và xây dựng mô hình học máy bằng Python, vui lòng tham khảo các hướng dẫn sau

Làm cách nào để phát hiện các ngoại lệ trong Python?

Tìm giá trị ngoại lệ bằng phương pháp thống kê . 5 IQR trở lên Q3 + 1. 5 IQR Using the IQR, the outlier data points are the ones falling below Q1–1.5 IQR or above Q3 + 1.5 IQR . Q1 là phân vị thứ 25 và Q3 là phân vị thứ 75 của tập dữ liệu và IQR biểu thị phạm vi liên phần tư được tính bằng Q3 trừ Q1 [Q3–Q1].

Làm thế nào để Python xác định các ngoại lệ?

Tất cả các điểm dữ liệu trên và dưới 1. 5 lần Phạm vi liên vùng được coi là ngoại lệ. .
Sắp xếp dữ liệu theo thứ tự [tăng dần]
Tính IQR = Q3 – Q1
Tính giới hạn [trên và dưới] 1. 5 IQR
Bất kỳ điểm nào bên ngoài giới hạn trên và dưới đều là ngoại lệ

Làm thế nào để Python phát hiện các ngoại lệ trong gấu trúc?

Đối với bản phân phối Skewed. Sử dụng quy tắc lân cận Phạm vi liên phần tư [IQR]. – Các điểm dữ liệu nằm dưới Q1 – 1. 5 IQR trở lên Q3 + 1. 5 IQR là ngoại lệ. trong đó Q1 và Q3 lần lượt là phần trăm thứ 25 và 75 của tập dữ liệu và IQR đại diện cho phạm vi giữa các phần tư và được cho bởi Q3 – Q1

3 kỹ thuật tiền xử lý dữ liệu để xử lý các ngoại lệ là gì?

Trong bài viết này, chúng ta đã thấy 3 phương pháp khác nhau để xử lý các giá trị ngoại lai. phương pháp đơn biến, phương pháp đa biến và lỗi Minkowski . Các phương pháp này bổ sung cho nhau và nếu tập dữ liệu của chúng ta có nhiều ngoại lệ và khó khăn, chúng ta có thể cần phải thử tất cả chúng.

Chủ Đề