주성분분석(Principal Component Analysis)

주성분분석은 다양한 변수들에 대해 분석하는 소위 다변량(multivariate) 분석인데 많은 변수들로부터 몇 개의 주성분들을 추출하는 방법입니다. 즉, 데이터분석의 관점(perspective)에서 주성분분석은 차원축소(dimension reduction)를 위한 것입니다. 여기서 차원(dimension)은 변수의 개수, 즉 축(axis)의 개념인데 예를들어 좌표평면은 2개의 축(axis)으로 구성되므로 2차원이며 2개의 변수로 구성된 데이터를 100%표현할 수 있습니다. 주성분이라는 것은 많은 변수들을 설명하는 주된(principal) 성분이라는 의미인데 주성분, 주성분변수, 주성분점수는 기본적으로 같은 의미입니다. 변수들을 설명한다는 것은 technical한 관점에서는 변수들의 변동(variation)을 설명하는 것입니다.

주성분(principal component)은 관찰변수(manifest variable)들의 선형결합(linear combination)으로 생성되는데, 변수별 가중치(=변수별로 적재(loading)된 정도)에는 차이가 있지만 고려하는 모든 관찰변수가 적재(loaded)되어 있습니다. 여기서 선형결합이라는 것은 단지, 변수들이 +, -로 결합되어 있다는 의미인데 예를들어 y=alpha+beta1*x1 + beta2*x2 + error와 같은 회귀분석(regression)의 예측값에는 설명변수들, 즉 x1, x2의 effect가 선형 적재(loaded)되어 있습니다. 즉, 주성분분석도 선형관계를 분석합니다. 참고로, 변수들을 제곱하거나 interaction을 고려하거나 또는 구간구분을 하면 선형모형도 비선형관계를 represent할 수 있으므로 일반적으로 비선형관계보다 더 중요한 관계는 선형관계입니다.

변수가 2개인 경우에는 좌표평면(=corrdinate plane, 가로축 + 세로축), 즉 2개의 축(axis)으로 표현할 수가 있습니다. 예를들어 키(height)와 몸무게(weight)라는 2개의 변수를 설명하기 위해서는 키, 몸무게 라는 2개의 축(axis)을 사용하면 되는데 축(axis)이라는 것은 어떤 의미를 가지는 개념입니다. 만일, x축을 키(height)로 하고 y축을 몸무게(weight)로 해서 좌표평면에 좌표(coordinate)를 표현하면 키와 몸무게를 100%표현한 것입니다. 즉, 변수가 2개인 경우에 2개의 축(axis)으로 변수들의 흩어진 정도를 100%설명할 수 있습니다. 만일, 변수가 3개이면 3개의 축(axis)으로 변수들을 100%설명할 수 있는 데 설명하려는 변수들의 개수만큼의 축(axis)을 사용하면 변수들을 100%설명할 수 있는 것입니다.

그런데, 주성분 분석의 목적은 다양한 변수들을 잘 설명하는 소수의 주된 축(axis)을 찾아서 차원축소(dimension reduction)를 하는 것이므로 좌표평면(=2차원)에 표현할 수 있는 2개의 변수가 있는 경우에는 1개의 주성분을 찾습니다. 이 경우에 2개의 주성분을 찾는 것은 무의미(meaningless) 합니다. 3개의 변수가 있으면 3차원 공간(3-dimensional space)에 표현되는 데 흩어진 데이터의 변동(variation)을 잘 설명하는 1개의 주성분(=축(axis))이나 또는, 2개의 주성분을 찾습니다. 주관적으로 판단해서 1개의 주성분의 설명력이 충분히 크면 2개의 주성분보다는 더 간단한 1개의 주성분을 찾으면 됩니다. 만일, 1개의 주성분의 설명력(=데이터의 흩어진 정도에 대한 설명력)이 충분하지 않으면 2개의 주성분을 찾습니다. 만일, 2개의 주성분이 데이터의 변동(variation)을 충분히 설명하지 못하면 주성분분석을 통해 찾아진 주성분을 사용하기가 곤란하게 됩니다. 참고로, 데이터 변동의 70 ~ 80%이상을 설명하면 충분한 것으로 생각할 수 있는데 최소 60%이상을 설명하면 어느정도 괜찮은 주성분이라고 판단하는 경향이 있습니다. 60%라는 것은 어떤 절대적인 기준이라기 보다는 주관적인 기준인데, 데이터의 변동의 최소 60%는 설명해야 그나마 주성분분석의 의미가 있다고 판단하는 것입니다.

차원축소(dimension reduction)를 하더라도 변수를 잘 설명하는 축(axis)을 찾아야 하는 데 예를들어 2개의 변수, x1, x2가 있는 경우에 1개의 축(axis)을 찾는다고 할 때, 다음 그래프에서 빨간색 축(axis)을 사용하는 것이 가장 좋은 것입니다. 즉, 빨간색(red) 선이 녹색(green) 선 보다 흩어진 좌표(coordinate)들의 변동(variation)을 더 잘 설명합니다.

 

여기서는 빨간색 선(line)이 새로운 축(axis)이 되는 데 이는 x1, x2를 가장 잘 설명하는 1개의 축(axis), 즉 주성분변수입니다. 이와같이 주성분분석에서는 변수들을 설명하는 새로운 축을 찾는데, 서로 직교(=orthogonal, 직각, 90도, correlation이 0) 하도록 찾습니다. 즉, 각각의 축(axis)은 서로 독립이 됩니다. 따라서, 주성분분석에서는 첫번째 주성분이 언제나 가장 큰 설명력을 가지는데 설명력의 차이가 일반적으로 꽤 크게 됩니다.

이렇게 하기 위해서는 우선, 관찰변수들로 부터 상관계수 행렬(correlation matrix)를 구한 다음 상관계수 행렬의 eigen vector를 구합니다. eigen vector끼리는 서로 직교 하게 되는데 상관계수행렬은 positive-definite(양정치 ?) 행렬이므로 모든 eigenvalue가 (+)입니다. 그런다음, 관찰변수들을 평균, 분산이 각각 0, 1이 되도록 표준화(standardization)하는 데 표준화를 하기 위해서는 평균(mean)을 뺀 다음 표준편차(standard deviation)로 나누면 됩니다. 예를들어 Normal분포의 어떤 값을 평균, 분산이 0,1인 standard Normal분포의 값으로 환산하기 위해 표준화하는 방법과 같습니다.

관찰변수들을 표준화한 다음 eigen vector matrix와 곱하면 주성분이 되는 데 예를들어 관찰변수가 3개이고 sample size가 100개이면 변수행렬은 크기가 (100*3)인 행렬입니다. eigen vector matrix는 (3*3)행렬이므로 (100*3) * (3*3) = (100*3) 이 되어 관찰변수의 크기와 같은 행렬이 됩니다. 앞서 언급한 것과같이 n개의 관찰변수(manifest variable)가 있으면 최대 n개의 주성분을 찾을 수 있는데 n개의 주성분은 n개의 변수들을 100%설명합니다. 그런데, 차원축소가 주성분의 목적이므로 이 가운데 몇 개만 주성분으로 사용하는 데 관찰변수들의 변동(variation)의 최소 약 60%이상 설명할 수 있도록 하는 주성분을 찾으면 됩니다. 설명력은 eigen value로 파악하면 되는 데 상관계수 행렬로 부터 eigen value를 구하므로 eigen value를 합계하면 변수의 개수만큼의 크기가 됩니다. 즉, n개의 변수가 있으면 eigen value를 모두 합계하면 n입니다. 따라서, 각각의 eigen value를 n으로 나누면 그 주성분이 관찰변수들에 대해 가지는 설명력의 비율(proportion)이 됩니다. 예를들어 3개의 변수가 있고 eigenvalue가 각각 1.5, 1, 0.5이면 주성분의 설명력은 다음과 같습니다.

첫번째 주성분의 설명력 = 1.5 / 3 = 50%

두번째 주성분의 설명력 = 1 / 3 = 33.33%

세번째 주성분의 설명력 = 0.5 / 3 = 16.67%

여기서는 두 개의 주성분을 채택하면 되는데 2개의 주성분만으로 데이터변동의 50% + 33.33% = 83.33%만큼을 설명할 수 있는 것입니다. 여기서는 변수가 많지 않으므로 3개의 변수를 모두 사용해도 괜찮을 수 있지만 변수가 많으면 주성분분석을 통해 변수들의 차원(dimension)을 축소시키는 것이 좋을 수 있습니다.

주성분분석을 통해 찾은 주성분들은 관찰변수들을 설명하는 새로운 축(axis)이 되는데 원래의 축(axis)이 회전(rotation)된 것과 같은 것이므로 의미가 변하게 됩니다. 예를들어, 키, 몸무게, 팔굽혀 펴기 회수, 달리기 시간, … 등은 ‘체력’이라는 주성분으로 설명될 수 있을 것이며 자동차 배기량, 크기, 엔진 기능, 브랜드, … 등은 ‘가격’이라는 주성분으로 설명될 수 있을 것입니다. 즉, ‘체력’이나 ‘가격’은 새로운 축(axis)입니다. 다시말해 배기량, 크기, 엔진기능, 브랜드, … 등을 복잡하게 생각하기 보다는 이러한 변수들을 대표하는 개념인 ‘가격’으로 생각하면 간단합니다. 이와같이 주성분분석은 다양한 변수들로 부터 주성분, 즉 새로운 축(axis)을 찾는 분석이며 새로운 축(axis)은 어떤 대표개념을 의미합니다.

그런데, 주성분 분석에서 주성분은 새로운 축(axis)이며 원래의 축(axis)으로 부터 회전된 개념이지만 주성분 분석에서는 실제 축(axis)을 회전하는 것은 아닙니다. 이는 차츰 살펴볼 요인분석(Exploratory factor analysis)과의 한 가지 차이인데 요인분석에서는 실제, 축(axis)의 회전(rotation)을 통해 찾아진 요인에 대한 설명을 하기 위한 시도를 합니다. 물론, 주성분에 대해 예를들어 체력이나 가격등으로 의미를 부여할 수 있으면 더욱 좋기는 하겠지만 일반적으로 주성분분석에서는 관찰변수들의 변동(variation)에 대한 설명을 하는 것이 목적이며 찾아진 주성분들에 대한 의미를 파악하는 것이 목적은 아닙니다. 따라서, 일반적으로 주성분에 대해 어떤 의미를 부여하지는 않습니다.

어떤 software manual에 보니, 주성분분석은 소위 large sample을 필요로 하는 데 100개와 관찰변수의 5배 가운데 큰 수 만큼이 최소한의 sample size라고 합니다. 예를들어 관찰변수가 30개이면 100 < 150(=30*5) 이므로 최소한 150개의 sample이 필요합니다. 그리고, 변수가 Normal분포를 따르면 결과에 대해 좀 더 신뢰할 수 있게 됩니다. 참고로, 이러한 sample size는 절대적인 기준은 아닌데, 아마도 sample size와 관련된 절대적 기준은 ‘sample size가 매우 크다면 큰 차이가 없지만 그렇지 않은 경우에는, sample size는 클수록 좋다.’입니다.

주성분분석은 다른 분석을 위한 중간단계로 사용할 수도 있는 데 예를들어 매우 다양한 재무제표(balance sheet) 항목들에 대해 재무 건전성지표, 이익 증가지표, … 등의 몇 개의 주성분을 찾은 다음 주성분을 다른 분석에 활용하는 것입니다. 모든 항목에 대해 분석하기 보다 이렇게 설명력을 기준으로 몇 개의 항목을 찾은 다음 몇 개의 항목에 대해서만 분석하면 더욱 좋을 수 있는 데, 재무건전성, 이익증가지표, … 등의 주성분을 찾은 것이므로 이를 일반적인 설명변수처럼 사용하는 것입니다.

주성분분석을 하면 주성분끼리는 직교(=orthogonal, 직각, 90도, correlation이 0)하므로 산점도(scatter plot)를 그려보면 다음과 같게 됩니다. 즉, correlation이 0이라는 의미입니다.

 

관찰변수들이 주성분에 loading되는 것을 그래프로 표현해 보면 다음과 같은데 관찰변수는 x1, x2, x3의 3개이므로 3개의 주성분으로 데이터를 100%설명할 수 있습니다. 여기서는 Prin1, 즉 주성분1과 x1, x2, x3의 관계를 그래프로 그린 것인데 x2, x3은 Prin1에 많이 적재되어 있고 x1은 Prin1에는 크게 적재(loading)되어 있지 않습니다.

 

x1은 두번째 주성분, 즉 Prin2에 많이 적재되어 있는데 다음과 같습니다. x2, x3은 Prin2에는 많이 적재(loaded) 되어 있지 않습니다.

세번째 주성분, 즉 Prin3은 x1, x2, x3를 잘 설명하고 있지 않은데 그래프를 그려보면 다음과 같습니다.

소위, pattern plot을 그려보면 비교적 간단하게 주성분과의 관계를 파악할 수 있는 데 각각의 주성분을 두 축(axis)으로 하는 좌표평면에 principal loading의 위치(location)을 표시한 그래프입니다. 주성분분석에서는 두 축(axis)은 직교(orthogonal)합니다. 여기서는 3개의 주성분이 있으므로 (1,2), (1,3), (2,3)과 같은 3개의 pair, 즉 3개의 좌표평면을 생각할 수 있습니다. 각각의 주성분, 즉 각각의 축(axis)에 표시되는 백분율(percentage)은 각각의 주성분이 관찰변수(manifest variable)들의 변동(variation)의 몇 %를 설명하는 지를 의미하는 데 직교하는 좌표평면(coordinate plane)이므로 합계하면 두 개의 주성분에 의해 관찰변수들의 전체변동의 몇 %가 설명되는 지를 파악할 수 있습니다. 여기서는 두 개의 주성분이 x1, x2, x3의 데이터변동의 34.88% + 59.99% = 94.87%를 설명합니다.
출처 : http://m.blog.naver.com/leerider/100190679279