Notes

Autoregressive (AR) Model

When you look at a time series—daily sales, hourly electricity demand, or a patient’s heart rate—today’s value often resembles yesterday’s. An Autoregressive (AR) model is a simple way to turn that “the recent past matters” idea into a usable prediction rule.

What an AR model is
An AR(p) model predicts the current value using a weighted combination of the previous p values (lags). In words: “take the last few observations, multiply each by a coefficient, add them up, and include some random noise.” A common form is:
xt = c + φ1xt−1 + … + φpxt−p + εt
Here φ’s are learned coefficients, c is an intercept, and εt is a “surprise” term (often assumed to be white noise).

Intuition (a quick analogy)
Think of it like steering a car by looking in the rear-view mirror: the last few positions tell you where you’re likely to be next, but bumps in the road (εt) still happen.

Practical examples

  • Retail: today’s store sales depend on the last 7 days (weekly rhythm).
  • Finance: short-term returns may show dependence on the last few minutes/hours.
  • IoT: temperature readings often drift smoothly, so recent values are informative.
The order p is often chosen using AIC/BIC or by inspecting the partial autocorrelation (PACF).

Why it matters in AI/ML
AR models are strong baselines for forecasting and a building block for ARMA/ARIMA. They also connect to ML: an AR(p) is essentially a linear regression with lagged features. Libraries like statsmodels implement AR/ARIMA, and the same lag-feature idea appears in scikit-learn pipelines.

Autoregressive (AR) Model

An Autoregressive (AR) Model is a time-series model where the current value is expressed as a linear combination of its past values plus random noise, with the number of lags defining the order (AR(p)). It is important in AI/ML for capturing temporal dependence, forecasting, and serving as a baseline or component in ARIMA and state-space methods. Example: predicting tomorrow’s demand from the last 7 days.

Autoregressive (AR) Model

Imagine you’re trying to guess tomorrow’s temperature by looking at the last few days. If it’s been warming up, you’d expect tomorrow to be similar, maybe a bit higher. An autoregressive (AR) model works the same way: it predicts the next value in a time-ordered list (like sales each day or heart rate each minute) using a weighted mix of previous values from that same list. “Auto” means it uses the series itself, and “regressive” means it fits a simple rule for how past values influence the future. It’s a basic building block for forecasting in statistics and machine learning.

Python
import numpy as np  # numerical operations and reproducible simulation
import pandas as pd  # time-indexed data handling
from statsmodels.tsa.ar_model import AutoReg  # AR(p) estimation and forecasting
from sklearn.metrics import mean_absolute_error  # simple forecast error metric

# --- Create a realistic-ish monthly demand series with AR dynamics + seasonality ---
rng = np.random.default_rng(7)  # fixed seed for reproducibility
n = 120  # 10 years of monthly data
idx = pd.date_range("2015-01-01", periods=n, freq="MS")  # month-start index

eps = rng.normal(0, 3.0, size=n)  # random shocks (noise)
y = np.zeros(n)  # allocate series
for t in range(2, n):  # simulate an AR(2) process
    y[t] = 0.7 * y[t - 1] - 0.2 * y[t - 2] + eps[t]  # AR dependence + noise

season = 5 * np.sin(2 * np.pi * np.arange(n) / 12)  # mild yearly seasonality
demand = pd.Series(100 + season + y, index=idx, name="demand")  # baseline + patterns

# --- Train/test split to mimic a forecasting workflow ---
train, test = demand.iloc[:-12], demand.iloc[-12:]  # last year held out for evaluation

# Fit an AR model on the training set (lags=2 means AR(2))
ar2 = AutoReg(train, lags=2, old_names=False).fit()  # *** KEY LINE ***

# Forecast the next 12 months and evaluate accuracy on the holdout set
pred = ar2.predict(start=test.index[0], end=test.index[-1], dynamic=False)  # one-step-ahead style
mae = mean_absolute_error(test, pred)  # average absolute forecast error

print(ar2.params)  # fitted intercept and AR lag coefficients
print(f"Holdout MAE: {mae:.2f}")  # quick sanity-check metric for model usefulness
Code Notes
  • The fitted parameters from AutoReg show the estimated intercept and lag coefficients used to generate forecasts.
  • The lags argument controls the AR order (e.g., 2 for AR(2)); choosing it typically involves validation, AIC/BIC, or domain knowledge.
  • A common mistake is evaluating forecasts on the same data used for fitting; the train/test split helps avoid overly optimistic error estimates.
  • In ML workflows, AR features (lagged targets) are often a strong baseline and can be compared against or combined with exogenous-feature models.
R
set.seed(7)  # make results reproducible

# --- Create a realistic-ish monthly demand series with AR dynamics + seasonality ---
n <- 120  # 10 years of monthly data
idx <- seq.Date(from = as.Date("2015-01-01"), by = "month", length.out = n)  # month index

eps <- rnorm(n, mean = 0, sd = 3)  # random shocks (noise)
y <- numeric(n)  # allocate series
for (t in 3:n) {  # simulate an AR(2) process (R is 1-indexed)
  y[t] <- 0.7 * y[t - 1] - 0.2 * y[t - 2] + eps[t]  # AR dependence + noise
}

season <- 5 * sin(2 * pi * (1:n) / 12)  # mild yearly seasonality
demand <- ts(100 + season + y, start = c(2015, 1), frequency = 12)  # baseline + patterns

# --- Train/test split to mimic a forecasting workflow ---
train <- window(demand, end = c(2023, 12))  # first 108 months
test  <- window(demand, start = c(2024, 1))  # last 12 months

# Fit an AR model of order 2 on the training set
fit_ar2 <- arima(train, order = c(2, 0, 0))  # *** KEY LINE ***

# Forecast the next 12 months and evaluate accuracy on the holdout set
fc <- predict(fit_ar2, n.ahead = length(test))  # produces mean forecasts and standard errors
pred <- ts(fc$pred, start = start(test), frequency = frequency(test))  # align forecast as a ts
mae <- mean(abs(test - pred))  # average absolute forecast error

print(fit_ar2$coef)  # fitted intercept/mean and AR lag coefficients
cat(sprintf("Holdout MAE: %.2f\n", mae))  # quick sanity-check metric for model usefulness
Code Notes
  • arima with order = c(2,0,0) fits an AR(2) model; fit_ar2$coef contains the estimated lag coefficients used in forecasting.
  • predict returns both forecast means and standard errors; the latter are useful for uncertainty intervals even if you only score point forecasts.
  • A common mistake is misaligning time indices when comparing forecasts to the test set; converting fc$pred back to a ts helps keep periods aligned.
  • In AI/ML practice, the holdout MAE is a baseline metric to compare against richer models (e.g., adding exogenous regressors or using sequence models).