Search

Prophet

시계열 데이터의 예측을 위해 Facebook에서 개발한 오픈소스 라이브러리로, 자동화된 이상 탐지 및 계절성 분석을 지원하며, 특히 비즈니스 예측(예: 매출, 사용자 수, 웹 트래픽 등)에 유용한 모델이다.

Prophet 의 장점

정확하고 빠름

정확성: Prophet은 Facebook 내부의 다양한 응용 프로그램에서 신뢰할 수 있는 예측을 제공하는 데 사용됩니다. 이를 통해 계획 수립 및 목표 설정에 큰 도움을 줍니다.
속도: 대부분의 경우, 다른 접근 방식보다 더 나은 성능을 보여줍니다. Stan을 사용하여 모델을 피팅하므로, 몇 초 만에 예측 결과를 얻을 수 있습니다.
︎ Stan?
Stan은 복잡한 베이지안 모델이나 일반적인 확률론적 모델을 표현하고 추론하기 위해 개발된 오픈소스 확률 프로그래밍 언어다.
목적 : 다양한 통계 모델, 머신러닝 알고리즘, 인과관계 분석 등 복잡한 모델을 수리적으로 정의하고, 데이터를 바탕으로 모수를 추정하는 데 사용된다.
주요 기능
MCMC (Markov Chain Monte Carlo) 알고리즘 : 모델의 사후 분포를 샘플링하기 위해 Hamiltonian Monte Carlo(HMC) 및 No-U-Turn Sampler(NUTS) 알고리즘을 주로 활용한다
최대 사후 확률 추정(MAP): 혹은 다른 최적화 기법을 이용하여 모수를 추정할 수 있다.
︎ 모델 피팅의 개념
모델 정의
Stan을 사용하기 전에 여러분은 먼저 모델을 수학적으로 정의해야 합니다. 모델 정의는 다음과 같은 요소를 포함한다.
확률분포 지정:
데이터가 어떻게 생성되었을 것인지를 설명하는 분포(예: 정규분포, 포아송분포 등)를 가정합니다.
모수(parameter):
모델 내에서 추정하고자 하는 미지의 값들(예를 들어, 평균, 분산, 회귀계수 등)을 정의합니다.
우도(Likelihood):
주어진 모수값에 대해 관측 데이터가 나타날 확률을 모델링하는 부분입니다.
사전분포(Prior):
모수에 대한 초기(사전) 정보를 확률분포 형태로 지정합니다.
모델 피팅 과정
'모델을 피팅한다'는 것은 위에서 정의한 모델에 실제 데이터를 넣어, 모수의 사후분포(posterior distribution)를 추정하는 작업이다.
Stan은 MCMC 알고리즘(보통 HMC/NUTS)을 사용하여 이 사후분포를 샘플링함으로써, 모수의 추정치(예: 평균, 신뢰구간 등)를 산출합니다.
 Stan 을 사용한다는 의미
사전에 정의한 확률 모델(우도, 사전분포 등)을 바탕으로
실제 데이터를 사용하여 모수의 사후분포를 추정하는 과정이고,
이를 위해 HMC/NUTS와 같은 고급 샘플링 알고리즘을 활용해서 최종적으로 모수의 추정치 및 불확실성(신뢰구간, 분포 등)을 제공받는 것을 의미한다.

완전 자동화

자동 예측 : 데이터가 어지럽고 복잡해도 별다른 수작업 없이 합리적인 예측 결과를 얻을 수 있음
강건성: 이상치, 결측치, 시간 시계열의 극적인 변화에 대해 강건한 성능을 보입니다.

조정 가능한 예측

사용자 조정 가능성: 사용자가 예측을 미세 조정하고 조정할 수 있는 다양한 가능성을 제공합니다.
해석 가능한 매개변수: 인간이 해석 가능한 매개변수를 사용하여 도메인 지식을 추가함으로써 예측을 개선할 수 있습니다.

R 또는 Python 에서 사용 가능

언어 지원: Prophet은 R과 Python에서 모두 사용할 수 있으며, 동일한 Stan 코드를 기반으로 동작합니다.
유연성: 사용자가 편안하게 사용할 수 있는 언어를 선택하여 예측을 수행할 수 있습니다.

주요 기능

1.
추세 변동
선형 및 비선형 추세 모델링 지원.
데이터의 장기적인 추세를 모델링할 수 있습니다.Prophet은 자동으로 최적의 추세 모델을 선택하거나, 사용자가 수동으로 설정할 수도 있다.
Prophet에서는 두 가지 주요 추세 모델을 지원한다.
선형 추세 (Linear Trend): 데이터가 일정한 속도로 증가하거나 감소할 때 사용.
비선형 추세 (Non-linear Trend): 데이터의 변화 속도가 시간에 따라 변할 때 사용.
예를 들어, 로그 변환 추세 등이 있다.
# 기본 설정에서는 선형 추세 모델을 사용 model = Prophet() # 이는 model = Prophet(growth='linear')와 동일 # 선택해서 사용가능 model = Prophet(growth='linear') # 선형 추세 모델 model = Prophet(growth='logistic') # 비선형 추세 모델
Python
복사
2.
계절성
주기적 변동(일, 주, 년 단위)을 모델링.
Prophet은 데이터의 주기적인 변동을 모델링할 수 있습니다. 이는 주간, 월간, 연간 등의 주기로 발생하는 변동을 의미합니다. Prophet은 기본적으로 연간 계절성(yearly_seasonality)주간 계절성(weekly_seasonality)포함하며, 이는 필요에 따라 켜고 끌 수 있다. 추가로, 사용자 정의 계절성을 도메인 지식을 기반으로 추가할 수 있다.
# 기본 연간 계절성을 활성화 model = Prophet(yearly_seasonality=True) # 기본 주간 계절성을 활성화 model = Prophet(weekly_seasonality=True) # 연간 계절성을 비활성화 model = Prophet(yearly_seasonality=False) # 주간 계절성을 비활성화 model = Prophet(weekly_seasonality=False) # 사용자 정의 계절성 추가 model.add_seasonality(name='monthly', period=30.5, fourier_order=5)
Python
복사
3.
휴일 효과
공휴일 및 특별 이벤트에 대한 효과를 반영.
Prophet은 공휴일 및 특별 이벤트가 시계열 데이터에 미치는 영향을 반영할 수 있다. 이를 위해 공휴일 리스트를 제공하여 모델에 추가할 수 있습니다.
from prophet.make_holidays import make_holidays_df # 공휴일 리스트 생성 holidays = make_holidays_df(year_list=[2015, 2016, 2017, 2018, 2019], country='US') # 모델 초기화 시 공휴일 추가 model = Prophet(holidays=holidays)
Python
복사
4.
결측치 처리
자동으로 결측치를 처리하고 불규칙한 시계열 데이터를 다룰 수 있음.
Prophet은 결측치를 자동으로 처리할 수 있으며, 불규칙한 시계열 데이터에서도 잘 작동한다.
결측치를 별도로 처리할 필요 없이 Prophet 모델에 데이터를 그대로 입력하면 된다.
5.
이상치 처리
이상치에 강건한 모델링.
Prophet은 이상치에 강건한 모델링을 제공한다. 이상치가 있는 데이터에서도 모델은 강건하게 작동한다. 추가적으로 제거가 필요하면, 사용자는 이상치를 수동으로 제거할 수 있다.

평가

기본적으로 시계열 데이터에 대한 cross‑validation(교차 검증) 및 성능 평가 도구를 제공합니다.
크게 두 가지 접근법을 소개하면 아래와 같다.
1.
훈련/테스트 데이터 분할 → 가장 기본적인 평가 도구
가장 기본적인 방법은 전체 데이터를 일정 시점을 기준으로 훈련 데이터와 테스트 데이터로 나누어, 모델을 훈련한 후 테스트 데이터에 대해 예측을 수행하고, 실제 관측값과의 오차를 계산하는 것입니다.

평가 지표 예시

RMSE (Root Mean Squared Error): 예측 오차 제곱의 평균의 제곱근.
MAE (Mean Absolute Error): 예측 오차의 절대값 평균.
MAPE (Mean Absolute Percentage Error): 예측 오차의 백분율 평균.