Skip to content

When to Use ARIMA and GARCH Together

Original question

How do I determine whether an ARIMA or GARCH model is more appropriate for a particular financial time series?
Choose based on the quantity you need to forecast. ARIMA models serial structure in the conditional mean, possibly after differencing. GARCH models serial structure in the conditional variance. You can use an ARMA mean with GARCH errors when returns show both kinds of dependence, or a constant mean with GARCH errors when the predictable structure is mainly in volatility.

Identify what is predictable in the mean and in the variance

Write rt=mt+εtr_t=m_t+\varepsilon_t, where mt=E[rt∣Ft−1]m_t=E[r_t\mid\mathcal F_{t-1}]. For a stationary series, an ARMA(1,1) conditional mean might be

mt=c+ϕrt−1+θεt−1.m_t=c+\phi r_{t-1}+\theta\varepsilon_{t-1}.

In ARIMA, dd is the order of differencing used before specifying the ARMA dynamics. If the series is already a stationary return, d=0d=0 is the natural starting point. For GARCH(1,1) errors, write

εt=σtzt,σt2=ω+αεt−12+βσt−12\varepsilon_t=\sigma_t z_t, \qquad \sigma_t^2=\omega+\alpha\varepsilon_{t-1}^2+\beta\sigma_{t-1}^2
with ztz_t a standardised innovation. Fit a simple mean model first. Inspect the residual ACF and a Ljung–Box test for serial correlation, then inspect squared residuals and an ARCH LM test for volatility dependence. Compare candidates with expanding or rolling windows. Use a point-forecast loss such as mean squared error for the mean and a variance-forecast loss such as QLIKE for positive variance forecasts. For tail risk forecasts, also check prediction-interval coverage and tail exceedances.

Suppose an AR(1) on daily returns gives a lag coefficient of 0.02 and a ten-lag residual Ljung–Box p-value of 0.48. Its squared residuals show persistent autocorrelation, and an ARCH LM test gives a p-value of 0.003. A sensible next comparison is a constant-mean GARCH model against a constant-variance baseline. The evidence for adding mean lags is weak in this sample, while the volatility diagnostics suggest a pattern worth testing. If tomorrow's variance forecast is 2.25 in percentage-point-squared units, tomorrow's volatility forecast is 2.25=1.5%\sqrt{2.25}=1.5\%. The sign forecast still comes from the mean model.

Use the diagnostics to pick candidates, then score the forecasts you actually need on later data. Compare a constant mean with an ARMA mean using a loss for return forecasts. Compare variance forecasts using a variance-oriented score such as QLIKE on a nonnegative volatility proxy. If a more complicated mean model barely affects variance forecast loss, its extra coefficients may do little for a risk application. If residuals still have predictable squared magnitudes after modelling the mean, changing the AR order alone leaves the variance problem unanswered.

Fit a conditional mean and inspect its residuals

Set returns_pct to a chronologically ordered pandas Series of daily returns in percent units. This example reserves the last 60 observations and compares one-step forecast components at the first held-out date.
from arch import arch_model from statsmodels.stats.diagnostic import acorr_ljungbox, het_arch from statsmodels.tsa.arima.model import ARIMA train = returns_pct.dropna().iloc[:-60] mean_fit = ARIMA(train.to_numpy(), order=(1, 0, 0)).fit() resid = mean_fit.resid[1:] print(acorr_ljungbox(resid, lags=[10], model_df=1)) print("ARCH LM p-value:", het_arch(resid, nlags=10, ddof=1)[1]) vol_fit = arch_model(train, mean="Constant", p=1, q=1).fit(disp="off") print("AR(1) mean:", mean_fit.forecast(steps=1)[0]) print("GARCH variance:", vol_fit.forecast(horizon=1).variance.iloc[-1, 0])

Interactive example

Explore how quickly a GARCH shock decays

Start at four times long-run variance. A stationary GARCH(1,1) with persistence α + β has a multi-step variance forecast that decays geometrically toward 1.

Half-life 9.6 periods · after 40 periods 1.16× long-run variance
Expected variance decays toward its long-run value1234010203040Periods after shockVariance multiple
  • Variance forecast
  • Long-run variance

References and next steps