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]

다중회귀분석에서 모델은 유의하지만 독립변수의 자격은 갖추지 못했다. 데이터를 가공할 필요성이 있다.