데이터 분석 프로젝트에서 한 번쯤은 겪어보셨을 문제가 데이터 불균형입니다.
이런 경우 좀 난감한 상황이 되는데요. 오늘은 불균형 데이터셋 문제에 대해 이야기해보겠습니다. 이상적으로 설계된 예측 모델이 높은 정확도를 보이는 데도 가끔은 꺼림직한 예감이 든 적이 있습니다.
자세히 살펴보면, 모델이 대규모의 클래스만 잘 예측하고 소수의 클래스는 제대로 처리하지 못하는 경우가 생깁니다. 이런 경험담을 바탕으로 불균형 데이터셋을 다루는 방법에 대해 알아보겠습니다.
왜 불균형 데이터셋이 문제인가?
데이터셋 내 클래스 간의 비율이 명확히 차이 나는 불균형 데이터셋은 머신 러닝에서 일반적으로 발생하는 문제입니다.
흔히 발생하는 시나리오는 다수 클래스의 비중이 커서 모델이 해당 클래스의 예측은 우수하게 수행하지만, 소수 클래스의 예측 성능은 저조한 경우입니다.
이러한 경우 정확도와 같은 평가 지표들은 모형의 성능이 높은 것처럼 보이지만, 사실 소수 클래스의 처리에는 큰 구멍이 있습니다.
예를 들어, 클래스 0이 전체 데이터의 95%를 차지하고, 클래스 1이 5%라면, 단순히 모든 데이터가 클래스 0이라고 예측해도 95%의 정확도를 얻을 수 있습니다. 그러나 실제로 우리는 클래스 1을 제대로 탐지할 수 없는 심각한 문제에 봉착하게 됩니다.
불균형 데이터셋 3가지 방법
불균형 데이터셋을 다루는 방법은 다양합니다. 각각의 방법은 데이터의 특성과 목적에 따라 선택됩니다. 몇 가지 대표적인 방법론을 살펴보겠습니다.
1. 데이터 리샘플링
가장 일반적인 방법 중 하나는 데이터 리샘플링(재표본화, resampling)입니다. 이는 데이터셋 내 클래스 비율을 조정하여 균형 잡힌 데이터셋을 만드는 방법입니다.
- 언더샘플링: 다수 클래스를 줄여서 데이터셋의 클래스 비율을 맞추는 방법입니다. 하지만 이는 중요한 정보를 잃을 수 있는 위험이 있습니다.
- 오버샘플링: 소수 클래스를 늘려서 데이터셋을 균형 있게 만드는 방법입니다. 대표적인 예로는 SMOTE(Synthetic Minority Over-sampling Technique)가 있습니다. 그러나 이는 과적합의 가능성을 높일 수 있습니다.
2. 알고리즘적 접근
알고리즘 자체를 불균형 데이터셋에 강건(rubust)하도록 모델을 조정하는 것도 방법입니다. 예를 들어, 가중치를 조정하여 소수 클래스가 학습에 더 많이 기여하게 만드는 것도 하나의 접근법입니다.
- 가중치 조정(weight adjusting): 손실 함수에 가중치를 추가하여 클래스 불균형을 보상하는 방식입니다. 클래스 중 작은 비중을 차지하는 쪽의 가중치를 더 부여하여 불균형을 어느 정도 해소하는 방법입니다.
- 특화된 알고리즘: 불균형 데이터를 처리하기 위해 설계된 알고리즘, 예를 들어, 불균형 학습을 위한 랜덤 포레스트 등이 있습니다.
3. 평가 지표의 개선
기존의 정확도 외에도 다른 지표를 활용하여 불균형 문제를 더 잘 평가할 수 있습니다. 이 방법은 불균형 데이터가 업무적으로 발생할 수 밖에 없으므로 평가도 그 업무 도메인에 맞는 방식으로 진행하자는 의도입니다.
아래와 같은 평가지표들이 불균형 데이터의 평가에서 유용하게 활용할 수 있습니다.
- 정밀도(Precision), 재현율(Recall): 특정 클래스의 예측 성능을 평가하는데 유용합니다.
- F1 Score: 정밀도와 재현율의 조화를 평가하며, 불균형한 데이터셋에서도 더 균형 잡힌 성능 평가를 제공합니다.
마무리
불균형 데이터셋은 데이터 사이언스에서 피할 수 없는 영역인데요. 저도 의료 데이터를 이용한 프로젝트를 하면서 불균형을 해소하기 부단히 연구했던 기억이 있습니다.
그리고 올바른 기법과 전략을 활용하면 불균형 데이터셋에서도 유의미한 인사이트를 도출할 수 있다는 것도 알았죠. 데이터를 인위적으로 조작하는 것 같지만 정확도를 높이는 데 효과적이었기 때문입니다.
중요한 것은 우리가 문제를 정확히 이해하고, 그에 맞는 최적의 접근법을 선택하는 것입니다. 데이터 분석가로서, 문제의 본질을 파악하고 데이터의 가치를 극대화하는 것이 중요합니다.