시계열 해석 라이브러리 Prophet 공식 문서 번역 9(이상치편)

Facebook이 공개하고 있는 시계열 해석용의 라이브러리 Prophet의 공식 문서를 번역해 갑니다.

목차
1.Prophet 공식 문서 번역(개요 및 특징편)
2.Prophet 공식 문서 번역(설치편)
3.Prophet 공식 문서 번역(퀵 스타트편)
4.Prophet 공식 문서 번역(포화 상태의 예측편)
5.Prophet 공식 문서 번역(트렌드의 변화점편)
6.Prophet 공식 문서 번역(주기성·이벤트 효과·설명 변수의 추가편)
7.Prophet 공식 문서 번역(증가하는 주기성편)
8.Prophet 공식 문서 번역(오차의 간격편)
9.Prophet 공식 문서 번역(특이편)
10.Prophet 공식 문서 번역(1일 단위가 아닌 데이터편)
11.Prophet 공식 문서 번역(모델의 진단편)
12.Prophet 공식 문서 번역(도움말편)

2018/10/27 공개. 원문 링크는 이하.
· Prophet 개요 및 특징 : htps : // 펑세보오 k. 기주 b. 이오 / p로 p에 t /
· 공식 문서 : htps : // 펑세보오 k. 기주 b. 이오 / p로 p에 t / 두 cs / 구이 ck_s rt. HTML

이번 기사는 이상치편입니다.


이상치



Prophet 모델에서 특이치를 다룰 때 크게 두 가지 방법이 있습니다. 여기에서는 R 페이지 (Wikipedia) 의 방문자수에 대한 로그 데이터를 이용하여 예측을 실시합니다. 그러나 이 데이터에는 몇 가지 이상값이 포함되어 있습니다.
# R
df <- read.csv('../examples/example_wp_log_R_outliers1.csv')
m <- prophet(df)
future <- make_future_dataframe(m, periods = 1096)
forecast <- predict(m, future)
plot(m, forecast)
# Python
df = pd.read_csv('../examples/example_wp_log_R_outliers1.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=1096)
forecast = m.predict(future)
fig = m.plot(forecast)


이 예측의 트렌드는 일견, 납득이 가는 것처럼 보입니다. 그러나 오차의 간격이 너무 크다는 문제가 있습니다. Prophet은 시계열 데이터의 이상값을 일단 취급할 수 있습니다. 다만, 그들을 피팅하고 트렌드의 변화를 예측한다고 할 수밖에 없습니다. 이러한 방식으로 만들어진 신뢰성이 부족한 모델은 이상치의 영향을 받은 채 미래의 추세를 예측합니다.

이상치를 다루는 가장 좋은 방법은 그들을 제거하는 것입니다. Prophet은 시계열 데이터의 일부가 누락된 경우에도 모델을 작성합니다. 이상값을 NA로 바꾸면 Prophet은 이상값의 영향을받지 않는 모델을 만들고 예측합니다.
# R
outliers <- (as.Date(df$ds) > as.Date('2010-01-01')
             & as.Date(df$ds) < as.Date('2011-01-01'))
df$y[outliers] = NA
m <- prophet(df)
forecast <- predict(m, future)
plot(m, forecast)
# Python
df.loc[(df['ds'] > '2010-01-01') & (df['ds'] < '2011-01-01'), 'y'] = None
model = Prophet().fit(df)
fig = model.plot(model.predict(future))


위의 예에서는 특이치가 상당히 흩어져 모델에 악영향을 미칠 것으로 보입니다. 이와 같이 항상 이상치의 영향을 회피할 수 있는 것은 아닙니다. 다음 특이치를 더 늘린 예를 살펴 보겠습니다.
# R
df <- read.csv('../examples/example_wp_log_R_outliers2.csv')
m <- prophet(df)
future <- make_future_dataframe(m, periods = 1096)
forecast <- predict(m, future)
plot(m, forecast)
# Python
df = pd.read_csv('../examples/example_wp_log_R_outliers2.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=1096)
forecast = m.predict(future)
fig = m.plot(forecast)


위의 예에서는 2015년 6월에 매우 많은 이상치가 흩어져 예측에 악영향을 미쳤습니다. 이것들을 제거하는 올바른 접근법을 다시 한번 보여줍니다.
# R
outliers <- (as.Date(df$ds) > as.Date('2015-06-01')
             & as.Date(df$ds) < as.Date('2015-06-30'))
df$y[outliers] = NA
m <- prophet(df)
forecast <- predict(m, future)
plot(m, forecast)
# Python
df.loc[(df['ds'] > '2015-06-01') & (df['ds'] < '2015-06-30'), 'y'] = None
m = Prophet().fit(df)
fig = m.plot(m.predict(future))

좋은 웹페이지 즐겨찾기