본문 바로가기
Data science/데이터 다루기

학습 데이터의 불균형을 해결하는 방법

by 보늴 2022. 4. 4.

데이터를 학습할 때 요인 혹은 CLASS에 따른 데이터 개수가 크게 차이나는 경우가 있다.

혹은 학습할 데이터의 정량적인 개수 자체가 부족할 때가 있다. 

 

기본적으로 딥러닝 분석을 위해서는 많은 데이터 확보가 효과적이다. 인공지능 학습의 정확도 문제도 있지만, 소수데이터의 평가가 어려워지는 문제도 있다.

100명 중 3명이 여자라고 했을 때 성별분류 인공지능을 만들면 무조건 남자라고 판정해도 정확도가 97%기에 겉으로 보기엔 완성도 있는 모델인 것이다.

 

그럴 때 불균형을 해결하고 데이터 수를 늘리는 방법의 일부를 정리했다. 

소수 데이터 수를 뻥튀기하는 방식 = 오버샘플링

 

 

CNN을 이용해 음식사진 700여종을 분류한 프로젝트이다. 음식 종류 당 50여장을 학습했다고 하는데 이는 이미지 학습에서 매우 적은 양이다. 이를 해결하기 위해 위에서는 이미지를 회전하고, 찌그러뜨리고, 일부만 확대하고 줄이는 등의 방법을 사용했다.

 

출처 - NIA 인공지능 학습용 데이터 활용 우수사례

위 프로젝트는 공항 이용자 수하물 내 액스레이에서 칼,가위,송곳 등 위해물품을 영상기반 딥러닝으로 탐지하는 것이다.

칼,가위 등은 데이터의 70%를 차지하며 데이터양이 풍부했으나 송곳, 스패너는 학습할 데이터 양이 부족해 불균형이 발생했다.

(7:3)의 불균형 발생.

이를 위해 각 종류별 200장이라는 기준에 맞춘 후 부족한 데이터군(송곳,스패너)는 이미지 부풀리기, 상하 좌우 반전, 찌그러뜨리기 등으로 데이터를 확대해 균등하게 1:1:1:1 비율로 학습을 진행했다. 이를 통해 딥러닝 정확도를 92%까지 향상했다. 

 

SMOTE 알고리즘

Synthetic minority oversampling technique

오버샘플링 기법 중 합성데이터를 생성하는 방식, 합성 소수 샘플링 기술로 다수 클래스를 샘플링 하고 기존 소수 샘플을 보간하여 새로운 소수 인스턴스 합성

 

test data에만 과적합(over-fitting)하고 새로운 인풋데이터의 예측 성능이 떨어질 수 있음.

 

출처- https://mkjjo.github.io/python/2019/01/04/smote_duplicate.html

 

 

쉽게 설명하면 소수데이터 내의 벡터들을 직선으로 연결한 범위 안에 새로운 점들(데이터)를 생성해 소수데이터의 수를 뻥튀기하는 것이다. 

 

Python에서 sklearn, imblearn import SMOTE를 통해 

쉽게 SMOTE 모델 생성이 가능하다. 

 

응용: 재직자와 퇴직자를 데이터셋으로 하여 이직확률을 예측하는 모델을 만든다고 할 때, 재직자와 퇴사자의 비율이 불균형하므로 SMOTE알고리즘으로 균형을 맞추기

 

 

참조#

http://www.incodom.kr/SMOTE

https://mkjjo.github.io/python/2019/01/04/smote_duplicate.html

출처 - NIA 인공지능 학습용 데이터 활용 우수사례

댓글