Methodology

Model Name
Nakamoto Observatory Forecasting System
Type
Ridge Regression + Monte Carlo Simulation
Task
Monthly BTC/USD log-return forecasting (1–12 month horizon)
Status
Production
Last Updated
2026-09-03
Version
v1.0.4
Author
ken
License
MIT

Table of Contents

1. Model Overview

The model forecasts Bitcoin's USD price over a 12-month horizon. It combines a ridge regression on macro and on-chain factors with a Monte Carlo layer to produce a median path and realistic confidence bands.

The forecast is anchored on the live spot price at inference time, eliminating the month-end drift common in models that anchor on monthly averages.

2. Data Sources

SourceSeriesFrequencyPurposeLatency
Blockchain.info Daily BTC market price (2009–present) Daily → aggregated monthly Primary price history ~1 hour cache
CoinGecko Daily BTC market price (fallback) Daily → aggregated monthly Price history fallback ~1 hour cache
FRED (St. Louis Fed) M2 Money Supply (M2SL) Monthly Global liquidity proxy ~2 months lag
CoinGecko / Blockchain.info Live BTC spot price Real-time Forecast anchor 30s cache
Hardcoded Halving dates (2009, 2012, 2016, 2020, 2024) Fixed Cycle phase encoding N/A

All price data is aggregated to monthly averages (mean of daily values within each calendar month) to reduce noise.

3. Features

The model uses 7 engineered features, all computed at monthly frequency:

FeatureFormulaInterpretation
mom3 logP[t] - logP[t-3] 3-month momentum (short-term trend)
mom6 logP[t] - logP[t-6] 6-month momentum (medium-term trend)
mom12 logP[t] - logP[t-12] 12-month momentum (long-term trend / yearly return)
phaseS sin(2π · monthsSinceHalving / 48) Sine component of 4-year halving cycle
phaseC cos(2π · monthsSinceHalving / 48) Cosine component of 4-year halving cycle
m2yoy ln(M2[t]) - ln(M2[t-12]) Year-over-year M2 growth (global liquidity)
fairGap Residual from rolling regression logP ~ logM2 (48-month window) Deviation from M2-implied fair value (mean-reversion signal)

For the live anchor point (current incomplete month), features are computed at sub-monthly precision: momenta reference exact month-ago price levels, cycle phase uses today's date, and M2 values are carried forward from the latest FRED release.

4. Model Architecture

4.1 Core Regression

rh = αh + β₁·mom₃ + β₂·mom₆ + β₃·mom₁₂ + β₄·phaseS + β₅·phaseC + β₆·m2yoy + β₇·fairGap + εh

A separate ridge regression (L2 penalty λ = 1.0) is fit for each forecast horizon h = 1..12 months. The target rh is the cumulative log-return over h months: rh = logP[t+h] - logP[t].

Features are standardized (zero mean, unit variance) per horizon before fitting. The ridge penalty shrinks coefficients toward zero, reducing overfitting on the relatively small (~180 month) training sample. Minimum 24 training samples required per horizon fit.

4.2 Mean-Reverting Drift

Raw per-horizon predictions tend to over-extrapolate recent momentum into far horizons. To prevent unrealistic compounding, the cumulative predicted return at horizon h is blended toward the historical long-run average monthly growth:

blendCum(h) = w(h) · predCum(h) + (1 - w(h)) · (h · μlong) w(h) = exp(-h / τ), τ = 12 months

Where μlong is the mean monthly log-return over the full history. Near horizons (h ≤ 3) follow the model closely; far horizons revert to the unconditional average.

4.3 Live Anchor

The forecast originates from a synthetic feature vector built on the live spot price at inference time. This anchors the entire simulation at today's market level, avoiding the systematic lag of monthly-average-only models.

5. Training Procedure

  1. Data preparation: Monthly price series from 2010 to (current month - 1).
  2. Feature computation: 7 features for each month (requires ≥ 12 months history).
  3. Per-horizon fitting: For each h = 1..12:
    • Target: logP[t+h] - logP[t]
    • Features at t, target at t+h
    • Standardize features → solve (X'X + λI)β = X'y via matrix inversion
    • Residual standard error s retained for uncertainty
  4. No retraining schedule: Model re-fits on every inference call (every 5 minutes) using the latest cached data. Training is fast (~10ms) due to small data size.

6. Forecasting & Simulation

6.1 Deterministic Median Path

The median forecast is constructed by taking the month-over-month increments of the blended cumulative predictions: monthRet(h) = blendCum(h) - blendCum(h-1), then compounding from the live price.

6.2 Monte Carlo Simulation (300 paths)

300 stochastic paths are simulated by drawing monthly shocks from Bitcoin's historical return distribution, scaled by the current volatility regime. Each path evolves monthly around the median forecast. This produces a fan where the band widens with horizon and the tails reflect Bitcoin's actual historical kurtosis.

7. Known Limitations

8. Version History