일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 시계열
- 시계열시각화
- 오제이튜브
- 시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
- 년월일 데이터
- 리눅스개념
- 음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
- 빈 데이터프레임 #pandas #데이터전처리
- timeseries decomposition
- pandas
- 응용이 보이는 선형대수
- adf_test
- 시간형식변환
- 확률
- 크롤링자동화
- seaborn # kdeplot # 데이터분석
- 파이프라인전처리
- 짧은 시계열 # 금융시계열
- 시계열데이터셋
- np.split
- 날짜파싱
- 시간형식
- pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
- loess
- Python
- 시계열모듈
- 시계열분해
- stl
- 이수역 양식집
- 플로틀리
- Today
- Total
데이터분석과 개발
[시계열분석] 시계열 분해(1) - 시계열 성분과 분해방법 본문
* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.
* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.
안녕하세요
오늘은 statsmodel을 사용해서 시계열 분해를 정리해보려 합니다.
시계열 분해는 시계열 데이터를 추세(trend), 계절성(seasonality), 잔차(residual)로 나눠주는 분석 방법입니다.
그렇다면 왜 시계열 분해법을 사용할까요??
기본적으로 시계열 데이터는 AR(AutoRegressive), 즉 자신의 과거데이터에 영향을 받는 자기상관성을 전제로 분석을 합니다. 그렇다면 현재 데이터가 자신의 어떤 과거데이터에 영향을 받는지 알아보는 것이 가장 중요한 일이 됩니다.
하지만 날 것 그대로의 데이터를 보고 분석을 하기는 쉽지 않으니 시계열 분해를 통해 추세를 제거하는 방식 등을 사용하여 분석에 용이하도록 합니다.
오늘 사용해볼 데이터는 darts모듈에 있는 3개월 단위 맥주판매량 데이터입니다. 데이터를 사용해서 시계열 데이터의 구성성분을 정리해보도록 하겠습니다!
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from darts.datasets import AusBeerDataset
plt.style.use('default')
df = AusBeerDataset().load().pd_dataframe()
df.plot(figsize=(10,5))
1. 시계열 성분
* 추세
데이터가 장기적으로 증가하거나 감소할 때 추세가 있다고 합니다. 데이터 전체적인 방향성을 이야기한다고 할 수 있습니다. 위의 예시데이터에서 추세를 살펴보면 1959년부터 1975년(1969년~ 1979년 사이) 동안 증가하는 추세를 보이고 그 이후에는 추세가 없다가 감소하는 경향을 보이고 있습니다.
* 계절성(trend)
계절성(trend)란 데이터의 주기 혹은 패턴을 뜻합니다.
예를 들어 아이스크림 판매량이 여름(7,8월)에 증가하고 겨울(12,1월)에 감소한다면 1년의 계절성을 가진다고 할 수 있습니다.
위의 예시데이터의 앞부분만 자세히 확대해보았습니다. (3개월 단위 데이터입니다)
데이터를 보시면, 3개월 3개월 3개월 3개월 마다 하락, 조금 상승, 많이 상승의 규칙으로 매년 판매량이 기록되어 있는 것을 볼 수 있습니다.
* 잔차(residual)
잔차(residual)은 원래 데이터에서 추세와 계절성 값을 빼준 나머지 값입니다.
최종적으로 시계열 분해를 하게 되면 이런식으로 결과가 나오게 됩니다.
2. 시계열 분해 방법
그렇다면 위의 그래프는 어떻게 그려진 것일까요??
추세, 계절성, 잔차 순서로 일반적으로 구하는 방법을 정리해보려 합니다.
(1) 추세를 먼저 구합니다.
(2) 원래데이터에서 추세를 제거한 값에서 기간별 데이터의 평균을 통해 계절성 값을 구합니다.
기간별 데이터의 평균이란 날짜별,월별,연별이 있고
날짜별 데이터라고 생각한다면
2000년도의 1월1일, 2001년도의 1월1일, 2002년도의 1월1일...의 값들의 평균
2000년도 1월2일, 2001년도의 1월2일, 2002년도의 1월2일...의 값들의 평균을 의미합니다.
따라서 1월1일 평균값, 1월2일 평균값... 12월 31일 평균값들이 계절성 데이터가 됩니다.
마찬가지로 월별 데이터라고 생각한다면 1월의 평균값,2월의 평균값...12월 평균값들이 계절성 데이터가 됩니다.
(3) 잔차값이란 원래데이터에서 추세와 계절성을 제거하여 구합니다.
평균값이다 보니 원래값과 차이가 생길 수 밖에 없습니다.
예를 들어보면 1,3,5,7,9 의 평균을 구하면 5가 되고 잔차값은 -4, -2, 0 , 2, 4 로 계산할 수 있습니다.
따라서 정리하자면 잔차값이란 원래데이터 - 추세 - 계절성 값으로 구할 수 있습니다.
(mulitplicative 라면 (원래데이터/ 추세) / 계절성)
방법을 살펴보면 계절성값과 잔차값은 추세를 구할 수 있으면 자연스럽게 구할 수 있는 값들입니다.
따라서 "추세"를 구하는 방법에 따라 시계열 분해 방법이 달라진다고 합니다.
다음 포스팅에서는 추세를 구하는 방법에 대해 정리해보겠습니다.
감사합니다.
'AI(시계열) > 시계열분석' 카테고리의 다른 글
[시계열 분석] 시계열분해(2) - 추세 구해보기(이동평균, Loess) (0) | 2023.01.18 |
---|---|
[시계열 분석] 정상성이란? (2) | 2023.01.03 |
시계열 평가지표(Forecasting Metrics) 정리 (0) | 2022.12.31 |
[시계열 데이터수집] 크롤링 다음페이지 넘기기 (0) | 2022.12.27 |