티스토리 뷰
머신러닝 기초학습 4: 데이터 전처리와 피처 엔지니어링 — 모델이 이해할 수 있는 데이터로 바꾸는 기술
“Garbage in, garbage out.”
아무리 좋은 알고리즘도, 나쁜 데이터를 넣으면 결과는 엉망이 됩니다.
머신러닝에서 모델보다 더 중요한 건 사실 데이터 전처리(Data Preprocessing) 와 피처 엔지니어링(Feature Engineering) 이죠.
이번 글에서는 “데이터를 모델이 이해할 수 있는 형태로 바꾸는 기술”을 이론과 코드로 함께 다룹니다.
1. 데이터 전처리란 무엇인가?
데이터 전처리(Data Preprocessing) 는 원본 데이터를 모델에 넣기 전에
결측치, 이상치, 스케일 차이, 범주형 변수 등 문제들을 처리해
“학습 가능한 형태로 정제(cleaning)” 하는 과정입니다.
머신러닝 모델은 수치만 이해할 수 있습니다.
따라서 텍스트, 범주, 결측값 등은 모두 ‘수치화’되어야 하죠.
2. 데이터 전처리의 4대 단계
단계 설명 예시
| ① 결측치 처리 | 빠진 값(NaN) 보정 | 평균, 중앙값, 최빈값 대체 |
| ② 이상치 처리 | 극단적인 값 제거/보정 | IQR, Z-score, 도메인 룰 |
| ③ 스케일링 | 값의 단위 차이 보정 | StandardScaler, MinMaxScaler |
| ④ 인코딩 | 문자를 숫자로 변환 | One-Hot, Label, Target Encoding |
3. 결측치 처리 (Missing Value Imputation)
데이터에 값이 비어 있으면 모델은 계산을 멈춥니다.
따라서 결측치를 반드시 채워 넣거나 제거해야 합니다.
예시 코드
import pandas as pd
from sklearn.impute import SimpleImputer
data = pd.DataFrame({
"age": [25, 30, None, 40],
"salary": [5000, None, 7000, 8000]
})
imputer = SimpleImputer(strategy='mean') # 평균으로 대체
data_imputed = pd.DataFrame(imputer.fit_transform(data), columns=data.columns)
print(data_imputed)
결과
age salary
0 25.0 5000.0
1 30.0 6666.7
2 31.7 7000.0
3 40.0 8000.0
👉 평균(mean), 중앙값(median), 최빈값(mode) 등 전략은 데이터 분포에 맞게 선택합니다.
4. 이상치 처리 (Outlier Handling)
“평균을 흐리는 데이터는 제거하라.”
이상치는 데이터의 평균, 분산을 왜곡시켜 모델을 오도할 수 있습니다.
대표적인 탐지법은 IQR (사분위 범위) 와 Z-Score 방식입니다.
import numpy as np
data = np.array([10, 12, 11, 13, 12, 400]) # 400은 이상치
q1, q3 = np.percentile(data, [25, 75])
iqr = q3 - q1
lower, upper = q1 - 1.5 * iqr, q3 + 1.5 * iqr
cleaned = data[(data >= lower) & (data <= upper)]
print(cleaned)
결과: [10 12 11 13 12]
→ 극단적인 값(400)이 제거됩니다.
5. 피처 스케일링 (Feature Scaling)
“값의 단위가 다르면, 모델은 큰 숫자에 끌린다.”
예를 들어
- 키(cm) = 170
- 몸무게(kg) = 70
이면, 키가 숫자가 커서 모델이 키에만 집중할 수 있습니다.
이를 방지하려면 모든 피처의 범위를 맞춰야 합니다.
방법 설명 수식
| 표준화(Standardization) | 평균 0, 표준편차 1 | (x - μ) / σ |
| 정규화(Normalization) | 0~1 범위로 조정 | (x - min) / (max - min) |
from sklearn.preprocessing import StandardScaler, MinMaxScaler
import numpy as np
X = np.array([[170, 70], [180, 80], [160, 60]])
scaler = StandardScaler()
print(scaler.fit_transform(X)) # 표준화
6. 범주형 데이터 인코딩 (Categorical Encoding)
모델은 텍스트를 이해하지 못합니다.
따라서 문자열은 반드시 숫자로 변환해야 합니다.
방식 특징 예시
| Label Encoding | 순서가 있는 범주에 적합 | {‘low’:0, ‘mid’:1, ‘high’:2} |
| One-Hot Encoding | 순서가 없는 범주에 적합 | [1,0,0], [0,1,0], [0,0,1] |
| Target Encoding | 각 범주별 평균 타깃값 사용 | 고급 모델에서 자주 사용 |
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
df = pd.DataFrame({'city': ['서울', '부산', '대구']})
encoder = OneHotEncoder(sparse_output=False)
print(encoder.fit_transform(df[['city']]))
결과
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
7. 로그 변환 (Log Transformation)
“큰 수와 작은 수의 간극을 줄여 모델이 균형 잡히게 하자.”
급격히 커지는 값(예: 매출, 방문자 수)을 다룰 때 유용합니다.
로그(log)를 취하면 분포가 정규분포에 가까워집니다.
import numpy as np
data = np.array([10, 100, 1000, 10000])
print(np.log1p(data)) # log(1+x)
8. 파생 피처 생성 (Feature Engineering)
“기존 데이터를 조합해, 모델이 더 쉽게 학습할 수 있는 피처를 만든다.”
예시:
- (키, 몸무게) → BMI = weight / (height/100)^2
- (년, 월, 일) → 요일, 분기, 시즌
- (주소) → 도시명, 시도명
이렇게 피처를 도메인 지식으로 설계하면
단순한 모델도 훨씬 정확해집니다.
9. 피처 선택 (Feature Selection)
“모든 데이터가 도움이 되는 건 아니다.”
불필요한 피처는 오히려 과적합을 유발합니다.
따라서 중요한 변수만 남기는 것이 핵심입니다.
방법 개념 예시
| 분산 기반 선택 | 변화가 거의 없는 피처 제거 | VarianceThreshold |
| 모델 기반 중요도 | 트리 기반 모델의 feature importance 사용 | RandomForest |
| L1 규제 사용 | 불필요한 가중치를 0으로 만듦 | Lasso Regression |
from sklearn.feature_selection import VarianceThreshold
import numpy as np
X = np.array([[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]])
sel = VarianceThreshold(threshold=0.16)
print(sel.fit_transform(X))
10. 파이프라인(Pipeline)으로 자동화하기
전처리 단계를 일일이 코드로 관리하면 복잡해집니다.
그래서 scikit-learn의 Pipeline 을 사용하면
“전처리 → 학습 → 예측” 단계를 일관되게 연결할 수 있습니다.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
pipe = Pipeline([
('scaler', StandardScaler()),
('model', LogisticRegression(max_iter=200))
])
pipe.fit(X, y)
print(pipe.score(X, y))
11. 전처리의 철학
- 좋은 데이터는 모델 복잡도를 낮춘다.
- 데이터의 품질이 곧 모델의 품질이다.
- 전처리는 “AI의 문법 교정기”다.
- 피처 엔지니어링은 “AI의 어휘 확장”이다.
12. 마무리
이제 우리는 단순히 모델을 “학습시키는 사람”이 아니라
데이터를 “이해시키는 사람”이 되었습니다.
데이터 전처리는 AI와 사람 사이의 통역 과정입니다.
📘 다음 글 예고
👉 머신러닝 기초학습 5: 모델 평가와 일반화 — 과적합을 피하고 진짜 실력을 확인하는 법
학습 정확도만 보고 판단하는 건 초보의 실수입니다.
다음 글에서는 교차검증, 정규화, 평가 지표(Accuracy, Precision, Recall, F1) 등
‘모델의 진짜 성능’을 검증하는 방법을 배웁니다.
머신러닝,AI기초,데이터전처리,피처엔지니어링,결측치,이상치,스케일링,인코딩,로그변환,파이프라인
'study > ML' 카테고리의 다른 글
| 머신러닝 기초학습 6: 하이퍼파라미터 튜닝과 모델 최적화 — 모델의 ‘감’을 숫자로 조정하는 기술 (0) | 2025.11.03 |
|---|---|
| 머신러닝 기초학습 5: 모델 평가와 일반화 — 과적합을 피하고 진짜 실력을 확인하는 법 (0) | 2025.10.30 |
| 머신러닝 기초학습 3 (개정판): 비전공자도 이해하는 머신러닝 핵심 용어 사전 (0) | 2025.10.28 |
| 머신러닝 기초학습 2: 대표 ML 알고리즘—학습과 추론의 ‘방식’까지 이해하기 (0) | 2025.10.28 |
| 머신러닝 기초학습 1: 데이터가 세상을 이해하는 방식 (0) | 2025.10.28 |
- Total
- Today
- Yesterday
- LangChain
- DevOps
- REACT
- PostgreSQL
- flax
- Python
- rag
- node.js
- llm
- ai철학
- CI/CD
- JAX
- Redis
- 쿠버네티스
- seo 최적화 10개
- 웹개발
- 딥러닝
- 압박면접
- Express
- JWT
- 개발블로그
- 백엔드개발
- kotlin
- fastapi
- Prisma
- Next.js
- Docker
- nextJS
- NestJS
- SEO최적화
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
