CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
  • Week 1
    • 1.ML 수명주기(ML Lifecycle): 비즈니스 문제 정의부터 A/B 테스트까지
    • 2.ML용 데이터 저장소: S3·EFS·FSx for Lustre·데이터 포맷
    • 3.데이터 수집: Kinesis·Glue·배치 vs 스트리밍
    • 4.데이터 레이블링: SageMaker Ground Truth·액티브 러닝(Active Learning)·레이블 품질
    • 5.1주차 종합 복습: ML 개요와 데이터 엔지니어링 1
  • Week 2
  • Week 3
    • 1.데이터 정제: 결측치·이상치 탐지·중복과 오류 처리
    • 2.특성 공학: 스케일링, 인코딩, 비닝
    • 3.시계열·텍스트 피처와 고카디널리티 범주형 변수 처리
    • 4.SageMaker 도구: Data Wrangler, Processing Job, Feature Store
    • 5.3주차 종합 복습: 데이터 정제와 특성 공학
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← MLS-C01/Week 3/Day 2

기준: MLS-C01 시험 가이드·오류 제보

MLS-C01· AssociateWeek 3 · Day 2읽기 약 11분
핵심 정리
  • 스케일링은 거리·기울기 기반 모델(KNN, SVM, 선형/로지스틱, 신경망, PCA)에 필수, 트리 계열엔 불필요하다.
  • 이상치가 많으면 Min-Max 대신 RobustScaler(중앙값·IQR 기반)를 쓴다.
  • 인코딩은 순서가 있으면 Ordinal, 없으면 One-Hot, 고카디널리티면 Target/Hashing/임베딩.
  • 타깃 인코딩은 강력하지만 타깃 누수 위험이 있다. K-fold나 스무딩이 필요하다.
  • 비닝은 선형 모델에 비선형성을 주지만 정보 손실을 감수한다. 공통 원칙은 모든 변환을 학습셋으로만 fit.

Day 2 - 특성 공학: 스케일링, 인코딩, 비닝

스케일링: 정규화 vs 표준화

정제로 데이터를 깨끗하게 만들었다면 이제 모델이 잘 학습할 수 있는 형태로 변형할 차례다. 특성 공학은 흔히 "모델 성능의 80%를 좌우한다"고 말할 정도로 ML 파이프라인에서 비중이 크다.

많은 알고리즘이 피처의 스케일(크기)에 민감하다. 나이(0~100)와 소득(0~1억)을 그대로 넣으면 거리·기울기 계산에서 소득이 압도한다.

기법변환식결과 범위이상치 영향언제 쓰나
Min-Max 정규화(x − min) / (max − min)[0, 1]매우 민감범위를 딱 맞춰야 할 때(이미지 픽셀 등)
표준화 (Z-score)(x − μ) / σ평균 0, 분산 1민감선형모델·신경망의 기본
RobustScaler(x − 중앙값) / IQR가변강건이상치가 많을 때
MaxAbsx / |max|[−1, 1]민감희소 행렬에서 0을 유지해야 할 때
로그 변환log(1+x)가변꼬리 압축오른쪽으로 긴 꼬리 분포
  • 스케일링이 필수인 알고리즘: 거리 기반(KNN, K-means), 기울기 기반(선형/로지스틱 회귀, 신경망), 정규화 항이 있는 모델(Ridge/Lasso), SVM, PCA.
  • 스케일링이 불필요한 알고리즘: 트리 기반(Decision Tree, Random Forest, XGBoost, LightGBM). 트리는 한 피처 안에서의 분할 기준점만 보므로 단조 변환에 불변이다.
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
 
# 표준화: 신경망/선형모델 기본
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)   # fit 아님!
 
# 이상치가 많으면 RobustScaler
robust = RobustScaler()
X_train_robust = robust.fit_transform(X_train)
[스케일이 제각각일 때]        [표준화 후]
 손실 함수 등고선이            등고선이 원에 가까워짐
 길쭉한 타원                  ↓
      ╱╲                     ╭─╮
   ╱      ╲   지그재그 수렴   │ ●│  최단 경로로 수렴
  ╲      ╱                   ╰─╯
      ╲╱

경사 하강법이 스케일에 민감한 이유는 손실 함수의 등고선 모양 때문이다. 피처 스케일이 제각각이면 등고선이 길쭉한 타원이 되어, 기울기가 최솟값을 향해 지그재그로 느리게 수렴한다. 표준화로 모든 피처를 같은 스케일로 맞추면 등고선이 원에 가까워져 수렴이 빠르고 안정적이다. 거리 기반 모델(KNN, K-means)에서는 유클리드 거리가 큰 스케일 피처에 지배되는 것을 막는 효과가 있다.

⚠️ 함정: 스케일러도 imputer와 똑같이 학습셋으로만 fit해야 한다. 테스트셋의 min/max/평균을 쓰면 누수다. 또한 Min-Max는 이상치 하나가 max를 끌어올려 나머지 값을 0 근처로 압축해 버리므로, 이상치가 의심되면 RobustScaler가 안전하다.

인코딩: 범주형을 숫자로

대부분의 알고리즘은 숫자만 입력으로 받으므로 범주형(categorical) 변수를 숫자로 바꿔야 한다.

인코딩방법적합주의
Label Encoding범주 → 정수(0,1,2…)순서형(ordinal), 트리 모델명목형에 쓰면 가짜 순서 부여
One-Hot Encoding범주마다 0/1 컬럼 생성명목형(nominal), 저카디널리티고카디널리티에서 차원 폭발
Ordinal Encoding의미 있는 순서로 정수 매핑등급(low/mid/high)순서가 진짜일 때만
Target Encoding범주를 타깃 평균으로 치환고카디널리티누수·과적합 위험
Frequency Encoding범주를 빈도로 치환고카디널리티빈도 같으면 충돌
Feature Hashing해시로 고정 차원에 매핑미지의 범주·스트리밍충돌 발생
Embedding신경망이 저차원 밀집 벡터 학습초고카디널리티, 딥러닝학습 데이터·네트워크 필요

인코딩 결정 트리

순서가 있는가?
├─ 예 → Ordinal / Label Encoding  (low < mid < high)
└─ 아니오 → 고유값이 몇 개인가?
             ├─ 적다(수십 이하) → One-Hot
             └─ 많다(수천 이상) → Target / Frequency / Hashing / Embedding
                                   · 누수 주의(Target)
                                   · 충돌 감수(Hashing)
                                   · 딥러닝이면 Embedding

핵심 구분은 순서가 있는가다. 등급(낮음<중간<높음)이면 Ordinal/Label이 자연스럽고, 색깔(빨강/파랑/초록)처럼 순서가 없으면 One-Hot이 맞다. 선형 모델에 색깔을 Label Encoding(빨강=0, 파랑=1, 초록=2)하면 "초록 > 파랑 > 빨강"이라는 거짓 순서가 생긴다.

from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder
 
# 명목형: 원핫
ohe = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
X_color = ohe.fit_transform(df[["color"]])
 
# 순서형: 명시적 순서로 ordinal
oe = OrdinalEncoder(categories=[["low", "mid", "high"]])
df["level_enc"] = oe.fit_transform(df[["level"]])

타깃 인코딩은 강력하지만 위험하다.

# 타깃 인코딩 (누수 방지를 위해 학습셋 fold로만 통계 산출)
means = X_train.groupby("city")["target"].mean()
X_train["city_te"] = X_train["city"].map(means)
X_test["city_te"] = X_test["city"].map(means)   # 학습셋 통계 적용

타깃 인코딩은 고카디널리티(예: 우편번호 수천 개)에서 원핫의 차원 폭발을 피하면서 타깃과의 관계를 한 컬럼에 압축한다. 그러나 같은 데이터의 타깃으로 피처를 만들면 모델이 정답을 엿보는 타깃 누수가 생긴다. 이를 막으려고 K-fold 타깃 인코딩(각 fold의 통계를 다른 fold로 산출)이나 스무딩(전체 평균과 범주 평균을 표본 수로 가중)을 쓴다. 시험에서는 "고카디널리티 → 원핫은 차원 폭발, 타깃 인코딩은 누수 주의"라는 트레이드오프가 핵심이다.

⚠️ 함정: One-Hot 인코딩 시 테스트셋에 학습 때 못 본 새 범주가 나오면 에러가 난다. handle_unknown="ignore"로 미지의 범주를 모두 0 벡터로 처리하도록 설정해야 운영에서 안전하다.

표본이 극히 적은 범주(예: 그 도시의 데이터가 3건)에 타깃 인코딩을 그대로 적용하면 값이 극단적으로 튄다. 스무딩으로 전체 평균 쪽으로 끌어당겨야 한다.

비닝(Binning): 연속값을 구간으로

비닝은 연속형 변수를 구간(bin)으로 나눠 범주형처럼 다루는 기법이다.

방식설명예시주의
등폭(equal-width)값 범위를 동일 폭으로 분할0–10, 10–20, 20–30치우친 분포면 한 구간에 몰림
등빈도(equal-frequency)각 구간에 같은 수의 샘플사분위수 기반경계가 데이터에 의존
도메인 기반의미 있는 경계로 분할나이 → 미성년/청년/중년/노년도메인 지식 필요

비닝의 효과:

  • 비선형 관계 포착: 선형 모델이 "나이가 30~40에서 구매율 급증" 같은 비선형 패턴을 구간 더미로 학습할 수 있다.
  • 이상치·노이즈 완화: 극단값이 같은 최상위 구간에 묶여 영향이 줄어든다.
  • 해석 용이성: "고소득 구간"이 연속 소득보다 설명하기 쉽다.

단점은 정보 손실이다. 구간 내 미세한 차이가 사라진다.

import pandas as pd
 
# 등폭 비닝
df["age_bin"] = pd.cut(df["age"], bins=[0, 18, 35, 60, 120],
                       labels=["minor", "young", "middle", "senior"])
 
# 등빈도 비닝 (사분위)
df["income_q"] = pd.qcut(df["income"], q=4, labels=["Q1", "Q2", "Q3", "Q4"])

비닝은 모델의 편향-분산 트레이드오프를 조정하는 도구다. 연속값을 그대로 쓰면 선형 모델은 단조 직선 관계만 표현하지만(높은 편향), 구간 더미로 바꾸면 각 구간에서 독립적인 효과를 학습해 비선형성을 잡는다(편향 감소). 다만 구간을 너무 잘게 나누면 각 구간의 표본이 적어져 추정이 불안정해진다(분산 증가). 등빈도 비닝은 각 구간 표본 수를 균등하게 해 이 분산 문제를 완화한다.

트리·부스팅 모델에 비닝을 적용해도 얻는 것이 거의 없다. 트리는 이미 분할점을 스스로 찾아 비선형성을 표현하기 때문이다. "어떤 전처리가 효과가 작은가"를 묻는 문제에서는 모델 종류가 곧 단서다.

파생 피처: 상호작용과 다항

스케일링·인코딩·비닝이 "형태를 바꾸는" 작업이라면, 파생 피처는 "없던 신호를 만드는" 작업이다.

  • 비율 피처: 금액 그 자체보다 금액 / 평균금액, 부채 / 소득이 더 강한 신호일 때가 많다.
  • 상호작용 피처: 두 피처의 곱(나이 × 소득)으로 "고소득 중년"처럼 조합 효과를 표현한다.
  • 다항 피처: x², x³를 추가해 선형 모델이 곡선 관계를 표현하게 한다.
  • 집계 피처: 사용자별 최근 30일 평균 구매액처럼 그룹 통계를 붙인다.

다항·상호작용은 차원을 빠르게 늘려 과적합을 부른다. 피처 3개에 2차 다항을 걸면 10개가 되고, 10개면 66개가 된다. 정규화(Ridge/Lasso)와 함께 쓰거나, 트리 모델이라면 애초에 필요 없는 경우가 많다.

집계 피처는 집계 시점을 잘못 잡으면 누수가 된다. "이 사용자의 전체 기간 평균 구매액"은 예측 시점 이후 데이터를 포함할 수 있다. 반드시 예측 시점 이전 데이터만으로 집계해야 한다.

특성 선택: 많다고 좋은 게 아니다

피처를 만들었으면 줄이는 일도 해야 한다. 불필요한 피처는 과적합·학습 시간·해석 난이도를 모두 키운다.

방식방법특징
필터(filter)상관계수, 분산, 카이제곱 등 통계로 사전 선별빠르지만 모델과 무관
래퍼(wrapper)전진 선택·후진 제거로 실제 성능을 보며 선택정확하지만 비용이 크다
임베디드(embedded)모델 학습 중 자동 선택(Lasso, 트리 중요도)실용적, 모델에 특화됨
  • 다중공선성: 서로 강하게 상관된 피처가 여럿이면 선형 모델의 계수 해석이 불안정해진다. 하나만 남기거나 PCA로 합친다.
  • 상수·준상수 컬럼: 값이 거의 하나뿐인 컬럼은 정보가 없으니 제거한다.
  • ID 컬럼: 사용자 ID를 그대로 넣으면 모델이 개별 행을 외우는 과적합이 생긴다. 임베딩이나 집계로 바꿔야 한다.

모델별 전처리 요구 정리

모델스케일링원핫비닝결측 대치
선형/로지스틱 회귀필수필수(명목형)도움 됨필요
SVM필수필수도움 됨필요
KNN / K-means필수필수보통필요
신경망필수필요(또는 임베딩)보통필요
PCA필수필요부적합필요
Decision Tree / RF불필요필요(숫자 입력)효과 작음필요
XGBoost / LightGBM불필요필요(숫자 입력)효과 작음필요(일부 자체 처리)

다음 글에서는 날짜·텍스트 같은 특수 데이터의 특성 공학과 고차원 범주형 처리를 본다.

📖 용어

  • 특성 공학(feature engineering) : 원시 데이터를 모델이 잘 학습할 수 있는 입력 피처로 바꾸는 작업.
  • 정규화(Min-Max) : 값을 [0,1] 범위로 눌러 담는 스케일링. 이상치에 매우 민감하다.
  • 표준화(Z-score) : 평균 0, 분산 1이 되도록 바꾸는 스케일링. 선형모델·신경망의 기본.
  • RobustScaler : 중앙값과 IQR을 써서 이상치에 강건하게 스케일을 맞추는 방법.
  • 단조 변환에 불변 : 값의 크기 순서만 유지되면 결과가 같은 성질. 트리 모델이 여기에 해당한다.
  • 명목형 / 순서형 : 순서가 없는 범주(색깔) / 순서가 있는 범주(등급).
  • 카디널리티(cardinality) : 범주형 변수의 고유값 개수. 수천 개면 고카디널리티다.
  • Target Encoding : 범주를 그 범주의 타깃 평균으로 바꾸는 인코딩. 누수에 주의해야 한다.
  • 타깃 누수 : 예측하려는 정답 정보가 피처에 섞여 들어가 성능이 부풀려지는 사고.
  • 비닝(binning) : 연속값을 구간으로 묶어 범주처럼 다루는 기법. 비선형성을 얻고 정보를 잃는다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 입력 피처 스케일링이 필요 없는 알고리즘은?

문제 2

"색깔(빨강/파랑/초록)"처럼 순서가 없는 명목형 변수를 선형 회귀에 넣으려 한다. 가장 적절한 인코딩은?

문제 3

우편번호처럼 수천 개의 고유값을 가진 고카디널리티 범주형 변수를 인코딩할 때, 차원 폭발을 피하지만 데이터 누수에 주의해야 하는 기법은?

문제 4

Min-Max 정규화를 사용할 때 한 변수에 극단적 이상치가 존재한다. 이때 발생하는 문제와 대안으로 옳은 것은?

문제 5

선형 모델이 "나이가 특정 구간에서 구매율이 급변하는" 비선형 관계를 포착하도록 돕는 특성 공학 기법은?

이전데이터 정제: 결측치·이상치 탐지·중복과 오류 처리Week 3 · Day 1다음 시계열·텍스트 피처와 고카디널리티 범주형 변수 처리Week 3 · Day 3

참고 공식 자료

  • MLS-C01 공식 시험 안내(새 탭에서 열림)

이 페이지

  • 스케일링: 정규화 vs 표준화
  • 인코딩: 범주형을 숫자로
  • 인코딩 결정 트리
  • 비닝(Binning): 연속값을 구간으로
  • 파생 피처: 상호작용과 다항
  • 특성 선택: 많다고 좋은 게 아니다
  • 모델별 전처리 요구 정리
  • 용어
  • 연습 문제