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
0con 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
1con 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
2con 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
3con 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
4con 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
5Bâ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
6con 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
7cắ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
8con 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[]
0con trăn
đầu ra
1df.describe[]
1Chuyể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[]
2con 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[]
4con trăn
đầu ra
1df.describe[]
5Phầ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