When would you choose Prophet over ARIMA for a forecasting problem?
Prophet is a curve-fitting model that decomposes the series into trend, seasonality, and holidays; it handles missing data, multiple seasonalities, and non-uniform time grids with minimal tuning and is accessible to non-statisticians. ARIMA is a statistical model based on autocorrelation structure; it is more appropriate when the series is short, noise is small, and you need principled uncertainty intervals from an explicit stochastic process.
How to think about it
Frame the answer as a trade-off, not a competition. Interviewers want to see you match the tool to the problem — not declare a winner.
How Prophet works
Prophet fits an additive model: y(t) = trend(t) + seasonality(t) + holidays(t) + noise. The trend is either a logistic growth curve (for bounded processes) or a piecewise linear function with automatic changepoint detection. Seasonality is modelled with Fourier series, so multiple overlapping cycles (weekly + yearly) are handled natively.
Because it is curve-fitting via Stan under the hood, it tolerates missing rows, irregular timestamps, and long forecast horizons without per-series manual configuration.
How ARIMA works
ARIMA is driven by autocorrelation: it extrapolates future values from the correlation structure of past residuals. It requires a stationary series (or differencing to achieve it), a regularly spaced, gap-free time index, and manual or grid-search parameter selection. Uncertainty intervals are derived from the stochastic process assumptions, so they have formal statistical meaning.
Decision guide
| Criterion | Prefer Prophet | Prefer ARIMA |
|---|---|---|
| Data volume | Many observations, possibly sparse | Shorter, regular, gap-free series |
| Seasonality | Multiple overlapping periods | Single seasonal period (use SARIMA) |
| Missing data | Present or irregular gaps | Gaps pre-filled or none |
| Analyst skill | Less statistical background | Comfortable with ACF/PACF/AIC |
| Interpretable components | Needed for stakeholder plots | Not essential |
| Strict statistical inference | Not needed | Required (prediction intervals) |
| Speed of iteration | Fast prototyping needed | Fine-tuning expected |
Code contrast
# Prophet
from prophet import Prophet
m = Prophet(yearly_seasonality=True, weekly_seasonality=True)
m.fit(df_prophet) # df must have "ds" and "y" columns
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
# ARIMA
from statsmodels.tsa.statespace.sarimax import SARIMAX
model = SARIMAX(train, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12)).fit()
forecast = model.forecast(steps=90)