본문 바로가기

R

[머신러닝] 회귀분석 in R

안녕하세요! 오늘은 회귀분석에 대해 알아보고자 합니다.

그중에서도 선형회귀에 대해 말씀드리겠습니다.

 

단순선형회귀분석은 지도학습의 매우 단순한 기법입니다.

선형회귀 분석은 다음과 같은 질문에 대답할 수 있습니다.

 

1. 종속변수(Y)와 설명변수(X) 사이에 상관관계가 있는가?

2. 종속변수와 설명변수 사이에 얼마나 강한 상관관계가 있는가?

3. 어느 변수가 종속변수에 영향을 미치는가?

4. 미래의 Y값에 대해 얼마나 정확하게 예측할 수 있는가?

 

즉, 크게 이 2가지 문제에 대한 답을 구하고 싶을 때, 회귀 분석을 사용하게 됩니다.

 

Y와 X 간에 상관관계가 있는가?

미래의 Y값을 얼마나 정확하게 예측할 수 있는가?

 

단순 선형회귀는 다음과 같이 나타낼 수 있습니다.

여기에서 hat(^)을 쓰는 이유는 추정량이기 때문입니다. 

좀 더 쉽게 이해를 하기 위해, 예를 들어 보겠습니다.

 

우리는 집값을 예측하고 싶습니다. 

실생활에서 집값에 영향을 미치는 변수는 무엇이 있을까요?

위치? 지하철의 유무? 방의 개수? 아마 엄청 많은 변수들이 영향을 미칠 겁니다.

그 중에서, 우리가 모르는 변수들도 존재를 하겠지요.

하지만 우리가 관찰 할 수 있는 변수는 '방의 개수'와 '위치' 이 2가지라고 가정해 봅시다.

당연히 이 2가지 변수 만으로 집값을 예측하는 것은 정확하지 않습니다. 

 

우리가 2가지 변수만으로 집값을 예측한 식.

이것을 바로 추정량이라고 하며 우리가 추정한 값이기 때문에 실제 B값과는 다를겁니다.

우리가 추정해서 구했다고 표시를 해주기 위한 것이 바로 hat(^)입니다.

 

단순선형회귀로 돌아와서,

집값에 영향을 미치는 변수를 '방의 개수' 1가지라고 가정해보겠습니다.

그렇다면 2차원 좌표평면 상에 무수히 많은 점들이 찍힐 겁니다. 

우리가 관측한 데이터 수가 100개라고 하면

(방의 개수, 집값) 이렇게 된 세트가 100개 있는 것이고, 좌표평면 상에서는 100개의 점이 찍히게 될 것입니다.

 

그렇다면, 최적의 회귀식은 어떻게 구해지는 것일까요?

아마, 방의 개수와 집값 사이의 관계를 잘 표현한 식은, 점들 사이를 적절히 잘 통과한 선일 겁니다.

즉, 그어진 선과 실제 데이터 점들사이의 거리가 가장 작은 선이 

최적의 선이 될 것 입니다.

 

실제로 컴퓨터에서 회귀식을 구하는 코드를 실행시키면

무수히 많은 선을 그리고, 그 선과 데이터간의 거리가 가장 작은 선을 

회귀선으로 도출하게 됩니다.

이 방법을 최소제곱법(OLS)라고 합니다.

 

실제 데이터로 살펴해보겠습니다.

사용할 데이터는 R의 내장 데이터인 mtcars라는 데이터 입니다.

데이터 설명을 먼저 드리자면, 

1974년 미국의 Motor Trend US 잡지에 실린 32개의 자동차의 연료 소비량에 대한 데이터입니다.

mpg(mile per gallon, 연비)를 우리의 종속변수 y로 설정하겠습니다.

mtcars 데이터 정보

mpg(연비)와 hp(마력)간의 관계를 볼까요??

 

마력과 연비 간의 관계(산점도)

산점도로 보았을 때, 우하향하는 음의 관계가 있음을 알 수 있습니다.

그렇다면, 이 둘 간의 회귀식은 어떻게 구할 수 있을까요???

 

우선, 컴퓨터는 점들을 지나는 무수히 많은 선을 그립니다.

그 다음, 실제 데이터와 선 사이의 거리가 가장 작은 선을 추정된 회귀식으로 도출하게 됩니다.

빨간선이 그 회귀식입니다.

보이는 것과 같이, 빨간색 선이 데이터 사이를 적절히 잘 지나고 있음을 알 수 있습니다.

도출된 최적의 회귀식

실제 코드로 살펴보겠습니다.

data("mtcars") #데이터 불러오기

head(mtcars) #상위 6개 데이터를 보여줌
str(mtcars) #데이터의 기본적인 내용 제공
summary(mtcars) #기초통계량 제공

#회귀분석
lm3 = lm(mpg~hp, data = mtcars)

#꼭 summary함수를 써야, 회귀식에 대한 정보를 얻을 수 있다.
summary(lm3)

#시각화
#산점도
plot(mtcars$hp, mtcars$mpg)
#회귀식 추가
abline(lm3, col='red')

 

r에서 회귀 분석은

lm함수를 사용해서 할 수 있습니다.

문법은 다음과 같습니다.

종속변수 y가 먼저 나오고 '~'를 꼭! 해준다음에 설명변수 x를 씁니다.

lm(y~x., data = 사용할 데이터)

 

만약, 모든 변수를 사용하고 싶을 때에는 '.'을 넣어주면 됩니다.

lm(y~., data = 사용할 데이터)

 

이제 마지막으로 lm을 써서 나온 결과를 해석하는 법에 대해 알아보고 마치도록 하겠습니다.

summary(lm3)를 하면 다음과 같은 결과가 콘솔창에 뜹니다. 

(summary를 사용해야 결과를 볼 수 있습니다!!!!그냥 lm3하면 결과값 안 나와요ㅠㅠ)

 

 

"회귀 결과 해석"

 

*call

우리가 쓴 회귀식입니다. 

 

*residuals은 잔차(오차)라는 뜻입니다.

 

*coefficients는 회귀 계수라는 뜻입니다.

intercept는 y절편 즉, B0(베타 제로)가 됩니다. 그 값은 30.09886입니다.

그 밑에는 hp(마력) 회귀 계수를 볼 수 있습니다. 그 값은 -0.06823입니다.

즉! 도출된 회귀식은 다음과 같습니다.

 

mpg(연비) = 30.09886 -0.06823*hp(마력)

 

이는 마력 1단위가 올라가면, 연비는 -0.06823만큼 변화한다는 뜻이기도 합니다.

 

그 다음으로는 ***에 대해 알아보겠습니다.

***은 회귀 분석의 가설검정과 관련있습니다.

단순히 설명하자면, *이 많을 수록 이 회귀계수가 통계적으로 유의미하다는 뜻입니다.

 

*은 pr(<ltl)로 구해지는 값이며, 0.01보다 작을 때 *이 붙습니다. 그 값이 더욱 작아질 수록 *이 많이 붙게 됩니다.

즉, *이 많을 수록 이 계수를 신뢰할 수 있다.로 보시면 될 것 같습니다.

 

그 다음으로 밑에 있는 multiple R은 결정계수입니다. 

이 회귀식이 데이터를 얼마나 설명하냐? 에 관한 내용입니다.

multiple R이 0.6024를 갖으니, 약 60%의 설명력을 갖는다고 말할 수 있습니다.

 

옆에 있는 adjusted R-squared는 조정된 결정계수입니다.

회귀식은 변수가 많아질 수록 설명력이 높아집니다.

변수가 많아지면 결정계수가 단조 증가합니다. 

하지만 이는 좋은 것은 아니지요. 

이러한 통계량을 사용한다면 결국 모든 변수들을 포함하는 모델을 항상 좋다고 선택하게 될 것입니다.

그래서 조정된 결정계수가 나오게 된 것입니다. 

하지만 지금 회귀식에서는 변수를 1개만 넣었기 때문에, multiple R을 보시면 됩니다.

 

마지막으로 P-value는 모델 전체의 p-value값입니다. 이 값이 0.05보다 작으면,

모델이 유의하다고 말할 수 있습니다.

 

따라서, 회귀분석을 할 경우에는 다음과 같은 순서로 확인을 합니다.

1. 모델 전체의 p-value 값을 확인합니다.

2. 결정계수를 확인합니다.(multiple R 혹은 adjusted R-squared)

3. coefficent를 확인합니다. 변수의 통계적 유의성을 확인합니다.

 

만약, 변수가 여러개라면, coefficent에서 통계적 유의성을 기준으로 변수를 추가하거나 빼줄 수 있습니다.

다만, 여기에서 조심할 점은,

기존의 선형회귀식에서, pr(<ltl)를 기준으로 변수를 제거해 새로운 모델을 만들었다면,

이는 우리가 처음에 만들었던 선형회귀식과 다른 식이라는 점입니다. 

새로운 모델은,

종전에 통계적으로 유의하다고 한 변수를, 변수가 바뀐 상황에서 통계적으로 유의하지 않다고 볼 수도 있습니다.

당연히, 회귀계수 값도 변화합니다. 

 

이부분에 대해서는 추후 포스팅을 하겠습니다.

 

이상 단순선형회귀분석에 관한 글을 마치도록 하겠습니다. 감사합니다.