1. 파생변수 (Derived Variable)
정의 기존에 있는 변수들을 계산·조합·변환해서 새로 만들어낸 변수입니다.
예시
- 생년월일 → 나이
- 키, 몸무게 → BMI
- 매출액 / 방문횟수 → 객단가
- 가입일 → 가입 경과 일수
- 주소 → 시도/시군구 코드
존재하는 이유
- 원래 데이터만으로는 모델이 중요한 패턴을 잘 포착하지 못할 때
- 도메인 지식을 반영해 더 의미 있는 정보를 만들기 위해
- 모델 성능을 높이거나 해석을 쉽게 하기 위해
2. 요약변수 (Summary / Aggregated Variable)
정의 여러 건의 데이터를 집계(Aggregation)해서 만든 변수입니다. 주로 시간이나 그룹 기준으로 합계, 평균, 횟수, 최대/최소 등을 계산합니다.
예시
- 최근 3개월 평균 구매금액
- 지난 1년 동안의 총 로그인 횟수
- 고객별 누적 구매 횟수
- 월별 평균 체류 시간
- 특정 카테고리 구매 비율
존재하는 이유
- 거래 데이터처럼 한 고객이 여러 행을 가진 경우, 고객 단위로 분석하기 위해
- 행동의 전반적인 경향(빈도, 규모, 최근성 등)을 하나의 숫자로 요약하기 위해
3. 파생변수 vs 요약변수 비교
| 만드는 방식 | 기존 변수를 계산·변환 | 여러 행을 집계(합계, 평균 등) |
| 데이터 단위 | 보통 한 행 안에서 처리 | 여러 행(시간·그룹)을 묶어서 처리 |
| 대표 예시 | 나이, BMI, 비율, 차이 | 최근 3개월 평균 구매액, 총 방문 횟수 |
| 주요 목적 | 의미 있는 새로운 정보 생성 | 반복되는 행동을 하나의 지표로 요약 |
| 생성 위치 | 주로 한 테이블 내에서 | 주로 여러 테이블이나 시계열 데이터에서 |
4. 데이터 웨어하우스 / 데이터 마트에서의 추출·생성 방법
데이터 웨어하우스(DW)와 데이터 마트(DM)에서는 보통 다음과 같은 단계에서 만들어집니다.
- ETL 과정에서 생성
- 원천 시스템 → Staging → DW로 적재할 때 미리 계산해서 넣음
- 예: 생년월일로 나이를 계산해 DW 테이블에 저장
- 데이터 마트 계층에서 생성
- DW의 상세 데이터를 기반으로 분석 목적에 맞게 마트에서 집계·파생
- 요약변수는 대부분 이 단계에서 만들어짐
- 예: 고객 마트를 만들면서 “최근 6개월 구매금액 합계” 컬럼 생성
- 분석/모델링 단계에서 생성
- 머신러닝이나 통계 분석 직전에 Feature Engineering으로 만듦
- 빠르게 실험해볼 때 유용하지만, 재현성과 일관성이 떨어질 수 있음
실제 추출 방식 예시
- SQL의 CASE WHEN, 날짜 함수, 산술 연산 → 파생변수
- GROUP BY + SUM, AVG, COUNT, MAX 등 → 요약변수
- 윈도우 함수(OVER)를 사용해 고객별 최근 N개월 집계
데이터 레이크/웨어하우스/마트의 차이
데이터 레이크 ⊃ 데이터 웨어하우스 ⊃ 데이터 마트
라고 단순하게 외우면 시험에서는 편하지만, 엄밀히는 물리적인 포함관계라기보다 범위·목적의 관계로 이해하는 게 정확해.
1. 한눈에 비교
| 범위 | 가장 넓음 | 조직 전체 | 특정 부서/업무 |
| 데이터 | 정형 + 반정형 + 비정형 | 주로 정형 | 주로 정형 |
| 저장 상태 | 원천 데이터 그대로도 저장 | 정제·가공 후 저장 | 특정 목적에 맞게 가공 |
| 목적 | 모든 데이터를 일단 저장 | 분석·BI | 특정 부서의 분석 |
| 사용자 | 데이터 엔지니어/과학자 등 | 분석가/경영진 | 특정 부서 |
| 예시 | 로그, 이미지, 영상, CSV 등 | 전사 매출·고객·재무 데이터 | 마케팅 매출 분석용 데이터 |
2. 관계를 그림으로 보면
기업의 모든 데이터
│
┌─────▼─────┐
│ 데이터 레이크 │
│ 원천 데이터 │
└─────┬─────┘
│
정제·가공·통합
│
┌─────▼─────┐
│ 데이터 웨어하우스│
│ 전사 분석 │
└─────┬─────┘
│
부서/업무별로 분리
┌─────┼─────┐
▼ ▼ ▼
마케팅 재무 인사
마트 마트 마트
다만 이 그림처럼 데이터 레이크 안에 반드시 DW가 물리적으로 들어 있고, 그 안에 마트가 들어가는 것은 아니야. 각각 별도로 구축될 수도 있어.
3. 진짜 핵심 차이
① 데이터 레이크
“일단 다 담아놓자.”
정형 데이터뿐 아니라 로그, 이미지, 영상, JSON 같은 다양한 형태의 데이터를 원래 형태에 가깝게 저장.
② 데이터 웨어하우스
“분석하기 좋게 정리해서 담아놓자.”
여러 시스템의 데이터를 가져와 정제·통합·구조화한 뒤 기업 전체적인 분석에 사용.
③ 데이터 마트
“마케팅 부서에서 필요한 것만 따로 보자.”
DW 등의 데이터에서 특정 부서·업무·목적에 필요한 데이터만 추출해서 만든 작은 분석 저장소.
예를 들어:
데이터 웨어하우스
├── 고객 데이터
├── 상품 데이터
├── 주문 데이터
├── 매출 데이터
└── 직원 데이터
↓
마케팅 데이터 마트
├── 고객
├── 상품
└── 마케팅 매출
시험용 한 줄 암기
레이크 = 모든 데이터를 원형 그대로 / 웨어하우스 = 전사 데이터를 정제·통합 / 마트 = 특정 부서용으로 축소
그리고 **범위만 놓고 보면 레이크 > 웨어하우스 > 마트**라고 기억
5. 처리 방법과 유의점
파생변수 처리 시 유의점
- 도메인 지식을 반드시 반영할 것 (의미 없는 계산은 오히려 독)
- 원래 변수와 다중공선성이 강하게 생기지 않는지 확인
- 결측치가 있는 변수를 이용해 만들 경우 결측 처리 방법을 먼저 결정
- 학습 데이터와 신규 데이터에 동일하게 적용될 수 있도록 로직을 명확히 문서화
요약변수 처리 시 유의점
- 집계 기간을 명확히 정의 (최근 3개월? 6개월? 전체 기간?)
- 시간 기준으로 집계할 때 데이터 누수(Data Leakage) 주의 (예측 시점에 알 수 없는 미래 정보를 쓰면 안 됨)
- 집계 기준이 되는 키가 정확한지 확인 (고객ID, 회원번호 등)
- 극단값(이상치)의 영향을 많이 받으므로 필요시 로그 변환이나 윈저라이징 검토
- 집계 후 결측이 생기는 경우(한 번도 구매하지 않은 고객 등) 처리 방법 미리 정하기
데이터 누수 (Data Leakage)란
모델이 예측 시점에 실제로 사용할 수 없는 정보를 학습 과정에서 미리 봐버리는 현상입니다.
쉽게 말해, “시험 보기 전에 이미 정답을 보고 공부한 것”과 같습니다. 그래서 모델 성능이 매우 좋게 나오지만, 실제 운영 환경에서는 성능이 크게 떨어집니다.
1. 데이터 누수가 왜 치명적인가?
| 겉보기 성능 | 학습·검증 단계에서 정확도, AUC 등이 비정상적으로 높게 나옴 |
| 실제 성능 | 모델이 배포된 후 새로운 데이터에서는 성능이 급격히 하락 |
| 결과 | 잘못된 의사결정, 신뢰 상실, 재작업 비용 발생 |
데이터 누수는 머신러닝 프로젝트에서 가장 흔하면서도 가장 위험한 실수 중 하나입니다.
2. 데이터 누수의 주요 유형
(1) 타겟 누수 (Target Leakage) – 가장 심각
예측해야 할 정답(타겟)과 직접적으로 관련된 정보가 설명변수에 포함된 경우입니다.
예시
- 대출 연체 예측 모델에서 “연체 후 추심 여부” 변수를 사용
- 병원 입원 여부 예측에서 “입원 후 처방된 약” 정보를 사용
- 고객 이탈 예측에서 “이탈 후 해지 사유” 변수를 사용
→ 이 정보들은 예측 시점에는 절대 알 수 없는 미래 정보입니다.
(2) 훈련-테스트 오염 (Train-Test Contamination)
훈련 데이터와 테스트 데이터를 나누기 전에 전체 데이터로 전처리를 해버리는 경우입니다.
예시
- 전체 데이터로 평균·표준편차를 구한 뒤 표준화하고, 그 다음에 훈련/테스트 분할
- 전체 데이터로 결측치를 대체한 후 분할
- 전체 데이터로 PCA나 스케일링을 먼저 적용
→ 테스트 데이터의 정보가 훈련 과정에 스며들어 성능이 과대평가됩니다.
(3) 시간적 누수 (Temporal Leakage)
시계열이나 고객 행동 데이터에서 미래 정보를 과거 예측에 사용하는 경우입니다.
예시
- 3월 이탈 여부를 예측하면서 4월 구매 데이터를 사용
- 요약변수를 만들 때 “전체 기간 평균 구매금액”을 사용 (미래 기간 포함)
- 고객의 생애 전체 구매 횟수를 이탈 예측에 사용
→ 이전 대화에서 말한 요약변수를 만들 때 특히 자주 발생합니다.
(4) 그룹 누수 (Group Leakage)
같은 그룹(고객, 환자, 기기 등)의 데이터가 훈련과 테스트에 동시에 들어간 경우입니다.
예시
- 같은 고객의 여러 거래 기록이 훈련셋과 테스트셋에 나뉘어 들어감
- 같은 환자의 진료 기록이 양쪽에 존재
3. 파생변수·요약변수에서 특히 주의해야 할 누수
| 요약변수 | 전체 기간 평균 구매금액을 사용 | 예측 시점 이전 데이터만으로 집계 |
| 파생변수 | 타겟과 직접 연관된 계산식 사용 | 예측 시점에 알 수 있는 정보만으로 계산 |
| 시간 변수 | 미래 날짜 정보를 포함 | 기준 시점을 명확히 고정 |
올바른 요약변수 예시 “2024년 3월 이탈 예측”을 한다면 → 2024년 2월 말까지의 데이터만으로 “최근 3개월 평균 구매금액”을 계산해야 합니다.
4. 데이터 누수를 예방하는 방법
- 시간 순서 엄격히 지키기
- 훈련 데이터는 항상 테스트 데이터보다 과거여야 함
- 요약변수·파생변수는 “예측 시점 이전” 데이터만 사용
- 데이터 분할을 가장 먼저 수행
- 전처리(스케일링, 결측 처리, 인코딩, PCA 등)는 반드시 분할 이후에
- 훈련 데이터에서 학습한 기준(평균, 중앙값 등)을 테스트 데이터에 적용
- 파이프라인 사용
- Scikit-learn의 Pipeline이나 비슷한 도구로 전처리+모델을 묶어서 교차검증 시마다 올바르게 처리되도록 함
- 도메인 지식으로 검토
- “이 변수를 실제 예측 시점에도 쓸 수 있는가?”를 항상 질문
- 특히 타겟이 발생한 이후에야 알 수 있는 정보는 제거
- 그룹 단위 분할
- 고객ID, 환자ID 등을 기준으로 그룹 분할(GroupKFold 등) 사용
5. 데이터 누수를 의심해야 하는 신호
- 모델 성능이 비정상적으로 높음 (예: AUC 0.98 이상)
- 특정 변수의 중요도가 비정상적으로 큼
- 교차검증 성능과 실제 운영 성능 차이가 매우 큼
- “이 변수 없어도 성능이 거의 떨어지지 않는데?” 싶은 변수가 있음
요약
데이터 누수는 모델이 미래에만 알 수 있는 정보를 미리 학습해버려서 겉보기 성능은 좋지만 실제로는 쓸모없는 모델이 되는 현상입니다.
특히 요약변수를 만들 때 시간 기준을 잘못 설정하거나, 전처리를 데이터 분할 전에 해버리는 경우가 가장 흔합니다.
“이 정보를 실제 예측하는 그 시점에도 쓸 수 있는가?”를 항상 기준으로 삼으면 대부분의 누수를 예방할 수 있습니다.
핵심 요약
- 파생변수: 기존 변수를 계산해서 새로 만든 변수 (의미 부여 목적)
- 요약변수: 여러 건의 데이터를 집계해서 만든 변수 (행동 요약 목적)
- DW/DM에서는 ETL이나 데이터 마트 구축 단계에서 주로 생성
- 둘 다 모델 성능과 해석력을 높이는 데 중요하지만, 의미 있는 정의와 데이터 누수 방지, 일관된 적용이 가장 중요합니다.
1. 변수 변환이란?
변수 변환은 원래 변수의 값을 수학적 함수를 이용해 다른 척도나 분포로 바꾸는 것입니다.
주요 목적
- 왜도(Skewness)를 줄여 정규분포에 가깝게 만들기
- 이상치의 영향 감소
- 변수 간 척도 차이 제거 (스케일링)
- 비선형 관계를 선형에 가깝게 만들기
- 모델 성능 향상 및 안정성 확보
2. 주요 변수 변환 방법
(1) 로그 변환 (Log Transformation)
개념 $ x' = \log(x) $ 또는 $ \log(x + c) $ 큰 값은 크게 줄이고, 작은 값은 상대적으로 덜 줄여서 오른쪽 꼬리가 긴 분포를 대칭에 가깝게 만듦.
장점
- 오른쪽 왜도가 심한 데이터에 매우 효과적
- 이상치 영향 크게 감소
- 해석이 비교적 용이 (로그 차이 = 비율 변화)
단점
- 0이나 음수가 있으면 바로 사용 불가 (상수 추가 필요)
- 원래 값이 1 근처일 때 변화가 큼
- 과도하게 변환되면 정보 손실 가능
주로 사용하는 경우: 소득, 매출, 가격, 방문수 등 오른쪽 꼬리가 긴 변수
(2) 제곱근 변환 (Square Root Transformation)
개념 $ x' = \sqrt{x} $
로그 변환보다 약한 변환으로, 중간 정도의 왜도를 교정할 때 사용.
장점
- 0이 포함되어 있어도 사용 가능
- 로그보다 변환 강도가 약해서 정보 손실이 적음
단점
- 왜도가 매우 심할 때는 효과가 부족
- 음수 처리 불가
주로 사용하는 경우: 카운트 데이터(횟수)에서 왜도가 중간 정도일 때
(3) 제곱 변환 / 거듭제곱 변환 (Power Transformation)
개념 $ x' = x^2 $ 또는 $ x^p $
왼쪽 왜도(왼쪽 꼬리가 긴 경우)를 교정하거나, 관계를 강조할 때 사용.
장점
- 왼쪽 왜도 데이터에 효과적
- 특정 패턴을 강조할 수 있음
단점
- 이상치 영향을 더 키울 수 있음
- 해석이 어려워짐
(4) Box-Cox 변환
개념 데이터를 정규분포에 최대한 가깝게 만들어주는 자동 거듭제곱 변환. $ \lambda $ 값을 데이터 기반으로 최적화해서 변환 강도를 정함.
$x'(\lambda) =
\begin{cases}
\dfrac{x^\lambda - 1}{\lambda} & \lambda \neq 0 \\
\log(x) & \lambda = 0
\end{cases}$
장점
- 최적의 변환을 자동으로 찾아줌
- 정규성 개선 효과가 뛰어남
- 통계 모형(선형회귀 등)에서 가정 만족에 유리
단점
- 반드시 양수 데이터여야 함
- λ \lambda 해석이 직관적이지 않음
- 변환 후 원래 척도로 해석하기 어려움
(5) Yeo-Johnson 변환
개념 Box-Cox의 확장판으로, 음수와 0이 있는 데이터도 변환 가능.
장점
- 음수·0 포함 데이터에 사용 가능
- Box-Cox처럼 자동으로 최적 변환 탐색
단점
- 계산이 더 복잡
- 해석이 어려움
현재 실무에서 Box-Cox보다 더 자주 사용되는 추세
(6) 표준화 (Standardization, Z-score)
개념
$ x' = \dfrac{x - \mu}{\sigma} $
평균 0, 표준편차 1로 만듦.
장점
- 변수 간 척도 차이를 제거
- 많은 머신러닝 알고리즘(SVM, 로지스틱, 신경망, PCA 등)에서 필수적
- 이상치에 어느 정도 강함
단점
- 원래 값의 의미가 사라짐
- 이상치가 매우 많으면 평균과 표준편차가 왜곡됨
(7) 정규화 (Min-Max Scaling)
개념
0~1 사이 값으로 변환.
장점
- 모든 변수를 같은 범위로 맞춤
- 신경망, 거리 기반 알고리즘에서 유용
단점
- 이상치에 매우 민감 (최대/최소값이 극단적이면 왜곡)
- 새로운 데이터가 기존 범위를 벗어나면 문제가 됨
(8) Robust Scaler
개념 평균과 표준편차 대신 중앙값과 IQR을 사용해 스케일링.
장점
- 이상치에 매우 강함
- 데이터가 왜곡되어 있어도 안정적
단점
- 일반적인 표준화보다 덜 쓰임
- 분포의 중심과 퍼짐을 다르게 정의함
(9) Quantile Transformation (순위 기반 변환)
개념 데이터를 순위로 바꾼 뒤, 정규분포나 균등분포로 강제로 맞춤.
장점
- 어떤 분포든 원하는 분포로 만들 수 있음
- 이상치 영향 거의 없음
단점
- 원래 데이터의 거리 정보가 왜곡됨
- 과적합 위험이 있음 (특히 소표본)
3. 변환 방법 비교 요약
| 로그 변환 | 오른쪽 왜도 감소 | 감소 | 불가능 (보정 필요) | Ordinary | 소득, 매출, 가격 등 |
| 제곱근 변환 | 중간 왜도 감소 | 감소 | 0 가능 | 높음 | 횟수 데이터 |
| Box-Cox | 정규성 최대화 | 감소 | 양수만 | 낮음 | 통계 모형 가정 충족 |
| Yeo-Johnson | 정규성 최대화 | 감소 | 가능 | 낮음 | 음수 포함 데이터 |
| 표준화 (Z-score) | 척도 통일 | 보통 | 가능 | 보통 | 대부분 머신러닝 |
| Min-Max | 0~1 범위로 통일 | 매우 큼 | 가능 | 낮음 | 신경망, 이미지 등 |
| Robust Scaler | 이상치에 강한 스케일링 | 매우 작음 | 가능 | 보통 | 이상치 많은 데이터 |
| Quantile 변환 | 강제 분포 변환 | 거의 없음 | 가능 | 매우 낮음 | 분포를 맞춰야 할 때 |
4. 실무에서 변수 변환 시 유의점
- 반드시 훈련 데이터 기준으로 변환
- 평균, 최솟값, $ \lambda 등을 전체 데이터로 구하면 데이터 누수 발생
- 변환 전후 분포를 반드시 확인
- 히스토그램, Q-Q 플롯으로 효과 검증
- 트리 기반 모델(Random Forest, XGBoost, LightGBM 등)
- 단조 변환(로그, 제곱근 등)의 효과가 상대적으로 적음
- 스케일링도 크게 필요하지 않음
- 선형 모델, 거리 기반 모델, 신경망
- 변환과 스케일링 효과가 큰 편
- 해석이 중요한 경우
- 로그 변환 정도가 타협점
- Box-Cox나 Quantile 변환은 해석이 어려워짐
왜도(Skewness)와 첨도(Kurtosis)에 대해
1. 왜도 (Skewness)
개념 분포가 좌우로 얼마나 비대칭인지를 나타내는 측도입니다. 데이터가 평균을 기준으로 어느 쪽으로 더 길게 늘어져 있는지를 보여줍니다.
해석
- 왜도 = 0: 좌우 대칭 (정규분포에 가까움)
- 왜도 > 0 (양의 왜도, Right-skewed): 오른쪽 꼬리가 김 → 큰 값 쪽으로 길게 늘어짐 (예: 소득, 주택 가격)
- 왜도 < 0 (음의 왜도, Left-skewed): 왼쪽 꼬리가 김 → 작은 값 쪽으로 길게 늘어짐
수식
모집단 왜도 (Population Skewness)
$\gamma_1 = \frac{\mu_3}{\sigma^3} = \frac{E[(X - \mu)^3]}{(E[(X - \mu)^2])^{3/2}}$
- $ \mu_3 $: 3차 중심적률 (평균으로부터의 세제곱 편차의 기댓값)
- $ \sigma $: 표준편차
표본 왜도 (Sample Skewness) – 실무에서 가장 많이 사용
$g_1 = \frac{\frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})^3}{\left(\frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})^2\right)^{3/2}}$
편향을 보정한 조정 표본 왜도(Adjusted Fisher-Pearson)는 다음과 같습니다.
$G_1 = \frac{\sqrt{n(n-1)}}{n-2} \cdot g_1$
2. 첨도 (Kurtosis)
개념 분포의 꼬리 두께와 봉우리의 뾰족한 정도를 나타내는 측도입니다. 단순히 “뾰족한가”보다 이상치가 발생할 가능성(꼬리의 두꺼움)을 더 중요하게 봅니다.
해석 기준 (정규분포의 첨도 = 3을 기준으로 함)
| Mesokurtic | ≈ 3 | 정규분포와 비슷한 꼬리 |
| Leptokurtic | > 3 | 꼬리가 두껍고 봉우리가 뾰족 → 이상치 발생 가능성 높음 |
| Platykurtic | < 3 | 꼬리가 얇고 봉우리가 평평 → 이상치가 적음 |
실무에서는 초과 첨도 (Excess Kurtosis)를 더 많이 사용합니다.
- Excess Kurtosis = 0 → 정규분포 수준
- Excess Kurtosis > 0 → 두꺼운 꼬리
- Excess Kurtosis < 0 → 얇은 꼬리
수식
모집단 첨도 (Population Kurtosis)
$\beta_2 = \frac{\mu_4}{\sigma^4} = \frac{E[(X - \mu)^4]}{(E[(X - \mu)^2])^2}$
표본 첨도 (Sample Kurtosis)
$g_2 = \frac{\frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})^4}{\left(\frac{1}{n}\sum_{i=1}^{n}(x_i - \bar{x})^2\right)^2}$
편향 보정된 표본 초과 첨도:
3. 왜도와 첨도의 관계 및 활용
| 왜도 | 분포의 비대칭성 | 변수 변환(로그, Box-Cox 등) 필요 여부 판단 |
| 첨도 | 꼬리의 두께 / 이상치 위험 | 리스크 관리, 이상치 탐지, 정규성 검토 |
정규성 검토 시
- 왜도가 0에 가깝고
- 초과 첨도가 0에 가까우면 → 정규분포에 가깝다고 판단하는 근거로 사용합니다.
4. 한눈에 보는 요약
- 왜도: 분포가 한쪽으로 기울어진 정도
- >0 > 0 : 오른쪽 꼬리
- <0 < 0 : 왼쪽 꼬리
- 첨도: 분포 꼬리의 두꺼운 정도
- >3 > 3 (또는 초과 첨도 >0 > 0 ): 두꺼운 꼬리 (이상치 많음)
- <3 < 3 : 얇은 꼬리
두 지표 모두 적률(moment)을 기반으로 계산되며, 데이터가 정규분포 가정에서 얼마나 벗어나 있는지를 파악하는 데 핵심적으로 사용됩니다.
불균형 데이터(Imbalanced Data) 처리
학부 수준에서 다루는 내용을 중심으로 체계적으로 정리하겠습니다.
1. 불균형 데이터란?
분류 문제에서 한 클래스의 데이터가 다른 클래스에 비해 현저히 많은 경우를 말합니다.
예시
- 사기 거래 탐지: 정상 거래 99.9%, 사기 거래 0.1%
- 질병 진단: 정상 95%, 환자 5%
- 이탈 예측: 잔존 고객 90%, 이탈 고객 10%
소수 클래스를 Positive(관심 클래스), 다수 클래스를 Negative라고 부릅니다.
2. 불균형 데이터의 문제점
(1) 모델 학습의 문제
- 모델이 다수 클래스만 잘 맞추면 전체 정확도가 높게 나옴
- 소수 클래스를 거의 무시하는 방향으로 학습됨
- 실제로는 소수 클래스를 잘 찾아내는 것이 목적인 경우가 많음
(2) 성능 측정(평가 지표)의 문제
| Accuracy (정확도) | 다수 클래스만 맞춰도 높게 나옴 → 가장 큰 함정 |
| Precision / Recall | 하나만 보면 왜곡될 수 있음 |
| F1-Score | 불균형 상황에서 더 적합한 지표 |
| ROC-AUC | 비교적 괜찮지만, 극심한 불균형에서는 PR-AUC가 더 적절 |
| Confusion Matrix | 반드시 함께 확인해야 함 |
예시 데이터 비율 99:1일 때, 모든 데이터를 다수 클래스로 예측해도 Accuracy 99%가 나옴. 하지만 소수 클래스는 하나도 맞추지 못한 상태입니다.
3. 불균형 데이터 처리 방법
크게 데이터 수준 처리와 알고리즘 수준 처리로 나뉩니다.
(1) 데이터 수준 처리 방법
① 고정 비율 방법 (Fixed Ratio Method)
원하는 클래스 비율을 미리 정해놓고 맞추는 방법입니다.
- Under-sampling (과소표본추출) 다수 클래스 데이터를 줄여서 비율을 맞춤
- 장점: 학습 속도 빠름
- 단점: 정보 손실 발생
- Over-sampling (과대표본추출) 소수 클래스 데이터를 늘려서 비율을 맞춤
- 단순 복제(Random Over-sampling): 과적합 위험
- SMOTE: 소수 클래스 사이사이에 새로운 데이터를 선형으로 생성 (가장 대표적)
고정 비율의 예
- 1:1로 맞춤
- 1:2, 1:3 등으로 맞춤
② 최적 비율 방법 (Optimal Ratio Method)
고정된 비율 대신, 여러 비율을 실험해서 성능이 가장 좋은 비율을 찾는 방법입니다.
- 1:1, 1:2, 1:3, 1:5, 2:1 등 다양한 비율로 샘플링
- 교차검증으로 F1-score나 PR-AUC를 비교
- 가장 성능이 좋은 비율을 최종 선택
③ 기타 데이터 수준 방법
- SMOTE + Under-sampling 조합 (실무에서 자주 사용)
- Tomek Links, Edited Nearest Neighbors 등 경계 정리 기법
- ADASYN (SMOTE의 발전형)
smote란?
1. SMOTE가 나온 이유
기존의 Random Over-sampling은 소수 클래스 데이터를 단순히 복제합니다. 이 방식은 다음과 같은 문제가 있습니다.
- 같은 데이터가 여러 번 반복되어 과적합이 심하게 발생
- 결정 경계가 제대로 학습되지 않음
- 소수 클래스의 다양성이 전혀 늘어나지 않음
SMOTE는 이 문제를 해결하기 위해, 실제로 존재하지 않는 새로운 소수 클래스 데이터를 인위적으로 생성하는 방법을 제안했습니다. (2002년 Chawla et al.)
2. SMOTE의 작동 원리
SMOTE의 핵심 아이디어는 다음과 같습니다.
“소수 클래스 데이터 사이에 선을 긋고, 그 선 위의 점을 새로운 데이터로 만든다.”
구체적인 단계
- 소수 클래스에 속한 한 샘플 $ x_i $를 선택한다.
- $ x_i $의 K-최근접 이웃(보통 K=5) 중 소수 클래스에 속하는 이웃들을 찾는다.
- 그 이웃 중 하나를 랜덤하게 선택한다. (이를 $ x_{zi} $라고 함)
- $ x_i $와 $ x_{zi} $ 사이를 잇는 선분 위에서 랜덤한 위치의 점을 새로운 샘플로 생성한다.
생성 공식
- $ \delta $: 0과 1 사이의 랜덤한 실수
- $ x_{new} $: 새롭게 생성된 합성 샘플
이 과정을 원하는 수만큼 반복하여 소수 클래스 데이터를 늘립니다.
3. 직관적으로 이해하기
- 소수 클래스 점들이 서로 가까이 있으면 → 그 사이를 채워주는 효과
- 단순히 복제하는 것이 아니라 보간(interpolation)을 하기 때문에, 데이터 공간상에서 소수 클래스의 영역을 더 풍부하게 만들어 줌
- 결과적으로 분류기가 소수 클래스의 결정 경계를 더 잘 학습할 수 있게 됨
4. SMOTE의 장점
- 단순 복제보다 과적합 위험이 훨씬 낮음
- 소수 클래스의 결정 공간을 확장시켜 줌
- 구현이 비교적 간단하고 효과가 검증되어 있음
- 대부분의 경우 Random Over-sampling보다 성능이 좋음
5. SMOTE의 단점과 한계
| 노이즈 증폭 | 이상치(노이즈) 근처에 있는 소수 클래스 샘플을 기준으로 생성하면, 노이즈가 더 늘어날 수 있음 |
| 경계 모호성 | 다수 클래스와 겹치는 영역의 데이터를 기준으로 생성하면 클래스 간 경계가 더 혼란스러워질 수 있음 |
| 고차원에서 성능 저하 | 차원이 매우 높아지면 거리 개념이 무의미해져서 효과가 떨어짐 (차원의 저주) |
| 범주형 변수 처리 약함 | 기본적으로 연속형 변수 기준이라, 범주형 변수가 있으면 별도 처리 필요 (SMOTE-NC 등) |
6. 주요 변형 기법들
SMOTE의 단점을 보완하기 위해 여러 변형이 나왔습니다.
- Borderline-SMOTE: 결정 경계 근처에 있는 소수 클래스 샘플만 집중적으로 사용해 생성
- ADASYN: 학습하기 어려운 샘플(다수 클래스에 둘러싸인 샘플)에 더 많은 가중치를 두고 생성
- Safe-Level SMOTE: 안전한 영역에 있는 샘플을 중심으로 생성
- SMOTE-ENN / SMOTE-Tomek: SMOTE로 생성한 후, 정리 기법(ENN, Tomek Links)으로 노이즈를 제거
실무에서는 순수 SMOTE보다 SMOTE + Under-sampling 조합이나 Borderline-SMOTE, ADASYN을 더 자주 사용하는 편입니다.
7. 사용 시 핵심 주의사항
- 반드시 훈련 데이터에만 적용해야 합니다. (테스트 데이터에 적용하면 데이터 누수가 발생)
- 교차검증을 할 때는 Fold 안에서 SMOTE를 적용해야 합니다. (미리 전체 데이터에 SMOTE를 하고 나누면 안 됨)
- K값(최근접 이웃 수)은 보통 5를 사용하지만, 데이터 특성에 따라 조정이 필요합니다.
- 생성 비율을 너무 높이면 (예: 1:1까지 무리하게) 오히려 성능이 떨어질 수 있습니다.
요약
SMOTE는 소수 클래스 샘플과 그 이웃 사이를 보간하여 새로운 합성 데이터를 생성하는 오버샘플링 기법입니다.
- 단순 복제의 과적합 문제를 크게 개선
- 가장 기본이 되면서도 여전히 강력하게 사용되는 방법
- 노이즈와 경계 문제에 주의하면서, 필요시 변형 기법이나 언더샘플링과 조합해서 사용하는 것이 좋습니다.
(2) 알고리즘 수준 처리 방법
① 클래스 가중치 부여 (Class Weight)
- 손실 함수에서 소수 클래스에 더 큰 가중치를 줌
- class_weight='balanced' 옵션으로 쉽게 적용 가능
- 데이터를 직접 변형하지 않아서 정보 손실이 없음
② 임계값 조정 (Threshold Moving)
- 기본 임계값 0.5 대신, 더 낮은 값(예: 0.3)을 사용해 소수 클래스를 더 잘 잡도록 조정
③ 앙상블 기반 방법
- EasyEnsemble, BalanceCascade 등
- 다수 클래스를 여러 개로 나눠서 각각 학습 후 결합
4. 학부 수준에서 자주 나오는 처리 방법 정리
| Random Under-sampling | 데이터 | 다수 클래스 줄임 | 빠름 | 정보 손실 |
| Random Over-sampling | 데이터 | 소수 클래스 복제 | 구현 쉬움 | 과적합 |
| SMOTE | 데이터 | 소수 클래스 사이 보간 생성 | 과적합 완화 | 노이즈 증가 가능 |
| 고정 비율 샘플링 | 데이터 | 미리 정한 비율로 맞춤 | 직관적 | 최적 비율이 아닐 수 있음 |
| 최적 비율 탐색 | 데이터 | 여러 비율 실험 후 선택 | 성능 향상 가능 | 시간 소요 |
| Class Weight | 알고리즘 | 소수 클래스에 가중치 | 데이터 유지 | 모델 지원 필요 |
| Threshold 조정 | 알고리즘 | 결정 경계 이동 | 간단 | 최적값 탐색 필요 |
5. 실무·시험에서의 권장 흐름 (학부 수준)
- 평가 지표 변경: Accuracy 대신 F1-score, Recall, PR-AUC 사용
- 기본 처리: Class Weight 적용해보기
- 데이터 처리: SMOTE 또는 Under-sampling으로 고정 비율(1:1 또는 1:2) 적용
- 성능 비교: 여러 비율을 시도해 최적 비율 탐색
- 최종 확인: Confusion Matrix와 Recall을 반드시 함께 확인
핵심 요약
- 불균형 데이터는 Accuracy가 높은 척도가 되지 못한다는 것이 가장 큰 문제
- 처리 방법은 데이터를 직접 바꾸는 방법과 알고리즘에 가중치를 주는 방법으로 나뉨
- 고정 비율 방법: 미리 정한 비율로 맞춤
- 최적 비율 방법: 여러 비율을 실험해서 가장 좋은 것을 선택
- 학부 수준에서는 SMOTE, Under/Over-sampling, Class Weight, F1-score 이 네 가지가 핵심입니다.
'AI > 확률|통계 기반' 카테고리의 다른 글
| 고급데이터 탐색 (0) | 2026.08.08 |
|---|---|
| 상관분석과 기초통계 분석 이해 (0) | 2026.08.08 |
| 통계값을 활용한 데이터 탐색 (EDA) 개요 (0) | 2026.08.08 |
| 차원 축소(Dimensionality Reduction)에 대해 (0) | 2026.08.08 |
| 분석 변수 처리 방법과 이론들 (0) | 2026.08.08 |