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

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
Figure 1: Where each preset setting enters the posterior: the consensus reading, its precision, the model’s inclusion, the history statistics and the interval.

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-09 keeps 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 of BayesianPosterior; 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_of dates 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.