Week 4는 탐색적 데이터 분석(EDA)의 두 번째 축인 고차원 데이터 다루기로 들어간다. 특성(feature)이 많아질수록 모델이 더 많은 정보를 갖는 것처럼 보이지만, 차원이 늘면 같은 표본 수로 채워야 할 공간의 부피가 기하급수적으로 커진다. 그 결과 데이터 포인트들이 서로 멀어지고 거리 기반 측정의 변별력이 사라진다.
증상
설명
데이터 희박화
차원이 늘수록 동일 밀도를 위해 필요한 표본이 지수적으로 증가
거리 동질화
모든 점 쌍의 거리가 비슷해져 최근접/최원접 구분이 무의미
과적합 위험
특성 수가 표본 수에 근접하면 모델이 노이즈를 외움
계산 비용
차원에 비례/제곱해 학습·추론 비용 증가
[저차원 (2D)] [고차원 (d ≫ 1)]
● ● ● ●
● ← 가깝다 ● ● ●
● ← 멀다 ● ● ●
모든 쌍의 거리가 비슷
최근접 / 최원접 구분 가능 d_max / d_min → 1
→ KNN·K-means 정상 동작 → 이웃이라는 개념이 무너짐
고차원 단위 초입방체에서 두 무작위 점 사이 거리의 최댓값과 최솟값 비율이 1에 수렴한다는 것이 차원의 저주의 수학적 핵심이다. 즉 "가장 가까운 이웃"과 "가장 먼 이웃"이 사실상 같아진다. 이 때문에 차원 축소는 단순히 계산을 줄이는 게 아니라, 거리 기반 학습이 작동하는 공간을 복원하는 의미가 있다.
적절한 k는 스크리 플롯(scree plot)이나 누적 설명 분산 곡선의 팔꿈치(elbow)로 고른다.
PCA는 데이터 공분산 행렬의 고유분해(eigendecomposition)와 동치다. 고유벡터가 주성분 방향, 고유값이 그 방향의 분산이다. 따라서 "설명 분산 비율"은 곧 각 고유값을 전체 고유값 합으로 나눈 값이다. 특이값 분해(SVD)로도 같은 결과를 얻으며, scikit-learn과 SageMaker는 대규모 데이터에서 randomized SVD를 사용해 효율을 높인다.
⚠️ 함정: PCA는 타깃을 보지 않는 비지도 변환이다. "분산이 큰 방향"이 항상 "예측에 유용한 방향"은 아니다. 분산이 작은 축에 결정적 신호가 숨어 있으면 PCA가 그것을 버릴 수 있다.
⚠️ 함정: 주성분은 원본 특성들의 선형 결합이라 물리적 의미가 사라진다. "어떤 변수가 예측에 쓰였는지 설명해야 한다"는 지문이 나오면 PCA가 아니라 특성 선택이 답이다.
perplexity는 고려할 이웃 수의 균형을 조절하며, 보통 5~50 범위에서 조정한다.
t-SNE는 고차원 거리들을 조건부 확률 분포로 바꾸고, 저차원에서 무거운 꼬리를 가진 t-분포로 같은 관계를 재현하도록 KL 발산을 최소화한다. t-분포의 무거운 꼬리가 "혼잡 문제(crowding problem)"를 완화해 군집이 뭉치지 않고 퍼지게 한다. 그러나 이 과정 때문에 클러스터 사이의 빈 공간 크기는 의미가 없다 — 시험에서 "t-SNE 결과의 클러스터 거리로 유사도를 판단하라"는 보기는 함정이다.
t-SNE는 fit_transform만 있고 학습된 매핑을 저장해 새 샘플에 적용하는 transform이 없다. "운영 중 들어오는 신규 데이터를 같은 임베딩 공간에 넣는다"는 보기는 오답이다.
차원을 줄여야 한다
├─ 결과를 변수 단위로 설명해야 하나? (규제 산업, 감사 대응)
│ ├─ 예 → 특성 선택 (원본 컬럼을 그대로 남긴다)
│ └─ 아니오 ↓
├─ 목적이 "눈으로 군집이 있는지 확인"인가?
│ ├─ 예 → t-SNE (2~3D, 시각화 전용. 모델 입력 금지)
│ └─ 아니오 ↓
├─ 관계가 대체로 선형인가?
│ ├─ 예 → PCA (표준화 → 누적 설명 분산으로 k 선택)
│ └─ 아니오 → 오토인코더 등 비선형 압축
└─ 데이터가 단일 인스턴스 메모리를 넘는가?
└─ 예 → SageMaker 내장 PCA (특성 수 많으면 randomized)
차원 축소는 고차원 문제의 해법 중 하나일 뿐이다. 시험에서는 "차원을 줄여라"가 아니라 "이 상황에 무엇이 맞는가"로 묻는다.
기법
효과
언제 쓰나
주의
표준화(Z-score)
모든 특성을 같은 스케일로
PCA·KNN·SVM·신경망 앞
학습셋으로만 fit
PCA
상관된 축을 직교 축으로 압축
특성이 많고 서로 상관 있음
해석 불가, 표준화 선행
특성 선택
무관·중복 컬럼 제거
해석이 필요, 특성 수가 관리 가능
상호작용을 놓칠 수 있음
상수·준상수 컬럼 제거
정보 없는 축 제거
어느 상황에서나 첫 단계
소수 클래스에만 값이 있는 컬럼 주의
정규화 항(L1/L2)
계수를 줄이거나 0으로
특성 수 ≳ 표본 수
스케일링 선행 필요
임베딩
고카디널리티 범주를 밀집 벡터로
딥러닝, 초고카디널리티
학습 데이터와 네트워크 필요
[고차원 원시 데이터]
│
① 분할 (train / test) ← 여기서부터 모든 fit은 학습셋만
│
② 결측 대치 · 인코딩
│
③ 표준화(StandardScaler)
│
④ ┌─ 해석 필요 ─→ 특성 선택 (원본 컬럼 유지)
└─ 해석 불필요 ─→ PCA (n_components=0.95)
│
⑤ 모델 학습 (XGBoost / 선형 / 신경망 …)
│
⑥ 테스트셋에는 ②~④에서 학습한 변환을 transform만 적용