데이터 전처리란?
불필요하거나 손실이 있는 부분을 처리하고 분석 목적에 맞는 형태로 만드는 과정
결측치 처리 기법
1. 삭제
: 결측치가 있는 행(row) 또는 열(column)을 제거
→ 간단하지만 데이터 손실이 발생
→ 결측치가 전체 데이터에서 매우 소수일 때 적합
2. 대체
: 평균 또는 중앙값으로 대체
>> 수치형 데이터에서 많이 사용, 데이터 분포 왜곡이 비교적 적음
: 최빈값으로 대체
>> 범주형 데이터에서 사용
: 예측 모델로 대체
>>회귀/분류 모델을 이용해 결측값을 예측
결측치 처리 코드
# 2) 결측치 제거 (결측이 하나라도 있으면 해당 행을 제거)
df_drop = df.dropna()
df_drop
# 3) 평균값으로 대치
df_mean = df.copy()
df_mean = df_mean.fillna(df_mean.mean(numeric_only=True))
df_mean
# 4) 중앙값으로 대치
df_median = df.copy()
df_median = df_median.fillna(df_median.median(numeric_only=True))
df_median
# 5) 최빈값으로 대치
# - DataFrame의 mode()는 각 열별로 최빈값을 반환합니다.
# - mode() 결과가 여러 개(동률)일 경우 첫 번째 행의 값을 취합니다.
df_mode = df.copy()
print(df_mode.mode()) # 확인용
mode_values = df_mode.mode().iloc[0] # 첫 번째 행(가장 상위 mode)만 취함
df_mode = df_mode.fillna(mode_values)
df_mode
이상치 탐지 기법
1. 통계적 기법
: 데이터가 정규분포를 따른다고 가정하고, 평균에서 ±3σ(표준편차) 범위를 벗어나는 값을 이상치로 간주
: 직관적이고 간단하나, 정규성 가정이 틀릴 수 있음
2. 박스플롯 기준
: 사분위수(IQR = Q3 - Q1)를 이용해 ‘Q1 - 1.5×IQR’, ‘Q3 + 1.5×IQR’를 벗어나는 데이터를 이상치로 간주
: 분포 특성에 영향을 적게 받는 장점
3. 머신러닝 기반
: 이상치 탐지 알고리즘 (Isolation Forest, DBSCAN 등)
: 복합적 패턴을 고려할 수 있음
정규화/표준화
필요한 이유
1. 모델(특히 거리 기반 알고리즘, 딥러닝 등)에 따라 특정 변수의 스케일이 크게 영향을 미칠 수 있음
2. 센서 A는 값 범위가 0~1000, 센서 B는 값 범위가 0~1이라면, A가 모델에 더 큰 영향을 줌
[정규화]
MinMaxScaler : 모든 값을 0과 1사이로 매핑
- 값의 스케일이 달라도 공통 범위로 맞출 수 있음
- 딥러닝(신경망), 이미지 처리 등에서 입력값을 0~1로 제한해야 하거나, 각 특성이 동일한 범위 내 있어야 하는 경우 자주 사용
- 거리 기반 알고리즘(유클리디안 거리 사용)이나, 각 특성의 범위를 동일하게 맞춤으로써 계산 안정성을 높이고 싶을 때
- 최소값·최대값이 극단값(Outlier)에 민감. 만약 극단치가 있으면 대부분의 데이터가 [0, 1] 구간 내부 한쪽에 치우침
- 새로운 데이터가 기존 최대값보다 커지거나, 최소값보다 작아지는 경우, 스케일링 범위를 벗어날 수 있어 재학습하거나 다른 처리가 필요
[표준화]
StandardScaler: 평균을 0, 표준편차로 1로 만듦
- 분포가 정규분포에 가깝게 변형됨
- 평균이 0, 표준편차가 1로 맞춰지므로, 정규분포 가정을 사용하는 알고리즘(선형회귀, 로지스틱회귀, SVM 등)에 자주 쓰임
- 변환된 값들이 이론적으로 -∞ ~ +∞ 범위를 가질 수 있습니다
- 데이터가 특정 구간([0, 1] 등)에 고정되지는 않습니다
- 데이터 분포가 심하게 치우쳐 있으면, 평균과 표준편차만으로는 충분한 스케일링이 되지 않을 수 있습니다(로그 변환, RobustScaler 등 추가 고려)
불균형 데이터 처리
불균형 데이터란? 정상 99%, 불량 1%처럼 한 클래스가 극도로 적은 경우
해결 기법
1. Oversampling
- Random Oversampling : 소수 클래스의 데이터를 단순 복제하여 개수를 늘림
- SMOTE : 소수 클래스를 "무작정 복사"만 하는 게 아니라, “비슷한” 데이터들을 서로 섞어서(Interpolation) 새로운 데이터 생성
2. Undersampling
- 다수 클래스 데이터를 줄이는 방식
- 데이터 손실 위험이 있지만, 전체 데이터 균형을 맞출 수 있음
3. 혼합 기법
- SMOTE와 언더샘플링을 적절히 섞어서 사용
범주형 데이터 변환
원-핫 인코딩
- 범주형 변수를 각각의 범주별로 새로운 열로 표현, 해당 범주에 해당하면 1, 아니면 0
- 장점: 범주 간 서열 관계가 없을 때 사용하기 좋음
- 단점: 범주가 매우 많으면 차원이 커짐
레이블 인코딩
- 범주를 숫자로 직접 맵핑
- 단순하지만, 모델이 숫자의 크기를 서열 정보로 잘못 해석할 수 있음
피처 엔지니어링
모델 성능 향상을 위해 기존 데이터를 변형, 조합하여 새로운 특성을 만드는 작업
예시)
1. 날짜파생변수
2. 수치형 변수 조합
3. 로그 변환, 제곱근 변환 등
변수 선택
1. 상관관계
- 두 변수 간 상관도가 높은 상황인 경우 다중공선성 의심
2. VIF
- 회귀분석에서 다중공선성 문제를 파악할 때 사용
- VIF는 어떤 변수 하나가, 다른 변수들과 얼마나 겹치는지(상관이 큰지) 수치로 보여주는 지표
- VIF가 일정 기준(예: 10 이상)을 넘으면 해당 변수를 제거하거나 비슷한 변수들을 합치는 등의 방법으로 문제를 해결
3. 모델 기반 중요도
- 트리 기반 모델(랜덤 포레스트, XGBoost 등)을 훈련 후 중요도가 낮은 변수를 제거
'TIL' 카테고리의 다른 글
| TIL - 실무에 쓰는 머신러닝 기초 1-4 (1) | 2025.03.18 |
|---|---|
| TIL - 실무에 쓰는 머신러닝 기초 1-3 (0) | 2025.03.17 |
| TIL - 실무에 쓰는 머신러닝 기초 1-1 (0) | 2025.03.12 |
| TIL - 실전 프로젝트 (0) | 2025.03.07 |
| TIL - 실전 프로젝트 (0) | 2025.03.06 |