Bellwether

A model that notices it is getting worse, and replaces itself.

Ingested

251,231
edits
183,413
logged out
587,032
outcome checks
457,073
labels
138,306
reverts seen

17.17% of ingested edits already carried a revert tag when we first saw them. A floor, not a rate — the tag array is frozen at ingestion, so for a live edit it cannot yet know about a revert that has not happened.

Revert rate, matured 48h+

EditorSampleRevertedRatePopulationWeighted rate
logged out145,23638,32926.39%290,47226.39%
registered53,4302,0603.86%1,781,0003.86%

Every rate carries its sample size and the maturity it was measured at. A revert rate without a maturity is a lower bound, not a rate.

Logged-out edits are sampled at 50% and registered ones at 3%, so the sample is not the population. Both rates are shown — publishing only one would mean choosing which.

How good is it?

MeasurementPR-AUCvs logged-outSampleMatured at
Backtest (offline, backfilled)0.2560+0.107211,18848h · provisional
Live (register, all events)0.3029 [0.2940, 0.3118]0.136275,995 · 9677 pos168h
Live (register, maturity cohort)0.2697 [0.2474, 0.2959]0.129511,177 · 1190 pos48h

These are not the same measurement and the higher one is not the answer. The backtest scores a backfilled census whose labels were harvested at leisure, with folds trained on data adjacent to what they score. The live rows grade forecasts written to an append-only register before the outcome existed, on a different population, under a scoring lag. Where they disagree, the live one is true.

The two live rows are also not interchangeable. The maturity cohort is the tenth of events the labeller checks densely enough to grade at 48 hours; everything else waits for its seven-day check. The cohort figure arrives first over far fewer events.

Excluded from the live figures: 55,061 not yet matured, and 7,611 scored after their own outcome was already visible. The second exclusion is correct and is not neutral — those edits were reverted fast, so dropping them removes real positives, which is why their own base rate is published beside the count.

Against Wikimedia’s own model

Bellwether 0.2978 against Lift Wing 0.2390 on 1085 events both models scored — a margin of 0.0588.

Wikimedia runs revertrisk-language-agnostic in production against the same edits. The SRS recorded, before any model here existed, that it is expected to win — and the comparison is published whichever way it falls. It is paired on the events both models scored, which is why the Bellwether figure quoted here is not the one in the table above.

Pipeline

JobLast runOutcome
agreement745 min agosuccess
apply_reverts114 min agosuccess
gapfill114 min agosuccess
ingest121 min agosuccess
label287 min agopartial
label_secondary120 min agosuccess
liftwing845 min agosuccess
metrics1377 min agosuccess
reconcile1033 min agopartial
reproduce1000 min agopartial
retention1089 min agosuccess
score113 min agopartial
seal1090 min agosuccess
train35436 min agosuccess
triggers891 min agosuccess

Staleness is stated rather than implied. Counts with no indication of when they last changed look identical to counts that stopped changing days ago.

These figures were read from the API at 2026-11-02 04:34 UTC and are served from a cache that refreshes in the background. The API sleeps when idle; caching is what stops that from becoming your wait.