본문 바로가기
Machine Learning

통계 분석 #7 : 회귀모델 적합도 평가 방법 with R (잔차, 결정계수, F, T)

by 무적물리 2020. 3. 25.

앞서 회귀모델 만드는 방법에 대한 포스팅의 연장선에서 회귀 모델 적합도를 평가하는 방법에 대해 여러분과 공유하고자 합니다. 회귀모델 적합도 평가는 말 그대로 회귀 모델이 얼마나 잘 생성되었는지를 통계량으로 평가하는 방법입니다. 즉, 모델이 예측력이 얼마나 되는지 평가하는 방법입니다. 평가 방법에는 다양한 통계량이 사용되는데, 이번 포스팅에서 관련 통계량을 공유하며, R을 이용해 실습해보겠습니다.




회귀 모델 적합도 평가 방법

회귀 모델은 모델의 잔차 검정을 통해 회귀 모델의 적합도를 평가할 수 있습니다. 뿐만 아니라, 교차 검증이라고 불리는 회귀모델 검사 방법이 있는데, 다음 포스팅에서 다루어 보겠습니다. 분류 모델은 교차 유효성 검증, 혼동 행렬, ROC 곡선 등과 같은 다양한 방법으로 적합도 평가를 할 수 있습니다. 여기서 잔차란 모델의 실제 값과 예측 값의 차이이며, 잔차 검정을 위해 등분산성, 정규성, 독립성 관련 통계량이 사용됩니다.


- 잔차 : 모델에 의해 추정된 종속변수의 값과 실제 관찰된 종속변수 값과의 차이

- 잔차 검정 통계량 : 등분산성, 정규성, 독립성



등분산성, 정규성, 독립성은 어떻게 판단할 수 있을까요? 뭔가 눈으로 보면 어느 정도는 감이 오지만 통계분석을 하는 우리로써는 정확히 판단할만한 기준이 있어야합니다. 등분산성은 잔차의 기울기가 0에 가깝고 산점도를 그렸을 때 데이터 점들이 패턴없이 무작위 분포를 나타냅니다. 정규성을 벗어나는 경우 산점도가 퍼져있지 않고 일정한 패턴을 나타내고 있습니다. 


정규성은 잔차가 정규분포를 따르는지 확인하는 방법이며, 독립성은 자기상관검정 방법을 통해 확인하는데 독립성이 있다는 것은 잔차 사이의 관계가 없다는 것을 말합니다. 위와 같은 잔차 검정은 아래와 같은 통계량으로 검정합니다. R뿐만 아니라 여러 통계툴에서 제공하는 방법입니다. 등분산성 같은 경우에는 잔차 기울기는 정량화 할 수 있지만 잔차의 패턴은 눈으로 확인해줘야 합니다.



- 등분산성 : 잔차 기울기 0, 잔차 패턴 확인

- 정규성 : Shapiro-wilk 검정

- 독립성 : Durbin-Watson 검정



회귀 모델 적합도 지수

회귀 모델 적합도 평가에는 잔차 검정 외에도 결정계수, F통계량, T통계량과 같은 지수가 사용됩니다. 결정계수라고 불리는 R²는 회귀 모형이 데이터를 얼마나 잘 설명하는지 나타내며 1에 가까울수록 설명력이 높습니다. 


F통계량은 모형의 유의성 지표로써 회귀모형의 통계적 유의성을 검정하기 위한 검정통계량입니다. 이는 p-value로 다시 계산되며 0.05 이하일 때 통계적 유의성을 가집니다. 


T통계량은 각 변수가 모델에 주요한 변수로 작용하는지의 여부를 판단합니다. T통계량 역시 p-value로 계산되어 0.05 이하일 때, 주요 변수로 판단합니다.


R을 이용한 회귀모델 평가

아래와 같이 회귀모델을 평가할 수 있는 R의 명령어를 기록합니다. 데이터는 자동차 데이터를 사용했습니다. 자동차의 속도에 따른 제동저리 데이터입니다. 2열은 속도, 3열은 제동거리입니다. 기본적인 모델 분석을 시작으로 잔차 정규성 분석까지 다뤄보겠습니다.


# R 제공 데이터 선언

head(cars, 3);ctr(cars)


# 회귀모델 생성

a=lm(dist~speed, cars)

a


# 회귀 계수 추출

coef(a)


# 예측값 계산

fitted(a)[1:4]


# 잔차 계산

residuals(a)[1:4}


# 회귀계수 신뢰구간 계산

confint(a)


# 잔차  제곱합 계산

deviance(a)


# x=4; 예측 값 구하기

predict(a, newdata=data.frame(speed=4))


# 예측값의 신뢰구간

predict(a, newdata=data.frame(speed=4), interval;"confidence")


# 오차항을 고려한 예측값의 신회구간

predict(a, newdata=data.frame(speed=4), interval;"prediction")


# 회귀모형 평가 

summary(a)


위에서 설명한 바와 같이 잔차가 등분산성을 가지기 위해서는 기울기가 0인 직선일수록 등분산성 검정에서 이상적입니다. 또한 패턴 없는 무작위 분포가 좋은 적합입니다. 잔차의 정규성 검정에 사용되는 통계량은 샤피로 윌크입니다.p-value가 0.05 이하일 때, 정규성을 따르지 않는다고 판단합니다.



# 잔차 등분산성 검정

par(mfrow=c(2,2))


# 잔차 추출

res=residual(a)


# 잔차 정규성 검정 : Shapiro-wilk

shapiro.test(res)


잔차의 독립성 검정을 위해서는 'lmtest' 패키지를 추가로 설치해줘야 합니다. 더빈-왓슨 검정을 통해서 잔차의 독립성을 검증하게 되며, DW 값이 2에 가까울 수록 잔차에 독립성이 있다고 판단합니다. 참고로 DW 값이 0일 때 양의 자기상관, 4일 때 음의 자기상관이 있어서 회귀분석에 부적합 합니다. 이 여시 p-value로 구해지며 0.05 이하일 때, 독립성을 따르지 않습니다.


# 잔차 독립성 검정 : Durbin-Watson

install.package("lmtest")

library(lmtest)

dwtest(a)


마무리

예측 모델을 생성하는데 있어서 예측 모델이 얼마나 정확한지 판단하는 판단 기준에 맞춰 예측 모델을 생성해야 합니다. 몰론 위 기준에 100% 부합하는 모델을 만들기는 현실적으로 어려움이 있을 수 있겠지만, 최대한 근점한 모델을 생성하는 것이 예측의 정확도 향상에 도움을 줍니다. 위와 같이 결정 계수, F통계량, T통계량, 잔차 분석을 통해서 예측 모델의 정확도를 높이는데 확용하면 되겠습니다.

댓글