기본 콘텐츠로 건너뛰기

파이썬(Python)을 이용한 선형 회귀분석(linear regression)

파이썬의 statsmodels 라이브러리를 이용해 간단하게 선형 회귀분석을 해볼 수 있다.

예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다.
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd

height = [170, 168, 177, 181 ,172, 171, 169, 175, 174, 178, 170, 167, 177, 182 ,173, 171, 170, 179, 175, 177, 186, 166, 183, 168]
weight = [70, 66, 73, 77, 74, 73, 69, 79, 77, 80, 74, 68, 71, 76, 78, 72, 68, 79, 77, 81, 84, 73, 78, 69]

body = pd.DataFrame(
    {'height': height,
    'weight': weight
    }
)

body.tail()

위 코드에 대한 설명은 "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" 포스팅을 통해 확인할 수 있다.
위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다.

선형 회귀분석은 아래와 같은 가정을 만족해야 한다. 선형 회귀분석을 할 때에는 데이터가 아래의 가정을 따르는지 먼저 생각해보는 습관을 기르자.
- 변수의 선형 상관관계 : 선형 회귀분석은 종속변수(Y)와 독립변수(X)가 선형의 상관 관계를 가지는 것을 가정한다. 선형의 상관관계가 아닐 경우, 다른 회귀분석 방법을 사용하거나, 새로운 변수를 추가하거나, 기존의 변수를 로그, 지수등의 방법으로 변형하여야 한다.
- 독립변수(X)의 독립성 : 독립변수(X)들이 각각 독립적이어야 한다. 상관관계가 있는 변수들을 함께 독립변수로 두면 회귀분석 결과가 왜곡된다. 상관관계가 있는 변수는 제거하거나, 독립성을 갖는 다른 변수로 치환해줘야 한다.
- 변수의 정규성 : 변수들이 정규분포를 가진다는 가정이 전제된다. 정규성을 가지지 않는 변수는 정규성을 가질 수 있도록 로그, 지수 등의 방법으로 치환해야 한다.

그럼 선형 회귀분석을 실시해보자.
코드는 간단하다. 아래의 코드는 body 데이터프레임에서 "height  = B0 + B1 * weight"의 선형 회귀분석 모델이 적합한지 살펴보는 코드이다.


1
2
3
4
import statsmodels.api as sm

reg = sm.OLS.from_formula("height ~ weight", body).fit()
reg.summary()

statsmodel.api를 import한 후, OLS 메서드를 사용한다. 회귀분석 후 마지막엔 fit()를 꼭 해줘야 한다.
summary()를 사용하면 아래와 같이 회귀분석의 결과를 확인할 수 있다.



- R-squared(R제곱) 값이 0.589이다. R-squared는 앞서 회귀분석을 실시한 "height  = B0 + B1 * weight" 모델이 body 데이터프레임을 얼마나 설명해주는지 모델식의 적합성을 말해준다. 결과는 선형 회귀분석 모델이 height 변동성의 58.9%를 설명한다는 의미이다. R-squared는 0 ~ 1의 값을 가지고 0 이면 모델의 설명력이 전혀 없는 상태, 1이면 모델이 완벽하게 데이터를 설명해주는 상태이다. 사회과학에서는 보통 0.4 이상 이면 괜찮은 모델이라고 보면 된다.

- coef(coefficient, 계수)를 살펴보면, intercept는 107.8624, weight는 0.8904이다. 이 계수값을 선형 회귀분석 모델에 대입하면 "height  = 107.8624 + 0.8904 * weight"의 식이 산출된 것을 확인할 수 있다.

- P>|t|(유의확률)은 독립변수의 유의확률이다. 보통 독립변수가 95%의 신뢰도를 가져야 유의미하다고 판단한다. 이 경우 독립변수의 유의확률은 0.05보다 작은 값이 산출된다. 즉, 독립변수의 유의확률이 0.05보다 작으면, 독립변수가 종속변수에 영향을 미치는 것이 유의미하다고 본다. 위 경우 weight의 유의확률은 0이다. 따라서 weight는 height에 유의미하게 영향을 미친다고 할 수 있다.

- Durbin-Watson(더빈왓슨, DW검정)의 값은 2.201이다. DW검정은 잔차의 독립성을 확인할 수 있는 수치이다. 0이면 잔차들이 양의 자기상관을 갖고, 2이면 자기상관이 없는 독립성을 갖고, 4이면 잔차들이 음의 자기상관을 갖는다고 해석한다. 보통 1.5 ~ 2.5사이이면 독립으로 판단하고 회귀모형이 적합하다는 것을 의미한다. DW검정값이 0 또는 4에 가깝다는 것은 잔차들이 자기상관을 가지고 있다는 의미이고, 이는 t값, F값, R제곱을 실제보다 증가시켜 실제로 유의미하지 않은 결과를 유의미한 결과로 왜곡하게 된다.

No.observations는 24이다. 즉 24개의 데이터 쌍을 가지고 회귀분석을 실시하였다는 것을 알 수 있다.

- Df Model은 1이다. Df Model은 회귀분석의 "예측변수의 숫자(k)"를 의미한다. 회귀분석의 전체 파라미터는 1개의 종속변수를 포함하므로 Df Model은 다른 식으로는 "회귀분석 전체 파라미터 숫자 - 1" 이다. 예시 회귀모형에서 예측변수는 "weight" 1개이므로 Df Model은 1이 된다.

- Df Residuals는 22이다. Df Residuals는 "No.observations - (Df Model + 1)"로 산출한다. 즉 전체 관찰데이터의 수에서 회귀모형의 전체 파라미터의 수를 뺀 값이다. 우리 모형에서는 24 - 2 = 22로 산출되었다.

끝.

댓글

댓글 쓰기

이 블로그의 인기 게시물

파이썬(Python)을 이용한 산점도(scatter) 그리기

파이썬의 Matplotlib를 이용해 데이터의 산점도(scatter plot)를 그릴 수 있다. 예시를 통해 살펴보자. 먼저 아래와 같이 데이터 프레임 예시를 만든다. 1 2 3 4 5 6 7 8 9 10 import pandas as pd height = [ 170 , 168 , 177 , 181 , 172 , 171 , 169 , 175 , 174 , 178 , 170 , 167 , 177 , 182 , 173 , 171 , 170 , 179 , 175 , 177 , 186 , 166 , 183 , 168 ] weight = [ 70 , 66 , 73 , 77 , 74 , 73 , 69 , 79 , 77 , 80 , 74 , 68 , 71 , 76 , 78 , 72 , 68 , 79 , 77 , 81 , 84 , 73 , 78 , 69 ] # DataFrame 만들기 body = pd . DataFrame( { 'height' : height, 'weight' : weight} ) body라는 이름의 데이터 프레임(테이블)이 만들어졌다. 이제, body 테이블의 데이터들의 분포를 산점도로 그려보자. 산점도를 그리는 코드는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 # 산점도(scatter) 그리기 import matplotlib.pylab as plt plt . scatter( body[ 'weight' ], body[ 'height' ], label = "data" ) plt . legend(loc = "best" ) plt . xlabel( 'weight' ) plt . ylabel( 'height'

웨딩 드레스 스케치 도안

웨딩 드레스샵 투어를 다니면서 샘플로 드레스를 입는 경우에는 드레스 사진을 찍지 못하게 하는 샵이 많다. ​ 그래서 투어를 돌고 나면 어떤 샵의 어떤 스타일이 신부에게 잘 어울렸는지 헷갈릴 수가 있다. ​ 하지만 투어를 다닐 때 드레스샵에서 입은 드레스의 특징과 느낌을 잘 기록하면 샵을 선택하는 데 도움이 될 수 있다. ​ 드레스 투어를 다닐 때 드레스를 기록할 스케치 도안은 아래 링크에서 확인/다운로드 할 수 있다. 웨딩 드레스 스케치 도안 확인/다운로드 하기 투어를 마친 후 드레스샵과 계약을 하고, 드디어 본식 드레스를 고를 때에는 사진을 찍을 수 있는 경우가 많다. ​ 이 땐 사진을 잘 찍어서 어떤 드레스를 입을지 잘 선택하도록 하자. ​ ​

DEMOS Calculator - 웹에서 그래프 그리기

수식의 그래프를 그려보고 싶을 때 편리한 웹 서비스가 있어서 소개한다. DEMOS Calculator(https://www.desmos.com/calculator) DEMOS Calculator는 수식을 입력하면 자동으로 그래프를 그려준다. 아래는 로그함수를 입력한 모습이다. 좌측 영역의 수식 입력창에 수식을 입력하면 실시간으로 그래프를 확인할 수 있다. 좌측 상단의 햄버거 바를 클릭하면 아래와 같이 다양한 예시 그래프들도 확인할 수 있다. 수학식에 따라 그래프를 깔끔하게 그려야 할 때 요긴하게 사용할 수 있는 웹 서비스이다. 끝.