제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
4. 문제 풀기
- 독립변수 X1의 회귀계수를 구하라
2번의 결과에서 X1의 coef를 보면 됩니다. 정답은 1.4362입니다. - 독립변수 X1, X3가 고정일 때, 독립변수 X2가 종속변수 y와 선형관계에 있다는 가설을 검정하라
X2의 회귀계수와 P>|t| 를 봅니다. 회귀계수가 양수이고, 유의 수준 0.05 미만이므로 X2와 y는 선형관계에 있습니다. - 독립변수 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]
'데이터분석과 AI > 빅데이터 분석기사' 카테고리의 다른 글
[빅데이터분석기사 실기] 제6회 실기 시험 만점(100점) 합격 후기 (0) | 2023.07.07 |
---|---|
[빅데이터분석기사 실기][작업형1] 시간 데이터 다루기(datetime, timedelta) (0) | 2023.07.03 |
[빅데이터분석기사 실기][작업형3] 검정 방법의 선택 (수치형 2집단, 3집단 및 범주형) (0) | 2023.06.27 |
[빅데이터분석기사 실기][작업형3] 비모수 검정 Mann-Whitney-U 검정, Wilcoxon 순위합 검정 (독립표본) (0) | 2023.06.26 |
[빅데이터분석기사 실기][작업형3] 등분산 검정(levene, bartlett, fligner) (0) | 2023.06.25 |
댓글