본문 바로가기

회사생활/통계학 공부

Linear Regression / 선형 회귀분석

Linear Regression / 선형 회귀분석




지도학습 중 예측 문제에 사용하는 알고리즘이다.

예측 문제란 기존 데이터를 기반으로 생성된 모델(여기서는 회귀모델)을 이용하여 새로운 데이터가 들어왔을 때 어떤 '값'이 될지 예측하는 문제를 말한다.


다만 선형 회귀분석은 기본적으로 설명변수와 반응변수가 연속형 변수일 때 사용할 수 있다. 만약 설명변수가 범주형 변수인 경우 이를 더미변수(Dummy Variable)로 변환하여 회귀분석을 적용해야 한다.



▼ 분류 Classification 문제를 해결하는 로지스틱 회귀분석 알아보기 ▼

2017/03/21 - [Analysis/ALGORITHM] - Logistic Regression / 로지스틱 회귀분석




(1) 단순 선형 회귀분석


선형 회귀분석은 주어진 데이터를 대표하는 하나의 직선을 찾는 것인데, 이 직선을 회귀선이라고 부르고 이 선을 함수로 표현한 것을 회귀식이라고 부른다. 아래 그래프는 단순 선형 회귀분석을 시각적으로 표현한 그림인데, 이처럼 단순 선형 회귀분석은 x변수와 y변수 간의 관계를 y = ax + b 와 같은 하나의 선형 관계식으로 표현한다. 이때 y = ax + b 인 회귀식에서 x가 1개인 것을 보면 알 수 있듯이 단순 선형 회귀분석에서 Input이 되는 설명변수는 1개이다.





(2) 회귀선을 찾는 기준 - 최소제곱법


앞에서 주어진 데이터를 대표하는 하나의 직선을 찾는 것이 회귀분석의 목적이라고 했는데, '대표한다'는 기준을 무엇이냐에 따라 회귀선도 달라질 것이다. 선형 회귀분석은 최소제곱법 또는 최고자승법이라고도 부르는 것을 기준으로 회귀선을 찾는다. 최소제곱법을 설명하기 위해서는 잔차라는 개념을 먼저 알아야 한다.


잔차란 관측값의 y와 예측값의 y 간의 차이를 말한다.

예를 들어 A(1, 4)과 B(2, 3)라는 2개의 점이 있다고 하자. 그리고 회귀식이 y = 2x + 1 이라면 점 A의 관측값 y는 4, 예측값 y는 3이고 점 B의 관측값 y는 3, 예측값 y는 5이다. 이때 A의 잔차는 4 - 3 = 1이고 B의 잔차는 3 - 5 = -2이다.


최소제곱법은 잔차의 제곱의 합이 최소가 되도록 하는 직선을 회귀선으로 한다는 것을 의미한다. 그렇다면 위의 예에서 잔차의 제곱의 합은 5이다.



회귀식을 바꿔가면서 잔차의 제곱의 합이 최소가 되게 하는 직선을 찾는 것이 선형 회귀분석이고 그 직선을 회귀선이라고 부르며 그 선의 함수를 회귀식이라고 부른다.




(3) 선형 회귀분석을 한다는 것?


회귀분석을 한다는 것은 분석가가 데이터, x 변수, y 변수를 지정하고 통계 툴이 최소제곱법을 이용해 회귀식 y = ax + b에서 a와 b를 구하는 과정을 말한다. 회귀식에서 a를 회귀계수, b를 y절편이라고 부른다. (큰 의미에서 b도 회귀계수라고 부르는 경우도 있다.) a는 가중치의 역할을 하기 때문에 x가 y에 얼마나 영향을 주는지 그 크기와 방향을 알 수 있게 해주고, b는 절편의 역할을 하기 때문에 y = ax 라는 회귀선을 얼마나 위 또는 아래로 평행이동 시키는지를 정한다.




(4) 다중 선형 회귀분석


단순 선형 회귀분석이 설명변수 x가 1개, 반응변수 y가 1개인 선형 회귀분석이라면, 다중 선형 회귀분석은 설명변수 x가 2개 이상, 반응변수 y가 1개인 선형 회귀분석이다. 따라서 다중 선형 회귀분석은 아래와 같은 회귀식을 갖는다.



다중 선형 회귀분석에서는 최소제곱법을 이용하여 각 설명변수 x의 가중치 역할을 하는 회귀계수(a, b, ... )와 y절편(c)을 구하게 된다.




(5) 선형 회귀분석의 가설 검정 - 왜 우측검정인가?


선형 회귀분석의 가설은 흔히 "y = ax + b 에서 회귀계수 a는 0이 아니다"라는 대립가설을 가정한다고 한다. 즉 x의 기울기가 0이 아니기 때문에 "x는 y에 영향을 준다"가 선형 회귀분석의 대립가설이 된다고 한다. 하지만 이 가설은 개별 설명변수에 대한 가설이고  회귀모델 자체에 대한 가설은 아니다.


실질적으로 회귀모델에 대한 유의성 검증은 F-Test로 이루어지는데 이를 위해 분산분석(ANOVA, Analysis of variance) 표를 생성하게 된다. 분산분석표는 아래와 같은 구조를 가진 표이다.


 

자유도
(Degree of Freedom) 

제곱합
(SS, Sum of Square) 

제곱평균
(MS, Mean of Square) 

F-통계량
(F-Value) 

P-값 
(P-Value) 

회귀 (Regression) 

회귀제곱합 (SSR)

 

 회귀제곱평균 (MSR)

SSR / k

F비

MSR / MSE

 F-통계량의 유의확률
(F분포표)

 잔차 (Error)

n - k - 1 

잔차제곱합 (SSE)

 

 잔차제곱평균 (MSE)

SSE / (n - k - 1)

 

 

총 (Total) 

 n - 1

 총제곱합 (SST)

SSR + SSE

 총제곱평균 (MST)

SST / (n - 1)

 

 



위 표에 따르면 F-통계량은 회귀제곱평균(MSR) / 잔차제곱평균(MSE) 이라고 정의되는데, 그렇게 정의하는 이유는 아래 예시와 그림으로 이해해보자.

예를 들어 대한민국 남성의 키 데이터를 가지고 어떤 남성의 키를 예측한다고 하자. 가장 간단하게 아무런 부가정보 없이 예측 키를 말하는 방법은 데이터의 평균 키를 말하는 방법이다. 그래서 분산분석표에서도 기준을 '평균값'으로 잡고 평균으로 예측한 것 대비, 회귀로 예측한 것이 얼마나 더 유용한지 그 비율을 계산한 것이 F-통계량(F-Value)이라고 할 수 있다.

-
-

아래 그림과 위 표를 함께 보면 조금 더 이해하기 쉬울 것 같다. 관측값은 우리가 예측하려는 목표치, 실제 y값이라고 보면 되고, 회귀예측값은 회귀모델로 예측했을 때의 값, 그리고 평균값은 관측값 y들의 평균이라고 생각하면 된다.




회귀제곱평균(MSR)은 회귀로 설명할 수 있는 편차라고도 부른다.

회귀제곱평균은 회귀제곱합(SSR) / 자유도(DF) 인데 회귀제곱합(SSR)은 회귀예측값과 평균의 차이에서 기인한다. 즉, 평균으로 말하는 것과 회귀로 예측해서 말하는 것의 차이가 얼마나 있는지를 말해주는 수치라고 할 수 있다.


잔차제곱평균(MSE)은 회귀로도 설명할 수 없는 잔차라고도 부른다.

잔차제곱평균은 잔차제곱합(SSE) / 자유도(DF) 인데 잔차제곱합(SSE)은 관측값과 회귀예측값의 차이에서 기인한다. 즉, 회귀로 예측해도 좁힐 수 없는 관측값과의 차이가 얼마나 있는지 말해주는 수치라고 할 수 있다.


정리하자면 회귀로도 좁힐 수 없는 예측 오차 대비, 회귀로 인해 좁혀진 예측 오차가 얼마나 큰가를 표현한 수치가 F-통계량이다. 이 통계량이 크면 클 수록 (우리가 증명하고 싶은) 이 회귀모델이 유용하다는 것을 증명하기에 좋다. 그래서 회귀분석은 F-통계량에 대한 우측검정으로 가설을 검정하게 된다.


예를 들어 iris 데이터 중 Sepal.Length를 Sepal.Width로 예측한다고 하자.

# 회귀모델 생성
fit <- lm(formula = Sepal.Length ~ Sepal.Width,
          data = iris)

# 분산분석표
anova(fit)

출력되는 분산분석표는 아래와 같다.




회귀모델 fit에서 F-통계량(F-Value)은 2.0744이다. 유의수준(P-Value)은 0.15로 유의확률 0.05보다 작지 못하므로 Sepal.Width 만으로 이루어진 fit 모델의 유의하지 못하다.






(6) 회귀모델의 설명력 결정계수(R2)


결정계수는 흔히 회귀모델의 설명력을 의미하는 수치라고 한다. 이 결정계수(R2)는 회귀제곱합(SSR) / 총제곱합(SST) 으로 계산한다고 한다. 회귀제곱합과 총제곱합은 위에 분산분석표에도 나오는 값인데, 총제곱합은 관측값과 평균의 차이(편차)에서 기인하고 회귀제곱합은 회귀예측값과 평균의 차이(편차 중 회귀로 설명되는 부분)에서 기인한다. 풀어 말하자면 전체 편차 중 회귀로 설명 가능한 편차가 몇 %인지 계산하겠다는 의미이다.


전체 편차 100 중에 50이 회귀로 설명 가능한 편차라면 설명력은 502 / 1002 = 1 / 4 = 25 % 이므로 결정계수가 0.25이더라도 25%만 설명할 수 있다기 보다는 반 정도의 편차를 회귀모델로 설명할 수 있다는 것과 같다. 다만 수치의 부호를 없애기 위해 제곱을 한 것이 뻥튀기 되어 보이는 것이다.


또한 실제로 분석가가 보는 수치는 결정계수가 아닌 조정된 결정계수인데 둘의 차이는 설명변수 x의 개수를 고려했는지 여부의 차이이다. 기본적으로 설명변수의 개수가 많아지면 회귀모델이 데이터를 설명할 수 있는 범위가 넓어지기 때문에 결정계수가 1에 가까워진다. 그래서 조정된 결정계수는 설명변수의 개수를 고려하여 제곱합들을 자유도로 나눈 값, 즉 제곱평균들을 이용해서 구하게 된다. 조정된 결정계수(Adjusted R Square)는  1 - 오차제곱평균(MSE) / 총제곱평균(MST) 으로 계산한다.




(7) 회귀분석 결과의 해석


iris 데이터에서 Species 변수를 뺀 나머지 4개 변수로 이루어진 dat 데이터를 만들고 이 중 Sepal.Length 변수를 종속변수 y 값으로 두고 회귀분석을 돌리는 R 코드이다.

# 연속형 변수만 필터링
dat <- iris[, 1:4]

# 반응변수 y를 Sepal.Length로 하는 선형 회귀모델 fit1 생성
fit1 <- lm(formula = Sepal.Length ~ .,
           data = dat)

# fit1 결과 보기
summary(fit1)

위 코드를 돌려 출력된 내용을 보면서 결과를 해석해보자.



이 결과에서 밑에서 두번째 줄 Adjusted R-squared, 조정된 결정계수는 0.8557이므로 회귀모델 fit1의 설명력은 85.57%라고 이야기할 수 있다. 회귀모델의 p-value는 < 2.2e-16로 유의수준 0.05보다 작으므로 회귀모델은 유의미하고 해석할 수 있다. 또한 중간에 Coefficients 부분에 모든 변수의 Pr(>|t|), p-value가 유의수준 0.05보다 작기 때문에 모든 변수가 유의미하다고 해석할 수 있다.


각 변수의 Coefficients Estimate, 회귀계수에 따라 회귀식을 구성해보면 아래와 같다.


Sepal.Length = (0.65084 * Sepal.Width) + (0.70913 * Petal.Length) + (-0.55648 * Petal.Width) + 1.856



이 식을 간단히 해석해보자.

 - Sepal.Width가 1 증가할 때마다 Sepal.Length는 0.65084 만큼 증가한다.

 - 모든 x변수가 0이어도 기본적으로 존재하는 Sepal.Length는 y절편인 1.856 이다.

 - Petal.Width가 클수록 오히려 Sepal.Length는 작아진다.




(8) 회귀분석의 기본가정 - 독립성


회귀분석에는 기본적으로 만족해야 좋은 결과가 나오는 기본가정 4가지가 존재한다. 이 가정을 만족해야 사용할 수 있다기 보다는 이 조건을 만족해야 회귀모델의 예측력이 좋다고 한다.


-

회귀분석의 4가지 기본가정


선형성 : 설명변수와 반응변수 간의 관계 분포가 선형의 관계를 가진다.

독립성 : 설명변수와 다른 설명변수간에 상관관계가 적다.

잔차의 등분산성 : 잔차가 특정한 패턴을 보이지 않는다. (점점 커지거나 작아지거나 하는 패턴이 없다.)

잔차의 정규성 : 잔차가 정규분포이다.

-


회귀분석의 4가지 기본가정에 대한 자세한 내용은 추후에 따로 포스팅할 예정이다.



이 4가지 기본가정 중 다중 선형 회귀분석에서 가장 중요하게 확인해야하는 부분은 독립성이다. vif를 사용하여 fit1의 독립성 만족 여부를 확인해보자.

# vif 함수를 사용하기 위해 car 패키지를 설치하고 라이브러리를 불러온다.
install.packages("car") ; library(car)

# fit1의 vif 확인하기
vif(fit1)


아래는 분산팽창지수 또는 분산팽창인수라고도 하는 VIF(Variation Inflation Factor) 지수를 계산하는 car 패키지의 vif 함수를 이용한 결과이다.




수치가 10 이상인 변수 중 수치가 큰 변수부터 제거하면 되는데 이 경우 Petal.Length가 가장 크므로 이 변수를 제거한 fit2를 만들어보자.

# 전체 설명변수 x 중 Petal.Length를 제외한 선형 회귀모델 fit2 생성
fit2 <- lm(formula = Sepal.Length ~ . - Petal.Length,
           data = dat)

# fit2 결과 보기
summary(fit2)

Petal.Length가 빠짐에 따라 fit1과 fit2의 회귀분석 결과가 어떻게 달라졌는지 아래 그림을 보고 비교해보자.




일단 Petal.Width 변수의 회귀계수를 보자. fit1에서는 -0.55648 이었고 fit2에서는 0.97213 이다. 마치 fit1에서는 Petal.Width가 증가하면 Sepal.Length가 작아지는 것처럼 결과가 나왔으나 fit2에서는 오히려 증가하는 방향으로 결과가 나왔다. 어떤 것이 맞는 것일까? 산점도를 그려 시각적으로 확인해보자.

# m x n 산점도 그리기
plot(dat)

아래 그래프에 따르면 Petal.Width는 Sepal.Length와 약한 양의 상관관계(함께 증가하는 관계)를 갖는것을 확인할 수 있다. 그러나 Petal.Width는 Petal.Length와 강한 양의 상관관계를 가지기 때문에 fit1에서는 Petal.Length의 영향으로 마치 음의 회귀계수를 갖는 것처럼 나타난 것이다. 이처럼 독립성이 위배되는 회귀모델은 각 변수가 반응변수에 주는 영향을 왜곡해서 보여줄 수 있다.




※ 그러나 별도로 테스트 해본 결과, 실질적인 예측력은 fit1이 fit2 보다 더 좋은 것으로 나타났는데 이 내용은 나중에 4가지 기본가정을 다룬 포스팅을 할 때 함께 다뤄보도록 하겠다.




#r#regression#rstudio#데이터분석#지도학습#지도학습예측#통계분석#회귀분석