Time Series Analysis with Facebook Prophet: How it works and How to use it -번역

Facebook Prophet을 사용한 시계열 분석 : 작동 원리 및 사용 방법

페이스 북 수익의 수학적 설명과 COVID-19 데이터를 예로 들어 모델을 조정하는 방법.

Photo by Jason Briscoe on Unsplash

시계열 데이터는 작업하기가 어렵고 답답할 수 있습니다.아르 자형먹은 모델은 매우 까다 롭고 조정하기 어려울 수 있습니다.이것은특별히여러 계절성이있는 데이터로 작업하는 경우 true입니다.또한 SARIMAX와 같은 기존 시계열 모델에는 정상 성 및 균등 한 간격 값과 같은 엄격한 데이터 요구 사항이 많이 있습니다.장기 기억이있는 반복 신경망 (RNN-LSTM)과 같은 다른 시계열 모델은 신경망 아키텍처에 대한 이해가 부족한 경우 매우 복잡하고 작업하기 어려울 수 있습니다.따라서 평균 데이터 분석가에게는 시계열 분석에 대한 진입 장벽이 높습니다.그래서 2017 년에 페이스 북의 몇몇 연구자들은 오픈 소스 프로젝트를 소개 한“대규모 예측”이라는 논문을 발표했습니다.페이스 북 예언자, 빠르고 강력하며 액세스 가능한 시계열 모델링을 어디서나 데이터 분석가와 데이터 과학자에게 제공합니다.

Facebook Prophet을 더 자세히 살펴보기 위해 먼저 그이면의 수학을 요약 한 다음 Python에서 사용하는 방법을 살펴 보겠습니다 (R에서도 구현할 수 있음).

Facebook Prophet이란 무엇이며 어떻게 작동합니까?

Facebook Prophet은 몇 가지 새로운 변형과 함께 몇 가지 오래된 아이디어를 사용하는 시계열 모델을 생성하기위한 오픈 소스 알고리즘입니다.여러 계절성이 있고 위의 다른 알고리즘의 단점 중 일부에 직면하지 않는 시계열 모델링에 특히 유용합니다.핵심은 세 가지 시간 함수와 오류 항의 합계입니다.g (t), 계절성성), 공휴일h (t)및 오류e_t:

Image for post

성장 기능 (및 변화 지점) :

성장 함수는 데이터의 전반적인 추세를 모델링합니다.선형 및 로지스틱 함수에 대한 기본 지식이있는 사람에게는 오래된 아이디어가 익숙해야합니다.Facebook 선지자에 통합 된 새로운 아이디어는 성장 추세가 데이터의 모든 지점에 나타나거나 Prophet이 “변경 지점”이라고 부르는 지점에서 변경 될 수 있다는 것입니다.

변경점은 데이터가 방향을 이동하는 데이터의 순간입니다.예를 들어 새로운 COVID-19 사례를 사용하면 백신이 도입 된 후 정점에 도달 한 후 새로운 사례가 떨어지기 시작할 수 있습니다.또는 새로운 균주가 인구에 도입되는 경우 갑작스런 사례가 나타날 수 있습니다.예언자는 변화 지점을 자동으로 감지하거나 직접 설정할 수 있습니다.또한 자동 변경점 감지에서 고려되는 데이터의 양과 성장 기능을 변경하는 데있어 변경점이 갖는 힘을 조정할 수도 있습니다.

성장 기능에는 세 가지 주요 옵션이 있습니다.

  • 선형 성장 :이것은 예언자의 기본 설정입니다.변화 점간에 기울기가 다른 부분 선형 방정식 세트를 사용합니다.선형 성장을 사용하면 성장 기간이 고전과 유사하게 보입니다.y = mx + b중학교부터는 기울기 (m)와 오프셋 (b)은 가변적이며 각 변경점에서 값이 변경됩니다.
  • 물류 성장 :이 설정은 시계열에 모델링하는 값이 포화되고 최대 값 또는 최소값을 초과 할 수없는 상한 또는 하한이있는 경우에 유용합니다 (이동 능력을 고려).물류 성장이 사용되는 경우 성장 기간은 운반 능력 (C)이 시간과 성장률 (k) 및 오프셋의 함수에 따라 달라진다는 점을 제외하고는 물류 곡선 (아래 참조)에 대한 일반적인 방정식과 유사하게 보입니다.(m)은 가변적이며 각 변화 지점에서 값이 변경됩니다.
Image for post

  • 플랫:마지막으로, 시간이 지남에 따라 성장이 없을 때 플랫 추세를 선택할 수 있습니다 (하지만 여전히 계절성이있을 수 있음).플랫으로 설정하면 성장 기능이 일정한 값이됩니다.

계절성 함수 :

계절성 함수는 단순히 시간 함수로서의 푸리에 급수입니다.푸리에 시리즈에 익숙하지 않은 경우이를 쉽게 생각할 수있는 방법은 연속 된 사인과 코사인의 합입니다.각 사인 및 코사인 항에 일부 계수를 곱합니다.이 합계는 거의 모든 곡선이나 Facebook Prophet의 경우 데이터의 계절성 (주기적 패턴)과 비슷할 수 있습니다.모두 다음과 같이 보입니다.

Image for post

위의 내용을 해독하기 어렵다면 이걸 추천합니다푸리에 시리즈의 간단한 분석아니면 이거푸리에 시리즈의 직관에 대한 비디오.

여전히 푸리에 시리즈를 이해하는 데 어려움을 겪고 있다면 걱정하지 마십시오.Prophet이 시리즈에서 최적의 용어 수 (푸리에 순서라고도 함)를 자동으로 감지하므로 Facebook Prophet을 계속 사용할 수 있습니다.또는 이해에 자신이 있고 더 많은 뉘앙스를 원하는 경우 특정 데이터 세트의 요구 사항에 따라 푸리에 순서를 선택할 수도 있습니다.순서가 높을수록 계열의 용어가 더 많습니다.덧셈과 곱셈 계절성 중에서 선택할 수도 있습니다.

휴일 / 이벤트 기능 :

휴일 기능을 사용하면 Facebook Prophet이 휴일 또는 주요 이벤트로 인해 예측이 변경 될 때 예측을 조정할 수 있습니다.날짜 목록을 사용하고 (미국 공휴일의 기본 제공 날짜가 있거나 사용자가 직접 날짜를 정의 할 수 있음) 예측에 각 날짜가있을 때 과거 데이터를 기반으로 성장 및 계절성 조건에서 예측 값을 더하거나 뺍니다.확인 된 휴일 날짜에.또한 날짜에 따라 다양한 요일을 식별 할 수 있습니다 (크리스마스 / 새해, 휴일 주말, 추수 감사절과 블랙 프라이데이 / 사이버 먼데이 등).

Facebook Prophet 사용 및 조정 방법

R 또는 Python으로 구현할 수 있지만이 블로그에서는 Python에서의 사용에 중점을 둘 것입니다.Python 3.7 이상이 필요합니다.설치하기 위해서:

$ pip install pystan
$ pip 설치 fbprophet

Prepare the data

pandas를 사용하여 데이터를 읽고 정리 한 후에는 거의 Facebook Prophet을 사용할 준비가되었습니다.그러나 Facebook Prophet에서는 시계열의 날짜가 제목의 열에 있어야합니다.ds및 제목 열의 시리즈 값와이.물류 성장을 사용하는 경우 추가로 추가해야합니다.바닥시계열의 각 특정 시간 항목에서 가능한 증가의 최대 값 및 최소값이있는 열.

데모를 위해 New York Times가 Github에서 추적 한 새로운 COVID-19 사례를 사용합니다.먼저 위의 형식으로 데이터를 읽고 준비합니다.여기에 물류 성장이있는 것 같지 않기 때문에ds와이열 :

기본 Facebook Prophet 모델 실행

Facebook Prophet은 scikit-learn과 유사하게 작동하므로 먼저 모델을 인스턴스화 한 다음.fit (ts)그것을 통해 시계열을 전달합니다.전화 할 때.predict (ts), 예언자는 많은 정보를 출력합니다.운 좋게도 개발자는.make_future_dataframe (기간 = 10)모든 출력물을 체계적으로 쉽게 수집 할 수 있습니다.이 메서드는 다음을 사용하여 예측으로 채울 빈 Pandas 데이터 프레임을 출력합니다..predict (ts)방법.예측에는 데이터 세트에있는 모든 과거 값에 대한 예측과 메서드를 통해 전달 된 기간 수에 대한 추가 예측이 포함됩니다 (10을 초과하는 경우).이 미래 데이터 프레임에는 유용한 정보 열이 많이 있지만 가장 중요한 열은 다음과 같습니다.

  • ds예측의 타임 스탬프 항목을 포함합니다.
  • 야트시계열의 예측 값을 포함합니다.
  • yhat_lower예측에 대한 신뢰 구간의 하단을 포함합니다.
  • yhat_upper예측에 대한 신뢰 구간의 하단을 포함합니다.

.음모()또한 원래 데이터, 예측 및 모델의 신뢰 구간을 쉽게 플로팅 할 수 있도록 기능이 제공됩니다.이 모델의 첫 번째 반복에서는 Prophet이 자동으로 하이퍼 파라미터를 선택하도록 할 것입니다.

그러면 다음과 같은 플롯 된 예측이 출력됩니다.

다음 코드를 추가하여 위의 플롯에 변경점을 추가 할 수도 있습니다.

하이퍼 파라미터를 조정하지 않은 것을 고려하면 꽤 괜찮은 것 같습니다!예언자는 새로보고 된 사례의 주간 계절 성과 (아마도 테스트 장소의 주말 시간이 다르기 때문에) 전체적인 상승 추세를 확인했습니다.또한 새로운 사례의 비율이 크게 증가하는 것을 더 잘 모델링하기 위해 여름과 가을에 변화 지점을 추가했습니다.그러나 시각적으로 전반적으로 훌륭한 모델처럼 보이지 않으며 원본 데이터의 많은 주요 추세를 놓치고 있습니다.따라서 무슨 일이 일어나고 있는지 더 잘 평가하기 위해 조정해야합니다.

Facebook Prophet 조정

위 모델의 주요 문제 중 일부를 수정 해 보겠습니다.

  • 침체를 놓친다 :예언자는 새해 이후 새로운 COVID 사례에 침체를 통합 할 수 없었습니다.이는 변경점을 식별 할 때 고려되는 데이터 포인트 범위의 기본 설정이 시계열 데이터의 처음 80 %이기 때문입니다.이 문제는changepoint_range = 1데이터의 100 %를 통합 할 모델을 인스턴스화 할 때.다른 상황에서는 모델이 데이터에 과적 합하지 않고 마지막 20 %를 스스로 이해할 수 있도록 변경점 범위를 80 % 이하로 유지하는 것이 좋습니다.하지만이 경우 지금까지 발생한 상황을 정확하게 모델링하려고하기 때문에 조정을 100 %로 허용합니다.
  • 변화 지점의 강점 :위대한 선지자는 변화 지점을 만들 수 있었지만 시각적으로 일부 변화 지점이 모델에 미치는 영향이 매우 약하거나 변화 지점이 충분하지 않은 것처럼 보입니다.그만큼changepoint_prior_scale그리고n_changepoints하이퍼 파라미터를 사용하면이를 조정할 수 있습니다.기본적으로,changepoint_prior_scale이 값을 늘리면 더 많은 변경점을 자동으로 감지 할 수 있고 감소하면 더 적게 허용합니다.또는 다음을 사용하여 감지 할 여러 변경점을 지정할 수 있습니다.n_changepoints또는 직접 사용하여 변경점을 나열하십시오.변경점.변경점이 너무 많으면 과적 합이 발생할 수 있으므로주의하십시오.
  • 계절성으로 인한 과적 합 가능성 :새로운 사례의 주간 계절성을 파악한 것은 멋지지만,이 특정 상황에서는 유행병이 언제 끝날지 예측하기 위해 사례의 전반적인 추세를 이해하는 것이 더 중요합니다.Prophet에는 매일, 매주 및 매년 계절성을 조정할 수있는 하이퍼 파라미터가 내장되어 있습니다.그래서 우리는weekly_seasonality = False.또는 사용자 지정 계절성을 만들고 다음을 사용하여 푸리에 순서를 조정할 수 있습니다..add_seasonality ()방법을 사용하거나 다음을 사용하여 자동 계절성을 완화 할 수 있습니다.season_prior_scale하이퍼 파라미터.그러나이 경우 이러한 옵션 중 하나를 사용하는 것은 약간 과잉 일 수 있습니다.

이러한 변경 사항으로 모델을 다시 실행하면 다음이 생성됩니다.

와!하이퍼 파라미터에 대한 세 가지 작은 변경을 통해 지난 1 년 동안 새로운 COVID 사례의 행동에 대한 매우 정확한 모델을 확보했습니다.이 모델에서는 3 월 초에 사례가 거의 0에 가까워 질 것으로 예측합니다.케이스가 점근 적으로 감소하기 때문에 이것은 아마도 가능성이 낮습니다.

Facebook Prophet은 사용하기 쉽고 빠르며 다른 종류의 시계열 모델링 알고리즘이 직면하는 많은 문제에 직면하지 않습니다 (제가 가장 좋아하는 것은 결 측값을 가질 수 있다는 것입니다!).API에는 다음이 포함됩니다.선적 서류 비치앞으로 나아가고 교차 검증을 사용하고 외부 변수를 통합하는 방법 등에 대해 설명합니다.당신은 또한 확인할 수 있습니다이 GitHub 저장소이 블로그에 사용 된 코드가 포함 된 Jupyter 노트북 용입니다.

Leave a Comment