본문 바로가기
ML/ML-Kaggle, 데이콘

다중공산성

by lucian 2021. 12. 17.

다중공산성

상관관계가 높은 독립변수들이 다중으로 모델에 들어가 있을 때 발생한다.

즉 독립변수들이 강한 선형관계가 있을 때 발생하는 것이다.

다중공산성이 높다=같은 변수를 두번 넣은 것과 같다.

보통 다중 회귀방정식에서 다중공산성 문제가 발생한다.

 

https://heung-bae-lee.github.io/2020/01/08/machine_learning_02/

다중회귀방정식을 변동성으로 표현한 그림이다. y=a1x1+a2x2+a3x3+c

 

y : 종속변수

x1, x2, x3 : 독립변수

 

매출(Y)를 설명하는 독립변수들의 변동성들이 겹쳐지는 것을 볼 수 있는데, 다중공산성이 낮을 때는 이렇게 겹쳐져 있지 않고 매출(Y)의 변동성 안에서 고루게 분포되어 있다.

 

하지만 이처럼 변동성들이 겹쳐지면 이 종속변수를 설명하는 부분이 겹쳐지게 되므로 같은 변수를 두번 쓴 것과 같은 현상이 발생한다는 것이다. 이러면 모델의 신뢰도가 하락하고 결과값을 추론하는데 방해가 되기에 적절한 기준에서 제거해야 된다.

 

먼저 다중공산성을 확인하는 방법은 3가지가 있다.

1. scatter plot을 통해 확인

2. heatmap을 통해 확인

3. vif(variance inflation factor, 분산팽창요인)을 통한 확인

 

위의 1,2번은 EDA 포스트에 기록되어 있다.

3번 vif는 variance(분산) inflation(팽창) factor(요인) 의 약자로 각 변수간의 다중공산성을 표현한다.

범위는 1부터 무한대까지 있으며 보통 10이상이면 변수에 다중공산성이 있는 것으로 판단한다.

 

vif는 1/1-결정계수

vif를 계산할 변수를 종속변수로 두고 나머지 독립변수들을 독립변수로 두어 거기에서 나온 결정계수를 활용한다.

이건 통계학적인 수식이라 개발자들이 쓰는 코드를 보자.

우리는 그저 이미 만들어놓은 라이브러리를 활용하면 된다.

# 먼저 데이터를 가져오자.
# 데이터 다운로드 링크로 데이터를 코랩에 불러옵니다.

!wget 'https://bit.ly/3i4n1QB'

import zipfile
with zipfile.ZipFile('3i4n1QB', 'r') as existing_zip:
    existing_zip.extractall('data')

 

 

# vif 기능을 제공하는 라이브러리
from statsmodels.stats.outliers_influence import variance_inflation_factor

# 그 외 필요한 라이브러리 가져오기
import pandas as pd

 

 

train = pd.read_csv('data/train.csv')

# 범주형 변수 제거(type)
train.drop('type',inplace = True,axis=1) # inplace=True로 하면 변수= 해줄 필요가 없음을 다시한번 기억하자.


vif=[]

# values atribution(속성) 이용해 train 데이터의 값만 추출
train_val=train.values
print(train_val)


# variance_inflation_factor 함수에 인자로 train_val (train 데이터의 값)과 인덱스 번호 지정  - for 반복문 이용
# 위의 그림처럼 x1이 종속변수로 들어가면 i=0
# x2가 종속변수로 들어가면 i=1이 된다.
for i in range(len(train.columns)):
	vif.append(variance_inflaction_factor(train_val,i))
    
    
vif

 

다중공산성 리스트를 더 보기 편하게 바꾼다.

vif_dataframe=pd.DataFrame()
vif_dataframe['columns']=train.columns
vif_dataframe['vif']=vif

vif_dataframe

 

이렇게 다중공산성을 구해봤다. 이제 이 모델의 성능을 향상시키고 신뢰성을 높이기 위해 다중공산성을 하나씩 제거해야한다. 하지만 무작정 다중공산성이 있는 변수들을 제거하면 안된다.

 

vif가 높더라도 통계적으로 유의미한 변수(p-value가 0.05보다 낮은 것들)이라면 제거하지 않는 것이 좋다. 즉 vif가 높고 p-value가 높은 변수들을 차례대로 제거하면서 vif를 확인하는 것이 좋다고 본다.

 

 

 

통계학적인 다중공산성은 이분의 포스트를 보고 공부했다.

https://heung-bae-lee.github.io/2020/01/08/machine_learning_02/

 

Regression(02) - 다중선형회귀 및 다중공선성

다중 선형 회귀 다중회귀방정식에서 회귀계수에 대한 해석은 자주 혼동되는 것 중 하나이다. 단순회귀방정식은 직선을 표현하지만 다중회귀방정식은 평면(독립(설명)변수가 두개인 경우) 혹은

heung-bae-lee.github.io

 

'ML > ML-Kaggle, 데이콘' 카테고리의 다른 글

차원 축소  (0) 2021.12.29
다중공산성 해결 방법  (0) 2021.12.29
Bayesian Optimization  (2) 2021.12.16
Hold-out, 교차검증(K-Flod), Stratified K-fold  (0) 2021.12.09
GBM(Gradient Boosting Model)  (0) 2021.10.08

댓글