Skip to main content

Risk Bridge banner

Risk Bridge

Documentation CI PyPI version License: Apache-2.0

Risk Bridge is a Python package for estimating transportable binary-risk prediction models when the available cohorts do not share identical covariate support or when observational clinic data is subject to selection bias and calibration drift.

It combines propensity-score matching, reference-cohort calibration, joint maximum likelihood estimation, and constrained maximum likelihood estimation (cMLE) into reproducible simulation and user-data workflows.

Package title: Risk Bridging through Constrained MLE.

📖 Documentation Website: https://saehwanpark.github.io/risk-bridge/


Motivation

In clinical risk prediction, models fitted on specialized clinic registries or electronic health record (EHR) databases often fail when deployed to external target populations. This calibration breakdown occurs because:

  • Covariate distributions $P(X)$ drift across health systems.
  • High-value intermediate risk markers $Z$ (e.g. imaging, biopsies, or genomic scores) are measured in the source study but missing in the broader target registry.
  • Clinic cohorts reflect non-random testing, referral enrichment, and selection bias.

Standard unconstrained Maximum Likelihood Estimation (MLE) on source data leads to miscalibrated risk predictions in the target cohort. Risk Bridge provides a principled way to constrain model fitting using calibration information from a representative external reference study, restoring well-calibrated probabilities.


Foundation Papers

  • Cao, Y., Ma, W., Zhao, G., McCarthy, A. M., & Chen, J. (2024). A constrained maximum likelihood approach to developing well-calibrated models for predicting binary outcomes. Lifetime Data Analysis, 30(3), 624–648. DOI: 10.1007/s10985-024-09623-6

  • Wang, L., & Chen, J. (2026). Developing Accurate Risk Prediction Using Biased Electronic Health Record Data. Manuscript in preparation.


Key Features

  • Simulated & Applied Workflows: Built-in Scenario 1–3 data generators for methodological experiments and a streamlined pipeline for prepared user CSV datasets.
  • Dual Analysis Paths: Evaluates Propensity Score Matched (PSM) source samples alongside unadjusted Random Sampling (RS) baselines.
  • Hierarchical Solver Ladder: Warm starts from unconstrained BFGS, transitions to interior-point constrained optimization (trust-constr) with analytic gradients and constraint Jacobians, and falls back to SLSQP when needed.
  • Rigorous Calibration Diagnostics: Exports Calibration-in-the-Large (CITL), calibration slope, observed-to-expected (O/E) ratio, Brier score, and stratum-specific moment residuals.
  • Reproducible Output Contract: Strict, versioned tabular output contract (schema_version=1.1.0) with comprehensive execution metadata and an environment.json sidecar.
  • Public Python API & CLI: High-level typed configurations (UserDataRunConfig, RunConfig) and the risk-bridge command-line tool.

Installation

From PyPI (Standard Installation)

uv add risk-bridge
# or: pip install risk-bridge

The public-safe reproduction case runners are included in the wheel and source distribution. After installation, invoke them directly with python -m cases.<case>.<runner>.

From Source Repository

git clone https://github.com/SaehwanPark/risk-bridge.git
cd risk-bridge
uv sync --locked

Run the test suite and verify typing:

uv run pytest
uv run basedpyright

Quickstart

1. Simulated Scenario Run (CLI)

uv run risk-bridge \
  --mode simulated \
  --scenario 1 \
  --nsim 2 \
  --n-target 1000 \
  --n-source 500 \
  --n-reference 1000 \
  --sample-size 100 \
  --output-root data \
  --run-label quickstart

2. User-Data Cohort Run (CLI)

uv run risk-bridge \
  --mode user-data \
  --target-csv examples/target.csv \
  --source-csv examples/source.csv \
  --reference-csv examples/reference.csv \
  --x-cols X1,X2,X3,X4 \
  --y-col caseY \
  --z-origin-col zOrigin \
  --z-cat-col zCat \
  --sample-size 500 \
  --nsim 1 \
  --output-root data \
  --run-label user_data

For a five-minute walkthrough, see QUICKSTART.md or the Online Quickstart Tutorial.


Library Usage

from pathlib import Path
import polars as pl
from risk_bridge import UserDataRunConfig, UserDataSchema, run_user_data

target_df = pl.read_csv("examples/target.csv")
source_df = pl.read_csv("examples/source.csv")
reference_df = pl.read_csv("examples/reference.csv")

schema = UserDataSchema(
    x_cols=("X1", "X2", "X3", "X4"),
    y_col="caseY",
    z_origin_col="zOrigin",
    z_cat_col="zCat",
)

config = UserDataRunConfig(
    target_df=target_df,
    source_df=source_df,
    reference_df=reference_df,
    schema=schema,
    sample_size=500,
    output_root="data",
    run_label="applied_run",
)

output_dir: Path = run_user_data(config)
print(f"Results written to: {output_dir}")

Outputs

Each run writes a timestamped directory under output_root containing:

  • final/run_metadata.csv: Full configuration parameters, seeds, and schema version (1.1.0).
  • final/fit_diagnostics.csv: Optimizer convergence status, objective values, and feasibility violations.
  • final/est_cml_psm.csv: cMLE parameter estimates ($\alpha, \beta_X, \beta_Z, \gamma_0, \gamma_X, \sigma$).
  • final/calibration_metrics.csv: Target cohort CITL, slope, O/E ratio, and Brier score.
  • final/calibration_residuals.csv: Stratum-specific post-fit calibration residuals.
  • final/roc_metrics.csv: Area under the ROC curve (AUC).
  • final/accuracy_metrics.csv: Sensitivity, specificity, and precision at target FPR.
  • final/environment.json: Reproducibility metadata and numerical tolerance contract.

Replication Cases

Risk Bridge ships with four privacy-safe reproduction case studies:

  • python -m cases.numerical_validation.run_suite
  • python -m cases.external_calibration_validation.run_suite --profile smoke --condition matched
  • python -m cases.synthetic_transport_example.run_case
  • python -m cases.runtime_support_scaling.run_scaling --profile smoke

See REPRODUCTION.md and the Online Reproduction Runbook for instructions.


Documentation Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

risk_bridge-1.0.5.tar.gz (93.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

risk_bridge-1.0.5-py3-none-any.whl (89.5 kB view details)

Uploaded Python 3

File details

Details for the file risk_bridge-1.0.5.tar.gz.

File metadata

  • Download URL: risk_bridge-1.0.5.tar.gz
  • Upload date:
  • Size: 93.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for risk_bridge-1.0.5.tar.gz
Algorithm Hash digest
SHA256 d9b6279ac357da1476de54f3a417eaab7079daf0e75c7ed38cd1383b0a6828f2
MD5 79278037a1702a70ac968bbcddbff530
BLAKE2b-256 11c3563a72063c3ddd13352dd6a7e4323dc509dc8277195012cd011ea14fcfaf

See more details on using hashes here.

File details

Details for the file risk_bridge-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: risk_bridge-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 89.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for risk_bridge-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 432b3266c9063e1f6292e28a62c31423d0c81fd1a53fb3b21fc030e6959b0931
MD5 c0847c4368bf79106c61cb58d5551512
BLAKE2b-256 bb48b3cf7b9f6331281274436262baf0315622499faa4c35590c33de5e187296

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page