Zero-Shot Uncertainty: Conformalizing Foundation Models for Financial Tail Risk
A research project applying Conformal Prediction to Amazon's Chronos-2 foundation model for financial time series forecasting with calibrated uncertainty quantification.
This project investigates whether pre-trained time series foundation models (specifically Amazon Chronos-2) can provide reliable uncertainty estimates for financial forecasting when combined with conformal prediction methods.
cd conformal_chronos
uv syncOr install with pip:
pip install -e .For the Chronos model:
uv add git+https://github.com/amazon-science/chronos-forecasting.gitconformal_chronos/
├── src/conformal_chronos/
│ ├── data/ # Financial data loading (yfinance)
│ ├── models/ # Chronos wrapper and baselines (GARCH, Historical Simulation)
│ ├── conformal/ # Split conformal prediction
│ ├── evaluation/ # Metrics (coverage, Winkler, VaR)
│ └── utils/ # Configuration management
├── notebooks/ # Exploration notebooks
├── scripts/ # Experiment runners
├── results/ # Experiment outputs and figures
└── tests/ # Unit tests
from conformal_chronos import (
FinancialDataLoader,
ChronosForecaster,
SplitConformalPredictor,
coverage_rate,
)
loader = FinancialDataLoader(tickers=["AAPL"], start_date="2020-01-01")
data = loader.download_data()
forecaster = ChronosForecaster(model_size="chronos-2")
forecaster.load_model()
context = data["AAPL"]["close"].values[-512:]
result = forecaster.predict_quantiles(context, prediction_length=5)
conformal = SplitConformalPredictor(coverage_level=0.9)
conformal.calibrate(residuals, absolute=True)
interval = conformal.predict_interval(result.point_forecast)
coverage = coverage_rate(test_actuals, interval.lower, interval.upper)The main experiment script uses hardcoded configuration for reproducibility:
python scripts/run_experiment.pyThe experiment is configured with the following parameters (see scripts/run_experiment.py):
| Parameter | Value | Description |
|---|---|---|
| Model | amazon/chronos-2 |
Chronos-2 foundation model |
| Stocks | 12 S&P 500 constituents | AAPL, MSFT, NVDA, GOOGL, JPM, V, MA, WMT, COST, MCD, JNJ, UNH |
| Date Range | 2020-01-01 to 2025-12-31 | 5-year evaluation period |
| Test Days | 30 | Rolling evaluation window |
| Calibration Days | 60 | Conformal calibration window |
| Coverage Target | 90% | Target prediction interval coverage |
| Horizons | 1, 5 | 1-day and 5-day forecasts |
| Random Seed | 42 | For reproducibility |
- Downloads S&P 500 stock data via yfinance
- Computes returns, log returns, and rolling volatility
- Handles train/calibration/test splits for conformal prediction
- Wrapper for Amazon's Chronos-2 foundation model
- Uses
predict_quantiles()for direct quantile prediction - Returns mean point forecasts and native quantile predictions
- Supports context windows up to 512 tokens
- Split Conformal Prediction for time series
- Non-conformity score: absolute residual
|y - ŷ| - Symmetric interval construction around point forecast
- Rolling calibration window (60 days) for local stationarity
- GARCH(1,1): Econometric volatility model with Student-t innovations
- Historical Simulation: Non-parametric VaR estimation (252-day window)
- Chronos-Native: Raw quantile outputs without conformal calibration
- Coverage rate (target: 90%)
- Average interval width
- Winkler score (proper scoring rule for intervals)
- VaR exceedance rate (downside risk)
Experiment results are saved to results/:
experiment_results.csv: Per-ticker, per-method metricssummary_statistics.json: Aggregated statisticsdetailed_forecasts.csv: Full forecast time seriesfigures/: Publication-ready visualizations