일반적으로 우리는 데이터를 수집해야하는 상황보다 다른 기관에서 데이터를 받아 분석하는 경우가 더 많습니다.
그러나 그렇게 받은 데이터에 클래스 불균형이 존재한다면? 편향이 발생하게 되겠죠..
그래서 우리는 이러한 클래스 불균형을 해소할 수 있는 방법을 알고 있어야합니다.
대표적으로는 이렇게 두 가지가 있습니다.
- 오버 샘플링
- 언더 샘플링
많이 들어보셨죠?
이것들이 각각 어떤 것인지, 단점은 무엇인지 알아보고,
각 샘플링에는 대표적으로 어떤 방법들이 있는지 한번 알아보도록 하죠!
📌 오버 샘플링
오버 샘플링이란, 소수 클래스의 데이터를 늘리는 것을 말합니다.
데이터가 상대적으로 적은 클래스를 증폭시켜 클래스 불균형을 해소할 수 있지만,
노이즈가 증폭될 가능성이 있다는 단점이 있습니다.
이제 대표적인 오버 샘플링 방법들을 살펴보겠습니다!
SMOTE(Synthetic Minority Oversampling Technique)
- 소수 클래스의 데이터를 기반으로 새로운 데이터를 합성
- 이웃 데이터 포인트 사이에 임의의 값을 생성
ADASYN(Adaptive Synthetic Sampling Approach)
- 소수 클래스의 데이터를 확대하되, 데이터 분포의 복잡성을 고려하여 생성
- 학습하기 어려운 샘플(즉, 소수 클래스 데이터 주변에 다수 클래스 데이터가 많은 경우)에 더 많은 데이터 생성
SMOTE와 ADASYN 비교
특징 | SMOTE | ADASYN |
샘플링 방식 | 균일하게 샘플을 생성 | 모델 학습에 어려운 영역에 더 많은 샘플 생성 |
데이터 밀도 | 데이터 분포의 불균형을 고려하지 않음 | 소수 클래스 데이터 분포의 불균형 반영 |
적용 영역 | 단순한 데이터 불균형 문제 해결에 적합 | 복잡한 경계 문제를 해결할 때 적합 |
📌 언더 샘플링
언더 샘플링이란, 다수 클래스의 데이터를 줄이는 것을 말합니다.
데이터가 상대적으로 많은 클래스를 축소시켜 클래스 불균형을 해소할 수 있지만,
정보 손실 가능성이 있다는 단점이 있습니다.
이제 대표적인 언더 샘플링 방법들을 살펴보겠습니다!
Tomek Links
- Tomek Links는 가장 가까운 두 데이터를 묶었을 때 각 데이터가 서로 다른 클래스에 속하는 것을 의미 (= 모호한 데이터들)
- 이들을 찾아 제거하여 데이터의 경계를 명확히 하고 모델이 경계에서 더 정확히 학습할 수 있도록 도움
CNN(Condensed Nearest Neighbor)
- 다수 클래스에서 데이터 하나를 뽑고, 소수 클래스 전체를 합집합한 것을 S 집합이라 둠
- 다수 클래스 데이터 중 하나를 뽑아 소수 클래스와 더 가까우면 해당 데이터를 S에 포함시킴
- 더 이상 선택되는 데이터가 없을 때까지 이를 반복 (1-NN으로 분류되지 않는 데이터만 남기는 것)
📌 복합 샘플링
그렇다면 꼭 오버 샘플링, 언더 샘플링 중 하나만 선택해야 할까요?
그렇지 않습니다! 필요에 따라 당연히 두 가지를 복합해서 사용할 수 있죠!
오버 샘플링과 언더 샘플링을 복합해서 사용하는 대표적인 복합 샘플링 방법들을 살펴보죠!
SMOTE-Tomek
- SMOTE로 오버샘플링 수행하여 데이터를 증강
- 증강된 데이터에서 경계에 위치한 Tomek-Links를 찾아 제거
OSS(One Sided Selection)
- Tomek Links로 데이터셋의 경계를 확실히 만듦
- 이후 CNN을 적용하여 경계와 멀리 떨어진 데이터를 제거
'Study > Data Science' 카테고리의 다른 글
[Data Science] 결측 데이터 처리 방법 (3) | 2024.12.06 |
---|---|
[Data Science] 이상치(Outlier) 탐지 방법 (1) | 2024.12.05 |
[Data Science] 크롤링 라이브러리 (파이썬) (1) | 2024.12.05 |
[Data Science] 데이터의 품질 측정 (0) | 2024.12.05 |