{"calibrator_loaded":true,"calibrator_path":"/opt/voidly-ai/models/forecast_calibrator_v2_isotonic_prod.pkl","drift_threshold_pp":15.0,"endpoints":{"all":"/v1/sentinel/calibration-drift","single_country":"/v1/sentinel/calibration-drift/{cc}"},"filters_applied":{"min_n":null,"status":"drifting"},"generated_at":"2026-10-03T05: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 \u2014 abs_drift_pp tends to overstate true drift when the country is bouncing between blocked and unblocked.","Drift > 0 \u2260 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') \u2014 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":27,"n_insufficient_data":0,"n_ok":3,"results":[{"abs_drift_pp":96.91,"brier":0.9447,"calibration_drift_pp":96.91,"country":"ID","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.0309,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":7,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.1,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":96.44,"brier":0.9353,"calibration_drift_pp":96.44,"country":"IN","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.0356,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":95.22,"brier":0.9131,"calibration_drift_pp":95.22,"country":"TR","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.0478,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":7,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.075,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":92.41,"brier":0.8632,"calibration_drift_pp":92.41,"country":"BD","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.0759,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":0,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.175,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":92.04,"brier":0.858,"calibration_drift_pp":92.04,"country":"TH","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.0796,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":87.27,"brier":0.7732,"calibration_drift_pp":87.27,"country":"CN","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.1273,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.175,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":80.92,"brier":0.6612,"calibration_drift_pp":80.92,"country":"RU","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.1908,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.525,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"BY","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.675,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"CU","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.75,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"EG","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"ET","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.3,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"IR","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.525,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"KZ","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.55,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"LB","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"MM","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"MY","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":9,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.225,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"PK","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.65,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"SA","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.625,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"SY","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":24,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.7,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"UZ","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"VE","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"n_observed_positives":24,"n_predictions":24,"n_relabeled_vs_sentinel":13,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.625,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":77.34,"brier":0.5981,"calibration_drift_pp":77.34,"country":"VN","drift_alert":true,"empirical_pos_rate":1.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":56.51,"brier":0.4842,"calibration_drift_pp":56.51,"country":"NG","drift_alert":true,"empirical_pos_rate":0.7917,"mean_predicted_prob":0.2266,"n_observed_positives":19,"n_predictions":24,"n_relabeled_vs_sentinel":19,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.75,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"},{"abs_drift_pp":22.66,"brier":0.0514,"calibration_drift_pp":-22.66,"country":"ER","drift_alert":true,"empirical_pos_rate":0.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":22.66,"brier":0.0514,"calibration_drift_pp":-22.66,"country":"KP","drift_alert":true,"empirical_pos_rate":0.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":22.66,"brier":0.0514,"calibration_drift_pp":-22.66,"country":"PH","drift_alert":true,"empirical_pos_rate":0.0,"mean_predicted_prob":0.2266,"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-09-26","window_start":"2026-09-03"},{"abs_drift_pp":19.82,"brier":0.2099,"calibration_drift_pp":19.82,"country":"TM","drift_alert":true,"empirical_pos_rate":0.2083,"mean_predicted_prob":0.0101,"n_observed_positives":5,"n_predictions":24,"n_relabeled_vs_sentinel":5,"observed_rebuilt_from_voidly_db":true,"operational_threshold":0.05,"status":"drifting","window_end":"2026-09-26","window_start":"2026-09-03"}],"schema":"voidly-per-country-calibration-drift/v1","sidecar_last_modified":"2026-10-03T05:00:02Z","sidecar_size_bytes":16611,"window_days":30}
