Two time series can look equally noisy while having very different forecasting properties. One may be independent noise; another may contain strong dependence on yesterday’s value. Autocorrelation helps reveal that difference—but it must be interpreted with care.
What are we trying to detect?
A time plot can reveal trend, seasonality, changing variance, outliers, and structural breaks. A lag plot instead compares with , asking whether observations steps apart tend to move together.
For lag , a common sample ACF estimator is
By construction, . The ACF is a linear dependence summary; it cannot detect every nonlinear or conditional relationship.
Four useful data-generating processes
White noise. If with independent, zero-mean disturbances, its population autocorrelation is zero at nonzero lags. Finite samples still show random spikes.
AR(1). Let
For a stationary AR(1), the population ACF is . Positive produces a geometrically decaying ACF; negative produces alternating signs.
Random walk. Let . This is not covariance-stationary: its variance grows with time. The sample ACF often decays slowly, but that does not make its level predictable in the same way as a stationary AR process. Its increments are white noise under these assumptions.
Seasonal signal. A noisy sinusoid with period twelve exhibits repeated ACF peaks around lags 12, 24, and 36. Real seasonal data may also contain trend and changing seasonal amplitude.
Generate a process, then inspect its ACF
Compare stationary noise, a stationary AR(1) process, a random walk, and a noisy seasonal signal.
ACF bars are descriptive, not significance tests. A trending or random-walk series can have a slowly decaying sample ACF even when the increments are independent. Random walks are not covariance-stationary.
Why slow ACF decay can be misleading
Suppose a series is a random walk. Its consecutive values are similar because each new observation inherits the previous level. The ACF may therefore look strongly positive for many lags, even though the next change is unpredictable from past changes under the independent-increment assumption.
Differencing gives
The differenced series now has no serial correlation at nonzero lags in the ideal model. This is why stationarity and differencing matter before interpreting ACFs or fitting models such as ARIMA.
Reproduce the experiment in Python
import numpy as npfrom statsmodels.graphics.tsaplots import plot_acfimport matplotlib.pyplot as plt
rng = np.random.default_rng(4)n = 160noise = rng.normal(size=n)
ar = np.empty(n)ar[0] = noise[0]for t in range(1, n): ar[t] = 0.7 * ar[t - 1] + noise[t]
random_walk = np.cumsum(noise)
fig, axes = plt.subplots(2, 2, figsize=(10, 6))axes[0, 0].plot(ar)axes[0, 0].set_title("Stationary AR(1)")plot_acf(ar, lags=36, ax=axes[0, 1])axes[1, 0].plot(random_walk)axes[1, 0].set_title("Random walk")plot_acf(random_walk, lags=36, ax=axes[1, 1])plt.tight_layout()Autocorrelation is not a forecast evaluation
A series with autocorrelation may still be difficult to forecast accurately, especially when structural breaks or changing volatility occur. A convincing forecasting analysis should compare against simple baselines, evaluate on chronologically held-out data, and avoid fitting preprocessing steps using future observations.
For financial returns, small and unstable autocorrelations are especially important: a relationship that looks meaningful in-sample may be too weak to survive transaction costs and changing market regimes.
Takeaway
ACF is a useful first diagnostic, not proof of forecastability. It helps formulate hypotheses about persistence and seasonality; stationarity checks, residual diagnostics, and honest out-of-sample testing determine whether those hypotheses translate into useful forecasts.