본문 바로가기
Analysis/Time series

Lecture 4. 시계열 데이터 분리 및 회귀분석

by 5ole 2021. 3. 13.

 

데이터 준비 - 비시계열 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  강의 >  ( 패스트캠퍼스 강의 )

 

 

 

 

 

댓글