Chara Survival
Thermodynamic Graph Laplacian Survival Inference for Transcriptomic Oncology
A frozen 4,337-gene thermodynamic intersection signature that transfers across sequencing platforms — zero retraining required.
🌟 The Problem
Standard survival models — Cox proportional hazards, Random Survival Forests, DeepSurv — are trained on RNA-seq cohorts (typically TCGA) and collapse catastrophically when applied to microarray data (GEO). The cause is structural: uncorrected platform variance and feature distribution shift corrupt the learned risk landscape. The concordance index, already noisy at 0.50–0.55 on in-distribution data, degrades to random or sub-random when the platform changes.
This failure is not a modelling artefact. It is a physical problem — raw transcript counts do not encode the molecular interaction topology that determines biological function. Chara corrects this at the feature level, before training even begins.
💡 The Solution
Chara grounds gene expression features in thermodynamic graph Laplacians derived from MARTINI 3 coarse-grained molecular dynamics (MD) simulations. Specifically:
- MARTINI 3 MD trajectories are run for key oncogenic protein systems (KRAS, CMYC/MAX, PTPN11, MUT-TP53) across biological replicates.
- Exponential heat kernels are computed from the symmetrised graph Laplacian of the STRING protein–protein interaction network, weighted by MD-derived edge variances via the Chara exponential operator: $$W_{\text{Chara}}(i, j) = W_{\text{STRING}}(i, j) \cdot \exp\left(\tau \cdot Z(\sigma^2_{ij})\right)$$
- The resulting thermodynamic Laplacian representation produces a platform-invariant feature space via spectral heat diffusion $H_t = \exp(-tL)$ — the spectral geometry of molecular interaction rather than raw transcript abundance.
- A frozen CoxNet trained on TCGA-LUAD using these 4,337 thermodynamically-stabilised features (58 active regularized biomarkers) is applied directly to unseen cohorts without fine-tuning.
The result is a model that generalises across the RNA-seq ↔ microarray boundary as a matter of physical principle, not statistical luck.
🔬 Benchmark Performance
Evaluated zero-shot on GSE31210 (Affymetrix Human Genome U133 Plus 2.0, n = 226, completely held-out lung adenocarcinoma microarray cohort — never seen during training):
| Model | OOD C-Index | 1-Year AUC | 3-Year AUC | 5-Year AUC |
|---|---|---|---|---|
| Clinical Cox-PH (Age, Gender, Stage) | 0.5000 | 0.5000 | 0.5000 | 0.5000 |
| Random Survival Forest (RSF) | 0.4041 | 0.4175 | 0.3657 | 0.4842 |
| Elastic Net Coxnet (Raw 5,200 genes) | 0.5248 | 0.4664 | 0.4081 | 0.2428 |
| DeepSurv (Deep Neural Network) | 0.5537 | 0.5465 | 0.3937 | 0.3122 |
| Chara (Thermodynamic Laplacian) | 0.7311 | 0.7463 | 0.7826 | 0.8195 |
Chara achieves a +0.267 absolute improvement in OOD C-index over the next-best deep learning baseline, with monotonically improving time-horizon AUC — an unusual and clinically meaningful signature of robust calibration rather than threshold overfitting.
🚀 Quickstart: Python Package
Installation
pip install --upgrade chara-survival
1-Line Python Inference & Complete API
import chara
import pandas as pd
# 1. Load the frozen pretrained model (auto-fetches from Hugging Face Hub)
model = chara.load_model()
# 2. Ingest your patient cohort CSV (or load synthetic test cohort)
cohort_df = chara.load_sample_cohort(n_patients=12)
# 3. Generate 1-Click Structured Clinical Summary DataFrame
summary_df = model.predict_dataframe(cohort_df)
print(summary_df)
# Output columns: [Risk_Score, Hazard_Ratio, Risk_Stratification, Median_Survival, 1_Year_Survival_Prob, 3_Year_Survival_Prob, 5_Year_Survival_Prob]
# 4. Cohort Diagnostic Breakdown
cohort_stats = model.summarize_cohort(cohort_df)
print(cohort_stats)
# Output: {'Cohort_Size': 12, 'Mean_Risk_Score': 0.02, 'Mean_Hazard_Ratio': 1.14, 'High_Risk_Fraction': '25.0%', ...}
# 5. Single-Patient Clinical Prognosis
patient_prognosis = model.predict_patient(cohort_df.iloc[0])
print(patient_prognosis)
# 6. Native Harrell's Concordance Index (C-Index)
c_index = chara.concordance_index(
risk_scores=summary_df["Risk_Score"],
time=[12, 24, 36, 48, 60, ...],
event=[1, 0, 1, 0, 1, ...]
)
print(f"C-Index: {c_index:.4f}")
# 7. Plot Publication-Grade Kaplan-Meier Curves & Biomarkers
model.plot_survival(cohort_df, save_path="km_survival.png")
model.plot_biomarkers(top_n=10, save_path="biomarkers.png")
Direct Hugging Face Hub Loading
from huggingface_hub import hf_hub_download
import joblib
model_path = hf_hub_download(repo_id="SharonMelhi/chara-survival", filename="chara_model_4337.pkl")
bundle = joblib.load(model_path)
print(f"Loaded Chara bundle with {len(bundle['genes'])} features and {len(bundle['non_zero_genes'])} biomarkers.")
🌐 Interactive Web Portal & Comparison Sandbox
Try the live, zero-install interactive inference suite and multi-model benchmark sandbox:
👉 https://chara-frontend.vercel.app
🧬 Key Biomarkers & Hazard Drivers
The regularized signature isolates 58 key prognostic genes:
- Top Oncogenic Hazard Drivers ($\beta > 0$):
CCL20(+0.0642),DKK1(+0.0610),IGF2BP1(+0.0351),BARX1(+0.0328),SPRR1B(+0.0324). - Top Favorable / Protective Biomarkers ($\beta < 0$):
MS4A1(-0.0708, CD20 B-cell marker),FAIM2(-0.0524),FAM133A(-0.0470),SLC5A5(-0.0290).
📜 Citation
@software{Melhi_Chara_Survival_2026,
author = {Melhi, Sharon and Hungyo, Kharerin},
title = {Chara: Thermodynamic Graph Laplacian Survival Inference for Transcriptomic Oncology},
url = {https://github.com/Sharon-codes/Chara},
year = {2026},
publisher = {Computational and Physical Genomics Laboratory, Indian Institute of Technology Mandi}
}
👥 Authors & Lab
|
Dr. Kharerin Hungyo Principal Investigator Computational & Physical Genomics Lab Indian Institute of Technology Mandi kharerin@iitmandi.ac.in |
Sharon Melhi Computational Biologist Creator, Chara Survival LinkedIn · Email |
Special thanks to Khushi Mhamane for her constant encouragement, thoughtful discussions, and belief in this research from its earliest stages. — Sharon Melhi
📄 License
Released under the MIT License. © 2026 Sharon Melhi.
Metadata
Release files for chara-survival 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| chara_survival-0.2.2.tar.gz | 17.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| chara_survival-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.6 kB
Release files / chara_survival-0.2.2.tar.gz
| Download URL | chara_survival-0.2.2.tar.gz |
|---|---|
| Size | 17.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c4c3ea5ba419ebcb132ba2470a36b0d975c26687988e339632f7abbcd1eaec66
|
|
BLAKE2b-256 checksum How to use checksums |
39d410b3526e3236462d27978c67ec10bc8f3ddd2d65b4811a8bf50c57362da1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / chara_survival-0.2.2-py3-none-any.whl
| Download URL | chara_survival-0.2.2-py3-none-any.whl |
|---|---|
| Size | 14.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db24d771dba4952c44eba9081b0b3acb642535e4ed70974077571710b3d64719
|
|
BLAKE2b-256 checksum How to use checksums |
e4f491b0cfb58d1f82dfe163908afb055f933d7a7a6dde70133afc227796bc59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|