Classical ML

Stationarity & Differencing

Why classical time series models fail completely on non-stationary data, and how differencing transforms raw data into stationary signals.

🟡 intermediate4 min readtime-series
Stationarity is a fundamental requirement for classical time series models (ARIMA, Vector Autoregression). A time series is Strictly Stationary if its joint distribution is invariant to time shifts. It is Weakly (Strictly Weak/Second-Order) Stationary if its Mean E[Y_t] = μ is constant over time, Variance Var(Y_t) = σ² is constant, and Autocovariance Cov(Y_t, Y_{t+k}) depends only on lag k. Non-stationary series containing trends or seasonal shifts are transformed into stationary series via First Differencing (ΔY_t = Y_t - Y_{t-1}) or Log Transforms.

What is Stationarity?

Classical statistical time-series algorithms (ARIMA) assume statistical properties of historical data will remain constant in the future.

       Non-Stationary Series (Upward Trend + Growing Variance)
        100 ┤                                              /\  /\
         50 ┤                                /\  /\  /\   /  \/  \
          0 ┴───────────────────────────────/──\/──\/──\/────────► Time
            (Mean μ_t increases; Variance σ²_t grows! Spurious predictions)

       Stationary Series (Constant Mean, Constant Variance around Zero)
         10 ┤    /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\
          0 ┼───/──\/──\/──\/──\/──\/──\/──\/──\/──\/──\/──\/────► Time
        -10 ┤
            (Mean E[Y_t] = 0, Variance Var(Y_t) = σ² constant across time)

1. Strict Stationarity

Joint distribution of (Yt1,…,Ytn)(Y_{t_1}, \dots, Y_{t_n}) is identical to shifted joint distribution (Yt1+k,…,Ytn+k)(Y_{t_1+k}, \dots, Y_{t_n+k}) for all shifts kk.

2. Weak (Covariance) Stationarity (Industry Standard)

  1. Constant Mean: E[Yt]=μ\mathbb{E}[Y_t] = \mu for all tt.
  2. Constant Variance: Var(Yt)=σ2<∞\text{Var}(Y_t) = \sigma^2 < \infty for all tt.
  3. Lag-dependent Autocovariance: Cov(Yt,Yt+k)=γ(k)\text{Cov}(Y_t, Y_{t+k}) = \gamma(k) (Depends only on lag kk, not timestamp tt).

Transforming Non-Stationary Series

  1. First Differencing (ΔYt\Delta Y_t): Removes linear trend:
ΔYt=Yt−Yt−1\Delta Y_t = Y_t - Y_{t-1}
  1. Seasonal Differencing (ΔsYt\Delta_s Y_t): Removes seasonal cycles of period ss (e.g. 12 months):
ΔsYt=Yt−Yt−s\Delta_s Y_t = Y_t - Y_{t-s}
  1. Log Transformation (ln⁡Yt\ln Y_t): Stabilizes exponential growth / heteroscedastic growing variance before differencing.

Testing Stationarity: ADF Test

Augmented Dickey-Fuller (ADF) Test:

If ADF statistic p-value<0.05p\text{-value} < 0.05, reject H0  ⟹  H_0 \implies Confirm series is stationary.

Say this out loud

"Stationarity requires constant mean, constant variance, and autocovariance depending only on lag distance k. Non-stationary data containing trends or growing variance causes classical forecasting algorithms like ARIMA to fail. We achieve stationarity by applying log transforms to stabilize variance, first differencing (Y_t - Y_t-1) to remove linear trends, and validating with the Augmented Dickey-Fuller (ADF) test (p < 0.05)."

Follow-ups to expect

Check yourself

Question 1 of 3

What 3 statistical properties must hold for a time series Y_t to be Weakly (Covariance) Stationary?

More in Classical ML

See all →
Bias–Variance Tradeoff4 minOverfitting vs Underfitting3 minLinear Regression4 min