7장. 정답 없이 배우기
이 장의 질문: 정답표가 없는 데이터에서 무엇을, 어떻게 배울 수 있는가? 무리 찾기(군집화)와 본질만 남기기(차원 축소)를 통해, "구조를 발견한다"는 학습의 또 다른 얼굴을 만난다.
전제: 3장(벡터, 기대값), 4장(과적합의 감각).
정답이 없다는 것
쇼핑몰의 고객 데이터 10만 명이 당신 앞에 있다. 구매 빈도, 평균 결제액, 방문 시간대, 카테고리 취향… 상사의 주문은 이렇다. "우리 고객이 어떤 부류들로 이루어져 있는지 알아 와요."
지도학습의 틀이 작동하지 않는다. "이 고객은 3번 부류"라는 정답이 어디에도 없다 — 애초에 부류가 몇 개인지, 무엇을 기준으로 나뉘는지조차 모른다. 그럼에도 데이터 안에는 분명히 구조가 있다. 밤에만 소액 결제하는 무리, 월초에 대량 구매하는 무리… 정답 없이 이런 구조를 찾아내는 것이 비지도학습이다.
미리 각오할 것 하나. 정답이 없으므로 채점도 애매하다. 군집이 잘 됐는지는 결국 "쓸모 있는가"로 판단하게 되며, 여기에는 사람의 해석이 개입한다. 비지도학습이 지도학습보다 "쉬운 문제"가 아니라 더 열린 문제인 이유다.
무리 찾기: k-평균
가장 널리 쓰이는 군집화 알고리즘은 어이없을 만큼 단순하다. k-평균(k-means)은 "무리가
- 중심점
개를 아무 데나 찍는다. - 배정: 각 데이터를 가장 가까운 중심에 소속시킨다.
- 갱신: 각 무리의 평균 위치로 중심을 옮긴다.
- 소속이 더 안 바뀔 때까지 2~3을 반복한다.
이 반복은 "각 점에서 소속 중심까지 거리 제곱의 총합"이라는 손실을 매 단계 줄인다 — 2장의 틀로 보면, 배정과 갱신을 번갈아 하는 것이 이 손실에 대한 최적화다(이 교대 패턴은 EM이라는 더 일반적인 알고리즘의 특수형인데, 이름만 알아 두면 충분하다).
숫자 감각을 위해 1차원 예를 굴려 보자. 데이터가
강력하지만 성격이 뚜렷한 도구다. 세 가지를 기억하라. 첫째,
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
X_scaled = StandardScaler().fit_transform(X) # 표준화: 거리의 공정성
km = KMeans(n_clusters=4, n_init=10).fit(X_scaled)
labels = km.labels_ # 각 고객의 무리 번호
# 이제 각 무리의 평균 프로필을 뽑아 '해석'하는 것이 진짜 일이다마지막 줄 주석이 핵심이다. 군집화의 산출물은 번호가 아니라 해석 — "3번 무리는 심야 소액 다빈도 구매층" — 이고, 그 해석이 마케팅 전략이 된다.
본질만 남기기: 주성분 분석
두 번째 과업은 압축이다. 특징이 100개인 데이터를 사람이 눈으로 볼 수는 없다. 그런데 특징들은 대개 서로 얽혀 있다 — 구매 빈도가 높으면 총액도 높은 식으로. 얽혀 있다는 것은 정보가 중복이라는 뜻이고, 중복이라면 더 적은 수의 축으로 거의 같은 정보를 담을 수 있다.
주성분 분석(PCA)의 질문은 이것이다. "데이터를 한 방향의 축에 투영해야 한다면, 어느 방향이 정보를 가장 덜 잃는가?" 답 — 투영했을 때 데이터가 가장 넓게 퍼지는(분산이 최대인) 방향이다. 퍼짐이 곧 '개체들을 구별해 주는 정보'이기 때문이다. 반 학생들을 한 줄로 세워 최대한 구별되게 하려면, 키가 다 비슷한 반에서는 키 순서가 아니라 몸무게 순서로 세우는 편이 낫다 — 분산이 큰 축이 정보가 많은 축이다.
그 최대 분산 방향이 제1주성분, 거기에 직각인 방향들 중 다시 분산 최대가 제2주성분… 이렇게 축을 갈아 끼운 뒤 앞쪽 몇 개만 남기는 것이 PCA다. 계산은 데이터의 공분산 구조에 대한 고유값 분해로 닫힌 형태로 풀리며(반복 최적화조차 필요 없다), 각 주성분이 전체 분산의 몇 %를 담는지도 함께 나온다 — "축 2개로 원본 분산의 83%를 보존" 같은 정직한 성적표가 붙는 압축이다.
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X_scaled) # 100차원 → 2차원
print(pca.explained_variance_ratio_) # 각 축이 담은 분산 비율
# X_2d를 산점도로 그리면 10만 고객의 지형이 한눈에 보인다PCA의 용도는 시각화만이 아니다. 노이즈 제거(작은 분산 축은 대개 잡음이다), 후속 모델의 입력 압축, 그리고 개념적으로 가장 중요한 것 — "고차원 데이터의 본질은 훨씬 낮은 차원에 산다"는 세계관의 첫 증거다. 얼굴 사진은 픽셀 수만 개짜리 벡터지만, 실제 얼굴들이 차지하는 영역은 그 광활한 공간의 얇은 막(저차원 다양체)이다. 이 막을 찾는 일이야말로 딥러닝이 하는 일이며(9장의 표현 학습), 그 막 위에서 새 점을 찍는 일이 생성 모델이다(19장). PCA는 이 원대한 이야기의 선형 버전 시제품인 셈이다.
곁가지로, 시각화 전용의 비선형 압축 도구(t-SNE, UMAP)도 있다. 무리를 예쁘게 뭉쳐 보여주는 데 탁월하지만, 무리 사이의 거리나 크기는 왜곡하므로 그림에서 그 이상을 읽으면 안 된다 — 지도가 아니라 캐리커처라고 생각하라.
정답을 스스로 만들기: 자기지도라는 다리
이 장을 닫기 전에, 1장에서 예고한 다리 하나를 놓자. 비지도 데이터(정답 없음)에 지도학습(강한 신호)의 위력을 쓰는 꼼수 — 데이터의 일부를 가리고 그것을 정답 삼는 자기지도학습이다. 문장의 다음 단어를 가리면 GPT의 학습 문제가 되고, 이미지의 일부 조각을 가리면 비전 모델의 사전학습 문제가 된다. 가린 것을 맞추려면 데이터의 구조를 깊이 이해해야 하므로, 정답표 한 장 없이도 풍부한 표현이 길러진다. 오늘날 "비지도 데이터 활용"의 주력은 사실상 이 방식이며, 7부에서 그 결실을 본다.
핵심 요약
- 비지도학습은 정답 없이 데이터의 구조를 찾는다. 채점 기준이 열려 있어 해석이 일의 절반이다.
- k-평균: 배정↔갱신의 반복으로 거리 제곱합을 줄이는 군집화.
는 사람이 정하고, 둥근 무리를 가정하며, 표준화가 사실상 필수다. - PCA: 분산이 최대인 방향들로 축을 갈아 끼워 압축한다. 보존한 분산 비율이라는 성적표가 붙는다. "고차원 데이터의 본질은 저차원에 산다"는 딥러닝적 세계관의 선형 시제품.
- 자기지도학습: 데이터 일부를 가려 정답을 자체 생산 — 비지도 데이터에 지도학습의 신호를 만드는 다리이며, GPT의 학습 방식이다.
스스로 점검
- 데이터
에 인 k-평균을 손으로 돌려 보라(중심 초기값은 자유). 25는 어디에 붙는가 — 이 결과에서 k-평균과 이상치의 관계에 대해 무엇을 알 수 있나? - 연봉(단위: 만 원)과 나이를 표준화 없이 k-평균에 넣으면 무리가 사실상 무엇만으로 나뉘게 되는가?
- "PCA는 분산 최대 방향을 찾는다"와 "분산이 곧 정보다"를 연결해 한 문단으로 설명해 보라. 분산이 큰 축이 잡음일 수도 있는 반례 상황도 하나 생각해 보라.
- 다음 문장 빈칸 채우기 문제를 풀 수 있으려면 무엇을 알아야 하는지 나열해 보라 — "어제 비가 와서 우산을 ___." 이 나열이 곧 자기지도학습이 기르는 능력의 목록이다.
다음 장에서
2부의 마지막 조각은 도구가 아니라 규율이다. 정확도 95%라는 숫자가 어떻게 당신을 속이는지, 좋은 평가 지표를 어떻게 고르는지, 실험을 어떻게 설계해야 자기기만을 피하는지 — 모델을 만드는 기술보다 오래 남을, 평가의 기술이다.