데이터 코딩은 아래 포스팅에 이어 진행됩니다.
[시계열분석] 시계열 변수 추출 실습(Python)(1) - 시계열 분해 (bike-sharing-demand dataset) :ysyblog.tistory.com/209
[시계열분석] 시계열 변수 추출 실습(Python)(2) - 이동평균/지연값/증감폭/그룹화 (bike-sharing-demand dataset) :ysyblog.tistory.com/210
[시계열분석] 시계열 변수 추출 실습(Python)(3) - 종속변수들과 독립변수들과의 관계를 파악하기 위한 시각화 (bike-sharing-demand dataset) :ysyblog.tistory.com/211
[시계열분석] 시계열 변수 추출 실습(Python)(4) - 시계열 데이터 준비(train/test set 분리) (bike-sharing-demand dataset) :ysyblog.tistory.com/212
기본 모델링
시계열 변수 추출 실습(Python)(4) 포스팅의 데이터셋 분류에서 이어진다.
fit_reg1 = sm.OLS(Y_train, X_train).fit()
display(fit_reg1.summary())
pred_tr_reg1 = fit_reg1.predict(X_train).values
pred_te_reg1 = fit_reg1.predict(X_test).values
- r-sqared 는 1이라 데이터를 전부 반영하지만, 변수들의 p-value를 보면 유의한 변수가 거의 없다.
- 정규분포 여부 -> skew왜도(정규분포는 0), kurtosis첨도(정규분포는 3)가 극단적이므로 정규분포가 아님
- 적합이 잘 되지 않는것이다. 신뢰할 수 없다.
- 회귀분석에서 여러가지 지표를 주는 이유는 그 지표들이 모두 적합할때까지 조정하라는 것이다.
분석 성능 확인/평가하기
pd.concat([Y_train, pd.DataFrame(pred_tr_reg1, index=Y_train.index, columns=['prediction'])], axis=1)
# precision comparisions
pd.concat([Y_train, pd.DataFrame(pred_tr_reg1, index=Y_train.index, columns=['prediction'])], axis=1).plot(kind='line', figsize=(20,6),
xlim=(Y_train.index.min(),Y_train.index.max()),
linewidth=0.5, fontsize=20)
plt.title('Time Series of Target', fontsize=20)
plt.xlabel('Index', fontsize=15)
plt.ylabel('Target Value', fontsize=15)
plt.show()
분석성능 지표
MAE = abs(Y_train.values.flatten() - pred_tr_reg1).mean()
MSE = ((Y_train.values.flatten() - pred_tr_reg1)**2).mean()
MAPE = (abs(Y_train.values.flatten() - pred_tr_reg1)/Y_train.values.flatten()*100).mean()
pd.DataFrame([MAE, MSE, MAPE], index=['MAE', 'MSE', 'MAPE'], columns=['Score']).T
참고로 flatten()은 2차원 array를 1차원으로 바꾸어준다.
코드정리
# LinearRegression (using statsmodels)
fit_reg1 = sm.OLS(Y_train, X_train).fit()
display(fit_reg1.summary())
pred_tr_reg1 = fit_reg1.predict(X_train).values
pred_te_reg1 = fit_reg1.predict(X_test).values
### Evaluation of 1 pair of set
def evaluation(Y_real, Y_pred, graph_on=False):
loss_length = len(Y_real.values.flatten()) - len(Y_pred)
if loss_length != 0:
Y_real = Y_real[loss_length:]
if graph_on == True:
pd.concat([Y_real, pd.DataFrame(Y_pred, index=Y_real.index, columns=['prediction'])], axis=1).plot(kind='line', figsize=(20,6),
xlim=(Y_real.index.min(),Y_real.index.max()),
linewidth=3, fontsize=20)
plt.title('Time Series of Target', fontsize=20)
plt.xlabel('Index', fontsize=15)
plt.ylabel('Target Value', fontsize=15)
MAE = abs(Y_real.values.flatten() - Y_pred).mean()
MSE = ((Y_real.values.flatten() - Y_pred)**2).mean()
MAPE = (abs(Y_real.values.flatten() - Y_pred)/Y_real.values.flatten()*100).mean()
Score = pd.DataFrame([MAE, MSE, MAPE], index=['MAE', 'MSE', 'MAPE'], columns=['Score']).T
Residual = pd.DataFrame(Y_real.values.flatten() - Y_pred, index=Y_real.index, columns=['Error'])
return Score, Residual
# Score_tr, Residual_tr = evaluation(Y_train, pred_tr_reg1, graph_on=True)
### Evaluation of train/test pairs
def evaluation_trte(Y_real_tr, Y_pred_tr, Y_real_te, Y_pred_te, graph_on=False):
Score_tr, Residual_tr = evaluation(Y_real_tr, Y_pred_tr, graph_on=graph_on)
Score_te, Residual_te = evaluation(Y_real_te, Y_pred_te, graph_on=graph_on)
Score_trte = pd.concat([Score_tr, Score_te], axis=0)
Score_trte.index = ['Train', 'Test']
return Score_trte, Residual_tr, Residual_te
# Score_reg1, Resid_tr_reg1, Resid_te_reg1 = evaluation_trte(Y_train, pred_tr_reg1, Y_test, pred_te_reg1, graph_on=True)
# results of evaluations
Score_reg1, Resid_tr_reg1, Resid_te_reg1 = evaluation_trte(Y_train, pred_tr_reg1, Y_test, pred_te_reg1, graph_on=True)
Score_reg1
해당 포스팅은 패스트캠퍼스의 파이썬을 활용한 시계열 데이터 분석 A-Z 올인원 패키지 강의를 듣고 정리한 내용입니다
728x90
반응형
'Data Analysis & ML > 시계열분석' 카테고리의 다른 글
[시계열분석] 시계열 데이터 전처리 방향 - 시간현실 반영, Scaling, 다중공선성 처리 (0) | 2021.03.08 |
---|---|
[시계열분석] 잔차진단 실습(Python) - 잔차진단 시각화 및 분석(bike-sharing-demand dataset) (0) | 2021.03.05 |
[시계열분석] 잔차진단(2) - 잔차진단 방향(정상성/정규분포/자기상관/등분산성) (0) | 2021.03.04 |
[시계열분석] 잔차진단(1) - 백색잡음, 자기상관함수, 편자기상관함수 (0) | 2021.03.04 |
[시계열분석] 시계열 변수 추출 실습(Python)(4) - 시계열 데이터 준비(train/test set 분리) (bike-sharing-demand dataset) (1) | 2021.03.03 |