Methodology white paper · v1.0 · September 2026

How Vigilo scores are built, validated, and published

This document defines every published metric, states the forecast formulation, and describes the validation protocol — so that a technical reviewer can verify our numbers from the public data alone. Production constants and layer internals are omitted deliberately; everything needed to audit the results is here.

1 · The accounting rule everything rests on

Every prediction is written to an append-only journal before the outcome, with a timestamp, a tier, and a confidence. Outcomes are scored against the entry as written — entries are never edited or deleted retroactively. All aggregate numbers below are computed from this journal and republished automatically every 8 hours.

2 · Classification metrics

With TP = confirmed calls, FP = calls that did not confirm, FN = events we missed (measured against an external ground truth — USGS M6+ catalogue for the disaster domain):

precision = TP / (TP + FP) → 0.737, 95% CI [0.696, 0.774] recall = TP / (TP + FN) → 0.58 (external benchmark) F1 = 2·P·R / (P + R)

Confidence intervals on proportions use the Wilson score interval:

CI = ( p̂ + z²/2n ± z·√(p̂(1−p̂)/n + z²/4n²) ) / (1 + z²/n)

Unverifiable outcomes (opaque countries) are reported as their own category and excluded from the precision denominator — this is stated on the scorecard rather than hidden.

3 · Calibration

For journal entries carrying probability-like confidence, we publish the Brier score and its Murphy decomposition:

Brier = (1/N) Σ (fᵢ − oᵢ)² → 0.19 Brier = uncertainty − resolution + reliability (Murphy, 1973)

Reliability (miscalibration) and resolution (discrimination) are tracked separately, so a worsening score points to its cause. Tier confidences are self-calibrating: once a tier accumulates n ≥ 20 scored outcomes, its displayed confidence is its historical confirm rate (Beta-smoothed), not an author's opinion.

4 · Short-horizon forecast formulation

The composite risk forecast at horizon h blends the live signal with the country's own historical base, plus an exogenous seasonal-climatology term:

proj(h) = clip( w_h · now + (1 − w_h) · base + climate(h) )

The horizon weights themselves are proprietary — fitted by blind backtest and frozen under the pre-registration protocol.

The weights were fitted by grid search on the first half of accumulated history and are re-derived blind every 8 hours on the training half, then scored on the unseen second half (public/model_validation.json). As of this writing the shipped weights remain train-optimal, and the out-of-sample edge over a persistence baseline is:

HorizonEdge vs naive (MAE)95% CI (paired bootstrap)
1 day+2.0%[0.8, 3.3] — significant
3 days+10.7%[8.7, 13.0] — significant
7 days+17.4%[15.0, 19.8] — significant

Beyond ~3 days the raw news series carries no autocorrelation (lag-7 ACF ≈ 0.01), so all longer-horizon skill comes from structurally different layers: the scheduled-events calendar, disaster climatology, external academic forecasts (ViEWS, 36-month), prediction-market odds and the two-government advisory consensus — combined as independent evidence, not extrapolation.

5 · Window probabilities and decay

v2 (2026-09-06). Our own measurements falsified the Poisson independence assumption the v1 window used: an elevated day repeats the next day ~69% of the time against a ~20% base rate — day states cluster. Trip-window risk therefore comes from a two-state Markov chain with Laplace-smoothed transition probabilities, and today's state matters:

Window probabilities come from the chain's transition structure and are state-aware: today's condition enters the forecast. Country rates are stabilised by empirical-Bayes shrinkage toward a regional pool (a three-event country borrows its region's strength; a long-history country stands on its own data), and confidence intervals use the autocorrelation-effective sample size, not raw n — dependent days must not masquerade as independent evidence. Exact transition estimators and shrinkage strength are proprietary, frozen under the pre-registration protocol. Walk-forward Brier scoring of the chain against train-climatology shows significant skill (+25.9/+2.9/+1.3% at 1/3/7 days, moving-block bootstrap). Spike decay per country is the mean-reversion half-life from an Ornstein–Uhlenbeck regression; countries without detectable reversion report none rather than a fabricated number. All of it feeds public/risk_stats.json.

A separate Reality Shift Index (public/reality_shift.json) guards against the most expensive failure of predictive systems — a confident forecast in a structurally changed world: a bounded distribution-shift measure between a country's recent signal distribution and its own full history, scaled 0–100. A shifted country is outside the regime its statistics were learned on, and its model confidence is reported as degraded — never boosted. It is an uncertainty signal, not a risk signal: calming shifts register as hard as escalation.

6 · Evidence handling

7 · Decision rule

Recommendations are produced by a cost-loss rule with a built-in humility constraint: action is advised only when the Wilson lower bound of the event probability clears the client's cost-loss ratio:

advise action ⇔ P_lower(Wilson) > C_protect / L_if_hit

Less data widens the interval and makes advice more conservative — overconfidence is excluded by construction, not by policy. The same forecast therefore yields different recommendations for users with different stakes, which is intended behaviour.

8 · Estimative language, source grading, warning board

9 · Validation protocol & anti-overfitting rules

10 · Known limitations

Verify, don't trust: live artefacts — /track-record · /public/model_validation.json · /public/risk_stats.json · /public/feed_health.json · /cases.html. A deeper technical appendix (layer internals, production constants) is available under NDA for due-diligence reviews: aleksey.stepikin@gmail.com.