주성분 분석(PCA)이란? AI의 많은 특징을 적은 축으로 바꾸는 방법
TL;DR
주성분 분석(Principal Component Analysis, PCA)은 서로 연관된 여러 수치 특징을 분산이 큰 새로운 직교 축으로 바꾸는 선형 차원 축소 방법입니다. 원본 특징을 평균 중심화한 뒤 데이터가 가장 넓게 퍼진 방향부터 주성분을 찾고, 앞쪽 성분 몇 개에 데이터를 투영합니다. 원래 열을 그대로 고르는 특징 선택과 달리 여러 열의 선형 결합을 새 특징으로 만듭니다. 주성분 수는 설명 분산과 검증 성능을 함께 보고 정하며, 평균·스케일·주성분 축은 훈련 데이터에서만 학습해야 합니다.
핵심 3줄 요약
- 핵심 1
여러 특징을 새로운 축으로 바꿉니다. 각 주성분은 원본 수치 특징을 가중합한 값이며 서로 직교합니다. - 핵심 2
분산이 큰 방향부터 남깁니다. 앞쪽 주성분은 데이터의 변동을 더 많이 담고 뒤쪽 성분은 더 적게 담습니다. - 핵심 3
축소와 검증을 한 파이프라인에 묶습니다. 중심화·스케일링·PCA를 훈련 데이터에 맞추고 같은 변환을 검증과 추론에 적용합니다.
이 글에서 다룰 내용
- 주성분 분석의 한 문장 정의
- 매출과 주문 수 예시로 이해하는 새로운 축
- AI 데이터에서 PCA가 중요한 이유
- 중심화·공분산·주성분·투영의 작동 순서
- 설명 분산과 주성분 수를 읽는 방법
- 특징 선택·SVD·데이터 백색화·t-SNE와의 차이
- 데이터 누수·스케일·해석·이상치의 주의점
주성분 분석을 한 문장으로 정의하면 무엇인가요?
주성분 분석은 서로 상관된 수치 특징을 분산이 큰 순서의 직교한 선형 결합으로 바꾸고, 필요한 앞쪽 성분만 남겨 차원을 줄이는 방법입니다.
scikit-learn은 PCA를 특이값 분해(SVD)로 데이터를 낮은 차원 공간에 투영하는 선형 차원 축소로 설명합니다. 입력은 특징별 평균을 빼서 중심화하지만 자동으로 스케일을 맞추지는 않습니다. 새로 얻은 첫 번째 주성분은 데이터의 분산이 가장 큰 방향이고, 다음 성분은 앞선 축과 직교하면서 남은 분산을 가장 크게 담는 방향입니다.
한 줄 정리: PCA는 원본 특징 일부를 고르는 방법이 아니라 여러 특징을 섞어 분산이 큰 새 좌표축을 만드는 방법입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 여러 콘텐츠의 조회 수, 체류 시간, 스크롤 깊이, 댓글 수, 공유 수를 이용해 반응 유형을 분석한다고 가정해 보겠습니다. 조회 수가 많은 글은 댓글과 공유도 함께 늘어나는 경향이 있어 열 사이 정보가 겹칠 수 있습니다.
- 원본 특징 1: 도달 규모와 관련된 조회 수·공유 수
- 원본 특징 2: 읽기 깊이와 관련된 체류 시간·스크롤 깊이
- PCA 결과: 원본 열을 섞은 주성분 1·주성분 2 좌표
PCA는 데이터가 가장 길게 퍼진 방향을 첫 번째 축으로 잡습니다. 그 축이 전체 반응 규모를 주로 나타낸다면 조회 수, 댓글 수, 공유 수의 계수가 같은 방향으로 나타날 수 있습니다. 두 번째 축은 첫 번째 축과 직각을 이루면서 남은 변동을 많이 담습니다.
다섯 개 특징을 두 개 주성분으로 줄이면 각 콘텐츠는 다섯 숫자 대신 두 좌표로 표현됩니다. 다만 두 좌표가 원본 정보를 모두 보존한다고 단정할 수는 없습니다. 앞의 두 성분이 담은 설명 분산 비율과 뒤 모델의 검증 성능을 확인해야 합니다.
쉬운 예시: 겹치는 측정값 여러 개를 데이터가 실제로 퍼진 방향의 좌표 몇 개로 다시 그린다고 생각하면 이해하기 쉽습니다.
왜 AI 데이터에서 주성분 분석이 중요한가요?
겹치는 수치 특징을 적은 축으로 요약합니다
센서 수백 개나 픽셀 수천 개처럼 수치 특징이 많으면 저장 공간과 계산량이 커지고 시각화도 어려워집니다. PCA는 서로 상관된 특징의 변동을 앞쪽 성분에 모아 더 적은 수의 입력으로 바꿉니다. 모든 데이터에 이득이 있는 것은 아니므로 축소 전후의 처리 시간과 검증 성능을 함께 비교합니다.
모델 입력의 상관 구조를 바꿉니다
표준 PCA의 주성분은 서로 직교하며 표본 데이터에서 상관되지 않은 방향을 이룹니다. 비슷한 신호를 반복해서 담은 열이 많을 때 새 축은 중복된 선형 변동을 정리하는 데 도움이 됩니다. 비선형 관계나 원인 관계까지 없애는 방법은 아닙니다.
고차원 데이터를 눈으로 살펴보게 합니다
첫 두 개나 세 개 주성분으로 데이터를 투영하면 클래스, 군집, 이상치의 대략적인 배치를 그림으로 확인할 수 있습니다. NIST는 PCA를 많은 변수를 대부분의 정보를 담은 더 작은 변수 집합으로 줄이는 도구로 설명합니다. 낮은 차원 그림이 원본 공간의 모든 구조를 보여 주는 것은 아니므로 설명 분산을 함께 표시해야 합니다.
핵심 인사이트: PCA의 목표는 열 수 자체를 줄이는 데서 끝나지 않습니다. 분산을 많이 담는 선형 좌표로 데이터를 다시 표현하고 필요한 정보가 남았는지 검증하는 데 있습니다.
주성분 분석은 어떻게 작동하나요?
1. 수치 특징과 데이터 분할을 정합니다
PCA를 적용할 수치 열을 고르고 훈련·검증·테스트 데이터를 먼저 나눕니다. 평균, 선택적인 스케일 값, 주성분 방향은 모두 훈련 데이터에서 계산합니다. 라벨이 없는 비지도 변환이어도 검증 데이터의 분포를 미리 사용하면 평가 누수가 생깁니다.
2. 각 특징의 평균을 빼서 중심화합니다
각 열에서 훈련 평균을 빼면 데이터의 중심이 원점으로 이동합니다. scikit-learn PCA는 이 중심화를 수행하지만 특징별 표준편차까지 자동으로 맞추지는 않습니다. 검증과 실제 입력에는 훈련 때 저장한 같은 평균을 뺍니다.
3. 분산이 큰 직교 방향을 찾습니다
공분산 행렬의 고유벡터를 구하거나 중심화한 데이터 행렬을 SVD로 분해해 주성분 방향을 찾을 수 있습니다. Jolliffe와 Cadima의 검토 논문은 첫 방향이 분산을 최대화하고 뒤 성분은 앞 성분과 상관되지 않으면서 남은 분산을 차례로 크게 담는다고 설명합니다.
4. 필요한 주성분 수를 정합니다
각 성분의 고윳값이나 특이값에서 설명 분산과 설명 분산 비율을 계산합니다. 고정 개수로 앞의 성분을 남길 수도 있고 누적 설명 분산이 정한 비율을 넘도록 개수를 고를 수도 있습니다. 이 비율은 정답 성능이 아니라 입력 변동을 얼마나 담았는지 나타냅니다.
5. 데이터를 새 축에 투영합니다
중심화한 각 행을 선택한 주성분 방향에 곱하면 주성분 점수를 얻습니다. PyTorch 문서는 중심화한 행렬의 첫 k개 주성분 방향에 데이터를 곱해 투영한다고 설명합니다. 배포할 때도 훈련에서 저장한 평균과 축을 그대로 사용해야 같은 좌표가 나옵니다.
한 줄 정리: 분할을 먼저 고정하고 훈련 평균으로 중심화한 뒤 분산이 큰 축을 찾고, 필요한 성분에 데이터를 투영합니다.
설명 분산과 주성분 수는 어떻게 읽나요?
설명 분산 비율은 입력 변동의 몫입니다
설명 분산 비율은 전체 주성분의 분산 합에서 특정 성분이 차지하는 몫입니다. 첫 성분부터 누적하면 선택한 성분들이 원본 데이터의 선형 변동을 얼마나 담는지 볼 수 있습니다. 높은 비율이 곧 분류 정확도나 회귀 오차 개선을 뜻하지는 않습니다.
엘보와 누적 비율은 후보를 좁히는 기준입니다
성분 번호별 설명 분산을 그린 스크리 플롯에서 감소 폭이 완만해지는 지점을 살피거나, 누적 설명 분산의 목표를 정해 후보 개수를 고를 수 있습니다. 목표 비율은 업무 손실과 모델 목적에 따라 달라지므로 하나의 고정 숫자를 모든 데이터에 적용하지 않습니다.
최종 개수는 검증 성능과 운영 비용으로 정합니다
주성분 수를 여러 값으로 바꿔 같은 데이터 분할에서 뒤 모델의 성능, 학습 시간, 추론 지연, 메모리를 비교합니다. 재구성 오차나 시각화 품질이 중요하다면 그 지표도 함께 봅니다. 설명 분산만 최대로 만들려고 모든 성분을 남기면 차원 축소의 이점이 줄어듭니다.
실전 팁: 누적 설명 분산은 출발점으로 쓰고 최종 주성분 수는 실제 작업의 검증 지표와 비용을 보고 결정하세요.
주성분 분석과 헷갈리는 용어는 무엇이 다른가요?
특징 선택과 PCA의 차이
특징 선택은 원래 입력 열 가운데 일부를 그대로 남깁니다. PCA는 여러 원본 열의 선형 결합으로 새로운 주성분을 만듭니다. 가장 가까운 기존 글인 특징 선택은 어떤 원본 변수를 유지할지 답하고, PCA는 원본 변수를 어떤 새 축으로 투영할지 답하므로 검색 의도가 다릅니다.
SVD와 PCA의 차이
SVD는 행렬을 특이벡터와 특이값으로 분해하는 선형대수 연산입니다. PCA는 중심화한 데이터의 분산이 큰 축을 찾는 통계 방법이며 SVD로 구현할 수 있습니다. scikit-learn PCA가 중심화 뒤 SVD를 쓰는 이유입니다. 중심화하지 않은 행렬의 SVD 결과를 곧바로 표준 PCA와 같다고 보면 안 됩니다.
데이터 백색화와 PCA의 차이
PCA 투영은 주성분을 서로 상관되지 않은 축으로 바꾸지만 각 성분의 분산 크기는 그대로 다를 수 있습니다. 백색화는 성분을 추가로 조정해 단위 분산에 가깝게 맞춥니다. 앞서 발행한 데이터 백색화 글은 상관 제거와 분산 조정을 다루며, 이번 글은 분산 순서의 새 축과 차원 축소를 중심으로 설명합니다.
요인 분석과 PCA의 차이
PCA는 관측 데이터의 전체 분산을 적은 선형 성분으로 표현하는 데 초점을 둡니다. 요인 분석은 관측 변수 사이의 공통 변동을 설명하는 잠재 요인과 고유 오차를 가정하는 통계 모델입니다. 비슷한 저차원 표현을 만들 수 있어도 목적과 가정은 서로 다릅니다.
t-SNE와 PCA의 차이
PCA는 전체 데이터에 하나의 선형 변환을 적용하고 분산이 큰 방향을 찾습니다. t-SNE는 가까운 점들의 이웃 관계를 낮은 차원에서 표현하려는 비선형 시각화 방법입니다. t-SNE 그림의 축은 PCA의 설명 분산 축처럼 읽지 않습니다.
비교 정리: 특징 선택은 원본 열을 남기고, SVD는 행렬을 분해하며, 백색화는 성분 분산까지 맞추고, PCA는 분산이 큰 새 축으로 선형 투영합니다.
실전에서는 어디에 쓰이나요?
많은 수치 특징을 가진 표 데이터
센서, 유전자 측정값, 사용자 행동 지표처럼 열이 많고 서로 연관된 표 데이터에서 앞쪽 주성분을 모델 입력으로 사용할 수 있습니다. 원본 열을 쓴 기준 모델과 성능을 비교하고 각 축의 로딩도 기록합니다.
이미지와 고차원 벡터의 압축
이미지의 픽셀이나 고차원 수치 벡터를 적은 성분으로 줄여 저장·탐색·후속 학습 비용을 낮출 수 있습니다. 데이터가 매우 크면 scikit-learn의 IncrementalPCA나 randomized solver, PyTorch의 저랭크 PCA처럼 메모리와 계산을 줄이는 구현을 검토합니다.
데이터 탐색과 이상치 확인
첫 두세 개 성분의 점수로 산점도를 그려 집단의 겹침과 멀리 떨어진 사례를 살펴봅니다. 낮은 차원에서 가까워 보여도 원본 공간에서는 다를 수 있고 뒤쪽 성분의 이상 신호가 사라질 수도 있습니다. PCA 그림만으로 이상 여부를 확정하지 않습니다.
모델 전처리 파이프라인
스케일러, PCA, 분류기나 회귀기를 하나의 파이프라인으로 묶으면 교차 검증의 각 훈련 폴드에서 전처리를 다시 학습할 수 있습니다. 이렇게 해야 검증 폴드의 평균과 분산 구조가 주성분 계산에 미리 들어가는 일을 막습니다.
실전 팁: PCA를 별도 파일로 먼저 계산하기보다 데이터 분할과 교차 검증 안에서 동작하는 전처리 파이프라인으로 관리하세요.
주성분 분석을 적용할 때 어떤 순서로 확인하나요?
1. 줄이려는 이유와 비교 기준을 적습니다
학습 시간을 줄이려는지, 시각화하려는지, 상관된 입력을 정리하려는지 목적을 먼저 정합니다. PCA 없이 원본 특징을 쓴 모델을 기준으로 남겨야 축소의 이득과 손실을 실제로 비교할 수 있습니다.
2. 데이터 분할과 전처리 순서를 고정합니다
훈련·검증·테스트를 나눈 뒤 결측값 처리, 선택적인 스케일링, PCA 순서를 파이프라인에 넣습니다. 각 단계의 통계는 훈련 구간에서만 학습합니다. 시계열 데이터라면 미래 시점이 과거 주성분 계산에 섞이지 않도록 시간 순서를 지킵니다.
3. 스케일링 필요성을 비교합니다
단위가 큰 열은 분산도 크게 나타나 첫 주성분을 지배할 수 있습니다. 원, 초, 원자 단위처럼 척도가 다른 특징을 함께 쓴다면 표준화 전후 결과를 비교합니다. 측정 단위 자체의 분산 크기가 중요한 경우에는 무조건 스케일을 같게 만들지 않습니다.
4. 성분 수와 로딩을 함께 기록합니다
선택한 성분 수, 성분별 설명 분산 비율, 누적 비율, 각 원본 특징의 로딩을 저장합니다. 성분의 부호는 같은 해를 반대로 표현해도 본질이 같을 수 있으므로 재학습 버전을 단순한 부호 반전만으로 다르다고 판단하지 않습니다.
5. 배포 입력과 재학습 변화를 시험합니다
훈련 평균, 선택적인 스케일 값, 주성분 행렬이 모델과 함께 저장되는지 확인합니다. 새 데이터에서 결측값, 열 순서, 단위와 범위가 달라지지 않았는지 검사하고 재학습 뒤 설명 분산과 로딩의 변화를 비교합니다.
한 줄 정리: 목적과 기준 모델을 정한 뒤 분할 안에서 PCA를 학습하고, 성분 수·설명 분산·로딩·배포 변환을 한 묶음으로 검증합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 검증 데이터로 평균과 주성분을 계산하지 않습니다. PCA는 라벨을 보지 않지만 입력 분포를 학습합니다. 전체 데이터에 먼저 PCA를 맞추면 검증과 테스트 정보가 훈련 변환에 섞입니다.
둘째, 특징의 단위를 확인합니다. PCA는 분산이 큰 방향을 우선하므로 숫자 단위가 큰 열이 결과를 지배할 수 있습니다. 스케일링 여부는 데이터 의미와 검증 결과로 정합니다.
셋째, 설명 분산을 예측 성능으로 오해하지 않습니다. 변동이 큰 방향이 정답 예측에 가장 유용하다는 보장은 없습니다. 작은 분산 성분에 중요한 클래스 신호가 있을 수도 있습니다.
넷째, 원본 특징 해석이 어려워질 수 있음을 기록합니다. 각 주성분은 여러 열의 선형 결합입니다. 규제·감사·업무 설명에서 원래 변수 단위의 근거가 필요하다면 특징 선택이나 해석 가능한 기준 모델도 함께 유지합니다.
다섯째, 이상치와 비선형 구조를 따로 확인합니다. 큰 이상치는 분산 방향을 바꾸고 PCA는 곡선 모양의 구조를 몇 개 선형 축으로 충분히 펴지 못할 수 있습니다. 이상치 처리와 비선형 대안을 별도 실험으로 비교합니다.
주의: PCA는 분산을 많이 보존하는 선형 축소입니다. 정답 정보, 인과관계, 공정성이나 설명 가능성을 자동으로 보존하는 장치는 아닙니다.
자주 묻는 질문
Q1. PCA와 주성분 분석은 같은 말인가요?
네. PCA는 Principal Component Analysis의 약어이고 한국어로 주성분 분석이라고 부릅니다. 문서에 principal component, PC score, loading이 나오면 각각 주성분, 주성분 점수, 원본 특징이 축에 기여하는 계수를 가리키는지 문맥을 확인하세요.
Q2. PCA는 지도학습인가요?
보통 라벨을 사용하지 않는 비지도 차원 축소로 분류합니다. 다만 PCA로 바꾼 특징을 지도학습 모델에 넣을 수 있습니다. 라벨을 보지 않아도 입력 분포를 학습하므로 데이터 분할 뒤 훈련 데이터에만 맞춰야 합니다.
Q3. PCA 전에 반드시 표준화해야 하나요?
반드시 그런 것은 아닙니다. scikit-learn PCA는 중심화하지만 자동 스케일링은 하지 않습니다. 단위 차이가 결과를 지배하면 표준화를 검토하고, 분산의 실제 크기가 의미 있다면 원래 척도를 유지한 결과도 함께 비교하세요.
Q4. 설명 분산 비율이 높으면 모델 정확도도 높나요?
그렇다고 단정할 수 없습니다. 설명 분산은 입력 데이터의 변동을 얼마나 담았는지 나타냅니다. 정답을 가르는 신호가 작은 분산 방향에 있을 수 있으므로 주성분 수별 검증 성능을 따로 확인합니다.
Q5. PCA로 줄인 값을 원본 데이터로 완전히 복원할 수 있나요?
모든 성분을 보존하면 중심화한 데이터 표현을 되돌릴 수 있지만 일부 성분을 버린 차원 축소에서는 일반적으로 근사 복원만 가능합니다. 버린 성분이 담던 변동만큼 재구성 오차가 남습니다.
Q6. 희소 행렬에도 PCA를 바로 쓸 수 있나요?
구현과 solver에 따라 다릅니다. scikit-learn PCA는 일부 solver에서 희소 입력을 지원하지만 중심화는 희소 구조와 메모리에 영향을 줍니다. 중심화하지 않는 TruncatedSVD가 더 적합한지 문서와 실제 메모리 사용량을 확인하세요.
출처
마무리
주성분 분석은 여러 수치 특징을 분산이 큰 순서의 새로운 직교 축으로 바꾸고 앞쪽 성분만 남겨 차원을 줄이는 방법입니다. 원본 특징을 그대로 남기는 특징 선택과 달리 새 축은 여러 열의 선형 결합이며, 중심화한 데이터에서 계산한 설명 분산으로 각 축이 담은 변동을 확인합니다.
초보자라면 세 가지만 기억하면 충분합니다. 데이터 분할 뒤 훈련 데이터에서만 평균과 주성분을 학습하고, 스케일링 전후와 여러 성분 수를 기준 모델에 비교하며, 설명 분산뿐 아니라 실제 검증 성능과 해석 비용도 살펴보세요. 이 순서를 지키면 PCA가 줄인 차원만큼 계산과 탐색에 실질적인 이득을 주는지 판단할 수 있습니다.
