본문 바로가기
데이터사이언티스트 Data Scientist

PCA - 주성분 분석

by 루시달 2024. 11. 4.

 

PCA (Principal Component Analysis, 주성분 분석)고차원 데이터를 저차원으로 축소하여 데이터의 중요한 패턴을 찾는 기법입니다. 쉽게 말해  데이터의 차원(데이터프레임에서의 변수의 갯수)을 축소하는 것이라고 이해하면 쉽습니다.

 

 

3차원의 공간이 있다고 생각해 봅니다.

완전 정면에서 바라 본다고 생각했을 때

 

 

사진을 찍는다면, 이런 형태의 사진이겠지요.

이렇게 3차원에 있던 공을 2차원의 형태로 표현, 즉 차원은 한 차원 축소 한 것 입니다.

 

중요한 건, 이 두 개의 공이 어느 정도 떨어져 있느냐, 서로 간의 어떤 위치에 있느냐 입니다.

 

만약 이번엔 완전 측면에서 이 공을 바라본다면

 

두 공이 아래 그림처럼 완전히 겹쳐보이게 될 수도 있겠죠.

실제 상황에 있는 정보들이 정확히 전달되지 않겠죠. 분명 두 개의 공이 떨어져 있었을텐데, 2차원으로 축소했을 때

데이터의 손실이 일어날 수 있게 됩니다.

 

약간 측면에서 본다면 한다면

 

처음 정면에서 봤던 공 간격보다는 살짝 좁아 보이겠습니다.

 

이 번엔 공을 살짝 옮겨 보겠습니다.

이번엔 오른쪽 위치의 공이 살짝 뒤로 멀어졌습니다.

 

마찬가지로 맨 처음 정면에서 봤을 땐

다음과 같은 간격의 위치로 보일 것이고

 

측면에서 봤을 땐

 

완전히 일직선상의 공이 어디었기 때문에 아래와 같이 약간 좁은 위치로 나타날 것 입니다.

 

하지만 공의 위치를 상세히 알수는 없고 마찬가지로 약간의 손실이 있다고 볼 수 있을 것 같습니다.

 

이번엔 대각선에서 볼 껀데, 공의 위치와 완전히 직교하는 곳에서 본다고 칩시다.

 

 

처음보다 살짝 넓어진 위치간격을 확인할 수 있을 겁니다.

 

 

 

 

 

자, 이제 이 3가지를 두고 비교해볼 때

이 셋 중에 어떤 사진이 이 실제 상황을 가장 잘 담고 있느냐(가장 많은 정보를 담고 있느냐)를 물어본다면

바로 마지막 사진이 될 것 입니다.

 

이제 데이터의 차원으로 이 이야기를 옮겨옵니다.

 

 차원이 변수의 갯수라면,

만약 2개의 변수가 있다면 2차원 그래프를, (x축, y축)

만약 3개의 변수가 있다면 3차원 그래프를 (x축, y축, z축) 그릴 수 있습니다.

 

 3차원에서 보았던 실제 공이 데이터인 것이고

 2차원으로 옮겼을 때, (차원을 축소했을 때) 어느정도 정보의 손실이 있지만

어느 각도에서 바라보느냐에 따라 정보의 손실이 클수도 있고, 상대적으로 적을 수도 있다라는 걸 설명드리기 위해 위 예를 들었습니다.

 

자, 이제 PCA가 하는 역할에 대해 알아봅시다.

 

2차원 -> 1차원으로 축소한다면

x축, y축 위치값에 따라 흩어져있던 점들이 임의의 선에서 직교하는 방향으로 원을 옮겨주면 다음과 같이 원이 배치 되고

 

이를 1차원으로 평평하게 펼쳐 놓으면 다음과 같이 만들 수 있겠습니다.

 

아까는 오른쪽 위로 상승하는 직선을 그렸는데 이번엔 반대로 오른쪽 아래로 하강하는 직선을 그려보겠습니다.

그리고 그 선을 기준으로 또 직교하도록 원들을 밀어 넣고 다시 평평하게 펼쳐 보면 다음과 같은 모습이 됩니다.

 

 

첫번째와 두번째 1차원으로 변형된 결과물을 비교해 봅시다.

어느 쪽이 더 원래의 데이터 정보를 더 잘 담고 있다고 생각하시나요?

아무래도 왼쪽 입니다. 데이터가 6개였는데 오른쪽은 너무 겹쳐서 정보가 많이 손실되고 있는 것 같습니다.

PCA에서는 정보의 손실이 최소화되는 방향으로 데이터의 차원을 축소시킵니다.

그 최소화되는 방향은 다음 그림과 같이 수직으로 데이터를 내렸을 때 데이터간의 간격이 가장 잘 떨어지는 방향입니다.

패키지를 통해 이 선은 잘 지정을 해주기 때문에 고민을 할 필요는 없습니다.

 

가장 잘 축소하는 방향으로 축소한 것이 바로 첫 번째 주성분 입니다.

주성분 분석에서는 차원의 수만큼 선을 뽑아 냅니다. 위의 예시는 2차원이므로 2개의 주성분을 뽑아내겠죠. (PC2)

 

첫번째 주성분의 특징을 살펴보면

두번째 그림에서 데이터 간 거리는 완벽하게 나타내고 있으나

세번째 그림에서 데이터가 직교하는 부분은 잘 반영하지 못하는 한계가 있습니다.

 

그래서 두번째 주성분을 뽑을 때, 이 한계를 보완하는 방향으로 주성분을 뽑아내게 됩니다.

즉, PC1에 추려내지 못한 나머지 부분을 좀 더 완전하게 커버하기 위해서는

아래와 같이 PC1과 직교하는 성분을 뽑아내야 부족했던 걸 PC2가 보완해줄 수 있게 되어

> 주성분들은 정보를 모두 합했을 때 기존 데이터가 가진 정보력을 거의 100% 구현해내게 됩니다.

 

 PCA 분석에서는 차원을 축소해주어야 하기 때문에 변수의 갯수 그대로 사용할 순 없습니다.

따라서 가장 데이터의 특성을 잘 반영하는 변수들을 추려내서 (몇개인지는 정해져있지 않아요) 주성분을 뽑게 됩니다.

 

PCA는 데이터의 **분산이 가장 큰 방향을 따라 새로운 축(주성분)**을 정의하고, 이 축을 기준으로 데이터를 표현하여 차원을 축소합니다. 주로 데이터 시각화, 노이즈 제거, 과적합 방지 등에 유용하게 사용됩니다.


이제 코드를 통해 실습 해보겠습니다.

사이킷런의 decomposition에서 PCA를 가져와 object로 만듭니다. 

 

그리고 fit으로 데이터프레임을 학습 시킵니다.

 

transform을 써서 변환을 시켜 줍니다. (np.array 형태로 출력)

 

 

판다스 데이터프레임을 통해 데이터 정리를 해봅니다.

아래와 같이 총 79개의 변수에 대해 컬럼이 출력되는데, 

0이 가장 주성분1로 데이터에 대해 가장 잘 설명해주고, 1 > 2 > 3 주성분으로 넘어갑니다.

 

 그런데 변수 수가 너무 많습니다.

2개의 값만 주성분 분석을 하고 싶다면 다음과 같이 해볼 수 있습니다.

 

그럼 이 2개의 주성분이 기존 데이터의 얼마만큼의 정보를 가지고 있는가? 얼마만큼의 정보 손실이 일어났는가를 따져봐야 합니다.

손실이 많다면 3-4개씩 늘려나가는 방향을 찾아봐야 합니다.

 

그래서 두 주성분이 얼마나 기존 데이터를 설명하고 있는지 다음 코드를 통해 확인할 수 있습니다.

 

주성분 1만해도 99.9998을 설명하고 있기 때문에 주성분 2개 아니라도 1개만으로 분석을 수행해도 무방한 결과 입니다.

그런데 현실적으로 저런 케이스는 잘 일어나지 않습니다.

 

explained_variance_ratio_ : 주로 주성분 분석(Principal Component Analysis, PCA)과 같은 차원 축소 기법에서 사용되는 속성입니다. 이 속성은 각 주성분이 원본 데이터의 분산(variance)을 얼마나 설명하는지에 대한 비율

 


이걸 언제 쓰는게 좋고, 단점은 무엇일까요?

PCA 분석을 쓰는 이유는 변수의 갯수를 줄이기 위해 즉, 차원을 축소하기 위해서 입니다.

이는 데이터를 시각화할 때 유용합니다.

79개의 변수를 가지고 그림으로 표현하는게 매우 어렵겠죠.

그래서 데이터 전체를 그래프로 표현하고 싶은데 변수가 너무 많다면, PCA를 써서 차원을 축소해 시각화하는데 유용하게 사용 됩니다.

 

다른 중요한 용도는 데이터가 너무 커서 컬럼이 너무 많은 경우 입니다.

복잡한 모델링 기법을 쓰면 시간이 너무 많이 걸릴 수 있겠죠. PCA를 쓰면 학습 시간도 축소시킬 수 있어 유용하죠.

 

다중 공선성을 처리할 수 있다면 장점도 있습니다.

변수 간의 상관관계가 높을 때, 모델링하는데 서로 영향을 주기 때문에 모델링이 어렵습니다.

 


PCA의 주요 개념

  1. 차원 축소:
    • 원래의 고차원 데이터를 몇 개의 주성분(Principal Components)으로 축소하여 표현합니다.
    • 정보의 손실을 최소화하면서 데이터의 복잡성을 줄이는 것이 목적입니다.
  2. 주성분(Principal Component):
    • 데이터의 분산(variance)이 가장 큰 방향을 찾고, 이 방향을 첫 번째 주성분(PC1)으로 정의합니다.
    • 두 번째 주성분(PC2)은 첫 번째 주성분에 직교(orthogonal)하는 방향 중에서 분산이 최대가 되는 방향으로 정의됩니다.
    • 이렇게 계속해서 분산이 큰 순서대로 새로운 축을 정의하여, 각 주성분이 데이터의 주요 패턴을 대표하게 됩니다.
  3. 분산 설명(Explained Variance):
    • 각 주성분은 원래 데이터의 분산을 얼마나 설명하는지를 나타냅니다.
    • 일반적으로 설명하려는 분산 비율에 따라 사용할 주성분의 개수를 결정합니다. 예를 들어, 90% 이상의 분산을 설명하는 주성분을 선택할 수 있습니다.

PCA의 작동 방식

  1. 데이터 표준화:
    • PCA 수행 전, 데이터의 스케일을 맞추기 위해 표준화(StandardScaler)를 적용합니다. 이는 PCA가 분산을 기반으로 작동하기 때문에 스케일 차이가 큰 데이터에서는 특정 변수의 영향이 지나치게 커질 수 있기 때문입니다.
  2. 공분산 행렬 계산:
    • 데이터를 표준화한 후, 변수 간의 관계를 나타내는 공분산 행렬을 계산합니다.
  3. 고유값 및 고유벡터 계산:
    • 공분산 행렬에서 고유값(eigenvalue)과 고유벡터(eigenvector)를 구합니다.
    • 고유값은 각 주성분이 데이터의 분산을 얼마나 설명하는지를 나타내며, 고유벡터는 주성분의 방향을 나타냅니다.
  4. 주성분 선택:
    • 고유값이 큰 순서대로 주성분을 선택하여 데이터의 주요 분산을 최대한 설명하도록 합니다.
  5. 차원 축소:
    • 선택된 주성분을 이용해 원래 데이터를 새로운 축으로 변환합니다. 이 과정에서 데이터는 낮은 차원으로 축소됩니다.

PCA의 주요 파라미터

  • n_components: 축소할 차원의 개수 또는 설명할 분산 비율을 설정합니다. 예를 들어 n_components=0.9로 설정하면, 전체 분산의 90% 이상을 설명하는 주성분만 선택됩니다.

PCA의 단점은 주로 해석력의 부족비선형 데이터에 대한 한계에서 발생합니다. 아래는 PCA의 대표적인 단점들입니다.

1. 해석력의 부족

  • 의미 해석이 어려움: PCA로 생성된 주성분은 원래 변수들의 선형 결합이기 때문에, 각각의 주성분이 어떤 실제 의미를 가지는지 해석하기 어렵습니다. 이는 특히 비즈니스나 과학 연구에서 결과의 해석이 중요한 경우 문제가 될 수 있습니다.
  • 특성 상실: 원래 변수들이 가지던 명확한 의미나 정보를 잃을 수 있습니다. 예를 들어, 주성분들이 단순히 최대 분산 방향을 기준으로 정의되기 때문에, 도메인 지식과 연관된 의미를 놓칠 가능성이 큽니다.

2. 비선형 관계 표현의 한계

  • 비선형 데이터에 적합하지 않음: PCA는 데이터의 선형 관계를 기반으로 하는 기법이므로, 데이터 간의 비선형 관계를 잘 표현하지 못합니다. 예를 들어, 비선형 관계가 강한 이미지 데이터나 텍스트 데이터에는 PCA가 적합하지 않을 수 있습니다. 비선형 관계를 다룰 때는 커널 PCA(Kernel PCA) 같은 기법이 더 적합합니다.

3. 정보 손실 가능성

  • 주성분 선택에 따른 정보 손실: 몇 개의 주성분만 선택해 차원을 축소하면 일부 정보가 손실될 수 있습니다. 특히 낮은 분산이지만 중요한 특성이 포함된 데이터의 경우, 이 특성이 축소 과정에서 사라질 수 있습니다.
  • 고차원 축소의 한계: 실제 중요한 정보가 여러 차원에 걸쳐 분산되어 있는 경우, 낮은 차원으로 축소할 때 중요한 패턴을 놓칠 수 있습니다.

4. 스케일링의 필요성

  • 데이터 전처리가 필수적: PCA는 분산을 기반으로 하므로, 변수들이 서로 다른 스케일을 가지고 있다면, 특정 변수가 지나치게 큰 영향을 미치게 됩니다. 따라서 데이터 표준화나 정규화가 필수적이며, 전처리 과정에서의 실수가 PCA의 성능에 직접적인 영향을 줄 수 있습니다.

5. 이상치에 민감함

  • 이상치에 취약: PCA는 분산을 기준으로 하는 기법이므로, 데이터에 이상치가 존재할 경우 주성분이 이상치 방향으로 치우칠 수 있습니다. 이는 모델의 성능과 해석에 부정적인 영향을 미칠 수 있으며, PCA 적용 전에 이상치를 처리하는 과정이 필요할 수 있습니다.

요약

PCA는 고차원 데이터의 차원을 줄이면서 데이터의 주요 패턴을 유지하는 데 유용하지만, 해석력 부족, 비선형 데이터에 대한 한계, 정보 손실 가능성, 전처리의 중요성, 이상치에 대한 민감성이라는 단점이 있습니다. PCA의 이러한 한계점은 데이터의 특성이나 목적에 따라 적절한 대체 방법(예: 커널 PCA, t-SNE)을 고려해야 할 이유가 됩니다.

 


이렇듯 PCA가 항상 좋은 건 아닙니다.

예측력과 설명력 사이에서 데이터 분석 상황에서 선택을 해야겠지요!

반응형