오버 샘플링 기법을 적용해 불균형 데이터 문제 해결하기 1편 – 불균형 데이터란?

2021.10.19

우리가 병원에서 검사를 받고 진단을 받은 기록에서부터 스마트 워치가 측정하는 심박 수까지, 모두 현실 세계에 존재하는 수많은 의료 데이터의 일부분입니다. 라인웍스 머신러닝 그룹은 청구 명세서를 비롯해 전자의무기록과 같은 헬스케어 분야에서 생겨나는 다양한 데이터를 학습하여 예측 모델을 연구하고, 이를 제품에 녹이기 위한 개발 기술을 담당하고 있습니다. 이 글에서는 불균형 데이터 문제와 이를 해결하기 위한 샘플링 기법을 소개합니다.


불균형 데이터란?

머신러닝 모델을 학습시키기 위해서는 많은 양의 데이터가 필요합니다. 데이터가 아주 많아도 “정상”에 해당하는 데이터가 대부분이고 “이상치”에 해당하는 데이터는 극히 적은 경우도 있습니다. 이는 특히 의료 데이터에서 쉽게 찾아볼 수 있습니다. 예를 들어 정상 세포악성 종양 이미지를 분류하는 문제를 생각해 봅시다. 현실에 존재하는 데이터들을 살펴보면 악성 종양 이미지는 정상 세포 이미지보다 그 수가 현저하게 적은 경우에 해당합니다. 즉, 정상 범주의 관측값 수와 이상 범주의 관측값 수가 균등하게 분포하지 않습니다. 이러한 상황에서 환자의 데이터를 바탕으로 악성 암세포를 가진 환자를 찾아내기는 쉽지 않은 일일 것입니다. 이를 불균형 데이터 문제라고 합니다.

이미지 출처 : https://www.australia.cmu.edu/blog/2021/05/10/policymaking-in-a-time-of-black-swans/

불균형 데이터 무엇이 문제일까?

앞서 예시를 든 악성 종양 이미지 분류 모델을 생각해 보도록 하겠습니다. 단순한 이진 분류 문제로, 이미지를 학습하여 새로운 이미지가 제시되었을 때 어떤 범주에 속하는지를 판단합니다. 만약 정상 세포와 악성 종양 이미지의 비율이 현저하게 차이가 날 경우, 분류 모델은 전체적인 오분류를 줄이기 위해 다수 범주에 해당하는 정상 세포로 분류하는 경향으로 학습하게 됩니다. 정상 세포 사진은 많은 양의 데이터로 학습하기 때문에 잘 맞추지만 악성 종양의 이미지는 많이 보지 못해 잘 판단하지 못하며, 이는 분류기가 이미지에 대한 큰 고민 없이 항상 “정상! 정상!“만 외치는 앵무새가 되어 버린 것이라고 할 수 있습니다. 

이미지 출처 : https://dev.to/bmor2552/binary-classification-problem-random-forest-onehot-encoder-34cg

결국 불균형 데이터 문제는 정확도(Accuracy) 측면에서 성능에 대한 왜곡 현상을 야기하고, 보다 복합적인 방식의 성능 측정을 필요로 하게 됩니다. 또 모델링 관점에서 불균형 데이터의 학습 결과는 다수의 데이터에 편중된 분류 경계선을 만들고, 이는 모델이 실제 이상적인 분류 경계선을 만들기가 어렵다는 것을 의미합니다. 소수의 데이터를 무시하고 다수의 데이터에 편중된 판단을 한다면 정확도는 높을 수 있습니다. 다만, 실제 목표가 되는 악성 종양 이미지를 찾아내는 것은 불가능에 가깝습니다. 우리는 대다수인 정상 데이터에 관심이 있는 것이 아니라 소수의 이상 데이터를 정확히 분류해 내는 것이 훨씬 더 중요하기 때문에 반드시 극복해야 하는 부분입니다. 이 문제를 해결하는 방법에는 비용기반 학습, 단일 클래스 분류 기법, 샘플링 기법 등 여러 방식이 있습니다. 이 글에서는 다수의 범주에 속하는 데이터(이하 다수클래스) 또는 소수의 범주에 속하는 데이터(이하 소수클래스)의 수를 조정하는 방식의 접근법인 샘플링 기법(sampling method)을 소개하도록 하겠습니다.


샘플링 기법

입원 후 6개월 이내에 “C” 질환의 발생 여부를 예측하는 모델을 만든다고 가정해 보겠습니다. 양질의 데이터가 많을수록 정확한 분류기를 만드는 데 도움이 되는 것은 분명합니다. 전체 데이터가 총 10,000개라고 가정하였을 때, 6개월 이내에 “C” 질환이 발생하지 않은 환자 데이터와 “C” 질환이 발생한 환자 데이터가 각각 5천 개씩 있는 것이 학습하는데 이상적인 상황일 것입니다. 하지만 실제 데이터는 9천5백 개의 정상 데이터와 500개의 “C” 질환 데이터로 이루어져 있을 가능성이 더 높습니다. 이때 샘플링 기법은 정상 데이터에서 일부분을 추출하거나, “C” 질환 데이터를 추가로 생성해 수를 늘리는 방식을 취합니다. 전자처럼 다수클래스의 수를 줄이는 방식을 언더샘플링(Undersampling), 후자처럼 소수클래스의 수를 늘리는 방식을 오버샘플링(Oversampling)이라고 합니다.

이미지 출처 : https://www.analyticsvidhya.com/blog/2020/07/10-techniques-to-deal-with-class-imbalance-in-machine-learning/

언더 샘플링은 결국 어떤 데이터를 없앨까 하는 문제입니다. 먼저 무작위로 데이터를 제거하는 방법이 있습니다. “C” 질환이 발생하지 않은 환자 데이터 중에 랜덤하게 9천 개를 골라 학습에 사용하지 않는다면 각각 500개씩의 동일한 비율로 학습을 진행할 수 있습니다. 다만, 이때에는 힘겹게 확보한 9천 개의 환자 데이터가 무용지물이 되어 정보가 손실되는 문제를 초래합니다. 의료 데이터는 개인의 의료 정보를 담고 있고 법적, 정책적인 한계로 다량으로 확보하기가 어렵습니다. 또 데이터는 “C” 질환에 해당하는지 여부를 포함하고 있어야 하며 이를 위해 전문 의료인의 노동이 필수적으로 수반됩니다. 이는 결국 의료 데이터 확보에 있어 비용의 문제로 귀결되며, 따라서 가지고 있는 데이터를 충분히 활용할 방법을 모색하는 것이 더 합리적이고 자연스러운 접근이라 할 수 있습니다.


마치며

우리가 확보한 소중한 데이터를 보존하면서 “C” 질환 데이터를 늘리는 방법으로 오버 샘플링 기법을 활용할 수 있습니다. 오버 샘플링 기법 역시 “과적합”이라는 문제를 안고 있기는 합니다. 다만, 이를 극복하기 위해 지금도 수많은 개선된 변형 기법들이 연구되고 있습니다. 이어지는 다음 글에서는 여러 가지 오버 샘플링 기법을 살펴보고 각각 어떤 방식으로 데이터를 생성하는지 그 원리에 대해 알아보도록 하겠습니다.

Seungwon Jee

Machine Learning Engineer, ML Group

Seungwon Jee