728x90

*본 내용은 시계열데이터 강의 내용 중 일부분을 요약한 내용입니다

 

 

저번 포스팅에 이어서 조건수를 줄이기 위한 다중공선성(Multicollinearity) 제거를 포스팅하겠습니다.

  • 독립변수가 다른 독립변수의 조합으로 표현될 경우 다중공선성이 발생
  • 독립변수끼리 서로 상관관계가 있을경우 발생
  • 독립변수의 공분산 행렬(Covariance Matrix) 벡터공간(Vector Space)의 차원과 독립변수의 차원이 같지 않는 경우(Full Rank가 아니다)

 

다중공선성 제거 방법 2가지(VIF,PCA)

1.VIF(Variance Inflation Factor): 종속성이 높은 X들을 선택하는 방법

각 변수에 대해서 회귀분석을 실시합니다. 아래처럼 X1이라는 변수는 다른 변수의 선형결합으로 표현이 될수 있을지를 계산한게됩니다. 만일 R^2값이 크다면 X1는 다른 변수에 의해 표현이 되는 것이므로 제거 대상에 해당됩니다.

X1= aX2+bX3

 

이런 방법을 통해 모든 변수를 회귀분석을 통해 종속성이 높은 X들을 찾아냅니다.

 

위 VIF 공식에서 R^2이 클수록 VIF값도 커집니다.

 

#효과적인 X들을 VIF 방법을 통해 추출하기
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = pd.DataFrame()

#i번째 x들을 다른 x들로 회귀분석
#높을수록 선형결합으로 표현 될수 있으며 이는 종속성이 있는 변수이다.
vif['VIF_Factor']= [[variance_inflation_factor(X_train_feRS.values, i) for i in range(X_train_feRS.shape[1])]

vif['Feature'] = X_train_feRS.columns
vif.sort_values(by='VIF_Factor', ascending=True)

 

실습으로 사용방법 확인

# extract effective features using variance inflation factor
vif = pd.DataFrame()
vif['VIF_Factor'] = [variance_inflation_factor(X_train_feRS.values, i) 
                     for i in range(X_train_feRS.shape[1])]
vif['Feature'] = X_train_feRS.columns
vif.sort_values(by='VIF_Factor', ascending=True)['Feature'][:10].values


array(['count_diff', 'holiday', 'count_seasonal', 'Day', 'windspeed',
       'Quater_ver2', 'Hour', 'weather', 'Quater_Dummy_2', 'DayofWeek'],
      dtype=object)
  • 몇개의 변수를 사용했을때 성능이 가장 좋을지는 모르기 때문에 모든 경우의 수를 실행해 봐야 한다
  • 아래 결과는 순서 VIF가 낮은 순으로 정렬 후 12개 변수를 사용했을때 결과입니다. 

 

 

  • 정화도는 0.864로 기존보다 정확도가 내려갔습니다
  • windspeed를 제외한 모두가 종속변수에 영향을 주고 있으며 계수값도 이전에 비하면 현실성 있는 수치를 보입니다.
  • Kurtosis가 6.022로 정규분포로 더욱 근사한 모양을 띠고 있으며 왜도 값도 줄어 들었음을 확인할수 있습니다
  • cond.No가 1,530으로 기존 34,000보다 확연히 감소 했습니다. 조건수의 감소는 독립변수들간의 상관성 감소를 뜻합니다.

 

 

2.PCA(Principal Component Analysis)

X1~X10까지의 10개 변수를 PCA 실행하면 X1^ ~X10^ 변수에 완전히 새로운 값이 채워지게 됩니다.

이 값은 기존의 변수들 값과 어떠한 연관성이 없습니다. 따라서 이 새 값은 서로 독립적으로 생기게끔 생성되었으므로 모델에 적용하면 되지만 단점은 완전히 새 값이 나오므로 어떤 의미를 가지고 있는지에 대한 재해석이 필요합니.

강의 실습에서는 VIF만을 실습했기때문에 따로 소스는 없습니다.

 

 

 

 

 

 

 

 

*정상성프로세스 이해하기

시계열이 정상성이다 라는 뜻은 시간의 흐름에 따라 "통계적 특성(Statistical Properties)"이 변하지 않는것이다.

  • 통계적 특성(Statistical Properties): 주로 평균(Mean)과 분산(Variance)/공분산(Covariance)를 얘기하지만 이를 포함한 모든 분포적 특성을 총칭함

시간 흐름에 따라 평균,분산,자기상관(autocorr), 공분산 등 통계적 특성이 변하지 않는다라는건 아래 녹색 그래프와 같은 의미이다. 평균을 낼때는 Frequency 기준으로 계산하면 같은 값이 나온다. 이외에 빨간색 그래프는 왼쪽부터 평균이 변하는 그래프, 중간 그래프는 분산이 일정치 않은 그래프, 맨 오른쪽 그래프는 평균과 분산은 일정한데 시점별로 짤랐을때는 자기상관이 있는 경우이다.  

시계열 데이터에서 정상성이 왜 필요한 것일까?녹색 그래프 처럼 값이 일정하면 좋은 점은 무엇일까?

 

예를들어서 설명하면 한 회사의 매출액을 예측하고자 합니다. 매출액은 -값도 나올수 있으므로 그 범위는 +무한대, -무한대 입니다. 매출액이 유리천장이 있는 게 아니기 때문에 한계란 없습니다. 그러면 예측을 하는 입장에서는 이 무한대 범위에서 예측을 하면 틀릴확률이 높습니다. 그러면 Y값인 매출액을 점유율로 우회해서 표현하게되면 0~1사이의 확률값으로 표현이 되고 범위가 정해졌으므로 틀릴확률이 크게 줄어들게 됩니다. 점유율을 예측 후 이를 매출액으로 다시 변환하면 되는것이죠

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts