파이썬의 statsmodels 라이브러리를 이용해 간단하게 선형 회귀분석을 해볼 수 있다.
예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다.
위 코드에 대한 설명은 "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" 포스팅을 통해 확인할 수 있다.
위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다.
선형 회귀분석은 아래와 같은 가정을 만족해야 한다. 선형 회귀분석을 할 때에는 데이터가 아래의 가정을 따르는지 먼저 생각해보는 습관을 기르자.
- 변수의 선형 상관관계 : 선형 회귀분석은 종속변수(Y)와 독립변수(X)가 선형의 상관 관계를 가지는 것을 가정한다. 선형의 상관관계가 아닐 경우, 다른 회귀분석 방법을 사용하거나, 새로운 변수를 추가하거나, 기존의 변수를 로그, 지수등의 방법으로 변형하여야 한다.
- 독립변수(X)의 독립성 : 독립변수(X)들이 각각 독립적이어야 한다. 상관관계가 있는 변수들을 함께 독립변수로 두면 회귀분석 결과가 왜곡된다. 상관관계가 있는 변수는 제거하거나, 독립성을 갖는 다른 변수로 치환해줘야 한다.
- 변수의 정규성 : 변수들이 정규분포를 가진다는 가정이 전제된다. 정규성을 가지지 않는 변수는 정규성을 가질 수 있도록 로그, 지수 등의 방법으로 치환해야 한다.
그럼 선형 회귀분석을 실시해보자.
코드는 간단하다. 아래의 코드는 body 데이터프레임에서 "height = B0 + B1 * weight"의 선형 회귀분석 모델이 적합한지 살펴보는 코드이다.
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로 산출되었다.
끝.
예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다.
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로 산출되었다.
끝.
작성자가 댓글을 삭제했습니다.
답글삭제