{"generated_at": "2026-08-21T00:51:23.225213Z", "metrics": {"categories_exposed_at_inference": ["censorship", "natural_outage", "natural_outage:ddos", "natural_outage:infrastructure", "natural_outage:weather", "natural_outage:maintenance", "mixed_unknown"], "censorship_probability_bins": {"0.40 <= P(censorship) < 0.60": 0.002506265664160401, "0.60 <= P(censorship) < 0.80": 0.0, "P(censorship) < 0.40": 0.005012531328320802, "P(censorship) >= 0.80": 0.9924812030075187}, "cv_auc": 0.9973813506338768, "feature_importance_full": {"anomaly_rate": 0.00021036863576083455, "confidence": 2.549280754859002e-06, "duration_hours": 0.0003067607008156898, "duration_log": 0.00010558379571110305, "ev_asn_diversity": 0.00014540252547885717, "ev_n": 2.5745178296571797e-05, "ev_n_asns": 8.80270661377545e-05, "ev_n_blocking_methods": 2.258449979197955e-05, "ev_n_domain_categories": 0.0002474231688354101, "ev_n_domains": 0.00034642164203195204, "ev_n_signal_types": 0.0005322968184359504, "ev_n_sources": 3.658978806423896e-07, "ev_pct_anon_category": 0.0, "ev_pct_block": 0.0007018446103901847, "ev_pct_blockpage": 0.0, "ev_pct_censoredplanet": 0.0006594355631973267, "ev_pct_critical": 0.0005134916469919165, "ev_pct_dns": 0.000541353780335052, "ev_pct_grp_category": 6.169804515566314e-05, "ev_pct_interference": 4.47310310744806e-05, "ev_pct_ioda": 0.006534475364376932, "ev_pct_news_category": 0.000593363933876386, "ev_pct_ooni": 2.4484793353654143e-06, "ev_pct_outage": 0.005357858443410679, "ev_pct_tcp_reset": 1.4945288851151278e-06, "ev_pct_throttle": 0.0, "ev_pct_tls_reset": 0.0, "ev_selectivity": 1.0882401914373497e-05, "ev_source_diversity": 5.752745794805544e-07, "has_cp_source": 0.03734663457029906, "has_ioda_source": 0.8761983141730854, "has_ooni_source": 3.2417756380806057e-06, "hour_of_day": 0.0002593970569237772, "is_business_hours": 2.004058576745464e-08, "is_weekend_start": 0.001395792040880783, "long_duration_flag": 3.133192660369709e-09, "measurement_count": 2.1432932569140836e-06, "measurement_count_log": 1.7794249275511844e-06, "mechanism_block": 0.0, "mechanism_dns": 0.0, "mechanism_platform": 0.0, "mechanism_throttle": 0.0, "month": 5.3374168303876955e-09, "multi_source": 0.03965342321314173, "n_affected_asns_declared": 0.0, "n_affected_domains_declared": 0.0, "n_affected_services_declared": 0.0, "n_sources_declared": 0.025364736078727645, "severity_critical": 0.0, "severity_warning": 0.0, "very_long_duration_flag": 6.235402328529481e-09, "weekday": 0.002717321313067053}, "feature_importance_top5": {"ev_pct_ioda": 0.006534475364376932, "has_cp_source": 0.03734663457029906, "has_ioda_source": 0.8761983141730854, "multi_source": 0.03965342321314173, "n_sources_declared": 0.025364736078727645}, "generated_at": "2026-05-21T20:44:09.854138Z", "honest_auc_no_source_features": 0.9978057900519692, "honest_caveats": ["Trained binary (censorship vs natural_outage). The 2,293 IODA disruption incidents have unknown true cause \u2014 we treat them as a natural-outage prior, not as separate sub-cause labels.", "Sub-cause indicators (ddos/infrastructure/weather/maintenance) are emitted at inference time using HEURISTICS on feature shape, not from supervised training. Treat them as hints, not verdicts.", "Many real outages are genuinely ambiguous. The model exposes probability bands; downstream consumers SHOULD NOT collapse to argmax for journalistic claims \u2014 show the band.", "BIG ONE: the model's headline AUC is partly recovering the labeling rule itself (disruption rows come from IODA, censorship rows come from OONI/CensoredPlanet). We retrained without source-identity features and report the 'honest_auc_no_source_features' metric \u2014 that's the genuine SHAPE-signal AUC. Use it when judging real-world generalization to outages whose source you don't know."], "model": {"algorithm": "GradientBoostingClassifier", "learning_rate": 0.05, "max_depth": 4, "n_estimators": 200, "seed": 42}, "n_features": 52, "n_negative_natural_outage": 2297, "n_positive_censorship": 399, "n_train": 2696, "natural_outage_probability_bins": {"0.40 <= P(censorship) < 0.60": 0.00043535045711797995, "0.60 <= P(censorship) < 0.80": 0.0, "P(censorship) < 0.40": 0.9978232477144101, "P(censorship) >= 0.80": 0.0017414018284719198}, "promote_check": {"censorship_recall_at_p60": 0.9924812030075187, "censorship_recall_at_p60_floor": 0.8, "natural_outage_correct_at_p40": 0.9978232477144101, "natural_outage_correct_at_p40_floor": 0.6, "passed": true}, "schema": "voidly-outage-attribution/v1"}, "schema": "voidly-outage-attribution-info/v1", "summary": {"censorship_recall_at_p60": 0.9924812030075187, "cv_auc": 0.9973813506338768, "n_negative": 2297, "n_positive": 399, "n_train": 2696, "natural_outage_correct_at_p40": 0.9978232477144101, "passed_promote_floor": true}, "data_as_of": "2026-05-21T20:44:47.699674Z", "data_age_hours": 2188.1, "data_stale": true, "data_source_artifact": "/opt/voidly-ai/models/outage_attribution_v1.json", "data_freshness_note": "Any served_at/generated_at above is when this RESPONSE was assembled, not when the model ran. This artifact was last written 2026-05-21T20:44:47.699674Z (91.2 days ago). Cite data_as_of."}