{"calibrator_loaded":true,"calibrator_path":"/opt/voidly-ai/models/forecast_calibrator_v2_isotonic_prod.pkl","drift_threshold_pp":15,"endpoints":{"all":"/v1/sentinel/calibration-drift","single_country":"/v1/sentinel/calibration-drift/{cc}"},"filters_applied":{"min_n":null,"status":null},"generated_at":"2026-08-20T05:00:02Z","honest_caveats":["Per-country windows are narrow. A country with fewer than 15 predictions in the 30-day window gets status='insufficient_data' and drift_alert=null.","High-frequency-flip countries (VE, MM) produce noisy drift estimates — abs_drift_pp tends to overstate true drift when the country is bouncing between blocked and unblocked.","Drift > 0 ≠ broken model. A real distribution shift in the country (election, mass protest, fresh shutdown campaign) will legitimately have empirical_pos_rate > mean_predicted_prob until the next weekly retrain catches up.","Observed labels are rebuilt from voidly_data.incidents using incident_type IN ('censorship','mixed') — matching the forecast model's post-2026-05-21 disruption-exclusion rule. The legacy sentinel_outcomes.observed column is NOT used.","Calibrator is applied with the same WATCHED_FOR_CALIBRATION + CALIBRATOR_FLOOR gate as the live API, so this is the literal probability that would have been served at request time."],"min_predictions_for_alert":15,"model_id":"forecast-v1-7day","n_countries":30,"n_drifting":30,"n_insufficient_data":0,"n_ok":0,"results":[{"abs_drift_pp":96.08,"brier":0.9288,"calibration_drift_pp":96.08,"country":"BD","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.0392,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":2,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":95.68,"brier":0.9229,"calibration_drift_pp":95.68,"country":"ID","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.0432,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":13,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.175,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":94.66,"brier":0.9048,"calibration_drift_pp":94.66,"country":"TR","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.0534,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":5,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.15,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":93.24,"brier":0.8788,"calibration_drift_pp":93.24,"country":"TH","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.0676,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":23,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":81.32,"brier":0.6735,"calibration_drift_pp":81.32,"country":"IN","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.1868,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":13,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.45,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":74.91,"brier":0.5615,"calibration_drift_pp":74.91,"country":"LB","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2509,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.35,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":74.82,"brier":0.5624,"calibration_drift_pp":74.82,"country":"VN","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2518,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":74.76,"brier":0.5593,"calibration_drift_pp":74.76,"country":"MY","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2524,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":12,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.35,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":73,"brier":0.5329,"calibration_drift_pp":73,"country":"SY","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.27,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.55,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"CU","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.35,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"EG","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":17,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.45,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"IR","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":12,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.375,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"KZ","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":14,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.3,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"PK","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":22,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.675,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"RU","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":13,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.525,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"SA","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.575,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"UZ","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":20,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.7,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"VE","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":4,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.575,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"BY","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":23,"n_predictions":23,"n_relabeled_vs_sentinel":23,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.45,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":72.85,"brier":0.5307,"calibration_drift_pp":72.85,"country":"MM","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2715,"n_observed_positives":23,"n_predictions":23,"n_relabeled_vs_sentinel":15,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.55,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":63.81,"brier":0.5338,"calibration_drift_pp":63.81,"country":"CN","drift_alert":true,"empirical_pos_rate":0.8333,"mean_predicted_prob":0.1952,"n_observed_positives":20,"n_predictions":24,"n_relabeled_vs_sentinel":20,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":52.02,"brier":0.4355,"calibration_drift_pp":52.02,"country":"NG","drift_alert":true,"empirical_pos_rate":0.7917,"mean_predicted_prob":0.2715,"n_observed_positives":19,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.725,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":39.52,"brier":0.3784,"calibration_drift_pp":39.52,"country":"ET","drift_alert":true,"empirical_pos_rate":0.6667,"mean_predicted_prob":0.2715,"n_observed_positives":16,"n_predictions":24,"n_relabeled_vs_sentinel":16,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.7,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":27.16,"brier":0.3234,"calibration_drift_pp":27.16,"country":"SD","drift_alert":true,"empirical_pos_rate":0.5417,"mean_predicted_prob":0.27,"n_observed_positives":13,"n_predictions":24,"n_relabeled_vs_sentinel":13,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.7,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":25.68,"brier":0.0662,"calibration_drift_pp":-25.68,"country":"BR","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2568,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":25.24,"brier":0.064,"calibration_drift_pp":-25.24,"country":"NI","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2524,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":25.24,"brier":0.064,"calibration_drift_pp":-25.24,"country":"PH","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2524,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":23.61,"brier":0.0558,"calibration_drift_pp":-23.61,"country":"ER","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2361,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":23.61,"brier":0.0558,"calibration_drift_pp":-23.61,"country":"KP","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2361,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"},{"abs_drift_pp":16.55,"brier":0.1665,"calibration_drift_pp":16.55,"country":"TM","drift_alert":true,"empirical_pos_rate":0.1667,"mean_predicted_prob":0.0012,"n_observed_positives":4,"n_predictions":24,"n_relabeled_vs_sentinel":4,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-08-13","window_start":"2026-07-21"}],"schema":"voidly-per-country-calibration-drift/v1","sidecar_last_modified":"2026-08-20T05:00:02Z","sidecar_size_bytes":16631,"window_days":30,"_voidly_pay":{"claim_did":"https://voidly.ai/pay/claim","for_builders":"https://voidly.ai/pay/for-builders","marketplace":"https://api.voidly.ai/v1/pay/marketplace","live_demo":"https://huggingface.co/spaces/emperor-mew/voidly-pay","universal_proxy":{"url":"https://api.voidly.ai/v1/pay/proxy","example":"https://api.voidly.ai/v1/pay/proxy?u=<https-url>&to=did:voidly:<your-did>&price=0.01","page":"https://voidly.ai/pay/proxy","note":"Paywall any public HTTPS URL with one query param. No SDK install required."},"install":{"typescript":"npm install @voidly/pay","python":"pip install voidly-pay","langchain":"pip install voidly-pay-langchain","vercel_ai":"npm install @voidly/pay-vercel-ai","mcp":"npx @voidly/pay-mcp","cli":"npm install -g @voidly/pay-cli"},"note":"Voidly Pay is the open agent-to-agent payment rail. Claim a DID + 10 starter credits in 60s, or paywall any URL via the universal proxy with one query param."}}