laplace++

laplace with its parameters learned from data, mixed with the original so that it can never do much worse.

The mixture

Two forecasters each issue a predictive density for the next value: the original laplace, plap, and a trained copy of laplace's own machinery, pexp. laplace++ issues

qt(y) = wt plap,t(y) + (1 − wt) pexp,t(y),

where wt is the posterior weight on laplace given the series so far: a prior π = 0.25 times laplace's likelihood on the observations to date, against 0.75 times the trained model's. This is Vovk's Aggregating Algorithm for log loss. Multiplying the mixture densities along a series telescopes the weights, so for every series, whatever the data,

total log score of laplace++ ≥ total log score of laplace − log 4,

and it is never more than log(4/3) behind the trained model. The bound needs the exact log densities in the weights (no floor). It concerns log score, not coverage; the coverage below is measured, not guaranteed.

Training and scoring

Each panel is split by series family. The trained model learns on one half by prequential truncated backpropagation (each forecast is issued before its outcome is used), and every number below is on the other half. Training data from outside the panel is never one of the held-out series, and series derived from FRED are screened out if they nearly duplicate one.

Against laplace, held-out series

panelserieslaplace++ wins laplace winsmedian gaintrained model alone cov90
Economic, Weekly1,52248078+0.014+0.0170.90
Economic, Monthly3,2101,027153+0.048+0.0750.90
Economic, Dailyno trained run beats laplace yet
Economic, Hourly (M4)205458+0.014+0.0270.89
Prices, Dailynot trained: too few price series on the training side

Wins are per-series Diebold–Mariano tests on log score; the rest are draws. Median gain is the per-series mean log-score difference in nats per step, at the median series.

Runs shown

Built 2026-11-09 from skaters commit 6c5da15.