무냐의 개발일지
[Coursera] Time Series / Week1 (Tensorflow Specialization) _시계열 데이터 살펴보기 본문
[Coursera] Time Series / Week1 (Tensorflow Specialization) _시계열 데이터 살펴보기
무냐코드 2024. 2. 29. 23:05| Time series data의 유형, 예시, 특징
seasonality, trends, noise 등을 감안하여 예측
데이터 예시) 태양의 흑점(sun spot), 날씨 온도, 주식 등
| 목차
1주차 : Time series 확인하기
2주차 : dense모델
3주차 : RNN(recurrent neural network)
4주차 : Convolution
* Multivariate Time Series : 다양한 변수를 동시에 확인 (시간대별로 출생률, 사망률을 동시에 보는 식으로 다변량으로 확인)
| Time Series에 머신러닝 적용하는 방법
1) 미래 수치를 예측하기
2) Imputation : 과거 데이터를 분석해서, 어떻게 현재 상황이 생겼는지 추론/ 누락된 데이터를 대체를 통해 채울 수 있다
3) Detect Anomalies : 컴퓨터 로그에서 혼자 툭 튀어나온 기록이 있으면 의심해볼 수 있다
4) Pattern 분석 : 음파 분석으로 speech recognition에 사용 가능
| Time Series의 특징
: Trend(우상향, 우하향 등), Seasonality (주말에만 치솟는 쇼핑, 스포츠 경기 등)
- 본인의 과거 데이터에 영향을 받는 것 (spikes unpredictable = innovations 라고 불린다) : 과거 데이터로 예측할 수 없는 데이터
- 대부분의 데이터는 Trend + Seasonality + Autocorrelation + Noise가 섞여있다
- 머신러닝으로 patterns 확인하고 미래를 예측한다
- 물론, stock price같은 경우 갑자기 변화가 있을 수 있음 = Non-stationary Time Series : 이런 경우 젅체데이터 말고, seasonality가 있는 최근 데이터만 분석할 수도 있다. 하지만 still, the more the data, the better
* Naive forecasting : 앞에 값이랑 바로 뒤의 값이 같을거라고 예상하는 진짜 베이직한 예측
| Train Test split 하는 방법
1) Fixed partitioning : 데이터를 train, validation, test로 나누는 것
일반 데이터에서는, train, test, validation을 무작위 랜덤으로 뽑지만, time series에서는 이렇게 순차적으로 뽑고, 효과는 똑같다.
test data가 예측하고자 하는 데이터랑 가장 가까운, 가장 최신의 데이터니까.
Test 세트를 포기하는 경우도 흔함. 이런 식으로 아예 train, validation으로만 모델 테스트하고, test는 따로 두는 방법.
2) Roll-Forward partitioning : 짧은 훈련기간에서 점점 긴 훈련기간으로 바꾸는 방법
| 모델 평가 방법
- MSE가 제일 흔하다 : 음수를 없애기 위해 square를 한다 (에러 2, -2인 애가 있으면 서로 상쇄해서 에러가 없는 것처럼 돼버리니깐) (오차값이 크면 MSE가 낫다)
- MAE : 제곱으로 음수를 없애는 게 아니라 절대값을 적용한다 (손익이 오차의 크기에 비례할 땐 이게 낫다)
- MAPE (Mean absolute percentage error) : size of the error compares to the value. 절대오차와 절대값의 평균 비율.
keras.metrics.mean_absolute_error(x_valid, naive_forecast).numpy()
| Moving average , Differencing
1) Moving Average : 가장 흔하고 간단한 예측방법. 노이즈를 효과적으로 제거한다. 원본시계열을 비슷하게 딴 곡선이 된다 (단, 추세, 계절성 예측하진 않는다). 예측하려는 기간 이후에는 오히려 naive forecast보다 실적이 저조할 수 있다.
yellow line : plot of the average of the blue values over fixed periods (averaging window)
아아 window 가 그 기간을 말하는거구나!!
2) Differencing : remove trend, seasonality (시계열에서 추세와 계절성을 제거해준다!!) - T시점과 이전 기간값 사이의 차이를 연구
데이터 시간에 따라 그 기간은 하루, 1달, 1년이 될 수도 있음
Differenced time series에 moving average 구해보면 예측이 잘 나오겠지 (차분 1 이라고 치면)
하지만!! 이건 차분 시계열에 대한 예측일뿐, 원본 시계열에 대한 예측이 아니다.
원본시계열 예측을 구하려면, T-1 시점의 값을 다시 더해서 예측값을 얻을 수 있다.
더해서 다시 봤더니, 확연히 나아졌지만, 여전히 Noise가 심하다 - came from the past value that we added back into our forecast
그래서, 다시 이 과거의 noise를 Moving average 적용해서 없애준다.
이게 제일 좋은 결과가 나옴
완벽한 모델의 MAE(평균절대오차)는 약 4가 나옴!!
| Windows 의 차이
* trailing window : when computing the moving average of present values
* centered window : to compute the moving average of past values (이게 더 정확도가 높음) - 과거값을 부드럽게 만들때는 이거 쓴다