일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- F분포
- 분석
- 평창
- 임상통계
- 카이제곱분포
- 데이터분석
- 공유경제
- Public Speaking
- 토스트마스터
- 정형데이터
- 취업
- CC#5
- 풀러스
- 사이허브
- 제약
- 영화
- 인과추론
- 데분
- 구글#빅쿼리#데이터분석
- PGTM
- 대중연설
- publicspeaking
- 영어연설
- 2018계획
- 연설
- Toastmaster
- CC#3
- 데이터
- 엘뱌키안
- SQLD
- Today
- Total
지지플랏의 DataScience
(11) DSforS : Chap5 5.5 불균형 데이터 다루기 본문
1. 책 목차
- 5.5: 불균형 데이터 다루기
- 5.5.1. 과소표본추출
- 5.5.2. 과잉표본추출과 상향/하향가중치
- 5.5.3. 데이터 생성
- 5.5.4. 비용기반 분류
- 5.5.5. 예측 결과 분석
- 5.6. 마치며
2. 본문
불균형 데이터는 분류문제에서 굉장히 중요한 데이터 전처리 과정이라고 생각하지만 입문자들에게는 평가절하되는 면이 많다. 이유인 즉슨 Toy Project에서 제시되는 데이터는 일반적으로 전처리하는 과정에서 Class 불균형을 해결하고 오는 경우가 많기 때문이다. 그래서 실제로는 분류문제에서 중요한 방법이다. 하지만 그 처리 방법이 데이터마다, 산업마다 다르기 때문에 예시가 잘 없는 것일 수도 있다는 생각이다.
2.1. 과소표본추출 방법: 가중치 적용
일반적으로 데이터가 많아 과소표본(Undersampling), 데이터 적어 과대표본추출(Oversampling)을 진행해야한다는 것이 알려져있지만, 본 책에서는 가중치 적용을 위한 방법론을 추가로 제시한다.
default_wt = 1 / np.mean(full_train_set.outcome == 'default')
wt = [default_wt if outcome == 'default' else 1 for outcome in full_train_set.outcome]
full_model = LogisticRegression(penalty="l2", C=1e42, solver='liblinear')
full_model.fit(X, y, wt)
print('percentage of loans predicted to default (weighting): ',
print( 100 * np.mean(full_model.predict(X) == 'default')))
예시 데이터는 대출상환에 대한 데이터로, outcome 변수는 default(미상환), paid-off(상환)에 대한 이진 분류클래스이다. 전체 데이터 중 대출상환을 하지 않은 비율은 19% 이다. 이를 역수처리하여 100/19 라는 가중치 비율을 만들어준다. 그리고 default 해당하는 클래스에 해당 가중치 값(5.26)이 적용된다. 이렇게하면 undersampling과 oversampling을 대체할 수 있다. 다음 책의 글귀가 마음에 든다.
어떤 자료에서는 손실함수를 수정하는 방법을 제안하기도 하지만 직접 손실함수를 수정하는 것은 복잡하고 어렵다. 반면 가중치를 적용하는 방법은 가중치가 높은 데이터를 선호하고 가중치가 낮은 데이터의 오류를 줄이는 식으로 손실함수를 변경하는 쉬운 방법이다.
2.2. 데이터 생성: SMOTE
실제 데이터를 마주하다보면 데이터의 갯 수가 적어서 데이터를 생성하는 방법이 제시되며 SMOTE 대표적으로 나온다. 발음은 [스모트] 라고 부른단다. Synthetic Minority Over-sampling Technique이라고 불리는데 말 그대로 소수 클래스의 데이터를 합성하는 oversampling방법 중 하나이다.
아이디어는 다음과 같다.
- 소수 클래스 데이터 선택: 소수 클래스의 데이터를 기준으로 가장 가까운 이웃(k-Nearest Neihgbors) 중 k 개의 데이터를 선택
- 새롭게 생성할 데이터 포인트 수 결정: N
- 새로운 데이터 생성: 선택된 k개의 이웃 중 하나를 무작위로 선택, 원본데이터와 이웃 데이터 사이의 선형보간을 통해 새로운 데이터를 생성, N번 반복
ex) 새 데이터 = 데이터 + (이웃 데이터 - 원본 데이터)* 0~1사이의 랜덤
그럼 선형보간(Linear Interpolation)은 무엇일까? 공대에서도 잘 활용 되는 이 방법은 두 개의 주어진 점이 있다고 할때 직선 방정식을 이용하여 임의의 점을 추정하는 방식이다. 이런 맥락에서 알 수 있듯 SMOTE를 하기 위해서는 데이터가 인코딩(숫자형태)가 되어있어야한다.
SMOTE의 장점은 단순하고 강력하며, 데이터의 특성을 잘 유지할 수 있는 반면 단점으로는 소수 클래스의 데이터 포인트가 이미 밀집되어 있는 경우 기존 데이터와 크게 variety를 기대할 수 없고 과적합(overfiiting) 문제가 발생할 수 있다.
3. 마무리
여기까지 분류에 대한 연재를 마쳤다. 아무래도 회귀처럼 특정 숫자를 맞추는 것보다 Category를 나누는 분류의 문제가 더 확률적으로 높은 예측을 기대할 수 있고 활용범위가 좋기에 더 많은 평가방법과 활용 방법이 제시되는 것 같다.다음 단원은 회귀/분류에 사용되는 통계적 머신러닝 방법을 알아보겠다.
'Data Science > 데이터과학을 위한 통계' 카테고리의 다른 글
(13)DSforS: Chap6. 6.2 트리 모델 - 정보이득개념 (0) | 2024.06.23 |
---|---|
(12) DSforS: Chap6. 6.1. k-최근접 이웃, 거리지표(마할라노비스) (0) | 2024.06.16 |
(10) DSforS : Chap5. 분류 5.3 ~ 5.4. 로지스틱회귀(LoR), 분류모델 평가 (0) | 2024.06.11 |
(9) DSforS : Chap5. 분류 5.1 ~ 5.3 나이브베이즈(NB), 선형판별분석(LDA) (0) | 2024.06.10 |
(8) DSforS : Chap4. 회귀와 예측 4.5 ~ 4.8 회귀방정식의 해석 ~ 끝 (0) | 2024.06.04 |