Papers › WATCH: Adaptive Monitoring for AI Deployments via Weighted-Conformal Martingales

WATCH: Adaptive Monitoring for AI Deployments via Weighted-Conformal Martingales

7 May 2025arXiv:2505.04608archive 2025-07-28

Drew Prinster, Xing Han, Anqi Liu, Suchi Saria

Responsibly deploying artificial intelligence (AI) / machine learning (ML) systems in high-stakes settings arguably requires not only proof of system reliability, but moreover continual, post-deployment monitoring to quickly detect and address any unsafe behavior. Statistical methods for nonparametric change-point detection -- especially the tools of conformal test martingales (CTMs) and anytime-valid inference -- offer promising approaches to this monitoring task. However, existing methods are restricted to monitoring limited hypothesis classes or ``alarm criteria'' (such as data shifts that violate certain exchangeability assumptions), do not allow for online adaptation in response to shifts, and/or do not enable root-cause analysis of any degradation. In this paper, we expand the scope of these monitoring methods by proposing a weighted generalization of conformal test martingales (WCTMs), which lay a theoretical foundation for online monitoring for any unexpected changepoints in the data distribution while controlling false-alarms. For practical applications, we propose specific WCTM algorithms that adapt online to mild covariate shifts (in the marginal input distribution) while quickly detecting and diagnosing more severe shifts, such as concept shifts (in the conditional label distribution) or extreme (out-of-support) covariate shifts that cannot be easily adapted to. On real-world datasets, we demonstrate improved performance relative to state-of-the-art baselines.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2505.04608")

Code

Syntology Ran 2 of 24 code samples harvested from 2 repositories linked to this paper; 22 have no recorded run. Of those that ran: 1 ran · violated contract; 1 ran · fixture could not drive it.

By repository: official repository: 3 samples from 1 repository, 2 ran; found in paper text by Syntology: 21 samples from 1 repository, 0 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

aaronhan223/wtr officialpytorch report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

24 samples harvested; 2 ran; 0 honoured the contract we drafted; 22 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

1ran · violated contract
1ran · fixture could not drive it
22unverified

Licence: 0 of the 24 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 2 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

calculate_p_values aaronhan223/wtr/src/p_values.py official repository ran · violated contract fingerprinted BSD-3-Clause (permissive) · 1036ba3a48cac196 · report
calculate_p_values_and_quantiles aaronhan223/wtr/src/p_values.py official repository ran · fixture could not drive it fingerprinted BSD-3-Clause (permissive) · 52fbf28f44e10714 · report
calculate_weighted_p_values_and_quantiles aaronhan223/wtr/src/p_values.py official repository unverified BSD-3-Clause (permissive) · 5085978d4817f000 · report
ResNet20 aaronhan223/watch/src/resnet.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 24e257d88b978945 · report
ResNet32 aaronhan223/watch/src/resnet.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · d6c9d2e6d30cf13c · report
brier_scores aaronhan223/watch/src/podkopaev_ramdas/tests.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 3fe446beed24ab8f · report
cusum_procedure aaronhan223/watch/src/martingales.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 1e117d22b7948cfc · report
effective_sample_size_est aaronhan223/watch/src/utils.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · f7f73cf99f559888 · report
eval_loss_prob aaronhan223/watch/src/main_mnist_cifar.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 8e67a8dac730d3c1 · report
evaluate aaronhan223/watch/src/main_mnist_cifar.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 920241d05b739b86 · report
fit aaronhan223/watch/src/main_pod_ram.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 3dcf309104240174 · report
get_meps_data aaronhan223/watch/src/utils.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 2a5d22e9de647d4d · report
hoeffding_ci_lower_limit aaronhan223/watch/src/podkopaev_ramdas/concentrations.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · e3886065919c0b20 · report
hoeffding_ci_upper_limit aaronhan223/watch/src/podkopaev_ramdas/concentrations.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · bf57bb6d7f52d5f9 · report
logistic_regression_weight_est aaronhan223/watch/src/p_values.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 75e33f5c90046614 · report
misclas_losses aaronhan223/watch/src/podkopaev_ramdas/tests.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 3616d89ef8f11c25 · report
phi_h aaronhan223/watch/src/podkopaev_ramdas/concentrations.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 4987abbabf98f992 · report
podkopaev_ramdas_algorithm1 aaronhan223/watch/src/podkopaev_ramdas/baseline_alg.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · d5786e025273c2db · report
podkopaev_ramdas_changepoint_detection aaronhan223/watch/src/podkopaev_ramdas/baseline_alg.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · c00e01fba06c1cf4 · report
random_forest_weight_est aaronhan223/watch/src/p_values.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 0a2eccd55a3473c8 · report
shiryaev_roberts_procedure aaronhan223/watch/src/martingales.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · eee24789b6e59613 · report
top_label_brier_scores aaronhan223/watch/src/podkopaev_ramdas/tests.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 0eba4f72b27f3a5d · report
train_one_epoch aaronhan223/watch/src/main_mnist_cifar.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · e224e4494d78ef17 · report
ville_procedure aaronhan223/watch/src/martingales.py found in paper text by Syntology unverified BSD-3-Clause (permissive) · 0c6a35aaa8280481 · report

Tasks

Change Point Detection

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections