※ 전공자가 아니기 때문에 비약적인 부분이 많을 수도 있겠으나,
대략적인 흐름을 설명하고자 하는 노력이니 전공자분들이 hoxy나 이 글을 보고 오류를 찾는다면 알려주시길 바람.
회귀분석에서 검정이 필요한 이유
우리가 회귀분석을 하는 이유가 애초에 무엇인지 생각해보자. 우리는 일정한 패턴을 갖는 데이터들로 하여금 (선형적인) 식을 만들어 그와 비슷한 데이터를 새롭게 입력받은 경우에도 문제를 해결, 혹은 예측하고자 회귀분석을 한다. 위의 데이터들을 이용하여 다음과 같은 함수를 R에서 구현해보자.
test_vif1
1
2
3
4
5
6
7
8
9
10
11
12
13
|
library(car) # vif 함수용
test <- read.csv('c:/data/test_vif1.csv')
test
# test에 있는 학생정보는 불필요하므로 제외
test <- test[-1]
# 회귀 모델 생성
regression_model <- lm(test$시험점수~.,data=test)
summary(regression_model)
# 팽창계수 확인
vif(regression_model)
|
cs |
test_vif1은 시험점수, 아이큐, 공부시간에 대한 컬럼이 존재하는 데이터로 다중회귀분석에 해당하는 데이터이다. 종속변수(Y), 즉 (예측)결과인 시험점수는 독립변수(X)인 아이큐와 공부시간에 의해 나타낼 수 있다. 내가 방금 한 말을 요약하자면 아이큐와 공부시간에 의해 시험점수를 나타낼 수 있다는 것이다. 그런데 왜 굳이 회귀식을 만들어 놓고선 summary를 하고 그것을 굳이굳이 캡쳐까지 해서 올려놓은것일까? 그것에 대해 이제부터 설명하도록 하겠다. 우선 위의 그림에서 Coefficients(계수) 테이블 중 t value와 Pr(>|t|) 를 보자.
우리가 t-value와 p-value(Pr(>|t|)의 값을 보는 이유는, 이 독립변수들이 정말 회귀식을 구성하는데 필요한지에 대해 보기 위해서이다. 그리고 t-value와 p-value를 이해하기 위해서는 귀무가설과 대립가설에 대해 이해할 필요가 있다. 더 디테일한 내용에 대해서는 구글링(크흡 비전공자라 미안해...)을 하길 바란다.
t value의 귀무가설은 α_i(회귀계수) = 0 이다. 즉, 귀무가설을 만족한다는 것은 회귀계수 = 0 을 만족하는 것이고 이 말은 즉슨, 주어진 데이터인 X가 종속변수(Y)에 영향을 미치지 않는다는 것을 의미한다. 결국에는 쓸모 없는 데이터란 말이다. t value를 구하는 방법은 구글링을 통해 찾아보는 것을 추천한다.
Pr(>|t|) : p value
Pr(>|t|)는 p value를 의미하고 p value는 위에 구한 t value값을 기준에 해당하는 값(|t|)과 비교하여 나타낸 값으로, 이 값은 유의수준에 적합하면 할수록, 즉 0.05보다 작고 0에 가까울수록 매우 유의미한 데이터라고 인식하고 0.05보다 크면 불필요한 데이터에 가깝다고 인식한다. 위의 summary를 보면 p value 값 옆에 * 표시들이 있는데 *이 많을수록 유의미한 데이터임을 나타낸다.
이렇게 t value와 p value를 통해 1차적으로 독립변수가 회귀식에 필요한지 아닌지를 우선적으로 판단한다.
test_vif1 데이터에서 아이큐와 공부시간은 귀무가설을 기각하기 때문에 회귀식에 필요한 독립변수임을 알 수 있다.
test_vif2
1
2
3
4
5
6
7
8
9
10
11
12
13
|
library(car) # vif 함수용
test <- read.csv('c:/data/test_vif2.csv')
test
# test에 있는 학생정보는 불필요하므로 제외
test <- test[-1]
# 회귀 모델 생성
regression_model <- lm(test$시험점수~.,data=test)
summary(regression_model)
# 팽창계수 확인
vif(regression_model)
|
cs |
위의 test_vif1와 같은 방식으로 회귀 모델을 요약해보았다. test_vif2의 컬럼에는 등급평균이 추가되었다. 위의 summary를 보면 아이큐와 등급평균의 p value 값이 유의수준 0.05보다 크다는 것을 알 수 있다. 이것은 결론적으로 회귀식에서 아이큐와 등급평균이 유의미하지 않다는 것을 의미한다. 어떻게 이런 일이 생긴걸까? 등급평균 하나만 추가한건데 말이다!
이러한 경우, 아이큐와 등급평균 두 개의 데이터는 불필요해진다. 하지만 정말 과연 그럴까? 어떻게 아이큐와 공부시간만 있을 때는 2개의 독립변수로 나타내지는 다중회귀식이 만들어지는데 지금과 같은 경우는 오직 공부시간에만 영향을 받는 단순선형회귀식이 되어버린걸까? 또한 단순선형회귀식이 된다면 이전의 회귀모델보다 데이터의 정확도가 떨어지게 될 것이다. (아니 어떻게 모은 데이터인데 안 모으니만 못하다니 이게 뭔소리야!!!!)
이러한 경우를 위해 우리는 팽창계수를 확인한다.
팽창계수(vif)
위의 팽창계수를 보자. 아이큐와 등급평균이 22, 19로 매우 높은 값을 나타낸다는 것을 알 수 있다. 이렇게 팽창계수가 높다는 것은 다중공선성이 있다는 뜻이고, 다중공선성이 있다함은 독립변수들 중에 서로 영향을 주는 것이 있다는 뜻이다. 서로 영향을 주는데 그게 어떻게 독립변수겠는가? 따라서 우리는 서로 영향을 주는 변수들 중 하나만을 남겨 독립변수로서의 성능을 할 수 있도록 해줘야한다. 팽창계수를 확인하여 독립변수인지 아닌지를 판단하는 방법에 대해서, 현업 기준으로는 팽창계수가 보통 10보다 큰 것을 골라내고, 엄격하게는 5보다 큰 것, 느슨하게는 15~20보다 큰 것을 골라낸다.
위의 데이터에서는 아이큐와 등급평균이 기준 이상이므로 둘 중 하나만을 지워야 한다. 어떤 변수를 지워야할까?
결론은 팽창계수가 큰 것부터 없애야한다 이다. 현재 test_vif2의 데이터 같은 경우는 컬럼이 고작 3개 뿐이기 때문에 팽창계수가 큰 아이큐와 등급평균이 서로 영향을 준다는 것을 알 수 있다. 하지만 만약 컬럼이 30개라면? 그 이상이라면? 팽창계수가 큰 것이 10개 이상이라면? 우리는 어떤 컬럼들이 서로에게 영향을 주는지 알 수 없다. 그렇기 때문에 우선적으로 팽창계수가 가장 큰 컬럼부터 지워나가며 다시 회귀모델을 만들고, 또 거기서 팽창계수가 큰 것을 지워나가는 것을 반복하며 회귀모델을 만들어가야 한다.
+) 전공생분과의 대화를 통해서 알게 된 사실은 팽창계수 뿐만 아니라 상관관계로도 판단할 수 있다! 다만 상관관계로 판단하기에는 컬럼이 너무 많아서 눈에 쉽게 안 들어오니까 쉬운게 좋은 나는 대체로 팽창계수가 큰 것부터 없애는 방향으로 하려고 했는데, 노력을 조금 더 해서 정확도를 높이고자 하면 상관관계가 있는 변수들을 파악하여 그 중에서 종속변수와 연관성이 더 높은 변수를 살리는 것이 좋다. 이것은 개인의 판단이자 몫이니 참고하길 바란다!
결론
정확도가 높은 회귀 모델을 만들기 위해서는
1. p value로 독립변수(컬럼)가 회귀식에 필요한지 아닌지를 우선적으로 판단
2. 만약 p value에서 귀무가설을 기각하지 않는다면 팽창계수(vif)를 확인하여 다중공선성이 있는 독립변수(컬럼)를 하나씩 지워나감
OR 상관계수로 파악하여 서로 영향을 주는 변수를 파악하고, Y(종속변수)와 상관관계가 비교적 작은 독립변수를 하나씩 지워나감
'인공지능 > 실습예제' 카테고리의 다른 글
(R) 신경망 활용하기 2 - 와인 분류 (0) | 2020.07.01 |
---|---|
(R) 신경망 활용하기 1 - 콘크리트 강도 예측 (0) | 2020.07.01 |
(R) 회귀분석 활용하기 (0) | 2020.06.26 |
(R) 규칙기반알고리즘 활용하기 - 버섯 분류 (0) | 2020.06.26 |
(R) 의사결정트리 활용하기 2 - 은행 대출 채무 이행/불이행 여부 예측 (0) | 2020.06.25 |