데이터 준비 - 비시계열 vs 시계열
- 비시계열 - Simple, K-fold, Holdout
- 시계열 - Time series cross-validation ( 단기, 장기 )
회귀분석
(1) 검증지표
- R^2
- t-검정 : 독립변수와 종속변수 간의 선형관계 신뢰성 정도
- F-검정 : 독립변수의 분산과 종속변수의 분산간의 관계를 사용해 성능 평가
- AIC, BIC : 정보량 기준, 값이 작을수록 올바른 모형
(2) 잔차진단
- 회귀분석 잔차진단 가정 - 잔차 분포가 정규성, 독립성, 등분산성
- 시계열 회귀 잔차진단 - 정상성(백색잡음), 정규분포, 자기상관(시간흐름에서 독립적), 등분산성
시계열 데이터 분리 - 시간순
def datasplit_ts(raw, Y_colname, X_colname, criteria):
raw_train = raw.loc[raw.index < criteria,:]
raw_test = raw.loc[raw.index >= criteria,:]
Y_train = raw_train[Y_colname]
X_train = raw_train[X_colname]
Y_test = raw_test[Y_colname]
X_test = raw_test[X_colname]
print('Train_size:', raw_train.shape, 'Test_size:', raw_test.shape)
print('X_train:', X_train.shape, 'Y_train:', Y_train.shape)
print('X_test:', X_test.shape, 'Y_test:', Y_test.shape)
return X_train, X_test, Y_train, Y_test
회귀분석
fit_reg1 = sm.OLS(Y_train, X_train).fit()
fit_reg1.summary()
pred_tr_reg1 = fit_reg1.predict(X_train).values
pred_te_reg1 = fit_reg1.predict(X_test).values
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:
pred_concat=pd.DataFrame(Y_pred, index=Y_real.index)
pred_concat.columns=['prediction']
pd.concat([Y_real,pred_concat], 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)
Residual.columns=['Error']
return Score, Residual
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
# 평가지표 비교, train 잔차, test 잔차
- 모든 베타 계수가 유의하다라는 결과가 나왔지만
- t 검정에서 유의한 변수로 밝혀진 것은 count_diff, count_lag1
- Skew (정규분포의 값은 0) -> 벗어남
- Kurtosis - (정규분포 값은 3) -> 벗어남
+ 참고 자료 및 출처
- 김경원 < 파이썬을 활용한 시계열 데이터 분석 A-Z 강의 > ( 패스트캠퍼스 강의 )
'Analysis > Time series' 카테고리의 다른 글
Lecture 6. 분석성능 확인 (0) | 2021.03.16 |
---|---|
Lecture 5. 시계열 데이터 시각화 (0) | 2021.03.15 |
Lecture 3. 시계열 데이터 패턴 추출 (0) | 2021.03.13 |
Lecture 2. 시계열 알고리즘 (0) | 2021.03.13 |
Lecture 1. 시계열 데이터 기초 (0) | 2021.03.12 |
댓글