Imbalanced classes có ảnh hưởng rất lớn tới độ chính xác của model. Nhưng hiện tượng mất cân bằng này lại là một hiện tượng rất hay xảy ra trong các bài toán machine learning. Khi xử lý dữ liệu imbalanced như vậy, chúng ta sẽ không thể xử lý dữ liệu theo cách thông thường được, cần một số kỹ thuật để giải quyết. Trước khi đi sâu vào kỹ thuật, thì Imbalanced classed hay xảy ra ở một số domain sau:
- Fraud detection [Phát hiện bất thường]
2.Spam filtering [Filter thông tin Spam]
4.Disease screening [Sàng lọc dữ liệu bệnh ]
5.SaaS subscription churn [Việc ngưng xử dụng dịch vụ]
6.Advertising click-throughs [Quảng cáo thông qua click]
Trong post này chúng ta sẽ tìm hiểu 5 kỹ thuật xử lý imbalance data.
Chúng ta hãy xem xét một tình huống như sau. Với dữ liệu bệnh, bạn cần xây dựng model để dự đoán bệnh nhân có khả năng có bệnh hay không có bệnh qua dữ liệu đầu vào là chỉ số sinh học, tuy nhiên khách hàng lại cho chúng ta dữ liệu mà chỉ có 8% bệnh nhân có dấu hiệu bệnh.
Nếu như code của bạn chỉ là
Thì model của bạn đã đạt đến độ chính xác 92%? Nhưng việc phát hiện bệnh sẽ quan trong hơn việc bỏ qua bệnh, do đó 92% trong trường hợp này sẽ không có ý nghĩa.
OK!, chúng ta cần một số kỹ thuật để xử lý imbalanced dataset. Không phải tất cả những kỹ thuật có hiệu quả, nhưng hầu hết các kỹ thuật dưới đây sẽ có tác dụng.
Balance Scale Dataset
Ở đây chúng ta sẽ dùng một dữ liệu mẫu là Balance Scale Data, các bạn có thể download dữ liệu này từ UCI Machine learning. Link //archive.ics.uci.edu/ml/datasets/balance+scale.
Chúng ta hãy xem view data:
The Danger of Imbalanced Classes
Nêu như chúng ta training model train thì kết quả chính xác là 92%, tuy nhiên khi kiểm tra kết quả dự đoán thực tế thì #Should we be excited? print[ np.unique[ pred_y_0 ] ]
Kết quả dự đoán hoàn toàn sai. Chúng ta hãy thử áp dụng kỹ thuật đầu tiên
1. Up-sample Minority Class
Ý tưởng của kỹ thuật này là tăng số lượng class có số lượng ít nên, để làm cho dữ liệu cân bằng hơn. Trong Scikit-Learn đã cung cấp sẵn cho ta module để thực hiện việc này:
Khi dữ liệu đã balance chúng ta hãy kiểm thử model
Bây giờ độ chính xác chỉ đạt 51%.
Bài này mình lược dịch từ link sau: //elitedatascience.com/imbalanced-classes