Data Analysis & ML/시계열분석

[시계열분석] 시계열 변수 추출 실습(Python)(4) - 시계열 데이터 준비(train/test set 분리) (bike-sharing-demand dataset)

YSY^ 2021. 3. 3. 16:51

[시계열분석] 시계열 변수(빈도/추세/계절성/주기/시계열분해/더미변수/지연값) :ysyblog.tistory.com/179

[시계열분석] 시계열 변수 추출 실습(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

해당 포스팅은 위 포스팅들에 이어 진행됩니다.

시계열 데이터준비(Time Series Validation)

시계열 데이터인 경우 랜덤성(set.seed)을 부여하면 안되고 시간축 유지가 핵심!

  • 훈련셋(Training set): 가장 오래된 데이터
  • 검증셋(Validation set): 그 다음 최근 데이터
  • 테스트셋(Testing set): 가장 최신의 데이터

하지만 단순히 train/test로 단순히 나누는것은 문제가 있다

과거 정확성이 높더라도 미래의 정확성 보장할 수 없기에, 미래 모든시기 검증 추천!

각 시점별로 값들에 대한 퍼포먼스가 다르기 때문에 가까운 미래는 정확성이 높을 것이지만 먼미래는 예측력이 떨어지기 때문.

  • 1스텝 교차검사(One-step Ahead Cross-validation) : 하나씩 예측하고 예측했던것은 train에 넣는다.

  • 2스텝 교차검사(Two-step Ahead Cross-validation) : train 데이터보다 몇 시점 뒤의 시간을 예측한다.

 

Train/test set으로 분리

# for a time-series
raw_train = raw_fe.loc[raw_fe.index < '2012-07-01',:]
raw_test = raw_fe.loc[raw_fe.index >= '2012-07-01',:]
print(raw_train.shape, raw_test.shape)
# (13128, 29) (4416, 29)

 

Code Summary

### Data split of time series
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
    
# Confirm of input and output
Y_colname = ['count']
X_remove = ['datetime', 'DateTime', 'temp_group', 'casual', 'registered']
X_colname = [x for x in raw_fe.columns if x not in Y_colname+X_remove]
X_train, X_test, Y_train, Y_test = datasplit_ts(raw_fe, Y_colname, X_colname, '2012-07-01')

해당 포스팅은 패스트캠퍼스의 파이썬을 활용한 시계열 데이터 분석 A-Z 올인원 패키지 강의를 듣고 정리한 내용입니다

728x90
반응형