{"data_end_date": "2026-05-20", "feature_importance": [{"feature": "horizon_days", "importance": 0.12919840216636658}, {"feature": "month_sin", "importance": 0.11068723350763321}, {"feature": "global_30d_events", "importance": 0.10472018271684647}, {"feature": "month_cos", "importance": 0.09765468537807465}, {"feature": "follower_base_rate", "importance": 0.09538375586271286}, {"feature": "follower_90d_events", "importance": 0.09220441430807114}, {"feature": "follower_enc", "importance": 0.08680064231157303}, {"feature": "days_since_follower_last", "importance": 0.07990104705095291}, {"feature": "follower_30d_events", "importance": 0.06445127725601196}, {"feature": "same_auth_cluster", "importance": 0.035676512867212296}, {"feature": "pair_coevents_365d", "importance": 0.03256774693727493}, {"feature": "trigger_enc", "importance": 0.027370326220989227}, {"feature": "trigger_30d_events", "importance": 0.027290312573313713}, {"feature": "same_region", "importance": 0.016093412414193153}], "honest_caveats": ["Pairwise temporal classifier; primary horizon=7d.", "Trained on 17622 rows, tested on 9306 rows in last 45d window.", "Each row is a (trigger_event, follower_country, horizon) tuple \u2014 same trigger appears N-follower times per horizon, so AUC is not strictly per-event but per-pair.", "did_follow=1 includes ANY censorship/mixed event in the follower country within H days, which may be coincidental rather than causal contagion. Model can only learn that the joint distribution shifts after the trigger, not establish causality.", "Top-chains are TEST-SET averages \u2014 they reflect what the model PREDICTS, not what necessarily WILL happen. Use as a forecast prior, not a ground truth.", "Sparse positive class (~18% at 7d horizon) means precision @ high-confidence cutoffs is noisy \u2014 recommend using the score as a relative ranking, not an absolute probability."], "horizons_days": [3, 7, 14], "input_features_parquet": "[internal path]", "model": "pairwise-xgboost", "n_candidate_countries": 34, "n_follower_countries": 34, "n_rows_total": 26928, "n_significant_pairs_predicted_p_gt_0_30": 92, "n_test": 9306, "n_train": 17622, "n_trigger_countries": 34, "overall_test_ap": 0.5134118545225828, "overall_test_auc": 0.6983610717603259, "overall_test_brier": 0.1847886341975772, "passed_promote_gates": true, "per_horizon_test_metrics": {"14": {"ap": 0.5972444851313632, "auc": 0.691951249794626, "brier": 0.22713750929056467, "n_test": 3102, "pos_rate": 0.3346228239845261}, "3": {"ap": 0.34975608080084875, "auc": 0.6457041379459076, "brier": 0.1413486352273149, "n_test": 3102, "pos_rate": 0.16795615731785946}, "7": {"ap": 0.4928577559110649, "auc": 0.6696949571962517, "brier": 0.18587975807485208, "n_test": 3102, "pos_rate": 0.25435203094777564}}, "primary_horizon_auc": 0.6696949571962517, "primary_horizon_days": 7, "promote_gate_thresholds": {"min_primary_auc": 0.65, "min_significant_pairs": 10}, "top_chains_h7": [{"follow_rate_actual": 1.0, "follower": "JO", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.9904783368110657, "trigger": "OM"}, {"follow_rate_actual": 1.0, "follower": "PK", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.9440260529518127, "trigger": "OM"}, {"follow_rate_actual": 0.6666666666666666, "follower": "JO", "n_actual_follows": 2, "n_examples": 3, "p_follow_7d": 0.9358898997306824, "trigger": "MA"}, {"follow_rate_actual": 1.0, "follower": "AZ", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.9255924224853516, "trigger": "OM"}, {"follow_rate_actual": 0.6666666666666666, "follower": "UZ", "n_actual_follows": 2, "n_examples": 3, "p_follow_7d": 0.9216236472129822, "trigger": "MA"}, {"follow_rate_actual": 1.0, "follower": "AZ", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.9208723306655884, "trigger": "NI"}, {"follow_rate_actual": 1.0, "follower": "UZ", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.9109622240066528, "trigger": "OM"}, {"follow_rate_actual": 0.8, "follower": "AZ", "n_actual_follows": 4, "n_examples": 5, "p_follow_7d": 0.8904728889465332, "trigger": "EG"}, {"follow_rate_actual": 1.0, "follower": "AZ", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.8801878690719604, "trigger": "SY"}, {"follow_rate_actual": 0.5, "follower": "JO", "n_actual_follows": 1, "n_examples": 2, "p_follow_7d": 0.8599941730499268, "trigger": "IQ"}, {"follow_rate_actual": 0.3333333333333333, "follower": "AZ", "n_actual_follows": 1, "n_examples": 3, "p_follow_7d": 0.8599410057067871, "trigger": "MA"}, {"follow_rate_actual": 0.0, "follower": "TZ", "n_actual_follows": 0, "n_examples": 3, "p_follow_7d": 0.8422905802726746, "trigger": "MA"}, {"follow_rate_actual": 1.0, "follower": "AZ", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.8371471762657166, "trigger": "IQ"}, {"follow_rate_actual": 1.0, "follower": "AZ", "n_actual_follows": 3, "n_examples": 3, "p_follow_7d": 0.8365092277526855, "trigger": "BY"}, {"follow_rate_actual": 0.8888888888888888, "follower": "AZ", "n_actual_follows": 8, "n_examples": 9, "p_follow_7d": 0.8232867121696472, "trigger": "UZ"}, {"follow_rate_actual": 1.0, "follower": "PK", "n_actual_follows": 2, "n_examples": 2, "p_follow_7d": 0.8167673349380493, "trigger": "IQ"}, {"follow_rate_actual": 0.875, "follower": "AZ", "n_actual_follows": 7, "n_examples": 8, "p_follow_7d": 0.8074698448181152, "trigger": "JO"}, {"follow_rate_actual": 0.8, "follower": "PK", "n_actual_follows": 4, "n_examples": 5, "p_follow_7d": 0.7995268702507019, "trigger": "EG"}, {"follow_rate_actual": 0.9090909090909091, "follower": "JO", "n_actual_follows": 10, "n_examples": 11, "p_follow_7d": 0.7983417510986328, "trigger": "PK"}, {"follow_rate_actual": 0.6666666666666666, "follower": "EG", "n_actual_follows": 2, "n_examples": 3, "p_follow_7d": 0.7925581932067871, "trigger": "MA"}], "train_cutoff_date": "2026-04-05", "trained_at": "2026-05-21T14:25:41.860469Z", "version": "1.0"}