A calibrated, empirically-grounded probability that any US congressional bill becomes law.
The Bill Pass Index is a deterministic, explainable model that outputs an integer 0–100 representing the probability that a given bill in the US Congress becomes law. Unlike ad-hoc stage-based guesses, every weight in the model is calibrated against the actual outcomes of 37,132 bills from the 117th and 118th Congress. Across a held-out predictive backtest of 5,340 bills, the model achieves AUC 0.7378 with near-perfect calibration in the dense 5–14% probability band (predicted 12.2%, actual 12.29%).
Approximately 10,000–20,000 bills are introduced per US Congress. The vast majority (>98%) die in committee. A small tail (<2%) become law. Competitor products either ignore bill-passage probability entirely or use hand-coded stage priors (e.g., "committee bills pass 22% of the time") that are not backed by any empirical distribution.
CASE statement that assigned bills in reported
state a 71% pass probability. Against 118th Congress ground truth, the actual rate was
10.67%. A 5.7× overconfidence bias. v3.1 is calibrated against ground truth.
BPI reframes bill-passage prediction as a calibrated probability-ranking task: given a bill's current pipeline state, pipeline history, and structural features, output a probability such that bills scored at p% actually pass at a rate approximating p%.
The model reads six features per bill:
| Feature | Source | What it captures |
|---|---|---|
govtrack_status | GovTrack.us /api/v2/bill | Current pipeline state (e.g. reported, pass_over_house, conference, enacted_signed). |
is_alive | GovTrack.us | Congressional life-cycle flag. False for bills Congress has declared dead. |
states_visited[] | bill_major_actions table | Array of every pipeline state the bill has ever entered. A bill that once passed the House carries that signal forward. |
related_bill_count | GovTrack.us | Number of companion bills in the other chamber. Empirically monotonic in passage rate. |
introduced_date | GovTrack.us | When Congress first received the bill. Penalizes very new (under 14 days). |
latest_action_date | bills table (Congress.gov) | Last recorded action. Penalizes bills with no movement in 180+ days. |
All six features are drawn from approved direct connections to federal data systems. No scraped sources. No inferred metadata. Every input is auditable at the source.
Simplified PL/pgSQL pseudocode (full function: calculate_pass_likelihood_v3):
[1, 95]. We never claim 100% certainty for a bill that hasn't yet become law.conference that previously passed both chambers (PASSED:BILL) gets the stronger signal (95), not the weaker conference base (50).
Every state prior is derived from ground-truth outcomes. For each pipeline state S,
we compute P(enacted | bill ever entered S) across all 117th + 118th Congress
bills with terminal outcomes.
| Pipeline state | N bills | Actual P(enact) | v1 used | v3.1 base |
|---|---|---|---|---|
PASSED:BILL (both chambers cleared) | 285 | 95.44% | 84% | 95 |
PASS_BACK:SENATE | 13 | 92.31% | 34% | 85 |
PASS_BACK:HOUSE | 12 | 75.00% | 34% | 75 |
PASS_OVER:SENATE | 297 | 30.64% | 32% | 43 |
PASS_OVER:HOUSE | 703 | 26.03% | 32% | 30 |
REPORTED (out of committee) | 1,827 | 10.67% | 71% | 12 |
introduced (no subsequent action) | 16,519 | 0.50% | 4% | 1 |
Some v3.1 base values (e.g. PASS_OVER:SENATE at 43) differ slightly from single-congress empirical rates. These were adjusted against combined 117+118 data where sample sizes are larger (43% combined vs 30.64% from 118th alone).
| Companion bills | N bills | Pass rate | Lift vs base |
|---|---|---|---|
| 0 | 9,895 | 0.79% | 1.0× |
| 1 | 7,108 | 1.96% | 2.5× |
| 2 | 1,228 | 2.44% | 3.1× |
| 3–4 | 884 | 1.92% | 2.4× |
| 5–9 | 146 | 2.74% | 3.5× |
| 10–19 | 27 | 7.41% | 9.4× |
| 20+ | 27 | 14.81% | 18.7× |
A naive backtest is trivial: score each 118th Congress bill, compare against outcomes,
report AUC. Because our model takes govtrack_status as input and terminal states
map directly to outcomes, this produces AUC = 1.000 — which proves nothing.
The honest backtest is a predictive test: for each labeled bill, simulate scoring the bill at the moment it first entered a non-terminal state. At that moment, we know: the state just entered, states visited before it, companion count, introduction date. We do not know the final outcome. The model's score is then compared to the eventual terminal outcome (enacted = 1, died = 0).
blind_terminal=True flag strips all post-outcome information so the model must predict from pipeline state alone.
AUC measures ranking skill. Calibration is the stronger test: when the model says 30%, do 30% of those bills actually pass?
| Predicted probability bucket | N bills | Avg predicted | Actual pass rate | Calibration |
|---|---|---|---|---|
| 0 – 4% | 1,324 | 2.4% | 0.00% | ✓ Excellent |
| 5 – 14% | 3,255 | 12.2% | 12.29% | ✓ Essentially perfect |
| 15 – 24% | 101 | 17.6% | 7.92% | ⚠ Overconfident (known) |
| 25 – 34% | 638 | 29.5% | 34.95% | ✓ Well-calibrated |
| 35 – 54% | 22 | 38.5% | 36.36% | ✓ Well-calibrated |
The 15–24% bucket shows 7.92% actual pass vs 17.6% predicted — the only bucket where the
model is meaningfully miscalibrated. Root-cause analysis points to bills in REPORTED state
with moderate staleness accumulating bonus points they shouldn't. Planned fix: dampen the
REPORTED prior when latest_action_date exceeds 180 days.
Only 22 samples fall in the 35–54% bucket, and 0 samples in the 55%+ bands below terminal.
Live-bill predictions in these higher ranges are therefore extrapolated from smaller calibration
evidence. We address this by clamping live bills to [1, 95].
Our internal bills.bill_stage column is collection-time-stale; many bills in our
database show stage = INTRODUCED even after enactment. GovTrack's live govtrack_status
is the authoritative signal. A v3 pipeline feeding stale bill_stage as a feature
would produce AUC near 0.06 (worse than random). This is an implementation pitfall, not a model flaw.
Bills whose current govtrack_status is already terminal (enacted, killed, failed)
are not predictions — they are known outcomes. The model reports 100 / 2 / 3 for these cases.
When citing "AUC 0.7378," we refer exclusively to the predictive backtest with
blind_terminal=True.
Our daily snapshot table (pass_likelihood_snapshots, started 2026-04-17) records
v3.1 scores for every live 119th Congress bill. As these bills reach terminal outcomes over
the next 12–24 months, we will publish prospective AUC and calibration measurements entirely
independent of the 117+118 training set.
| Version | Date | Change |
|---|---|---|
v1 | — | Hardcoded CASE statement priors. 5.7× overconfident at REPORTED stage. |
v2 | 2026-04-16 | Replaced v1 priors with GovTrack-aware logic. Still used guessed weights, not empirical. |
v3.0 | 2026-04-17 | Priors calibrated against 118th Congress ground truth. AUC 0.7189. |
v3.1 | 2026-04-17 | Combined 117+118 priors. PASS_OVER:SENATE 30→43, PASS_OVER:HOUSE 26→30. AUC 0.7378. |
calculate_pass_likelihood_v3(govtrack_status, is_alive, related_bill_count, introduced_date, latest_action_date, states_visited[])
get_pass_likelihood(bill_number, congress)
get_pass_likelihood_v3_bulk(bill_numbers[], congress)
get_pass_likelihood_breakdown(bill_number, congress)
get_whale_opportunities(congress, min_pass, min_ratio, limit)
GovGreed Bill Pass Index is for informational purposes. Not financial advice. Congressional
outcomes depend on many unmodeled factors (floor schedule, leadership decisions, current
events). Past calibration is not a guarantee of prospective accuracy.
Owner: IPS Innovative Platform Solutions · team@mmamodel.ai · Published 2026-04-17.