머신러닝 Classification을 할 때 흔히 접하는 문제는 데이터가 불균형하게 형성되어 있는 것입니다. 우리가 관심가지는 데이터를 현실적으로 충분하게 얻을 수 없을 때 발생합니다. 불균형 데이터(Imbalanced Data)를 가지고 머신러닝할 때 발생할 수 있는 문제점과 해결 방법에 대해 알아보겠습니다.
불균형 데이터란(Imbalanced Data)?
불균형 데이터는 데이터 세트의 클래스 분포가 불균일한 상황을 의미하며, 한 클래스의 샘플 수가 다른 클래스보다 현저히 적은 경우입니다. 이는 주로 사기 탐지(Fraud Detection, 스팸 필터링(Spam filtering) 또는 의료 진단과 같은 실제 Classification에서 일반적으로 발생하는 문제로, 소수 클래스(positive)에 해당하는 실제 데이터를 얻기가 어렵기 때문에 발생하는 문제입니다.
불균형 데이터에서 다수 클래스(negative)는 표본 수 측면에서 소수 클래스(positive)를 압도하여 소수 클래스보다 다수 클래스를 더 자주 예측하는 편향된 모형으로 이어집니다. 이는 모델이 중요한 패턴을 놓치고 클래스 간의 근본적인 차이를 포착하지 못할 수 있기 때문에 소수 클래스가 우리가 정확하게 탐지하려는 클래스일 때 특히 문제가 됩니다.
불균형데이터로 머신러닝 Classification할 때 흔히 생길 수 있는 문제점
불균형 데이터로 Classification할 때 발생할 수 있는 문제는 데이터가 과도하게 불균형한 경우 모델이 모든 인스턴스에 대해 다수클래스(negative)라고만 예측할 가능성이 높다는 것입니다. 이는 모델이 소수(positive) 클래스를 전혀 예측할 수 없더라도 높은 Accuracy를 얻을 수 있기 때문에 문제가 있습니다. 우리가 Accuracy만 보면 안 되는 중요한 이유이기도 합니다.
(참고포스팅 - Accuracy 말고 같이 봐야 할 중요한 지표)
아래는 지나치게 많은 negative와 전체데이터의 4% 미만의 positive가 있는 데이터로 Decision tree에 학습시켜 본 결과입니다. 이 모델은 negative에 대해서는 거의 완벽에 가까운 예측을 하지만, positive에 대해서는 거의 예측을 잘 수행하지 못합니다. 752개의 positive instance 중에서 2개에 대해서만 제대로 positive로 예측이 되었는데도 불구하고 96%의 굉장히 높은 Accuracy를 가지고 있습니다. 불균형 데이터를 다룰 때는 반드시 F1-Score, Recall, Precision, ROC Area(AUC) 등을 꼼꼼히 살펴봐야 하는 이유입니다.
불균형 데이터(Imbalanced Data) Classification하기 전 문제를 해결할 수 있는 방법?
Resampling techniques: 한 가지 접근 방식은 소수 클래스를 오버샘플링(Oversampling)하거나 다수 클래스를 언더샘플링(Undersampling)하여 데이터 세트의 클래스 분포를 조정하는 것입니다. 오버샘플링은 소수 클래스를 여러 번 추출하여 합성 샘플을 생성하는 것이고, 언더샘플링은 다수 클래스에서 샘플 중 일부를 제거하는 것입니다. 이러한 기술은 클래스 분포의 균형을 맞추고 소수 클래스에서 모델의 성능을 향상하는 데 도움이 될 수 있지만, 신중하게 수행하지 않으면 편향을 초래하고 오버피팅(Overfitting)으로 이어질 수도 있습니다.
Cost-sensitive learning: 또 다른 접근법은 각 클래스의 상대적 중요성을 반영하여 각 클래스에 서로 다른 잘못된 분류 비용을 할당하는 것입니다. 예를 들어, positive 인스턴스(소수 클래스)를 negative로 잘못 분류하면 negative 인스턴스(다수 클래스)를 positive로 잘못 분류하는 것보다 비용이 더 많이 들 수 있습니다. 이 접근 방식은 모델이 소수 클래스의 우선순위를 정하고 이에 대해 더 나은 성과를 달성하는 방법을 배우는 데 도움이 될 수 있습니다.
Ensemble methods: bagging, boosting, or stacking 같은 Ensemble 방법도 불균형 데이터를 처리하는 데 효과적일 수 있습니다. 이러한 방법은 여러 개의 약한 분류기(Weak Learner)를 결합하여 불균형 데이터를 더 잘 처리할 수 있는 강력한 분류기를 만듭니다. 예를 들어, AdaBoost(Adaptive Boost)는 소수 클래스에서 잘못 분류된 인스턴스에 더 높은 가중치를 할당하여 후속 분류기가 이러한 어려운 경우에 초점을 맞추도록 합니다.
Synthetic data generation: 합성 데이터를 생성하는 것은 클래스 불균형 문제를 해결하는 또 다른 방법일 수 있습니다. 여기에는 기존 샘플을 수정하거나 결합하여 소수 클래스에 대한 새 인스턴스를 만드는 작업이 포함됩니다. 이 접근 방식은 소수 클래스가 너무 드물어서 더 많은 데이터를 얻을 수 없거나 오버샘플링(Oversampling) 기법이 효과적이지 않을 때 유용할 수 있습니다.
불균형 데이터(Imbalanced data)를 다룰 때 주의해야 할 점과 해결방법은 빅테크 기업들의 인터뷰 단골 질문이기도 합니다. 따라서 이 문제에 대해 정확하게 이해하고 있는 것이 좋습니다. 다음에는 Imbalanced Data를 다루는 방법을 세부적으로 하나하나 상세하게 다뤄보도록 하겠습니다.
'머신러닝' 카테고리의 다른 글
머신러닝 Decision Tree 핵심 개념(Entropy, Information Gain) (1) | 2023.02.24 |
---|---|
머신러닝 Decision Tree 핵심 개념 (데이터 사이언티스트 면접 질문) (0) | 2023.02.23 |
머신러닝 Feature Selection 개념, 중요성, 하는 방법 (0) | 2023.02.22 |
머신러닝 ROC curve(커브), AUC 개념 제대로 이해하기 (0) | 2023.02.22 |
[머신러닝] KNN 알고리즘 (K-Nearest Neighbor) (0) | 2023.02.20 |
댓글