{"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-07-06T05:00:03Z","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":29,"n_insufficient_data":0,"n_ok":1,"results":[{"abs_drift_pp":83.72,"brier":0.7134,"calibration_drift_pp":83.72,"country":"TR","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.1628,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":82.14,"brier":0.6858,"calibration_drift_pp":82.14,"country":"TH","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.1786,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":82.13,"brier":0.6893,"calibration_drift_pp":82.13,"country":"ID","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.1787,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":79.65,"brier":0.6423,"calibration_drift_pp":79.65,"country":"BD","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2035,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":75.33,"brier":0.5677,"calibration_drift_pp":75.33,"country":"MY","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2467,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":74.43,"brier":0.555,"calibration_drift_pp":74.43,"country":"VN","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2557,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":73.18,"brier":0.5371,"calibration_drift_pp":73.18,"country":"MM","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2682,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":20,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":73.08,"brier":0.5355,"calibration_drift_pp":73.08,"country":"BY","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2692,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":20,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.125,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":73.08,"brier":0.5355,"calibration_drift_pp":73.08,"country":"IN","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2692,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":12,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":72.99,"brier":0.5343,"calibration_drift_pp":72.99,"country":"SA","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2701,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":23,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":72.95,"brier":0.5333,"calibration_drift_pp":72.95,"country":"VE","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2705,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":72.88,"brier":0.5326,"calibration_drift_pp":72.88,"country":"IR","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2712,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":10,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.15,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":72.26,"brier":0.5235,"calibration_drift_pp":72.26,"country":"KZ","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.2774,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":20,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":67.58,"brier":0.4567,"calibration_drift_pp":67.58,"country":"EG","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.3242,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":6,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.45,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":67.58,"brier":0.4567,"calibration_drift_pp":67.58,"country":"PK","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.3242,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":20,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.525,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":67.58,"brier":0.4567,"calibration_drift_pp":67.58,"country":"UZ","drift_alert":true,"empirical_pos_rate":1,"mean_predicted_prob":0.3242,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":64.9,"brier":0.4944,"calibration_drift_pp":64.9,"country":"RU","drift_alert":true,"empirical_pos_rate":0.9167,"mean_predicted_prob":0.2677,"n_observed_positives":22,"n_predictions":24,"n_relabeled_vs_sentinel":17,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":59.83,"brier":0.4806,"calibration_drift_pp":59.83,"country":"CU","drift_alert":true,"empirical_pos_rate":0.875,"mean_predicted_prob":0.2767,"n_observed_positives":21,"n_predictions":24,"n_relabeled_vs_sentinel":18,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":31.4,"brier":0.3271,"calibration_drift_pp":31.4,"country":"SY","drift_alert":true,"empirical_pos_rate":0.5833,"mean_predicted_prob":0.2694,"n_observed_positives":14,"n_predictions":24,"n_relabeled_vs_sentinel":14,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":27.71,"brier":0.0782,"calibration_drift_pp":-27.71,"country":"NG","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2771,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":27.69,"brier":0.078,"calibration_drift_pp":-27.69,"country":"SD","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2769,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.45,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":27.18,"brier":0.0754,"calibration_drift_pp":-27.18,"country":"ET","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2718,"n_observed_positives":0,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":25.66,"brier":0.0664,"calibration_drift_pp":-25.66,"country":"PH","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2566,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":24.83,"brier":0.0619,"calibration_drift_pp":-24.83,"country":"BR","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2483,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":24.3,"brier":0.0591,"calibration_drift_pp":-24.3,"country":"ER","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.243,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":24.27,"brier":0.0589,"calibration_drift_pp":-24.27,"country":"KP","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2427,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":23.68,"brier":0.059,"calibration_drift_pp":-23.68,"country":"CN","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.2368,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":17.37,"brier":0.2733,"calibration_drift_pp":17.37,"country":"NI","drift_alert":true,"empirical_pos_rate":0.4167,"mean_predicted_prob":0.2429,"n_observed_positives":10,"n_predictions":24,"n_relabeled_vs_sentinel":10,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-06-29","window_start":"2026-06-06"},{"abs_drift_pp":16.16,"brier":0.0391,"calibration_drift_pp":-16.16,"country":"TM","drift_alert":true,"empirical_pos_rate":0,"mean_predicted_prob":0.1616,"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-06-29","window_start":"2026-06-06"},{"abs_drift_pp":3.99,"brier":0.1582,"calibration_drift_pp":-3.99,"country":"LB","drift_alert":false,"empirical_pos_rate":0.2083,"mean_predicted_prob":0.2483,"n_observed_positives":5,"n_predictions":24,"n_relabeled_vs_sentinel":2,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"ok","window_end":"2026-06-29","window_start":"2026-06-06"}],"schema":"voidly-per-country-calibration-drift/v1","sidecar_last_modified":"2026-07-06T05:00:03Z","sidecar_size_bytes":16624,"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."}}