Time Series Forecasting Arima Prophet

# Time Series Forecasting: ARIMA & Prophet

## Introduction & Motivation

Time Series Forecasting: predict future values. ARIMA: autoregressive integrated moving average. Facebook Prophet: seasonal decomposition. Applications: sales forecasting, stock prediction, demand planning.

Motivation: Sequential temporal dependencies; forecast uncertainty.

Applications: Business forecasting, analytics.

---

## Core Concepts & Theory

### Autoregressive (AR)

Past values as features.

### Integrated (I)

Differencing for stationarity.

### Moving Average (MA)

Lag residuals in model.

---

## Mathematical Formulation

ARIMA(p,d,q):
$$\Delta^d y_t = c + \phi_1 \Delta^d y_{t-1} + \ldots + \phi_p \Delta^d y_{t-p} + \epsilon_t + heta_1 \epsilon_{t-1} + \ldots + heta_q \epsilon_{t-q}$$

Prophet model:
$$y_t = g(t) + s(t) + h(t) + \epsilon_t$$

where g=trend, s=seasonality, h=holidays.

---

## Advanced Theory & Extensions

### Seasonal ARIMA (SARIMA)

Seasonal patterns; multiplicative/additive.

### ARIMAX

Exogenous variables; external features.

### Auto ARIMA

Automatic parameter selection.

---

## Computational Considerations

ARIMA: O(N·p²) via Yule-Walker equations.

Prophet: O(N) sampling; Bayesian inference.

Forecasting: O(forecast_horizon).

---

## Practical Implementation Strategies

### Stationarity Testing

ADF test; differencing for I(d).

### ACF/PACF Analysis

Identify p and q parameters.

### Seasonality Detection

Seasonal decomposition.

---

## Benchmark Datasets & Evaluation

M4 Dataset: Forecasting competition.

Stock Prices: Financial forecasting.

Energy Consumption: Utility forecasting.

---

## Key Challenges & Limitations

### Non-stationarity

Differencing required.

### Structural Breaks

Regime changes; model instability.

### Uncertainty Intervals

Confidence quantification.

---

## Hyperparameter Tuning

p (AR order): 0-5; typically.

d (Integration): 0-2; differencing.

q (MA order): 0-5; lag residuals.

---

## Real-World Applications & Case Studies

Sales Forecasting: Retail demand.

Energy Consumption: Utility planning.

Stock Prices: Financial markets.

---

## Integration with Other Methods

ARIMA + Regression → exogenous features.

Prophet + Ensemble → combined forecasts.

---

## Summary & Key Takeaways

Time Series Forecasting via ARIMA and Prophet enables sequential prediction through autoregressive modeling and seasonal decomposition.

Principles:
1. Stationarity: differencing integration.
2. Autocorrelation: AR and MA components.
3. Seasonality: periodic patterns.
4. Trend: long-term direction.
5. Uncertainty: prediction intervals.

---

---

## Appendix: Practical Labs

### Lab 1: Differencing

import numpy as np

def difference(series, order=1):
 """Apply differencing to make series stationary"""
 diff_series = series.copy()
 
 for _ in range(order):
 diff_series = np.diff(diff_series)
 
 return diff_series

# Test
np.random.seed(42)
# Create non-stationary series (random walk)
series = np.cumsum(np.random.randn(100))

diff_series = difference(series, order=1)

assert len(diff_series) == len(series) - 1, "Differencing reduces length"
print("✓ Differencing working")

if __name__ == "__main__":
 print("Lab 1: Differencing - PASSED")

### Lab 2: Autocorrelation Function (ACF)

import numpy as np

def acf(series, nlags=20):
 """Compute autocorrelation function"""
 series = series - series.mean()
 c0 = np.dot(series, series) / len(series)
 
 acf_vals = [1.0] # ACF at lag 0
 
 for lag in range(1, nlags + 1):
 c_lag = np.dot(series[:-lag], series[lag:]) / len(series)
 acf_vals.append(c_lag / c0)
 
 return np.array(acf_vals)

# Test
np.random.seed(42)
series = np.random.randn(100)

acf_vals = acf(series, nlags=20)

assert len(acf_vals) == 21, "ACF length"
assert np.isclose(acf_vals[0], 1.0), "ACF[0] = 1"
print("✓ ACF working")

if __name__ == "__main__":
 print("Lab 2: ACF - PASSED")

### Lab 3: Seasonal Decomposition

import numpy as np

def seasonal_decompose_simple(series, period=12):
 """Simple seasonal decomposition"""
 # Trend: centered moving average
 trend = np.convolve(series, np.ones(period)/period, mode='same')
 
 # Detrended
 detrended = series - trend
 
 # Seasonal: average for each season
 seasonal = np.zeros_like(series)
 for i in range(period):
 seasonal[i::period] = np.mean(detrended[i::period])
 
 # Residual
 residual = series - trend - seasonal
 
 return trend, seasonal, residual

# Test
np.random.seed(42)
t = np.arange(120)
series = 10 + t*0.1 + 5*np.sin(2*np.pi*t/12) + np.random.randn(120)*0.5

trend, seasonal, residual = seasonal_decompose_simple(series, period=12)

assert trend.shape == series.shape, "Trend shape"
assert seasonal.shape == series.shape, "Seasonal shape"
assert residual.shape == series.shape, "Residual shape"
print("✓ Seasonal decomposition working")

if __name__ == "__main__":
 print("Lab 3: SeasonalDecomposition - PASSED")

### Lab 4: AR Model Fitting

import numpy as np

def fit_ar_model(series, order=2):
 """Fit simple AR model using Yule-Walker equations"""
 # Autocorrelations
 mean = series.mean()
 series_centered = series - mean
 c0 = np.dot(series_centered, series_centered) / len(series)
 
 # Build Toeplitz autocorrelation matrix
 acf_vals = []
 for lag in range(order + 1):
 c = np.dot(series_centered[:-lag if lag > 0 else len(series_centered)], 
 series_centered[lag:]) / len(series)
 acf_vals.append(c / c0)
 
 # Solve Yule-Walker
 R = np.array([[acf_vals[abs(i-j)] for j in range(order)] for i in range(order)])
 r = np.array(acf_vals[1:order+1])
 
 if np.linalg.cond(R) < 1e10:
 coeffs = np.linalg.solve(R, r)
 else:
 coeffs = np.zeros(order)
 
 return coeffs, mean

# Test
np.random.seed(42)
# Create AR(1) series
series = np.zeros(100)
series[0] = np.random.randn()
for t in range(1, 100):
 series[t] = 0.7 * series[t-1] + np.random.randn()

coeffs, mean = fit_ar_model(series, order=2)

assert len(coeffs) == 2, "Coefficients shape"
assert np.isfinite(coeffs).all(), "Finite coefficients"
print("✓ AR fitting working")

if __name__ == "__main__":
 print("Lab 4: ARFitting - PASSED")

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account