전처리·연습 문제

Fit-Transform Standardization (leakage-free) [medium]

문제 설명PROBLEM

preview

Fit-Transform Standardization [medium]

v1 표준화한 배열 에만 적용. 실전에선:

  1. Train 만으로 통계 추정 (μ,σ\mu, \sigma).
  2. 같은 통계를 train + test 모두에 적용.

이게 data leakage 방지 의 핵심. train + test 합친 전체에서 평균·분산을 계산하면 test 정보가 train 에 새어 들어감 (특히 cross-validation 에서).

수식

μjtr=1NtriXijtr,σjtr=std(X:jtr)\mu_j^\text{tr} = \frac{1}{N_\text{tr}} \sum_i X^\text{tr}_{ij}, \quad \sigma_j^\text{tr} = \text{std}(X^\text{tr}_{:j}) Xtr=(Xtrμtr)/σtr,Xte=(Xteμtr)/σtrX'_\text{tr} = (X_\text{tr} - \mu^\text{tr}) / \sigma^\text{tr}, \quad X'_\text{te} = (X_\text{te} - \mu^\text{tr}) / \sigma^\text{tr}

영분산 특성 처리

  • 어떤 열의 train std 가 0 (상수) → 나누면 NaN.
  • 관례: sigma = 1.0 로 덮어써서 해당 열은 중심화만 → 결과 = 0.

과제

함수 standardize_fit_transform(X_train, X_test) 를 완성하세요.

  • 반환: (X_train_std, X_test_std, mu, sigma).
  • 힌트:
    mu = X_train.mean(axis=0)
    sigma = X_train.std(axis=0)
    sigma = np.where(sigma > 0, sigma, 1.0)  # 영분산 방어
    return (X_train - mu) / sigma, (X_test - mu) / sigma, mu, sigma
    

테스트 케이스

#이름검증
1반환 4-tuple
2X_train 평균 ≈ 0, std ≈ 1
3X_test 는 X_train 통계로 변환 (test 자체 통계 ≠ 0/1)
4같은 stat 으로 apply → X_test+X_train 합쳐서 재계산과 다름누수 방지
5영분산 열 → 0 (NaN 없음)
6X_test=X_train 이면 결과 동일
개념 노트와 실수 포인트

데이터 전처리

  • 표준화(평균 0·분산 1) vs 정규화(0~1 범위).
  • ⚠️ train 의 통계(평균/표준편차)로 test 를 변환 — test 로 fit 하면 데이터 누수.