본문 바로가기

IT/AI

[통계] Day 6 데이터 분석: 차원 축소[PCA, 인자분석]

728x90

1. 공분산과 상관 행렬

 

   공분산은 두 변수 간의 관계를 나타내는 통계적 지표입니다. 공분산은 변수 간의 편차를 계산하여 그 값들의 평균을 내는 과정으로 계산됩니다. 공분산 값이 0보다 크면 두 변수가 함께 증가하는 경향이 있으며, 0보다 작으면 하나의 변수가 증가할 때 다른 변수가 감소하는 경향이 있습니다. 하지만 공분산 값만으로는 변수의 단위에 의해 영향을 받아 해석이 어려운 경우가 있습니다.
   상관 행렬은 공분산 행렬을 표준화하여 얻은 행렬로, 변수들 간의 상관 관계를 나타내는 지표입니다. 상관 행렬의 값은 -1과 1 사이에 위치하며, 1에 가까울수록 강한 양의 선형 상관관계를 나타내고, -1에 가까울수록 강한 음의 선형 상관관계를 나타냅니다. 상관 계수가 0에 가까울수록 두 변수 사이에는 선형 관계가 거의 없음을 나타냅니다.

 


2. 공분산과 상관 행렬의 활용

관련성 및 의존성 분석
   공분산과 상관 행렬은 변수들 사이의 관련성을 분석하여 데이터의 패턴과 경향을 파악하는데 사용됩니다. 두 변수 간의 관계를 이해함으로써 어떤 변수가 다른 변수에 어떤 영향을 미치는지 파악할 수 있습니다.
변수 선택과 다중공선성 판단
   상관 행렬을 통해 변수들 간의 상관 관계를 분석하고, 다중공선성을 판단하여 중복되거나 상관성이 높은 변수를 제거할 수 있습니다. 이를 통해 모델의 복잡성을 줄이고 예측 모델의 성능을 개선할 수 있습니다.

 

더보기

다중공선성$($Multicollinearity$)$

다중공선성은 회귀 분석과 같은 통계 모델에서 발생하는 문제로, 독립 변수들 간에 강한 선형 관계가 존재하여 모델의 안정성과 해석력을 저하시키는 현상입니다. 다중공선성은 독립 변수들 간의 상관 관계가 높을 때 발생할 가능성이 높습니다.

다중공선성의 원인:
1. 데이터 문제: 데이터에 오류나 잘못된 값이 들어있는 경우에 다중공선성이 발생할 수 있습니다.
2. 변수 간 관련성: 두 변수가 강한 선형 관계를 가지면, 하나의 변수가 다른 변수를 설명할 수 있어서 다중공선성이 발생할 수 있습니다.
3. 데이터 변환: 변수 변환, 스케일링, 이상치 처리 등이 잘못되면 다중공선성을 유발할 수 있습니다.

다중공선성의 영향:
1. 모델의 불안정성: 다중공선성이 존재하면 회귀 모델의 계수 추정이 불안정해지며, 작은 변화에도 큰 변동이 일어날 수 있습니다.
2. 계수의 해석 어려움: 다중공선성으로 인해 계수들의 값이 불안정해지면, 이들의 해석이 어려워집니다.
3. 예측의 부정확성: 다중공선성이 존재하면 모델의 예측이 불안정하게 될 가능성이 높습니다.

다중공선성 대응 방법:
1. 변수 선택: 상관 관계가 강한 변수 중 일부를 선택하거나, 중복된 변수를 제거하는 방식으로 다중공선성을 해결할 수 있습니다.
2. 차원 축소: PCA와 같은 차원 축소 기법을 활용하여 변수들을 새로운 공간으로 투영하여 다중공선성을 줄일 수 있습니다.
3. 릿지 회귀와 라쏘 회귀: L1 정규화(라쏘) 또는 L2 정규화(릿지)를 적용하여 변수들의 계수를 조절하여 다중공선성을 완화할 수 있습니다.
4. 변수 변환: 변수들을 변환하거나 스케일링하여 다중공선성을 줄일 수 있습니다.
5. VIF(분산팽창요인) 검사: 변수 간 다중공선성 정도를 측정하는 VIF를 계산하여 높은 VIF 값을 가지는 변수들을 확인하고 조치를 취할 수 있습니다.

다중공선성은 회귀 분석과 같은 통계 모델에서 모델의 정확성과 안정성을 위협하는 중요한 문제입니다. 적절한 대응 방법을 통해 다중공선성을 관리하고 모델의 성능을 향상시킬 수 있습니다.

 

차원 축소와 데이터 시각화
   상관 행렬을 통해 변수들 간의 상관 계수를 분석하여, 변수들 사이의 선형 종속성을 파악하고 중복된 정보를 줄여 차원 축소를 수행할 수 있습니다. 이는 데이터의 시각화 및 시각적 분석에 활용될 수 있습니다.

 


3. 주성분 분석$($PCA$)$

   주성분 분석$($Principal Component Analysis, PCA$)$는 다차원 데이터의 차원을 축소하면서 데이터의 주요한 패턴을 추출하는 비지도 학습 알고리즘입니다. 주요 목적은 데이터의 복잡성을 감소시키고, 변수 간의 상관 관계 및 패턴을 파악하는 것입니다. PCA는 데이터를 새로운 좌표계로 변환하여 데이터의 분산을 최대화하는 주성분을 찾아내는 방식으로 동작합니다.

장점과 활용
   - 차원 축소: PCA는 고차원 데이터의 차원을 축소하여 데이터를 더 낮은 차원으로 표현함으로써 계산 효율성을 향상시키고 시각화에 용이합니다.
   - 변수 간 상관 관계 이해: PCA는 데이터를 주성분으로 변환함으로써 변수 간의 상관 관계 및 패턴을 파악할 수 있습니다.
   - 잡음 제거: 주성분 분석을 통해 주요한 패턴을 추출함으로써 노이즈나 불필요한 정보를 제거하여 데이터를 정제할 수 있습니다.

 

더보기

예)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as pch
from sklearn.decomposition import PCA

data = np.array([[1,2], [3,4], [5,6], [7,8]])
print(f"data : \n{data}")
plt.figure(figsize=(6,6))
plt.scatter(data[:,0], data[:,1])
print("-------------------")

m1 = data[:,0].mean()
m2 = data[:,1].mean()
print(f"m1: {m1}\nm2: {m2}")
print("-------------------")

data_sub_mean = data - np.array([m1,m2])
print(f"data_sub_mean : \n{data_sub_mean}")
print("-------------------")

var1 = (data_sub_mean[:,0] ** 2).mean()
var2 = (data_sub_mean[:,1] ** 2).mean()
cov = (data[:,0] * data[:,1]).mean() - m1 * m2
print(f"var1 : {var1}\nvar2 : {var2}\ncov : {cov}")
print("-------------------")

cov_mat = np.cov(data.T, bias=True)
print(f"cov_matrix :\n{cov_mat}")
print("-------------------")

eig_val, eig_vec = np.linalg.eig(np.array(cov_mat))
print(f"eig_val: {eig_val.astype(int)}\neig_vec: \n{eig_vec}")

projected_data =  [a+b for a, b in data * np.array([eig_vec[:,0]])]
plt.scatter(projected_data, np.zeros_like(projected_data))
plt.plot([1,12],[1,12])
for r in projected_data:
    cir = pch.Circle((0,0),radius=r,fill=False)
    plt.gca().add_patch(cir)
for p in data:
    plt.plot(range(p[0],p[0]+2),range(-p[0],-p[0]-2,-1)+p.sum())
plt.xlim(0,11)
plt.ylim(0,11)
plt.grid(linestyle=':',color='0.5',linewidth=1)
plt.show()

 >>>

data : 
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
-------------------
m1: 4.0
m2: 5.0
-------------------
data_sub_mean : 
[[-3. -3.]
 [-1. -1.]
 [ 1.  1.]
 [ 3.  3.]]
-------------------
var1 : 5.0
var2 : 5.0
cov : 5.0
-------------------
cov_matrix :
[[5. 5.]
 [5. 5.]]
-------------------
eig_val: [10  0]
eig_vec: 
[[ 0.70710678 -0.70710678]
 [ 0.70710678  0.70710678]]
파란 점이 $\overrightarrow{(0.7,0.7)} = \overrightarrow{(1,1)}$의 벡터의 연장선으로 투영된 점으로 이동 -> 2차원에서 1차원으로 축소됨

 


4. 인자 분석$($Factor Analysis$)$

   인자 분석$($Factor Analysis$)$은 다변량 통계 분석 기법 중 하나로, 다양한 관찰 변수들 사이의 내재된 구조를 이해하고 설명하는데 사용됩니다. 인자 분석은 주어진 변수들을 더 적은 수의 잠재적 요인이나 인자로 설명하는 방법을 제공합니다.

활용
   - 변수 간 의존성 이해: 인자 분석은 변수 간의 의존성과 내재된 패턴을 파악하는 데 활용됩니다.
   - 변수 선택과 중요한 인자 추출: 인자 분석을 통해 중요한 인자나 요인을 추출하여 변수 선택이나 모델링에 활용할 수 있습니다.

 


5. 공분산과 상관 행렬, 주성분 분석, 인자 분석의 활용 사례

데이터 분석과 시각화
   - 공분산과 상관 행렬을 통한 데이터의 관련성 파악
   - 상관 행렬의 히트맵을 통한 변수들 간의 상관 관계 시각화

모델링과 최적화
   - 다중공선성 판단과 변수 선택을 통한 모델 성능 개선
   - 주성분 분석과 인자 분석을 활용한 변수 축소와 중요한 변수 추출

금융 분야에서의 응용
   - 포트폴리오 리스크 평가와 최적화를 위한 상관 행렬 분석
   - 금융 시장의 변수들 간의 관계 이해를 통한 투자 전략 개발

데이터 분석의 전반적인 효율성 향상
   - 차원 축소를 통한 계산 효율성 향상
   - 변수 간의 관계와 패턴을 파악하여 모델의 성능 향상

이러한 분석 기법들은 다차원 데이터의 이해와 모델링에 중요한 역할을 수행하며, 데이터 분석의 깊이 있는 이해를 돕습니다.