Held-out evaluation · Phase 5

Rural hospital closure risk

Predicting 1-to-2-year-ahead closure or conversion for U.S. rural hospitals from public CMS cost-report financials. This page reports the one-time evaluation on the 2019–2021 hold-out, a window the models never saw during development.

Hold-out window
2019–2021
Hospital-years
11,760
Closure events
6
Base rate
0.0510%
Generated
2026-07-27
01

Calibration integrity

Checked before anything else, because a broken calibrator silently invalidates every number below it.

Degenerate calibration detected

XGBoost produced a calibration map that collapsed the model's ranking. A near-constant predictor scores AUROC 0.5000 by construction, so the hold-out metrics for the affected models below measure the calibrator, not the model. This page was generated from artifacts that still carry the defect — re-run python run.py train evaluate and regenerate. The banner is the guard in tests/test_calibration.py doing its job, not a rendering error.

Isotonic maps are monotone, so they must not reorder scores and must keep enough distinct values to threshold on. Rank correlation below 0.95, or fewer than 10 distinct values, fails the guard in src/modeling/calibration.py.
ModelDistinct values Rank corr. vs rawShare at mode Verdict
XGBoost20.016100.0%collapsed
L2-penalized logistic270.99515.3%preserved
Discrete-time hazard170.98825.0%preserved
02

Hold-out performance

PR-AUC is the primary metric. At this base rate AUROC flatters a model that ranks a handful of positives well while flagging thousands of negatives.

One-time evaluation on 2019–2021. Hyperparameters were selected on ≤2018 folds only, asserted in tests/test_holdout_boundary.py.
ModelCV PR-AUC Hold-out PR-AUCAUROC BrierLift over base
Discrete-time hazard (survival)0.02180.00110.68330.0005302.2×
XGBoost (gradient-boosted trees)0.13130.00050.50000.0005161.0×
L2-penalized logistic0.03650.00090.70500.0005691.8×

An AUROC of exactly 0.5000 is highlighted. It is not a result — it is what a constant predictor returns, and it means the calibration audit above should be read first.

03

Where the real closures ranked

The question a summary metric cannot answer: of the 6 hospitals that actually closed, how near the top of the list did the model put them?

XGBoost

CCNYearRegionRankPercentile
1401432021Midwest2 of 11,760100.0
1600082020Midwest2 of 11,760100.0
1700742019Midwest2 of 11,760100.0
3401332021South2 of 11,760100.0
3900712021Northeast2 of 11,760100.0
4900982019South2 of 11,760100.0

L2-penalized logistic

CCNYearRegionRankPercentile
3401332021South1,433 of 11,76087.8
3900712021Northeast1,433 of 11,76087.8
4900982019South3,117 of 11,76073.5
1700742019Midwest3,117 of 11,76073.5
1401432021Midwest3,667 of 11,76068.8
1600082020Midwest4,787 of 11,76059.3

Discrete-time hazard

CCNYearRegionRankPercentile
1401432021Midwest2,120 of 11,76082.0
1700742019Midwest2,120 of 11,76082.0
3401332021South2,120 of 11,76082.0
3900712021Northeast2,120 of 11,76082.0
4900982019South2,120 of 11,76082.0
1600082020Midwest5,172 of 11,76056.0

Ranks, not scores. A calibrated probability of 0.4% sounds like nothing until you note the base rate is 0.051%.

04

Score distribution

40 bins, counts on a log scale so a single spike does not flatten the rest of the shape.

XGBoost
0.000% 25.000%
median
0.000%
95th
0.000%
distinct
2
L2-penalized logistic
0.000% 3.586%
median
0.209%
95th
0.877%
distinct
27
Discrete-time hazard
0.000% 5.056%
median
0.130%
95th
0.603%
distinct
17
05

Diagnostics

Interpretability, calibration, net benefit, and fairness slices.

SHAP summary plot ranking feature contributions for the XGBoost model
Feature contributions, XGBoost. Operating margin and occupancy rate lead, which matches the rural-distress literature.
Reliability diagram plotting predicted probability against observed frequency
Reliability after isotonic calibration. Deviation from the diagonal at the high-score end is expected with six positive events.
Decision curve plotting net benefit against threshold probability
Decision-curve analysis. Net benefit against a screening threshold, versus flagging everyone and flagging no one.
Bar chart of model performance broken out by US Census region
Performance by Census region.
Bar chart of model performance broken out by hospital ownership category
Performance by ownership category.
Bar chart of model performance broken out by hospital bed-size tier
Performance by bed-size tier. Read all three cautiously: subgroup counts are tiny.
06

How to read this

Sample size. 6 positive events in 11,760 rows. Every point estimate here carries wide uncertainty and none should be quoted without that qualifier.

Policy shock. The hold-out overlaps the pandemic. CARES Act and Provider Relief Fund transfers altered hospital finances in ways no pre-2019 training data encodes.

Screening, not prediction. Scores rank hospital-years by relative risk. They are not probabilities anyone should act on, and the model card lists the out-of-scope uses explicitly.

Historical, not current. All scores cover 1997–2021 and are published for reproducibility. They say nothing about any hospital's condition today.

Identifiers. Keyed by CMS Certification Number, a public identifier. Every input is public CMS data — HCRIS cost reports and the UNC Sheps Center closure list. No PII beyond public records.

Generated by python run.py dashboard (src/scoring/dashboard.py) from the artifacts in reports/modeling/. No JavaScript and no tracking. The only external request is a webfont from Google Fonts; the page renders correctly in a system serif without it.