data analysis

[regression] linear regression

HR대장 2020. 2. 6. 15:01
728x90

안녕하세요. 은행 IT 운영부 이지성과장입니다. 

 

오늘은 regression(회귀)에 대해서 알아보겠습니다. 파전이 유명한 경희대 앞 "회기역"이 아닙니다.. (ㅋㅋ 아재개그 죄송합니다..ㅜ0ㅜ;;)

회귀라는 말의 기원은  Galton이라는 사람의 실험에서 부터 시작되었다고 합니다. 이 실험의 논문 이름은 "Regression towards Mediocrity in Hereditary Stature." 인데, 자식의 키가 부모 두명의 키의 평균으로 회귀(되돌아온다.. 사랑은 돌아오는거야~~) 한다는 뜻입니다. 대충봐도 부모의 키와 자식의 키의 상관관계에 대한 논문이겠죠?

 

회귀를 더 쉽게 설명하기 위해 뜬금없이 오뎅장사 이야기를 해보려고 합니다. 회기역 앞에서 오뎅장사를 하고 있는 김모씨는 날씨와 오뎅판매량의 상관관계를 알아보려고, 매일매일 기온과 오뎅 판매량을 기록해 두었습니다.

그 결과 날씨가 추운날 오뎅판매량이 많았고, 날씨가 덜 추운날은 오뎅판매량이 추운날보다 적은 "추세"를 알 수 있었습니다.

 

 

regression은 이렇게 기온과 오뎅 판매량의 상관관계와 같이 추세, 경향성이 있다는 가정을 합니다.

기온 --> 독립변수

판매량 --> 종속변수

라고 할 수 있겠죠. 이렇게 독립변수 1개인 경우를 단순 회귀분석이라고 합니다.

그러나 세상만사가 독립변수가 한 개라서 단순하게 돌아가면 얼마나 좋을까요? (주식 종가 예측이라도 해서 부자가 됬을겁니다..하하;;)

다중회귀분석은 단순 회귀 분석을 기초로 하되, 독립변수를 2개 이상 사용하는 것입니다. 

 

이번시간에는 이 다중회귀분석을 다루어 보려고 합니다.

이전에 분류 (classification)과 큰 차이점은 분류는 카테고리를 예측한다면, 회귀는 수치를 예측한다고 할 수 있습니다.

 

 

위 이미지는 회귀분석을 설명할 때 대표적으로 사용되는 이미지 입니다.

데이터의 분포가 빨간 점과 같은 때, 최적의 파란색 선을 그리는 것이 linear regression의 목적입니다.

 

 

실습에 사용할 데이터는 R에 내장되어 있는 "airquality" 데이터를 사용하겠습니다.

먼저 데이터가 어떻게 이루어져 있는지 알아보겠습니다.

 

head(airquality)
#  Ozone Solar.R Wind Temp Month Day
#1    41     190  7.4   67     5   1
#2    36     118  8.0   72     5   2
#3    12     149 12.6   74     5   3
#4    18     313 11.5   62     5   4
#5    NA      NA 14.3   56     5   5
#6    28      NA 14.9   66     5   6

 

오존량(Ozone) / 태양빛(Solar.R) / 바람(Wind) / 기온(Temp) / 날짜로 구성된 데이터임을 알 수 있습니다.

오존량이 종속변수 나머지가 독립변수라고 할 수 있습니다.

 

어! 그런데 ...OTL....데이터에서 NA (NULL) 결측치가 보입니다. 

결측치를 처리하는 방법에는 여러가지 방법이 있으나, 이번 시간에는 편의를 위해 데이터 자체를 제거하도록 하겠습니다. 결측치를 제거하는 명령어로는 na.omit(dataset) 을 사용하면 됩니다.

 

#데이터셋카피
airquality2 <- airquality

#결측치있는 레코드 제거
airquality2 <- na.omit(airquality2)

#최종 레코드수 확인
nrow(airquality)
#[1] 153

nrow(airquality2)
#[1] 111

 

결측치 제거 전에는 153레코드였던 데이터가 결측치 제거 후 111 레코드가 된 것을 알 수 있습니다.

이제 모델을 생성해 보도록 하겠습니다. 모델 생성 시 의미있는 독립변수인 태양빛(Solar.R) / 바람(Wind) / 기온(Temp) 만 사용하고, 날짜 데이터는 제외하도록 하겠습니다. 종속변수는 Ozone(오존량)입니다.

 

#모델생성
model <- lm(Ozone ~ Solar.R + Wind + Temp, data=airquality2)

#모델확인
summary(model)

#Call:
#lm(formula = Ozone ~ Solar.R + Wind + Temp, data = airquality2)
#
#Residuals:
#    Min      1Q  Median      3Q     Max 
#-40.485 -14.219  -3.551  10.097  95.619 
#
#Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
#(Intercept) -64.34208   23.05472  -2.791  0.00623 ** 
#Solar.R       0.05982    0.02319   2.580  0.01124 *  
#Wind         -3.33359    0.65441  -5.094 1.52e-06 ***
#Temp          1.65209    0.25353   6.516 2.42e-09 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 21.18 on 107 degrees of freedom
#Multiple R-squared:  0.6059,	Adjusted R-squared:  0.5948 
#F-statistic: 54.83 on 3 and 107 DF,  p-value: < 2.2e-16

 

회귀분석에서는 결과 해석을 하는것이 중요합니다.

결과에서 딱 4가지만 보면됩니다.

 

 

1. 빨간색 부분은 회귀분석 결과를 수식으로 나타낼 수 있습니다.

  ozone = -64.34208 + 0.05982 Solar.R - 3.33359 Wind + 1.65209 Temp로 나타날 수 있습니다.

2. 노란색 부분 pr(>|t|)는 각 변수가 얼마나 유의한지 알 수 있습니다.

   이 값이 0.05보다 작으면 유의하다 라고 합니다. 유의한 정도에 따라 */**/***로 나타내며, 아무런 표시가 없으면

    통계적으로 유의하지 않음을 뜻합니다. (*이 많을 수록 유의하다고 볼 수 있습니다.)

3. 파란색 부분 R-squared와 Adjusted R-squared는 모델이 데이터를 얼마나 설명하는지 나타냅니다.

   약 60% 정도 설명하고 있다고 보시면 됩니다.

4. 주황색 부분 F-statistics은 모델이 통계적으로 얼마나 유의한가 나타냅니다. 

   p-value가 0.05보다 작은 경우 회귀식 전체는 유의하다고 볼 수 있습니다.

 

이 정도로 회귀분석을 마무리 하려고 하지만, 회귀에서 변수들 사이에 상관관계가 있는 "다중공선성"문제가 있는데, 

관련내용은 별도의 시간에서 다루도록 하겠습니다. (궁금하신 분들은 구글링 고고고!!!)

 

코로나 바이러스가 기승을 부리고 있습니다. 건강한 2월 되시길 바라겠습니다.

다음 주제는 분류 알고리즘을 다루어볼 예정입니다. ^^;;

 

[깃허브링크] : https://github.com/jasonlee8318/R-programming/blob/master/airquality_regression.R

 

*개인적으로 공부한 내용을 정리한 것입니다. 따라서, 오류가 있을 수 있습니다.

너그러운 양해 부탁드리며 댓글 남겨 주시면 해당사항은 수정하도록 하겠습니다.

728x90