본문 바로가기
데이터분석과 AI/빅데이터 분석기사

[빅데이터분석기사 실기][작업형3] 회귀분석 (statsmodel 활용)

by 우공80 2023. 7. 4.
728x90

회귀분석

제6회 빅데이터분석기사 시험에는 작업형 3 유형이 추가되었습니다. 이전에 공지된 바로는 시험환경에 설치되고, 사용 가능한 패키지 중에 scipy만 있고, statsmodels가 없었습니다. 그래서 statsmodels를 사용하는 문제는 출제되지 않을 것이라고 예상했습니다.

그런데, 실제 시험에서는 해당 패키지가 설치되어 있었고, statsmodels를 활용해야 풀 수 있는 문제가 출제되었습니다. statsmodels를 사용하지 않고 python을 계산기처럼 사용해도 풀 수는 있겠지만, 그건 코딩..이라고 하기는 그렇죠.

(시험 유의사항에는 정작 계산기는 사용하면 안 된다고..)

 

결국 전원 정답처리되는 것으로 결정되었습니다. 

 

이번 시험에서는 출제되지 않았지만, 저도 잘 모르는 부분이기도 하고, 향후 시험에 출제될 수도 있으니까..
statsmodels를 활용한 회귀분석 예제를 만들어보았습니다. 

 

1. 데이터 생성

X1, X2, X3 세계의 독립변수를 가지고, 종속변수 y가 있으며 아래와 같이 2,3,4를 계수로 회귀식을 만들어주었습니다. 

import numpy as np
import pandas as pd
import statsmodels.api as sm

# Generate sample data
np.random.seed(0)
n = 100  # Number of observations
X1 = np.random.rand(n)  # Independent variable 1
X2 = np.random.rand(n)  # Independent variable 2
X3 = np.random.rand(n)  # Independent variable 3
epsilon = np.random.randn(n)  # Error term
y = 2 * X1 + 3 * X2 + 4 * X3 + epsilon  # Dependent variable

# Create a DataFrame from the data
data = pd.DataFrame({'X1': X1, 'X2': X2, 'X3': X3, 'y': y})

Output:

          X1        X2        X3         y
0   0.548814  0.677817  0.311796  4.534767
1   0.715189  0.270008  0.696343  5.257958
..       ...       ...       ...       ...
98  0.828940  0.058029  0.972919  4.566290
99  0.004695  0.434417  0.960835  4.843687

[100 rows x 4 columns]


2. statsmodels를 활용해 회귀분석하기

우선 데이터에 상수항을 추가해 줍니다. 상수 항을 사용하면 회귀 모델에서 모든 독립 변수가 0일 때 y의 예상 값을 나타내는 절편을 추정할 수 있습니다. 즉, 독립 변수의 영향을 받지 않는 y의 기준 수준을 알 수 있습니다.

상수항을 사용하면 회귀 계수를 보다 정확하게 추정하고 결과 해석을 향상하기 때문에, 상수항을 추가하는 것이 관행이라고 합니다.

 

statsmodels에서 회귀분석은 OLS 클래스를 사용합니다. OLS는 매개변수를 추정하는 데 사용되는 방법인 Ordinary Least Squares를 나타냅니다. OLS 방법은 관측된 값과 예측된 값 사이의 제곱 차이의 합을 최소화하는 가장 적합한 선을 찾는 것을 목표로 합니다.

# Add constant term to the independent variable
X = sm.add_constant(data[['X1', 'X2', 'X3']]) 

# Fit the regression model
model = sm.OLS(data['y'], X)
results = model.fit()

# Print the regression results
print(results.summary())

Output:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.707
Model:                            OLS   Adj. R-squared:                  0.698
Method:                 Least Squares   F-statistic:                     77.28
Date:                Sun, 02 Jul 2023   Prob (F-statistic):           1.66e-25
Time:                        10:34:33   Log-Likelihood:                -132.97
No. Observations:                 100   AIC:                             273.9
Df Residuals:                      96   BIC:                             284.4
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.2266      0.322      0.705      0.483      -0.412       0.865
X1             1.4362      0.325      4.421      0.000       0.791       2.081
X2             2.5860      0.341      7.587      0.000       1.909       3.263
X3             4.2479      0.312     13.608      0.000       3.628       4.868
==============================================================================
Omnibus:                        0.024   Durbin-Watson:                   2.404
Prob(Omnibus):                  0.988   Jarque-Bera (JB):                0.118
Skew:                           0.034   Prob(JB):                        0.943
Kurtosis:                       2.846   Cond. No.                         6.79
==============================================================================


3. 결과 해석하기 

각 항목에 대한 설명은 아래 링크를 참고하였습니다. 

https://ysyblog.tistory.com/119

 

[회귀분석] 회귀분석 실습(1) - OLS 회귀분석 결과 해석 및 범주형 변수 처리 (Statsmodel)

Statsmodel을 활용한 회귀분석 statsmodels 패키지에서는 OLS 클래스를 사용하여 선형 회귀분석을 실시한다 독립변수와 종속변수가 모두 포함된 데이터프레임이 생성되며, 상수항 결합은 하지 않아도

ysyblog.tistory.com


4. 문제 풀기

  1. 독립변수 X1의 회귀계수를 구하라
    2번의 결과에서 X1의 coef를 보면 됩니다.  정답은 1.4362입니다.

  2. 독립변수 X1, X3가 고정일 때, 독립변수 X2가 종속변수 y와 선형관계에 있다는 가설을 검정하라
    X2의 회귀계수와 P>|t|  를 봅니다. 회귀계수가 양수이고, 유의 수준 0.05 미만이므로 X2와 y는 선형관계에 있습니다.

  3. 독립변수 X1==0.5, X2==0.9 일 때, X3==0.8일 때 y값의 신뢰구간을 구하라.
    predict 함수를 이용해서 단일값으로 y의 예측값을 구할 수 있고,
    get_prediction 함수를 이용하면, 신뢰구간을 구할 수 있습니다.
# Set the values of X1, X2 and X3
X1_value = 0.5
X2_value = 0.9
X3_value = 0.7

# Create a new DataFrame with the desired values of X1 and X2
new_data = pd.DataFrame({'X1': [X1_value], 'X2': [X2_value], 'X3': [X3_value], 'const': 1})

# Predict the value of y using the regression model
y_pred = results.predict(new_data)

# Calculate the confidence interval of the predicted y value
ci = results.get_prediction(new_data)

# Extract the lower and upper bounds of the confidence interval
lower_bound = ci.conf_int()[0][0]
upper_bound = ci.conf_int()[0][1]

# Print the predicted value of y and its confidence interval
print(f"Predicted y value: {y_pred[0]}")
print(f"Confidence Interval (95%): [{lower_bound}, {upper_bound}]")

Output:

Predicted y value: 7.463906992986456
Confidence Interval (95%): [6.714092055005858, 8.213721930967054]
728x90

댓글