--- license: mit tags: - medical-imaging - chest-x-ray - insurance-prediction - fairness - bias-detection - mimic-cxr datasets: - mimic-cxr --- # Insurance Paper — Pretrained Weights Pretrained checkpoints for **"The Unawareness of AI Looking for Health Insurance Type from Normal Chest X-ray Images"**. All models were trained on [MIMIC-CXR-JPG v2.0.0](https://physionet.org/content/mimic-cxr-jpg/2.0.0/) with seed=123. MedGemma experiments use the MedGemma-refined subset (`mimic-cxr-gemma`), containing only normal CXRs filtered by MedGemma. ## Models | Model | Architecture | Params | File size | |-------|-------------|--------|-----------| | MedMamba | VSSM_DoubleLinear / VSSM_Double_addDemothen2 | ~29M | ~115 MB | | DenseNet121 | DenseNetWithDoubleLinear / _addDemothen2 | ~8M | ~59 MB | | Swin Transformer V2 | SwinTDoubleLinear / _addDemothen2 | ~50M | ~218 MB | ## Repository Structure ``` insurance_paper_weights/ ├── exp0/ # Baselines (CheXpert / MIMIC) │ ├── CheXpert/ │ │ └── densenet.pt, mamba.pt, swinTF.pt │ └── MIMIC/ │ └── densenet.pt, mamba.pt, swinTF.pt │ ├── exp0-2/ # Random Initialization │ └── swinTF_random.pt │ ├── exp1/ # Patch keep/remove — DenseNet │ ├── densenet_keep/ │ │ └── patch1.pt ... patch9.pt │ └── densenet_remove/ │ └── patch1.pt ... patch9.pt │ ├── exp1-1/ # Patch keep/remove — MedMamba │ ├── mamba_keep/ │ │ └── patch1.pt ... patch9.pt │ └── mamba_remove/ │ └── patch1.pt ... patch9.pt │ ├── exp1-2/ # Patch keep/remove — DenseNet + Swin Transformer │ ├── densenet_keep/ │ │ └── patch1.pt ... patch9.pt │ ├── densenet_remove/ │ │ └── patch1.pt ... patch9.pt │ ├── swinTF_keep/ │ │ └── patch1.pt ... patch9.pt │ └── swinTF_remove/ │ └── patch1.pt ... patch9.pt │ ├── exp2/ # Resolution — MedMamba │ └── mamba_2.pt ... mamba_224.pt (8 files) │ ├── exp2-1/ # Resolution — DenseNet │ └── densenet_2.pt ... densenet_224.pt (8 files) │ ├── exp2-2/ # Resolution — Swin Transformer │ └── swinTF_4.pt ... swinTF_224.pt (7 files) │ ├── exp3/ # Demographics — MedMamba │ ├── sex.pt, age.pt, race.pt │ ├── sexage.pt, sexrace.pt, agerace.pt │ └── sexagerace.pt │ ├── exp3-1/ # Demographics — DenseNet │ └── (same 7 files) │ ├── exp3-2/ # Demographics — Swin Transformer │ └── (same 7 files) │ ├── exp4/ # Frequency filtering — MedMamba │ ├── highpass/ │ │ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt │ └── lowpass/ │ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt │ ├── exp4-1/ # Frequency filtering — Swin Transformer │ ├── highpass/ └── lowpass/ │ ├── exp4-2/ # Frequency filtering — DenseNet │ ├── highpass/ └── lowpass/ │ ├── exp2_medgemma/ # MedGemma Resolution — MedMamba │ └── mamba_2.pt ... mamba_224.pt (8 files) │ ├── exp2-1_medgemma/ # MedGemma Resolution — DenseNet │ └── densenet_2.pt ... densenet_224.pt (8 files) │ ├── exp2-2_medgemma/ # MedGemma Resolution — Swin Transformer │ └── swinTF_4.pt ... swinTF_224.pt (7 files) │ ├── exp3_medgemma/ # MedGemma Demographics — MedMamba │ ├── sex.pt, age.pt, race.pt │ ├── sexage.pt, sexrace.pt, agerace.pt │ └── sexagerace.pt │ ├── exp3-1_medgemma/ # MedGemma Demographics — DenseNet │ └── (same 7 files) │ ├── exp3-2_medgemma/ # MedGemma Demographics — Swin Transformer │ └── (same 7 files) │ ├── exp4_medgemma/ # MedGemma Frequency filtering — MedMamba │ ├── highpass/ │ │ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt │ └── lowpass/ │ └── 1Hz.pt, 5Hz.pt, ... 400Hz.pt │ ├── exp4-1_medgemma/ # MedGemma Frequency filtering — Swin Transformer │ ├── highpass/ └── lowpass/ │ └── exp4-2_medgemma/ # MedGemma Frequency filtering — DenseNet ├── highpass/ └── lowpass/ ``` ## Checkpoint Table > **Note:** All experiments are trained and available. | Experiment | Description | Model | Config | # Checkpoints | HF path | Available? | |------------|-------------|-------|--------|---------------|---------|------------| | **exp0** | Baselines (CheXpert/MIMIC) | All 3 | — | 6 | `exp0/{dataset}/{model}.pt` | Yes | | **exp0-2** | Random Initialisation | SwinT | — | 1 | `exp0-2/swinTF_random.pt` | Yes | | **exp1** | Patch keep/remove | DenseNet | 9 patches x 2 | 18 | `exp1/densenet_{keep/remove}/patch{N}.pt` | Yes | | **exp1-1** | Patch keep/remove | MedMamba | 9 patches x 2 | 18 | `exp1-1/mamba_{keep/remove}/patch{N}.pt` | Yes | | **exp1-2** | Patch keep/remove | SwinT | 9 patches x 2 | 18 | `exp1-2/swinTF_{keep/remove}/patch{N}.pt` | Yes | | **exp2** | Resolution | MedMamba | 8 resolutions | 8 | `exp2/mamba_{N}.pt` | Yes | | **exp2-1** | Resolution | DenseNet | 8 resolutions | 8 | `exp2-1/densenet_{N}.pt` | Yes | | **exp2-2** | Resolution | SwinT | 7 resolutions | 7 | `exp2-2/swinTF_{N}.pt` | Yes | | **exp3** | Demographics (addDemo) | MedMamba | 7 demo combos | 7 | `exp3/{combo}.pt` | Yes | | **exp3-1** | Demographics (addDemo) | DenseNet | 7 demo combos | 7 | `exp3-1/{combo}.pt` | Yes | | **exp3-2** | Demographics (addDemo) | SwinT | 7 demo combos | 7 | `exp3-2/{combo}.pt` | Yes | | **exp4** | Freq filtering (HP+LP) | MedMamba | 8 freq x 2 | 16 | `exp4/{highpass,lowpass}/{F}Hz.pt` | Yes | | **exp4-1** | Freq filtering (HP+LP) | SwinT | 8 freq x 2 | 16 | `exp4-1/{highpass,lowpass}/{F}Hz.pt` | Yes | | **exp4-2** | Freq filtering (HP+LP) | DenseNet | 8 freq x 2 | 16 | `exp4-2/{highpass,lowpass}/{F}Hz.pt` | Yes | **Original: 153 checkpoints** ### MedGemma Experiments (mimic-cxr-gemma dataset) | Experiment | Description | Model | Config | # Checkpoints | HF path | Available? | |------------|-------------|-------|--------|---------------|---------|------------| | **exp2** | Resolution | MedMamba | 8 resolutions | 8 | `exp2_medgemma/mamba_{N}.pt` | Yes | | **exp2-1** | Resolution | DenseNet | 8 resolutions | 8 | `exp2-1_medgemma/densenet_{N}.pt` | Yes | | **exp2-2** | Resolution | SwinT | 7 resolutions | 7 | `exp2-2_medgemma/swinTF_{N}.pt` | Yes | | **exp3** | Demographics (addDemo) | MedMamba | 7 demo combos | 7 | `exp3_medgemma/{combo}.pt` | Yes | | **exp3-1** | Demographics (addDemo) | DenseNet | 7 demo combos | 7 | `exp3-1_medgemma/{combo}.pt` | Yes | | **exp3-2** | Demographics (addDemo) | SwinT | 7 demo combos | 7 | `exp3-2_medgemma/{combo}.pt` | Yes | | **exp4** | Freq filtering (HP+LP) | MedMamba | 8 freq x 2 | 16 | `exp4_medgemma/{highpass,lowpass}/{F}Hz.pt` | Yes | | **exp4-1** | Freq filtering (HP+LP) | SwinT | 8 freq x 2 | 16 | `exp4-1_medgemma/{highpass,lowpass}/{F}Hz.pt` | Yes | | **exp4-2** | Freq filtering (HP+LP) | DenseNet | 8 freq x 2 | 16 | `exp4-2_medgemma/{highpass,lowpass}/{F}Hz.pt` | Yes | **MedGemma: 92 checkpoints** **Total: 153 original + 92 MedGemma = 245 unique checkpoints** - **Demo combos** (exp3): `sex`, `age`, `race`, `sexage`, `sexrace`, `agerace`, `sexagerace` - **Frequencies** (exp4): 1, 5, 10, 25, 50, 100, 200, 400 Hz - **Resolutions** (exp2): 2, 4, 7, 14, 28, 56, 112, 224 - **Patches** (exp1): 1-9, corresponding to a 3x3 grid on 448x448 images (left-to-right, top-to-bottom) ## Usage ### Download all weights ```bash git lfs install git clone https://huggingface.co/InsurancePrediction/insurance_paper_weights ``` ### Download a single experiment ```bash # Using huggingface_hub from huggingface_hub import snapshot_download snapshot_download( repo_id="InsurancePrediction/insurance_paper_weights", allow_patterns="exp3-1/*", local_dir="./weights" ) ``` ### Load a checkpoint ```python import torch # Base model (exp1, exp4) from model import DenseNetWithDoubleLinear model = DenseNetWithDoubleLinear(num_classes=2, dropout_prob=0) ckpt = torch.load("exp1-2/densenet_keep/patch1.pt", map_location="cpu") model.load_state_dict(ckpt["model_state_dict"]) # Demographics model (exp3) from MedMamba.MedMamba import VSSM_Double_addDemothen2 model = VSSM_Double_addDemothen2(num_classes=2, demo_size=5) # e.g. sexage -> 2+3=5 ckpt = torch.load("exp3/sexage.pt", map_location="cpu") model.load_state_dict(ckpt["model_state_dict"]) ``` ### Mapping from HF paths to original training paths Weights in JAMA_codes were trained on ORCD. Weights marked with (*) were trained by Chi-Yu and uploaded directly — no JAMA_codes equivalent. | HF path | Original training path | |---------|----------------------| | `exp0/{dataset}/{model}.pt` | Trained by Chi-Yu | | `exp0-2/swinTF_random.pt` | Trained by Chi-Yu | | `exp1-1/mamba_keep/patch{N}.pt` | Trained by Chi-Yu | | `exp1-1/mamba_remove/patch{N}.pt` | `JAMA_codes/exp1-1/Rand123/Rand123_patchidx{N}_exp1-1_model_aucbest.pt` | | `exp1-2/densenet_keep/patch{N}.pt` | `JAMA_codes/densenet_keep/Rand123/Rand123_patchidx{N}_densenet_keep_model_aucbest.pt` | | `exp1-2/densenet_remove/patch{N}.pt` | Trained by Chi-Yu | | `exp1-2/swinTF_keep/patch{N}.pt` | `JAMA_codes/swinTF_keep/Rand123/Rand123_patchidx{N}_swinTF_keep_model_aucbest.pt` | | `exp1-2/swinTF_remove/patch{N}.pt` | `JAMA_codes/swinTF_remove/Rand123/Rand123_patchidx{N}_swinTF_remove_model_aucbest.pt` | | `exp2/mamba_{N}.pt` | Trained by Chi-Yu | | `exp2-1/densenet_{N}.pt` | Trained by Chi-Yu | | `exp2-2/swinTF_{N}.pt` | Trained by Chi-Yu | | `exp3/{combo}.pt` | `JAMA_codes/{combo}_weights/mamba/sunday/Rand123/Rand123_{combo}_mamba_sunday_model_aucbest.pt` | | `exp3-1/{combo}.pt` | `JAMA_codes/{combo}_weights/densenet/sunday/Rand123/Rand123_{combo}_densenet_sunday_model_aucbest.pt` | | `exp3-2/{combo}.pt` | `JAMA_codes/{combo}_weights/swin/sunday/Rand123/Rand123_{combo}_swin_sunday_model_aucbest.pt` | | `exp4/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes/{F}{HighPass,LowPass}_weights/mamba/{direction}/Rand123/...` | | `exp4-1/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes/{F}{HighPass,LowPass}_swin_freq/Rand123/...` | | `exp4-2/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes/{F}{HighPass,LowPass}_densenet_freq/Rand123/...` | | `exp2_medgemma/mamba_{N}.pt` | `JAMA_codes_medgemma/{N}_mg_exp2/mamba/Rand123/...` | | `exp2-1_medgemma/densenet_{N}.pt` | `JAMA_codes_medgemma/{N}_mg_exp2/densenet/Rand123/...` | | `exp2-2_medgemma/swinTF_{N}.pt` | `JAMA_codes_medgemma/{N}_mg_exp2/swinTF/Rand123/...` | | `exp3_medgemma/{combo}.pt` | `JAMA_codes_medgemma/{combo}_mg_exp3/mamba/Rand123/...` | | `exp3-1_medgemma/{combo}.pt` | `JAMA_codes_medgemma/{combo}_mg_exp3-1/densenet/Rand123/...` | | `exp3-2_medgemma/{combo}.pt` | `JAMA_codes_medgemma/{combo}_mg_exp3-2/swinTF/Rand123/...` | | `exp4_medgemma/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes_medgemma/{F}{HighPass,LowPass}_mg_exp4/mamba/Rand123/...` | | `exp4-1_medgemma/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes_medgemma/{F}{HighPass,LowPass}_mg_exp4-1/swinTF/Rand123/...` | | `exp4-2_medgemma/{highpass,lowpass}/{F}Hz.pt` | `JAMA_codes_medgemma/{F}{HighPass,LowPass}_mg_exp4-2/densenet/Rand123/...` | ## Bootstrap Evaluation Status All 153 original bootstrap evaluations complete (n_bootstrap=20, sample_size=1000, seed=42). | Experiment | Evaluations | Status | |-----------|-------------|--------| | **exp0** | 6 (3 models x 2 datasets) | Done | | **exp0-2** | 1 | Done | | **exp1-1** | 18 (mamba keep + remove x 9 patches) | Done | | **exp1-2** | 36 (densenet keep/remove + swinTF keep/remove x 9 patches) | Done | | **exp2/2-1/2-2** | 23 (8+8+7 resolutions) | Done | | **exp3/3-1/3-2** | 21 (3 models x 7 combos) | Done | | **exp4/4-1/4-2** | 48 (3 models x 2 directions x 8 freqs) | Done | ### MedGemma Bootstrap Status | Experiment | Evaluations | Status | |-----------|-------------|--------| | **MedGemma exp2/2-1/2-2** | 23 (8+8+7 resolutions) | Done | | **MedGemma exp3/3-1/3-2** | 21 (3 models x 7 combos) | Done | | **MedGemma exp4/4-1/4-2** | 48 (3 models x 2 directions x 8 freqs) | Done | Results: `bootstrap_results/` in the [code repository](https://github.com/altis5526/Insurance-Project-Journal-version-). ## Training Details - **Dataset (original)**: MIMIC-CXR-JPG v2.0.0 (normal frontal chest X-rays) - **Dataset (MedGemma)**: mimic-cxr-gemma (MedGemma-refined, normal CXRs only) - **Task**: Binary classification — Private vs. Public/Government insurance - **Image size**: 448 x 448 - **Seed**: 123 - **Selection**: Best validation AUC checkpoint ## Citation ```bibtex @inproceedings{chen2025unawareness, title={The Unawareness of AI Looking for Health Insurance Type from Normal Chest X-ray Images}, author={Chen, Chi-Yu and others}, year={2025} } ``` ## Code [Code Repository](https://github.com/altis5526/Insurance-Project-Journal-version-)