728x90
시계열 데이터란?
- 시간의 흐름에 따라 기록된 데이터
- 일정한 시간 간격에 의해서 기록된 시계열도 있고, 그렇지 않은 시계열도 존재함
시계열 분석의 활용 분야
- forecasting : 데이터를 기반으로 향후 수치를 예측
- imputation : 과거의 비어있는 데이터를 채움
- detect anomalies : 정상 패턴과 다른 형태를 나타내는 이상치를 탐지
- spot pattern : 데이터 내 특정 패턴을 감지
시계열 데이터에서 자주 나타나는 패턴
- 현실에 존재하는 시계열은 각 경우들을 조금씩은 가지고 있음
추세가있는 경우
![](https://blog.kakaocdn.net/dn/Le6Q4/btsC1FrJfkK/rxoJT4j1zmDIIuNv2dcRkK/img.png)
- Trend
- 데이터가 증가하거나 감소하는 등 특정 방향으로 움직이는 경우
- 꼭 선형적일 필요는 없음
계절성이 있는 경우
![](https://blog.kakaocdn.net/dn/bkhrX7/btsC4DNoroQ/U9kTyC9iwiQavNeHK498kK/img.png)
- Seasonality
- 패턴이 예측 가능한 간격으로 반복될 때 관측되는 것
- 일정한 빈도로 발생 가능한 경우를 말함
자기상관이 있는 경우
![](https://blog.kakaocdn.net/dn/vAlAK/btsC7uvtoqk/L552Vh0jNSuQHTRc5qqEP0/img.png)
- Autocorrelation
- 현재 시점과 지연된(lagged) 시점의 데이터간의 상관관계가 있는 경우
- 자기상관이란, 특정 시점이 이전 시점과 얼마나 관련이 있는지를 나타내는 개념
- 시간이 이전 단계에 의존성을 가지고 있기 때문에 '기억'을 가지고 있다고 표현하기도 함
- 과거를 기반으로 예측할 수 없는 급등 현상에 대해서는 'inovation'이라고 부르기도 함
백색잡음인 경우
![](https://blog.kakaocdn.net/dn/FNqBG/btsC36vBxzy/yabJzKrqyv7c5u3Gw6wQF0/img.png)
- white noise
- 예측이 불가능하고, 시간에 따라 무작위로 발생하는 값들로 이루어진 경우
- 각각의 데이터가 독립적이고 어떠한 패턴이나 추세가 없음
시계열 데이터의 성능 측정
Train test split
- 시계열에서도 train, valid, test set을 나눔
- test에서 잘 나오면 test까지 학습을 시켜서 모델을 최종적으로 완성
- 혹은 test set을 제외하고 train, valid로만 구성하기도 함
- fixed partitioning과 roll-forward partitioning 등의 방법이 있음
Fixed Partitioning
![](https://blog.kakaocdn.net/dn/2MRU2/btsC2AwXidv/Wjscu86W9hMc5J6ORHqnK1/img.png)
![](https://blog.kakaocdn.net/dn/yzZxE/btsCZ8HIoja/7e5Gp2BtxNz7rFzJXP6580/img.png)
- 전체 시계열을 train, valid, test로 나누고 그것을 유지하는 방법
Roll-forward partitioning
![](https://blog.kakaocdn.net/dn/DpLcU/btsC8X5feZ3/H8HyK415glKiLWWL0OEad0/img.png)
- 짧은 triaining기간에서부터 시작해서 조금씩 기간을 늘려나가는 방식
기준점 설정
![](https://blog.kakaocdn.net/dn/bAVH9S/btsC51USI9B/9iOtMRlRpDI08TvIW5Q4jK/img.png)
- 우리가 만든 모델이 잘 되었다는 기준은 어떻게 판단할 수 있을까?
- 가장 간단한 방법은 1시점 전의 값을 그대로 가져다 사용하는 naive forecast를 사용할 수 있음
- naive forecast결과는 상당히 잘 나오는 편임
- 실제로 lstm과 같은 모델을 사용했을 때 naive forecast한 결과가 나오는 경우를 심심치 않게 볼 수 있다
평가방법
MSE(Mean Squared Error)
- 예측값과 실제 값의 차이를 제곱하여 평균화한 값
- 큰 오차에 민감
RMSE(Root Mean Squared Error)
- MSE에 제곱근을 씌운 값
- 예측 오차의 표준 편차를 나타냄
- 오차의 크기와 방향을 고려하는 경우 사용
MAE(Mean Absolute Error)
- 예측값과 실제값 차이의 절대값 평균
- 큰 오차에 덜 민감함
MAPE(Mean Absolute Percentage Error)
- 예측값과 실제값의 차이를 백분율로 나타냄
- 상대적인 오차를 측정하는데 사용됨
- 예측값이 0이거나 매우 작은 경우 값이 무한대로 발산할 수 있어 주의가 필요함
간단히 예측하기
이동평균을 이용하기
![](https://blog.kakaocdn.net/dn/blx8xG/btsC2xUE68M/1128lDFMZw8IerXALqZvr0/img.png)
- 가장 일반적이고 간단하게 예측을 수행할 수 있는 방법
- 고정 시점의 평균값을 활용함
- 잡음을 제거하는 효과가 있음
Centered Moving Average
![](https://blog.kakaocdn.net/dn/4NIAQ/btsC6qtGkvg/lf1kxCZayxNKbPx8KH0iok/img.png)
- 기본적으로 사용하는 건 Trailing Moving Average, 이전시점의 값만을 가지고 평활화 하는 방법
- Centered Moving Average는 주어진 시점을 중심으로 양쪽으로 이동하는 창(window)을 사용하여 시계열 데이터를 평활화하는 방법
- centered MA를 이용하면 과거 데이터만을 이용하여 이동평균을 구하는 것 보다 정확한 값을 얻을 수 있음
- 하지만 미래 값을 알 수 없기 때문에 현재 값에는 사용하지 못함
이동평균에 차분을 이용하기
![](https://blog.kakaocdn.net/dn/qz67V/btsC6qAs9vX/tpbdI8zz4MXmKF1ar7ok00/img.png)
- differencing, 차분이란 시계열에서 트렌드와 계절성을 제거하는 기법
- t시점의 값과 이전 시점간의 차이를 연구하며, 이전 시점은 설정하기 나름
참고
https://otexts.com/fppkr/
https://www.coursera.org/learn/tensorflow-sequences-time-series-and-prediction
coursera 시계열 강의를 들으며 해당 내용을 정리해보았습니다.
이전에 많이 알려져있던 FPP와 비슷하면서도 더 최근, 다양한 내용들이 있어서 꽤나 흥미롭네요.
2월 내로 완강해보려고 합니다!
728x90
'AI > 시계열' 카테고리의 다른 글
Deep Learning for Anomaly Detection in Time-Series Data: Review, Analysis, and Guidelines (5) | 2024.10.27 |
---|---|
[python] prophet 사용하기4 - cross validation, hyperparameter tuning (0) | 2022.08.07 |
[Python] prophet 사용하기 3 - changepoint 조절하기, Gridsearch로 최적 파라미터 찾기 (0) | 2022.07.24 |
[python] prophet 사용하기 2 - Seasonality 조절하기 (0) | 2022.07.19 |
[python] prophet 사용하기1 - holiday 옵션 조절하기 (0) | 2022.07.13 |