How do you read ACF and PACF plots, and what do they tell you about AR and MA orders?
The ACF measures correlation between a series and its own lags including indirect effects; the PACF strips out those indirect effects to show direct correlation at each lag. A cut-off in the PACF after lag p signals an AR(p) process; a cut-off in the ACF after lag q signals an MA(q) process.
How to think about it
State the difference between ACF and PACF first, then the reading rules, then the code. Interviewers value the pattern-recognition rules more than the math.
ACF vs PACF — the core distinction
ACF(k) = Corr(Yt, Yt-k) — includes the chain of correlations via intermediate lags. If today and yesterday are correlated, and yesterday and two-days-ago are correlated, the ACF at lag 2 picks up both effects.
PACF(k) = partial correlation at lag k after removing the linear effect of all shorter lags. It isolates the direct predictive contribution of lag k alone.
Pattern-reading rules
| Process | ACF | PACF |
|---|---|---|
| AR(p) | Decays gradually (exponential or oscillating) | Cuts off sharply after lag p |
| MA(q) | Cuts off sharply after lag q | Decays gradually |
| ARMA(p,q) | Decays gradually | Decays gradually |
“Cuts off” means spikes drop inside the confidence band (blue shaded region) from some lag onward.
Inline diagram — idealized AR(2) vs MA(1)
Code
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
plot_acf(series, lags=20, ax=axes[0])
plot_pacf(series, lags=20, ax=axes[1])
plt.tight_layout()
plt.show()