flowchart TB
P["Preset<br>name, status, provenance<br>versioned BayesianSettings"]
subgraph ST["Preset settings"]
direction LR
H["History<br>winsorised fraction<br>clips g_i and errors"]
BC["Bias correction<br>λ, with Q and R<br>c* = c / (1 + λβ)"]
DP["Consensus precision<br>d, κ, α<br>τ_C = k^α / (κ δ²)"]
MI["Model inclusion<br>x_M and τ_M<br>kept or dropped"]
IV["Interval shape<br>ν, ℓ, ω at coverage p"]
end
R0["Prior<br>μ₀, τ₀"]
RC["Consensus<br>x_C, τ_C"]
RM["Model<br>x_M, τ_M"]
W["Precision-weighted blend<br>θ̂ = (μ₀τ₀ + x_M τ_M<br>+ x_C τ_C) / T<br>T = τ₀ + τ_M + τ_C"]
B["Band<br>θ_L = θ̂ + σ_θ q_L<br>θ_U = θ̂ + σ_θ q_U"]
P --> H & BC & DP & MI & IV
H --> R0
H -.-> RM
H -.-> RC
BC --> RC
DP --> RC
MI --> RM
R0 & RC & RM --> W
W --> B
IV --> B
classDef preset fill:#fff4e8,stroke:#dd8452,color:#222222
classDef setting fill:#eef3fb,stroke:#4c72b0,color:#1f2d3d
classDef reading fill:#f6f6f6,stroke:#8c8c8c,color:#222222
classDef output fill:#edf6ef,stroke:#55a868,color:#1f3d27
class P preset
class H,BC,DP,MI,IV setting
class R0,RC,RM reading
class W,B output
style ST fill:#f8fafd,stroke:#c7d4ea
Bayesian presets
Choose a posterior profile and retain its provenance
A preset supplies versioned BayesianSettings for preparation and BayesianPosterior. Use posterior_preset(name) to choose explicitly; omitting the name selects the recommended research profile.
Every preset runs the same blend. What differs is how each reading is formed and how wide the band around it is. Symbols follow the notation page.
What a preset sets
The same four places, as equations. Growth is measured over the last actual \(y_{t-1}\), and \(\delta=d/\lvert y_{t-1}\rvert\) is the analyst dispersion in growth units:
\[ c^*=\frac{c}{1+\lambda\beta},\qquad \tau_C=\frac{k^\alpha}{\max(\kappa\,\delta^2,\ \varepsilon)},\qquad \hat\theta=\frac{\mu_0\tau_0+x_M\tau_M+x_C\tau_C}{T},\qquad \theta_{L,U}=\hat\theta+\sigma_\theta\,q_{L,U}. \]
- Bias strength, \(\lambda\): The share of the filtered consensus bias \(\beta\) removed before consensus becomes growth \(x_C\). At \(\lambda=0\), \(c^*=c\); \(Q\) and \(R\) set how quickly \(\beta\) follows new errors.
- Dispersion weighting, \(d\): When on, analyst dispersion sets the consensus precision \(\tau_C\) instead of consensus’s past errors. Unusable dispersion falls back to the error record.
- Variance multiplier, \(\kappa\): Scales the dispersion variance \(\delta^2\). Below one, consensus is trusted more than its dispersion alone implies, so its weight \(w_C\) rises.
- Count exponent, \(\alpha\): Sharpens \(\tau_C\) by the analyst count \(k\). Unset in every shipped preset, which drops the \(k^\alpha\) factor.
- Model inclusion, \(x_M\): An excluded model drops \(x_M\tau_M\) from the numerator and \(\tau_M\) from \(T=\tau_0+\tau_M+\tau_C\); the prior and consensus share the weight.
- Winsorised fraction: Clips the tails of realised growth \(g_i\) and of the error magnitudes \(e_{j,i}\) before \(\mu_0\), \(\tau_0\) and the error-based precisions are computed.
- Interval shape, \(\nu\), \(\ell\), \(\omega\): The Student-t whose quantiles \(q_L\) and \(q_U\) at coverage \(p\) stretch \(\sigma_\theta\) into the band. It changes the band, never \(\hat\theta\).
The posterior contract gives each equation’s exceptional cases; Bayesian settings lists every field.
Choose a profile
- Plain:
plain-2026-09keeps weights based on historical errors. It is the teaching default, with an explicit fitted interval shape. - Recommended: The best evaluated profile in the cited research sample. It uses dispersion weighting \(d\) with a variance multiplier \(\kappa\) below one and bias correction \(\lambda\); evaluate it on the intended input data before changing publication policy.
- Evaluated: Measured in the research, without the recommended status.
- Parity: Preserves a source configuration; this is not a calibration endorsement.
- Experimental: Combines options that were not evaluated together.
| Preset | Status | \(d\) weighted | \(\kappa\) | \(\lambda\) | \(x_M\) included | Winsorised |
|---|---|---|---|---|---|---|
stdev-weighted-bias-adjusted-2026-09 |
recommended | on | 0.35 | 0.5 | on | – |
stdev-weighted-bias-adjusted-no-model-2026-09 |
evaluated | on | 0.35 | 0.5 | off | – |
stdev-weighted-2026-09 |
evaluated | on | 1 | 0 | on | – |
plain-bias-adjusted-2026-09 |
evaluated | off | 1 | 0.5 | on | – |
plain-2026-09 |
evaluated | off | 1 | 0 | on | – |
production-signal-2026-09 |
parity | off | 1 | 0 | on | – |
stdev-weighted-bias-adjusted-winsorised-2026-09 |
experimental | on | 0.35 | 0.5 | on | 0.01 |
Compare on one example
The same history is prepared separately for each profile, so changed settings also change the history statistics where applicable. This demonstrates behavior, not comparative predictive performance.
Show the code
history = examples.quarterly_history()
history["dispersion"] = (history.value * 0.012).where(history.source.eq("consensus"))
as_of = pd.Timestamp("2026-05-10", tz="UTC")
runs = {}
for name in pf.BAYESIAN_PRESETS:
settings = pf.posterior_preset(name)
subjects = pf.prepare_bayesian_subjects(
history, as_of, forecast_source="model", settings=settings,
)
method = pf.BayesianPosterior(forecast_source="model", settings=settings)
runs[name] = method.fit(subjects).apply(subjects).iloc[-1]
pd.DataFrame(runs).T[
["adjusted_consensus", "weight_prior", "weight_model", "weight_consensus",
"posterior_level", "posterior_lower", "posterior_upper", "eligible"]
]| adjusted_consensus | weight_prior | weight_model | weight_consensus | posterior_level | posterior_lower | posterior_upper | eligible | |
|---|---|---|---|---|---|---|---|---|
| stdev-weighted-bias-adjusted-2026-09 | 804.963 | 0.691747 | 0.0785749 | 0.229678 | 801.755 | 776.307 | 830.784 | True |
| stdev-weighted-bias-adjusted-no-model-2026-09 | 804.963 | 0.750736 | NaN | 0.249264 | 798.042 | 771.531 | 828.283 | True |
| stdev-weighted-2026-09 | 798.8 | 0.813141 | 0.092364 | 0.0944945 | 800.61 | 770.273 | 837.371 | True |
| plain-bias-adjusted-2026-09 | 804.963 | 0.830506 | 0.0943364 | 0.0751578 | 801.112 | 795.666 | 807.451 | True |
| plain-2026-09 | 798.8 | 0.830506 | 0.0943364 | 0.0751578 | 800.649 | 795.166 | 807.144 | True |
| production-signal-2026-09 | 798.8 | 0.830506 | 0.0943364 | 0.0751578 | 800.649 | 771.795 | 832.48 | True |
| stdev-weighted-bias-adjusted-winsorised-2026-09 | 804.963 | 0.692798 | 0.0784689 | 0.228734 | 801.738 | 776.342 | 830.708 | True |
adjusted_consensus: The bias-corrected consensus \(c^*\). It equals \(c\) wherever \(\lambda=0\).weight_prior,weight_model,weight_consensus: The shares \(w_0\), \(w_M\) and \(w_C\) of total precision \(T\). Dispersion weighting with a small \(\kappa\) moves weight to \(w_C\).- Excluded model: \(\tau_M\) and \(w_M\) are missing, not zero; the model contributes nothing.
posterior_level: The published level \(\hat y=y_{t-1}(1+\hat\theta)\).posterior_lower,posterior_upper: The band \(\theta_L\) and \(\theta_U\) converted to levels. Every posterior profile uses a Student-t band, including the winsorised one. Other entry points can add capabilities that are not part ofBayesianPosterior; see API differences.
Interval shapes
Each preset carries the Student-t shape its band was fitted with, at coverage \(p\) = 90%.
| Preset | \(\nu\) | \(\ell\) | \(\omega\) | Fitted through |
|---|---|---|---|---|
stdev-weighted-bias-adjusted-2026-09 |
1.56 | 0.659 | 2.81 | unknown |
stdev-weighted-bias-adjusted-no-model-2026-09 |
1.56 | 0.659 | 2.81 | unknown |
stdev-weighted-2026-09 |
1.46 | 1.09 | 2.99 | unknown |
plain-bias-adjusted-2026-09 |
2.9 | 0.15 | 0.829 | unknown |
plain-2026-09 |
2.84 | 0.17 | 0.835 | unknown |
production-signal-2026-09 |
1.5 | 0.5 | 2.75 | unknown |
stdev-weighted-bias-adjusted-winsorised-2026-09 |
1.56 | 0.659 | 2.81 | unknown |
Training provenance
- Unknown cutoff: The research synthesis does not state its training end date. Presets currently carry
fitted_through=None, so the reading-date guard is inactive. - Interpretation: The settings include fitted interval shapes \(\nu\), \(\ell\) and \(\omega\). A missing date does not mean those values were never fitted.
- Historical use: Establish the calibration’s cutoff before claiming that a historical evaluation is independent of its training data.
- Audit: Retain the full settings and the preset evidence. The profile name alone does not establish suitability for a new company or model vintage.
- Known cutoff: With a supplied date, preparation rejects
as_ofdates on or before it. Changing preset computation requires a new version.
Evidence
The research evidence describes each profile’s original evaluated configuration. It is not proof that every API reproduces all of that configuration’s features.
stdev-weighted-bias-adjusted-2026-09: W99 26.7% better than consensus, win rate 66.5%; interval from the calibration at multiplier 0.35. Source: Bayesian KPI research synthesis, September 2026, sections 4.2, 4.3 and 5.3.stdev-weighted-bias-adjusted-no-model-2026-09: W99 26.2% better than consensus; the model adds 0.75%. Source: Bayesian KPI research synthesis, September 2026, section 4.2.stdev-weighted-2026-09: W99 18.7% better than consensus, win rate 65.0%; interval coverage 90.7% at nominal 90%. Source: Bayesian KPI research synthesis, September 2026, sections 4.1, 4.2 and 5.3.plain-bias-adjusted-2026-09: W99 13.8% better than consensus; interval coverage 90.1% at nominal 90%. Source: Bayesian KPI research synthesis, September 2026, sections 4.2 and 5.3.plain-2026-09: W99 9.2% better than consensus; interval coverage 90.2% at nominal 90%. Source: Bayesian KPI research synthesis, September 2026, sections 4.2 and 5.3.production-signal-2026-09: Plain blend with the interval fitted for the recommended profile; it covers about 99.7% at nominal 90% here. Source: Bayesian KPI research synthesis, September 2026, sections 5.3 and 6.stdev-weighted-bias-adjusted-winsorised-2026-09: Not evaluated together. Winsorisation had a small edge on full history; empirical intervals were best calibrated in 20 of 24 regimes; stated confidence near 95% realised about 51% in the capped cell. Source: Bayesian KPI research synthesis, September 2026, sections 4.4 and 5.4.
Bayesian settings gives validated overrides and their versioning rules.