코드잇 스프린트/통계

차원 축소와 주성분 분석(Principle Component Analysis, PCA)

JOHAWK 2024. 9. 19. 17:40

안녕하세요, 데이터에 차원이 너무 많을 때 나타나는 문제를 해결하기 위한 차원 축소와 대표적인 차원 축소 방법 중 하나인 주성분 분석에 대해 알아보겠습니다.

 

차원 축소와 주성분 분석

목차

1. 데이터에 차원이 너무 많으면 어떻게 되나요?

2. 차원 축소

1) 차원 선택

2) 차원 추출

3. 주성분 분석

1) 과정

2) 고유벡터와 고유값

 

1. 데이터에 차원이 너무 많으면 어떻게 되나요?

데이터에서 차원은 그래프에서 데이터의 위치를 나타내기 위해 필요한 축의 개수입니다. 변수의 수와 같다고 보면 되겠습니다.

예를 들어, 대한민국 사람들의 키와 몸무게를 측정한 데이터가 있는데, 그 중 한 명의 데이터를 표기하기 위해서는 키와 몸무게 2개의 차원(축)이 필요합니다.

반면, 건강검진 데이터처럼 34개의 변수가 이루어져있다면 한 명의 데이터 위치를 정확히 표기하기 위해서 34개의 차원이 필요합니다. 인간이 이해할 수 있는 수준은 3차원인데 건강검진 데이터를 시각적으로 이해하긴 어렵겠죠.

 

그리고 데이터에 포함된 차원의 수가 많아질수록 필요한 표본의 수도 증가합니다. 통계 분석을 하기 위해서는 각 변수에 해당하는 수준마다 충분한 수의 데이터가 확보되어야 합니다. 그래서 변수의 수가 적을 때는 적은 수의 표본으로도 충분히 분석할 수 있지만, 변수의 수가 많아질수록 모든 변수의 수준을 만족하는 데이터들의 수가 증가하게 됩니다.

 

아래 그림을 보면 모든 변수의 수준이 2개(정상, 비정상)으로 나뉘어진 데이터가 있습니다. 위쪽 데이터는 변수가 2개, 아래쪽 데이터는 변수가 3개입니다. 위쪽 데이터에서는 모든 변수의 수준을 만족하는 데이터의 수가 4개(2의 제곱)입니다. 반면 아래쪽 데이터에서 모든 변수의 수준을 만족하려면 최소 8개(2의 세제곱)의 데이터가 필요합니다. 그런데 통계적으로 의미있는 분석을 하려면 각 조건을 만족하는 데이터 수가 더 많아야 합니다.

박원우 외(2010)는 회귀분석을 하기 위한 데이터에서 최소한으로 요구하는 변수의 수 대 표본 수의 비율은 1: 10으로 주장했으며, 이외에도 1:15 혹은 1:20 등 더 엄격한 비율을 주장하는 사람들도 있습니다. 1:10 비율을 반영하면 변수가 2개인 데이터에서 최소 20개의 데이터가 필요하지만 변수가 3개일 경우 30개가 필요합니다.

 

이렇게 차원이 많을수록 더 많은 정보를 담을 수 있지만 그에 맞춰 데이터의 수가 더 많이 필요한 문제가 발생하는 것을 '차원의 저주'라고 합니다. 차원의 저주에 걸리면 각종 분석 및 모델의 성능이 저하되는 현상이 나타납니다.


2. 차원 축소

차원의 저주로부터 벗어나기 위해 필요한 것이 바로 차원 축소입니다. 차원 축소는 데이터 내 변수의 수를 줄이는 과정을 의미합니다.

차원 축소를 통해 얻을 수 있는 이점은 두 가지가 있습니다. 바로, 차원의 저주에서 벗어날 수 있다는 것과 시각화를 쉽게 할 수 있다는 것입니다.

빅데이터가 등장하고, 동시에 이미지나 음성, 영상 같은 고차원 데이터들을 많이 사용하면서 차원 축소의 필요성은 나날이 높아지고 있습니다.

차원 축소를 하는 방법은 차원 선택과 차원 추출이 있습니다.

 

1) 차원 선택

차원 선택은 분석가(연구자)가 데이터가 가지고 있는 변수 중 분석에 필요한 변수만을 선택해서 차원을 축소하는 방법입니다.

예를 들어, 지역별 비만율을 비교하기 위해 키, 몸무게, bmi(비만도 지수), 허리 둘레를 측정했습니다. 여기서 bmi와 허리 둘레는 높은 상관관계를 가지고 있고, 분석가(연구자)는 고심 끝에 bmi를 활용하고 허리 둘레를 제외했습니다.

 


2) 차원 추출

차원 추출은 기존에 있는 차원들의 특성을 반영한 새로운 차원을 만들어 차원을 축소하는 방법입니다. 차원 추출을 하는 방법으로는 주성분 분석, 요인 분석 등이 있습니다. 예를 들어, 한 은행에서 은행 사용 만족도를 조사하기 위해 다음과 같이 8개의 문항들을 만들었습니다.

 

1. 직원의 친절함
2. 대기시간
3. 업무 처리 소요 시간
4. 시청과 집 사이 거리
5. 운영시간
6. 주차공간
8. 수수료
9. 대출 금리

9개 문항을 그대로 돌리기에는 데이터 수도 넉넉하지 않아서 차원 추출을 하면 아래와 같이 세 개로 차원을 줄일 수 있습니다.

1. 서비스 (직원의 친절함, 대기시간, 업무 처리 소요 시간)
2. 편의성 (시청과 집 사이의 거리, 운영시간, 주차공간)
3. 비용 (수수료, 대출 금리)

 

이번 시간에는 차원 추출을 하는 주된 방법 중 하나인 주성분 분석에 대해 다뤄보겠습니다.


3. 주성분 분석(PCA)

주성분 분석은 여러 개의 독립변수들을 잘 설명해줄 수 있는 새로운 변수(주성분)를 찾는 방법으로, 상관관계가 높은 데이터들을 선형결합해 고차원의 데이터를 저차원으로 변환합니다.

데이터의 분산을 최대한 보존하는 방법으로 차원 축소를 진행합니다.

1) 과정

주성분 분석은 기존 n차원의 데이터에서 데이터의 특성을 최대한 보전한 k개의 축을 찾는 것입니다(k <= n). 그리고 주성분 분석에서 데이터의 특성을 나타내는 값으로 바로 분산을 사용합니다.

평균과 같은 대표값은 모든 데이터들을 종합했을 때 나타나는 반면, 분산은 각 데이터가 대표값으로부터 얼마나 떨어져있는지 나타내는 수단이기 때문에 각 데이터 포인트의 특성을 반영합니다. 평균이 같은 데이터는 많아도 분산까지 같은 데이터는 거의 없듯이 말이죠.

1. 가장 큰 분산을 갖는 축인 주성분을 찾습니다.

2. 주성분에서 직교하는 축을 두 번째 주성분으로 지정합니다.

3. 이후 분석 목적과 기법에 따라 적절한 주성분 수를 지정합니다. (고유벡터와 고유값에서 설명하겠습니다.)

 


2) 고유벡터와 고유값

PCA를 제대로 이해하기 위해서는 선형대수학이 들어가는데 여기서는 최대한 간단하게 필요 내용만 짚어보겠습니다. PCA를 수학적으로 풀어낸 자세한 내용은 여기를 참고하시면 좋습니다.

 

1) 이 세상 모든 n차원의 데이터는 행렬로 표현할 수 있습니다. n * m 행렬에서 n은 데이터 수, m은 차원(변수)의 수에 해당합니다.

2) 행렬(데이터)의 분산을 최대한 유지하기 위해 행렬(데이터)의 방향은 변하지 않고 크기만 변하게 만드는 벡터값은 고유벡터입니다.

3) 고유벡터에 의해 크기가 변했을 때 크기의 변화량은 고유값입니다.

 

즉, 고유벡터는 주성분 그 자체를 의미하고 고유값은 주성분이 가지는 분산의 크기를 의미합니다.

 

 

주성분 분석에서 사용할 주성분 수를 구하는 방법은 크게 세 가지가 있습니다.

 

먼저, 고유값이 1을 넘으면 유용한 주성분으로 사용하는 Kaiser's rule이 있습니다.

 

다음으로, Cattell이 사용한 스크리 도표 방법이 있습니다. 각 주성분을 스크리 도표로 그리고 elbow point에 해당하는 지점까지의 주성분을 사용하는 방법입니다.

마지막으로 누적 기여율(설명력)을 사용하는 방법이 있습니다. 기여율은 모든 고유값들에서 특정 주성분이 차지하는 고유값의 비율을 의미합니다. 누적 기여율이 70~80% 이상이 되는 지점에서 주성분 수를 정하는 방법입니다.

 

이처럼 고유벡터와 고유값을 구함으로써 효율적으로 데이터의 차원을 축소해 비교적 적은 데이터로도 차원의 저주에 걸리지 않고 다양한 분석을 할 수 있습니다.

 

 

 

 

참고

주성분 분석(PCA) 개념과 원리 쉽게 이해하기 : 네이버 블로그 (naver.com)

 

주성분 분석(PCA) 개념과 원리 쉽게 이해하기

본 포스팅은 현재 집필하고 있는 책(가제: 데이터분석가가 알아야 하는 모든 것)의 일부 내용입니다. 무단...

blog.naver.com

행렬과 선형변환 - 공돌이의 수학정리노트 (Angelo's Math Notes) (angeloyeo.github.io)

 

행렬과 선형변환 - 공돌이의 수학정리노트 (Angelo's Math Notes)

 

angeloyeo.github.io

 

고윳값과 고유벡터 - 공돌이의 수학정리노트 (Angelo's Math Notes) (angeloyeo.github.io)

 

고윳값과 고유벡터 - 공돌이의 수학정리노트 (Angelo's Math Notes)

 

angeloyeo.github.io

고유값(eigen value)과 고유벡터(eigen vector) | 생각과 고민. (gguguk.github.io)

 

고유값(eigen value)과 고유벡터(eigen vector)

방향은 변하지 않고 크기만 변하는 벡터를 찾아라!

gguguk.github.io

PCA(주성분 분석) | 생각과 고민. (gguguk.github.io)

 

PCA(주성분 분석)

원래 데이터들을 어느 벡터에 사영시켜야 데이터의 구조를 최대한 보존할 수 있을까?

gguguk.github.io

 

'코드잇 스프린트 > 통계' 카테고리의 다른 글

연관 분석(장바구니 분석)  (6) 2024.09.27
히스토그램의 한계점  (1) 2024.09.20
기술통계와 추론통계  (0) 2024.08.22
사분위수  (0) 2024.08.19
t-test  (0) 2024.08.14