{"generated_at":"2026-06-15T07:40:57.794080Z","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,"P(censorship) < 0.40":0.005012531328320802,"P(censorship) >= 0.80":0.9924812030075187},"cv_auc":0.9973813506338768,"feature_importance_full":{"anomaly_rate":0.00021036863576083455,"confidence":0.000002549280754859002,"duration_hours":0.0003067607008156898,"duration_log":0.00010558379571110305,"ev_asn_diversity":0.00014540252547885717,"ev_n":0.000025745178296571797,"ev_n_asns":0.0000880270661377545,"ev_n_blocking_methods":0.00002258449979197955,"ev_n_domain_categories":0.0002474231688354101,"ev_n_domains":0.00034642164203195204,"ev_n_signal_types":0.0005322968184359504,"ev_n_sources":3.658978806423896e-7,"ev_pct_anon_category":0,"ev_pct_block":0.0007018446103901847,"ev_pct_blockpage":0,"ev_pct_censoredplanet":0.0006594355631973267,"ev_pct_critical":0.0005134916469919165,"ev_pct_dns":0.000541353780335052,"ev_pct_grp_category":0.00006169804515566314,"ev_pct_interference":0.0000447310310744806,"ev_pct_ioda":0.006534475364376932,"ev_pct_news_category":0.000593363933876386,"ev_pct_ooni":0.0000024484793353654143,"ev_pct_outage":0.005357858443410679,"ev_pct_tcp_reset":0.0000014945288851151278,"ev_pct_throttle":0,"ev_pct_tls_reset":0,"ev_selectivity":0.000010882401914373497,"ev_source_diversity":5.752745794805544e-7,"has_cp_source":0.03734663457029906,"has_ioda_source":0.8761983141730854,"has_ooni_source":0.0000032417756380806057,"hour_of_day":0.0002593970569237772,"is_business_hours":2.004058576745464e-8,"is_weekend_start":0.001395792040880783,"long_duration_flag":3.133192660369709e-9,"measurement_count":0.0000021432932569140836,"measurement_count_log":0.0000017794249275511844,"mechanism_block":0,"mechanism_dns":0,"mechanism_platform":0,"mechanism_throttle":0,"month":5.3374168303876955e-9,"multi_source":0.03965342321314173,"n_affected_asns_declared":0,"n_affected_domains_declared":0,"n_affected_services_declared":0,"n_sources_declared":0.025364736078727645,"severity_critical":0,"severity_warning":0,"very_long_duration_flag":6.235402328529481e-9,"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 — 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 — 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 — 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,"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},"_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."}}