File size: 3,244 Bytes
32f5a65 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | from __future__ import annotations
from pathlib import Path
import pandas as pd
from tests.gossis_helpers import write_structured_synthetic_gossis_dataset
from tests.test_mimic4_experiment import _write_synthetic_mimic4_csv
def test_summarize_score_distribution_shifts_computes_groupwise_ks() -> None:
from sepsis_mcp.appendix_score_diagnostics import summarize_score_distribution_shifts
frame = pd.DataFrame(
[
{"dataset": "demo", "model_type": "xgboost", "seed": 0, "split_kind": "calibration", "group": 0, "group_label": "low", "score": 0.05},
{"dataset": "demo", "model_type": "xgboost", "seed": 0, "split_kind": "calibration", "group": 0, "group_label": "low", "score": 0.10},
{"dataset": "demo", "model_type": "xgboost", "seed": 0, "split_kind": "calibration", "group": 1, "group_label": "high", "score": 0.80},
{"dataset": "demo", "model_type": "xgboost", "seed": 0, "split_kind": "calibration", "group": 1, "group_label": "high", "score": 0.85},
{"dataset": "demo", "model_type": "xgboost", "seed": 0, "split_kind": "test", "group": 0, "group_label": "low", "score": 0.06},
{"dataset": "demo", "model_type": "xgboost", "seed": 0, "split_kind": "test", "group": 1, "group_label": "high", "score": 0.95},
]
)
summary = summarize_score_distribution_shifts(frame)
assert {"dataset", "model_type", "seed", "group", "group_label", "pooled_ks", "calibration_vs_test_ks"} <= set(
summary.columns
)
assert set(summary["group_label"]) == {"low", "high"}
assert (summary["pooled_ks"] > 0.0).all()
def test_run_score_diagnostics_writes_expected_outputs(tmp_path: Path) -> None:
from sepsis_mcp.appendix_score_diagnostics import (
GossisScoreDiagnosticsConfig,
MimicScoreDiagnosticsConfig,
run_score_diagnostics,
)
gossis_root = write_structured_synthetic_gossis_dataset(tmp_path)
mimic_csv = _write_synthetic_mimic4_csv(tmp_path)
output_dir = tmp_path / "score-diagnostics"
paths = run_score_diagnostics(
output_dir=output_dir,
gossis_config=GossisScoreDiagnosticsConfig(
data_root=gossis_root,
min_hospital_admissions=100,
random_state_grid=(0,),
model_type_grid=("xgboost",),
),
mimic_config=MimicScoreDiagnosticsConfig(
csv_path=mimic_csv,
min_unit_size=10,
rotations=1,
max_assignments=1,
min_selection_group_rows=2,
model_type_grid=("xgboost",),
),
)
assert Path(paths["score_records"]).exists()
assert Path(paths["score_summary"]).exists()
assert Path(paths["score_figure"]).exists()
score_records = pd.read_csv(paths["score_records"])
score_summary = pd.read_csv(paths["score_summary"])
assert {"dataset", "model_type", "seed", "split_kind", "group", "group_label", "score"} <= set(score_records.columns)
assert {"dataset", "model_type", "group_label", "pooled_ks", "calibration_vs_test_ks"} <= set(score_summary.columns)
assert set(score_records["dataset"]) == {"gossis", "mimic4"}
assert set(score_records["split_kind"]) == {"calibration", "test"}
|