103Volatility Forecast
Can a plain linear model forecast how volatile Apple will be next month, better than honest baselines? Modestly, yes, on years it never saw.
- Year
- 2026
- Status
- Live
- Python
- pandas
- NumPy
- ridge regression
- time-series split
The question
Where Apple's price goes next is close to random. How much it moves is not. Can a plain model forecast Apple's realized volatility over the next 21 trading days better than baselines that need no intelligence at all?
What I did
Turned Apple's daily closes into a table: backward-looking features (realized volatility over the past 5, 21 and 63 days, the latest absolute return, an EWMA estimate) against the volatility of the next month. Features stop at day t; the target starts at day t + 1. The model is a ridge regression on log volatility, written in plain NumPy, trained on data before 2021 and graded only on 2021 onward, with features standardized using training statistics alone.
Three baselines set the bar: climatology (always predict the long-run average), naive persistence (next month equals this month) and EWMA, the RiskMetrics industry standard.
What came out of it
| Model | MAE | RMSE | Correlation | | --- | --- | --- | --- | | Climatology (average) | 7.17 | 10.21 | 0.0 | | Naive (persistence) | 7.67 | 11.1 | 0.409 | | EWMA (RiskMetrics) | 7.29 | 10.4 | 0.415 | | Model (ridge blend) | 6.38 | 9.45 | 0.41 |
The lesson is in the table: rank by error and the flat, know-nothing line beats both naive and EWMA; rank by correlation and it is dead last. The ridge model is the only row that beats the flat line's error while keeping a correlation of about 0.41. Its biggest weight is last week's volatility (0.118), so it reacts to turns faster than EWMA, and its weight on the past month's return is negative (−0.059): it rediscovered on its own that markets get more volatile after they fall. Modest, but genuine, on years it never trained on.
What I'd try next
Check whether the result holds on other stocks, and add a GARCH benchmark or a nonlinear model to see how little the fancier version adds over this one.

