티스토리 뷰

반응형

머신러닝 기초학습 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기초,데이터전처리,피처엔지니어링,결측치,이상치,스케일링,인코딩,로그변환,파이프라인

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함
반응형