Python 데이터 분석
단순선형회귀, 다중선형회귀 예제
코딩탕탕
2022. 11. 15. 16:55
# 회귀분석 문제 2)
# testdata에 저장된 student.csv 파일을 이용하여 세 과목 점수에 대한 회귀분석 모델을 만든다.
# 이 회귀문제 모델을 이용하여 아래의 문제를 해결하시오. 수학점수를 종속변수로 하자.
# - 국어 점수를 입력하면 수학 점수 예측
# - 국어, 영어 점수를 입력하면 수학 점수 예측
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api
plt.rc('font', family = 'malgun gothic')
import seaborn as sns
import statsmodels.formula.api as smf
df = pd.read_csv('../testdata/student.csv')
print(df.head(3))
print(df.corr()) # 상관관계 출력
print(np.corrcoef(df.국어,df.수학)[0,1]) # 0.7662626557853176, 양의 상관관계
result1 = smf.ols(formula = '수학 ~ 국어', data = df).fit() # 종속변수 ~ 독립변수, fit()함수는 학습하는 합수
print(result1.summary()) # p-value = 8.16e-05 < 0.05 이므로 유의하다.
new_kuk = float(input('국어점수 : '))
new_df = pd.DataFrame({'국어':[new_kuk]})
new_pred = result1.predict(new_df)
print('예상 수학 점수 :', new_pred.values)
# 다중회귀분석
result2 = smf.ols(formula = '수학 ~ 국어 + 영어', data = df).fit() # 종속변수 ~ 독립변수, fit()함수는 학습하는 합수
print(result2.summary()) # p-value = 0.000105 < 0.05 이므로 유의하다.
new_kuk1 = float(input('국어점수 : '))
new_yeon1 = float(input('영어점수 : '))
new_df2 = pd.DataFrame({'국어':[new_kuk1],'영어':[new_yeon1]})
new_pred2 = result2.predict(new_df2)
print('예상 수학 점수 :', new_pred2.values)
<console>
이름 국어 영어 수학
0 박치기 90 85 55
1 홍길동 70 65 80
2 김치국 92 95 76
국어 영어 수학
국어 1.000000 0.915188 0.766263
영어 0.915188 1.000000 0.809668
수학 0.766263 0.809668 1.000000
0.7662626557853176
OLS Regression Results
==============================================================================
Dep. Variable: 수학 R-squared: 0.587
Model: OLS Adj. R-squared: 0.564
Method: Least Squares F-statistic: 25.60
Date: Tue, 15 Nov 2022 Prob (F-statistic): 8.16e-05
Time: 16:22:16 Log-Likelihood: -76.543
No. Observations: 20 AIC: 157.1
Df Residuals: 18 BIC: 159.1
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 32.1069 8.628 3.721 0.002 13.981 50.233
국어 0.5705 0.113 5.060 0.000 0.334 0.807
==============================================================================
Omnibus: 1.833 Durbin-Watson: 2.366
Prob(Omnibus): 0.400 Jarque-Bera (JB): 0.718
Skew: -0.438 Prob(JB): 0.698
Kurtosis: 3.310 Cond. No. 252.
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
국어점수 : 60
예상 수학 점수 : [66.3399081]
OLS Regression Results
==============================================================================
Dep. Variable: 수학 R-squared: 0.659
Model: OLS Adj. R-squared: 0.619
Method: Least Squares F-statistic: 16.46
Date: Tue, 15 Nov 2022 Prob (F-statistic): 0.000105
Time: 16:22:19 Log-Likelihood: -74.617
No. Observations: 20 AIC: 155.2
Df Residuals: 17 BIC: 158.2
Df Model: 2
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 22.6238 9.482 2.386 0.029 2.618 42.629
국어 0.1158 0.261 0.443 0.663 -0.436 0.667
영어 0.5942 0.313 1.900 0.074 -0.066 1.254
==============================================================================
Omnibus: 6.313 Durbin-Watson: 2.163
Prob(Omnibus): 0.043 Jarque-Bera (JB): 3.824
Skew: -0.927 Prob(JB): 0.148
Kurtosis: 4.073 Cond. No. 412.
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
국어점수 : 60
영어점수 : 70
예상 수학 점수 : [71.16617773]
다중회귀분석에서 모델은 유의하지만 독립변수의 자격은 갖추지 못했다. 데이터를 가공할 필요성이 있다.