Hayoung Jeong
Hayin
Hayoung Jeong
전체 방문자
오늘
어제
  • 분류 전체보기
    • 유데미 스타터스
    • SQL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스타터스부트캠프
  • 유데미
  • 태블로
  • 유데미코리아
  • 유데미부트캠프
  • 데이터분석
  • 부트캠프후기
  • 취업부트캠프
  • 태블로시험
  • 데이터시각화

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Hayoung Jeong

Hayin

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 5주차 학습일지
유데미 스타터스

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 5주차 학습일지

2023. 3. 12. 22:10

이번주는 파이썬 시계열 예측 관련 내용이었다. 

통계 내용도 많이 나오고 양이 많아서 사실 정해진 진도를 못 따라가긴 했지만 이번 주에 배운 내용을 간략하게 정리해보려고 한다.

Statsmodels

- 시계열 예측에 자주 쓰이는 라이브러리 

- 다양한 통계 모형의 추정과 통계 검정, 통계적 데이터 탐색 등을 다루는 클래스와 함수를 제공하는 모듈

 

시계열 데이터의 속성

1. 추세 : 시계열 데이터는 경향성을 가진다.  시계열 데이터는 어떤 방향으로든 추세를 가진다.

 - Upward : 위로 가는 추세

- Horizontal/Stationary : 수평방향, 변하지 않는 추세

- Downward : 아래로 가는 추세

 

2. 계절성 : 주기적으로  반복적인 추세, 주기가 매우 뚜렷하게 보인다면 계절성.

ex. 매 겨울마다 증가, 매 여름마다 감소 

 

3. 순환 : Cyclical, 반복성이 없는 순환 요소

 

Hodrick-Prescott filter 호드릭-프레스콧 필터 

yt​=τt​+ct​

데이터의 추세 요소와 순환 요소를 찾아 분해.

이 두 요소는 2차 손실 함수를 최소화하는 값으로 결정

 

* 2차 손실 함수 

minτ​(∑t=1T​(yt​−τt​)2+λ∑t=2T−1​((τt+1​−τt​)−(τt​−τt−1​))2)

 

* λ : 평활화 계수, 추세요소의 증가율 변동폭 조정 

분기별 데이터에서는 λ = 1600, 연간 데이터에서는 λ = 6.25, 월간 데이터에서는 λ = 129,600 추천

 

# 호드릭 프레스콧 필터
from statsmodels.tsa.filters.hp_filter import hpfilter

# 리턴값은 튜플, 두 값을 리턴함 / 순환요소, 추세요소 반환
gdp_cycle, gdp_trend = hpfilter(df['realgdp'], lamb =1600)

type(gdp_trend) # 형태는 시리즈 : pandas.core.series.Series

# 추세요소를 df의 새로운 열로 추가하기
df['trend'] = gdp_trend

# 그래프 그리기 
df['trend'].plot()

gdp_trend

# 추세 요소랑 realgdp랑 같이 그려보기
df[['realgdp','trend']].plot()

 

 

2008년 대불황 이후에 내용만 확대해서 보기

# 2008년 이후의 대불황같이 특정 기간만 확대하기
df[['realgdp','trend']]['2005-01-01':].plot()
# 대불황 이후 몇 년간 추세를 따르지 않는다. (하락 추세)

2008년 대불황 이후 실제 gdp는 추세를 따르지 않고 하락했음.

 

ETS 분해  (E : Error, T : Trend, S : Seasonality)

* ETS Models

- 지수평활법,  ETS분해, 추세모형과 같이 다양한 여러 모델들을 포함하는 일반적 표현

-  E,T,S 세가지 요소를 사용해서 데이터를 평활화

 

* ETS 모델의 종류

-  덧셈 모델 : 추세가 선형에 더 가깝고 계절성이 일정해보일 때 적합

-  곰셉 모델 : 추세가 비선형적으로 증가/감소할 때 적합 

 

from statsmodels.tsa.seasonal import seasonal_decompose

# ETS분해 곱셈모델 사용 
result = seasonal_decompose(airline['Thousands of Passengers'], model = 'multiplicative')

 

result.trend.plot()

result.seasonal.plot()

 

# 잔차
result.resid.plot()

from pylab import rcParams
rcParams['figure.figsize'] = (12,7)
result.plot();

추세 요소 : 데이터 포인트의 전반적인 상승 혹은 하강세를 보여줌.

계절 요소 : 계절성 요소들을 직선화한 것 / 즉 추세 요소를 제거한 것

잔차 요소 : 추세나 계절성으로 설명되지 않는 것들을 나타냄, 어디에 노이즈가 많은지 혹은 그렇지 않은지 나타내는 역할도 함.

 

EWMA Models (Exponentially-Weighted Moving Average)

* 단순 이동 평균의 문제점

- 전체 모델이 같은 이동 평균 기간으로 제한됨.

- 데이터 하나에 대해 하나의 이동 평균 기간 밖에 적용할 수 없음. 

- 평균을 함으로 인해서 원래 데이터의 극대값과 극소값에 미치지 못함. 

- 적절한 이동 평균 기간을 찾는 것은 어려움. 

 

* EWMA : 지수 가동 이동 평균, 단순 이동 평균의 단점을 보완. 

- 최근의 값들에 가중치를 적용함으로써 단순 이동 평균에서의 시차 효과를 감소시킬 수 있음. 

- 가장 최근의 값에 적용되는 가중치는 매개변수에 의해 결정, 이동 평균 기간에 따라서도 변화함.

 

span : N-일 지수 가중 이동 평균 

# 지수 가중 이동 평균
airline['EWMA-12'] = airline['Thousands of Passengers'].ewm(span = 12).mean()

airline[['Thousands of Passengers', 'EWMA-12']].plot()
# 계절성 추세가 시작부분에서 끝 부분으로 갈수록 더 명확하게 보임.

 

 

 

 

홀트-윈터스 계절성 기법

- EWMA 지수 가중 이동 평균은 계절성이나 전반적인 추세를 고려하지는 못함. (지수 평활 시, 알파 하나의 매개변수만 사용하기 때문)

- lt, bt,st 세 식은 각각에 대응하는 평활 매개변수 알파, 베타, 감마를 갖는다.

 

* 계절성 요소의 성질에 따라 두 가지로 다룸.

- 덧셈 기법 : 계절성 요소가 전체 데이터에서 일정한 폭으로 나타날 때 이용

- 곱셈 기법 : 계절적 변동폭이 데이터의 수준에 비례해 나타날 때

 

(이중 지수 평활법) 홀트 기법 : 시계열 데이터를 실질적인 값인 수준 요소와 추세, 두 가지 요소로 분리 

(삼중 지수 평활법) 홀트 - 윈터스 계절성 기법  : 계절성을 표현하는 새로운 평활 매개변수 감마가 추가됨

 

# 이중 지수 평활법 (홀트 기법)

from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 덧셈 기법
airline['DES_add_12'] = ExponentialSmoothing(airline['Thousands of Passengers'], trend = 'add').fit().fittedvalues.shift(-1)

# 곱셈 기법
airline['DES_mul_12'] = ExponentialSmoothing(airline['Thousands of Passengers'], trend = 'mul').fit().fittedvalues.shift(-1)



# 삼중 지수 평활법 (홀트-윈터스 기법) / 추가적인 인자가 있어서 shift(-1)이 불필요
airline['TES_mul_12'] = ExponentialSmoothing(airline['Thousands of Passengers'], trend ='mul',seasonal = 'mul', seasonal_periods = 12 ).fit().fittedvalues

 

일반 예측 모델 

* 일반 예측 과정의 단계

1. 데이터를 기반으로 모델을 선택하는 것

2. 훈련/테스트 셋 나누기 

- 테스트 데이터셋의 크기는 예측하고자 하는 기간의 크기보다는 커야 한다.

- 그러나 예측하고자 하는 기간이 길수록 더 많은 예측을 수행하면서 그만큼 노이즈가 추가되고 예측을 기반으로 또 예측을 하게 되므로, 예측의 정확도가 낮아진다.

3. 훈련 데이터셋에 모델을 피팅

4. 테스트셋으로 모델 평가 

5. 모델에 만족하면, 모델을 전체 데이터셋에 피팅한 후 실제 미래를 예측

 

# 앞으로

다음 주부터는 오프라인으로 태블로 수업을 듣는다. 

조별로 하는 것이라, 매일 과제도 있고 조금 빡세다고 하지만 오히려 강제성이 생겨서 더 좋을 거 같다는 생각이 든다. 

 

 


* 유데미 큐레이션 바로가기 : https://bit.ly/3HRWeVL
* STARTERS 취업 부트캠프 공식 블로그 : https://blog.naver.com/udemy-wjtb
본 후기는 유데미-웅진씽크빅 취업 부트캠프 4기 데이터분석/시각화 학습 일지 리뷰로 작성되었습니다.

 

 

 

'유데미 스타터스' 카테고리의 다른 글

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 7주차 학습일지  (1) 2023.03.26
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 6주차 학습일지  (0) 2023.03.19
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지  (1) 2023.03.05
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 3주차 학습 일지  (0) 2023.02.26
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 2주차 학습 일지  (0) 2023.02.19
    '유데미 스타터스' 카테고리의 다른 글
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 7주차 학습일지
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 6주차 학습일지
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 3주차 학습 일지
    Hayoung Jeong
    Hayoung Jeong

    티스토리툴바