Polymarket Per-Category Exponential Hazard Rates
Per-category maximum-likelihood exponential hazard fits for the time-to-event distribution on Polymarket deadline-resolved contracts. Headline: military_geopolitics λ=0.241 events/day, 95% CI [0.143, 0.365], half-life 2.9 days (KS p=0.425, n=18, adequate). Baseline survival function for the deadline-ILS framework.
Per-category exponential hazard fits for the distribution of lead times τ = T_event − T_open on Polymarket deadline-resolved contracts. Each record publishes the MLE point estimate λ̂, its 95% confidence interval, the half-life, a Kolmogorov–Smirnov goodness-of-fit p-value, and the market IDs used in the fit.
Researchers building on the ILS-dl framework can use these fits directly as the survival baseline S(τ) = exp(−λτ) without re-fitting from scratch.
Published fits
| Category | n | λ̂ (events/day) | 95% CI | Half-life (days) | KS p | Verdict |
|---|---|---|---|---|---|---|
| military_geopolitics | 18 | 0.241 | [0.143, 0.365] | 2.9 | 0.425 | adequate |
| corporate_disclosure | 5 | 0.156 | [0.051, 0.319] | 4.5 | 0.616 | adequate (preliminary, n=5) |
| regulatory_decision | 16 | — | — | — | 0.023 | rejected — bimodal; sub-category fits in v2 |
| esports | 0 | — | — | — | — | skipped — no Tier-3 records |
The military_geopolitics fit (n=18, λ=0.241) supersedes the preliminary estimate (n=9, λ=0.306, half-life 2.3d) in arXiv:2605.02286. The preliminary value lies inside the new 95% CI; both estimates are statistically consistent.
Estimator
Maximum-likelihood estimator: λ̂ = 1 / τ̄. The 95% CI uses the chi-square quantile relation:
CI_95% = [ χ²(0.025, 2n) / (2n·τ̄), χ²(0.975, 2n) / (2n·τ̄) ]
Files
| File | Description |
|---|---|
data/hazard_rates_v1.json | Per-category fit records |
data/hazard_rates_v1.csv | Same data, CSV |
data/sample_market_ids.jsonl | Market IDs used per fit (for reproducibility) |
figures/hazard_fits.svg | Empirical CDF vs fitted exponential |
Quick start
import json, math
with open("data/hazard_rates_v1.json") as f:
fits = json.load(f)
mg = next(f for f in fits if f["category"] == "military_geopolitics")
lam = mg["lambda_hat"]
def S(tau_days):
return math.exp(-lam * tau_days)
print(f"P(event by 1 day): {1 - S(1):.3f}")
print(f"Half-life: {mg['half_life_days']:.1f} days")
Citation
@misc{nechepurenko2026hazard-rates-dataset,
title = {Polymarket Per-Category Exponential Hazard Rates},
author = {Nechepurenko, Maksym},
year = {2026},
publisher = {ForesightFlow / Devnull FZCO},
url = {https://github.com/ForesightFlow/datasets/tree/main/polymarket-hazard-rates},
note = {Version 1.0, CC-BY-4.0. Accompanies: ForesightFlow: An Information Leakage Score Framework for Prediction Markets (arXiv:2605.00493) and Empirical Evaluation of Deadline-Resolved Information Leakage (arXiv:2605.02286)}
}