diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/BCO.json b/flask_backend/models/BRCA_DFS_Recurrence_v1/BCO.json
new file mode 100644
index 00000000..f37fdf23
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/BCO.json
@@ -0,0 +1,229 @@
+{
+ "object_id": "https://github.com/GW-HIVE/PredictMod/BCO/BRCA_DFS_LogReg_SMOTE/1.0",
+ "spec_version": "https://w3id.org/ieee/ieee-2791-schema/2791object.json",
+ "etag": "brca-dfs-logreg-smote-v1",
+ "provenance_domain": {
+ "name": "TCGA-BRCA Disease-Free Survival Recurrence Prediction Model",
+ "version": "1.0.0",
+ "review": [],
+ "contributors": [
+ {
+ "name": "Aryan Dhiren Jagani",
+ "affiliation": "The George Washington University, HIVE Lab",
+ "contribution": ["createdBy", "authoredBy"],
+ "email": "aryanjagani2024@gmail.com"
+ },
+ {
+ "name": "Lori Krammer",
+ "affiliation": "The George Washington University, HIVE Lab",
+ "contribution": ["fundedBy"],
+ "email": "lorikrammer@gwu.edu"
+ },
+ {
+ "name": "Pat McNeely",
+ "affiliation": "The George Washington University, HIVE Lab",
+ "contribution": ["fundedBy"]
+ }
+ ],
+ "license": "CC-BY-4.0",
+ "created": "2026-06-15T00:00:00Z",
+ "modified": "2026-07-26T00:00:00Z",
+ "derived_from": "https://github.com/GW-HIVE/PredictMod",
+ "obsolete_after": ""
+ },
+ "usability_domain": [
+ "Predicts disease-free survival (DFS) recurrence or progression risk for breast cancer patients using clinical variables (age, AJCC tumor stage, ER/PR/HER2 receptor status) and mutation status for 12 genes highlighted in the 2012 TCGA breast cancer study.",
+ "Intended as a research and educational demonstration of an ML modeling pipeline for the PredictMod volunteership project, not as a validated clinical decision support tool.",
+ "Trained on 895 patients from the TCGA-BRCA cohort (cBioPortal export) with 97 recurrence/progression events, so predictions carry meaningful statistical uncertainty and should not be used to guide real patient care.",
+ "The target label (DFS_STATUS) is a binary snapshot of outcome status, not a time-to-event variable, so the model does not account for right-censoring in patient follow-up (see Limitations below and section 4 of brca_dfs_model.ipynb)."
+ ],
+ "description_domain": {
+ "keywords": [
+ "breast cancer",
+ "TCGA-BRCA",
+ "disease-free survival",
+ "recurrence prediction",
+ "machine learning",
+ "logistic regression",
+ "SMOTE",
+ "class imbalance",
+ "cBioPortal",
+ "SVM"
+ ],
+ "xref": [
+ {
+ "namespace": "pubmed",
+ "name": "Comprehensive molecular portraits of human breast tumors",
+ "ids": ["23000897"]
+ },
+ {
+ "namespace": "cbioportal",
+ "name": "TCGA Breast Invasive Carcinoma (TCGA, PanCancer Atlas)",
+ "ids": ["brca_tcga"]
+ }
+ ],
+ "platform": ["scikit-learn", "imbalanced-learn"],
+ "pipeline_steps": [
+ {
+ "step_number": 1,
+ "name": "Data extraction and harmonization",
+ "description": "Merge TCGA-BRCA clinical patient data, clinical sample data, and mutation calls (data_clinical_patient.txt, data_clinical_sample.txt, data_mutations.txt) into one ML-ready table, keyed on PATIENT_ID, and encode a 12-gene binary mutation matrix.",
+ "input_list": [
+ {"uri": {"filename": "brca_tcga/data_clinical_patient.txt"}},
+ {"uri": {"filename": "brca_tcga/data_clinical_sample.txt"}},
+ {"uri": {"filename": "brca_tcga/data_mutations.txt"}}
+ ],
+ "output_list": [
+ {"uri": {"filename": "breast_cancer_ml_eda.csv"}}
+ ]
+ },
+ {
+ "step_number": 2,
+ "name": "Data quality review",
+ "description": "Check for missing values, zero-variance columns, and category-level anomalies (ambiguous tumor stage labels, non-breast-carcinoma CANCER_TYPE entries) before modeling.",
+ "input_list": [{"uri": {"filename": "breast_cancer_ml_eda.csv"}}],
+ "output_list": [{"uri": {"filename": "brca_dfs_model.ipynb"}}]
+ },
+ {
+ "step_number": 3,
+ "name": "Target construction",
+ "description": "Convert the text field DFS_STATUS into a binary target (1 = Recurred/Progressed, 0 = DiseaseFree).",
+ "input_list": [{"uri": {"filename": "breast_cancer_ml_eda.csv"}}],
+ "output_list": []
+ },
+ {
+ "step_number": 4,
+ "name": "Preprocessing",
+ "description": "Median-impute and standard-scale numeric features (age, tumor mutation burden, 11 binary gene flags); most-frequent-impute and one-hot-encode categorical features (tumor stage, ER/PR/HER2 status, cancer type).",
+ "input_list": [],
+ "output_list": []
+ },
+ {
+ "step_number": 5,
+ "name": "Baseline model training",
+ "description": "Train Logistic Regression, Random Forest, and SVM classifiers with class_weight='balanced' on an 80/20 stratified train-test split.",
+ "input_list": [],
+ "output_list": []
+ },
+ {
+ "step_number": 6,
+ "name": "Model improvement",
+ "description": "Apply SMOTE oversampling within cross-validation folds, add Gradient Boosting as an additional candidate, and attempt hyperparameter tuning via RandomizedSearchCV, optimizing 5-fold stratified cross-validated ROC-AUC.",
+ "input_list": [],
+ "output_list": []
+ },
+ {
+ "step_number": 7,
+ "name": "Threshold selection",
+ "description": "Use cross-validated out-of-fold predicted probabilities on the training set only to choose an F1-optimal decision threshold, in addition to the default 0.5 threshold.",
+ "input_list": [],
+ "output_list": []
+ },
+ {
+ "step_number": 8,
+ "name": "Final model fit and save",
+ "description": "Refit the selected pipeline (Logistic Regression + SMOTE) on the full dataset and serialize it with joblib.",
+ "input_list": [{"uri": {"filename": "breast_cancer_ml_eda.csv"}}],
+ "output_list": [
+ {"uri": {"filename": "model/dfs_model.joblib"}},
+ {"uri": {"filename": "model/model_metadata.json"}}
+ ]
+ },
+ {
+ "step_number": 9,
+ "name": "Single-patient prediction",
+ "description": "Load the saved pipeline and score one new patient record, returning a recurrence probability and a risk flag at each saved decision threshold.",
+ "input_list": [
+ {"uri": {"filename": "model/dfs_model.joblib"}},
+ {"uri": {"filename": "example_patient.json"}}
+ ],
+ "output_list": []
+ }
+ ]
+ },
+ "execution_domain": {
+ "script": [
+ {"uri": {"filename": "train_model.py"}},
+ {"uri": {"filename": "predict_single_patient.py"}}
+ ],
+ "script_driver": "python",
+ "software_prerequisites": [
+ {"name": "Python", "version": "3.14"},
+ {"name": "pandas", "version": "2.3.3"},
+ {"name": "numpy", "version": "2.3.5"},
+ {"name": "scikit-learn", "version": "1.7.2"},
+ {"name": "imbalanced-learn", "version": "0.14.2"},
+ {"name": "joblib", "version": "1.5.2"},
+ {"name": "matplotlib", "version": "3.11.1"},
+ {"name": "seaborn", "version": "0.13.2"}
+ ],
+ "external_data_endpoints": [
+ {
+ "name": "cBioPortal TCGA-BRCA dataset",
+ "url": "https://www.cbioportal.org/study/summary?id=brca_tcga_pan_can_atlas_2018"
+ }
+ ],
+ "environment_variables": {}
+ },
+ "parametric_domain": [
+ {"param": "test_size", "value": "0.20", "step": "5"},
+ {"param": "random_state", "value": "42", "step": "5"},
+ {"param": "cv_n_splits", "value": "5", "step": "6"},
+ {"param": "classifier__C (LogisticRegression, default)", "value": "1.0", "step": "6"},
+ {"param": "smote_k_neighbors (default)", "value": "5", "step": "6"},
+ {"param": "decision_threshold_screening", "value": "0.50", "step": "7"},
+ {"param": "decision_threshold_balanced", "value": "0.7271", "step": "7"}
+ ],
+ "io_domain": {
+ "input_subdomain": [
+ {
+ "uri": {"filename": "breast_cancer_ml_eda.csv"},
+ "access_time": "2026-07-26T00:00:00Z"
+ }
+ ],
+ "output_subdomain": [
+ {
+ "mediatype": "application/octet-stream",
+ "uri": {"filename": "model/dfs_model.joblib"}
+ },
+ {
+ "mediatype": "application/json",
+ "uri": {"filename": "model/model_metadata.json"}
+ },
+ {
+ "mediatype": "application/x-ipynb+json",
+ "uri": {"filename": "brca_dfs_model.ipynb"}
+ }
+ ]
+ },
+ "error_domain": {
+ "empirical_error": {
+ "held_out_test_roc_auc": 0.6836,
+ "held_out_test_average_precision": 0.3099,
+ "cross_validated_roc_auc_mean": 0.6367,
+ "cross_validated_roc_auc_std": 0.0594,
+ "note": "Errors are reported on a single stratified 80/20 held-out split and via 5-fold stratified cross-validation on the full 895-patient cohort. With only 97 recurrence events, standard errors on these estimates are wide, and small differences between candidate models (see brca_dfs_model.ipynb, section 17) should not be over-interpreted."
+ },
+ "algorithmic_error": {
+ "known_limitations": [
+ "Binary target ignores right-censoring in follow-up time (see brca_dfs_model.ipynb section 4).",
+ "Gene panel limited to 12 genes from a 2012 publication; does not reflect current mutational landscape knowledge.",
+ "Cohort includes a small number of non-breast-carcinoma CANCER_TYPE entries retained under TCGA-BRCA barcodes.",
+ "Hyperparameter tuning via RandomizedSearchCV did not exceed untuned baseline performance on this dataset size, most likely due to limited event count.",
+ "No external validation cohort has been used; all performance figures are internal to TCGA-BRCA."
+ ]
+ }
+ },
+ "extension_domain": [
+ {
+ "extension_schema": "https://w3id.org/biocompute/extension_domain/1.4.0/scm/scm_extension.json",
+ "scm_extension": {
+ "scm_repository": "https://github.com/GW-HIVE/PredictMod",
+ "scm_type": "git",
+ "scm_commit": "",
+ "scm_path": "flask_backend/models/BRCA_DFS_Recurrence_v1",
+ "scm_preview": ""
+ }
+ }
+ ]
+}
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/README.md b/flask_backend/models/BRCA_DFS_Recurrence_v1/README.md
new file mode 100644
index 00000000..21b9252b
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/README.md
@@ -0,0 +1,132 @@
+# Breast Cancer Disease-Free Survival (DFS) Recurrence Prediction
+
+Predicts a breast cancer patient's risk of disease recurrence or progression
+using clinical and genomic data from the TCGA-BRCA cohort.
+
+## Data Source
+
+**Cohort:** TCGA Breast Invasive Carcinoma (TCGA-BRCA), TCGA PanCancer Atlas,
+downloaded from cBioPortal.
+
+**Reference publication:** The Cancer Genome Atlas Network, "Comprehensive
+molecular portraits of human breast tumors," *Nature*, 2012 (PMID 23000897).
+The 12-gene mutation panel used here (TP53, PIK3CA, GATA3, CDH1, PTEN,
+MAP3K1, MAP2K4, KRAS, KMT2C, ARID1A, RUNX1, ESR1) comes from this paper.
+
+**895 patients**, 97 of whom experienced recurrence or progression
+(about 10.8%).
+
+## Files in this folder
+
+```
+breast_cancer_ml_eda.csv Training dataset (895 patients, 23 columns)
+brca_dfs_model.ipynb Full analysis notebook: EDA, data quality
+ review, baseline models, model improvement,
+ threshold selection, and final model save
+train_model.py Model script. Trains and saves the final model
+predict_single_patient.py Single-patient prediction script
+example_patient.json Sample patient record for the script above
+model/dfs_model.joblib The saved, trained scikit-learn pipeline
+model/model_metadata.json Feature schema, thresholds, performance metrics
+BCO.json BioCompute Object for this model
+demo_app/ Optional: a small standalone Flask app with a
+ browser form for trying the model by hand.
+ Not part of the PredictMod platform, does not
+ touch analysis_interface.py, just a demo
+ tool. See demo_app/app.py's docstring to run it.
+```
+
+## Question this model answers
+
+Given a breast cancer patient's age, tumor stage, hormone receptor status
+(ER, PR, HER2), and mutation status across 12 genes recurrently altered in
+breast cancer, can we estimate their risk of disease recurrence or
+progression?
+
+## Train the model
+
+```bash
+pip install pandas numpy scikit-learn imbalanced-learn joblib matplotlib
+python train_model.py
+```
+
+Reads `breast_cancer_ml_eda.csv`, trains the final pipeline, prints its
+performance, and writes `model/dfs_model.joblib` and
+`model/model_metadata.json`.
+
+## Run a single-patient prediction
+
+```bash
+python predict_single_patient.py --example
+```
+
+or with your own patient record (see `example_patient.json` for the
+required fields):
+
+```bash
+python predict_single_patient.py --input my_patient.json
+```
+
+## Modeling approach
+
+- **Target:** `DFS_STATUS` converted to binary, 1 = Recurred/Progressed,
+ 0 = DiseaseFree.
+- **Features:** age, tumor mutation burden, 11 binary gene mutation flags
+ (a 12th gene, `KMT2C`, was dropped since it is constant across this
+ cohort), AJCC tumor stage, ER/PR/HER2 status, and cancer type/subtype.
+- **Preprocessing:** median imputation and scaling for numeric features,
+ most-frequent imputation and one-hot encoding for categorical features.
+- **Final model:** Logistic Regression with SMOTE oversampling (default
+ hyperparameters). Chosen over Random Forest, SVM, and Gradient Boosting
+ (each tried with and without SMOTE, and with and without hyperparameter
+ tuning) for its clearly better Average Precision, while being simpler and
+ more interpretable. Full comparison and reasoning are in
+ `brca_dfs_model.ipynb`.
+
+## Algorithm & Model Performance
+
+| Metric | Value |
+|---|---|
+| Held-out test ROC-AUC | 0.684 |
+| Held-out test Average Precision | 0.310 |
+| 5-fold CV ROC-AUC (mean +/- std) | 0.637 +/- 0.059 |
+
+Two decision thresholds are saved in `model/model_metadata.json`:
+
+- **Screening (0.50):** recall 0.74, precision 0.17 on the held-out test
+ set. Favors catching more true recurrences, at the cost of more false
+ alarms. Fits an early-triage use case.
+- **Balanced (0.7271):** recall 0.32, precision 0.27, accuracy 0.84. Favors
+ fewer false alarms. Chosen using cross-validated predictions on the
+ training set only, never the test set.
+
+Hyperparameter tuning via `RandomizedSearchCV` was attempted and did not
+exceed the untuned defaults on this dataset size, most likely because there
+are only 97 recurrence events for a search procedure to learn from. That is
+reported as a genuine finding in the notebook rather than a search that
+"failed" and was hidden.
+
+## Intervention & Outcomes
+
+This model does not evaluate any treatment intervention. It estimates the
+probability of one outcome, disease recurrence or progression, from a
+patient's baseline clinical and genomic profile at diagnosis. The output is
+a probability plus a threshold-based flag, not a diagnosis, and should
+support, not replace, clinical judgment.
+
+## Known limitations
+
+- **Right-censoring is not modeled.** `DFS_STATUS` is a snapshot of outcome
+ status, not a time-to-event variable. A patient marked "DiseaseFree" with
+ short follow-up has not been proven cancer-free forever, only cancer-free
+ so far. A survival model (for example, Cox proportional hazards) would be
+ the statistically correct way to handle this; this classifier does not.
+ See section 4 of `brca_dfs_model.ipynb`.
+- The gene panel is limited to 12 genes from a 2012 publication and does not
+ reflect the full mutational landscape known today.
+- The cohort includes a small number of patients whose `CANCER_TYPE` is
+ `Breast Sarcoma` or `Skin Cancer, Non-Melanoma` rather than a breast
+ carcinoma subtype, a known TCGA-BRCA cohort quirk, not an extraction
+ error.
+- This model has not been validated on any cohort outside TCGA-BRCA and is
+ a research and educational artifact, not a clinical decision-making tool.
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/brca_dfs_model.ipynb b/flask_backend/models/BRCA_DFS_Recurrence_v1/brca_dfs_model.ipynb
new file mode 100644
index 00000000..a659ed6b
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/brca_dfs_model.ipynb
@@ -0,0 +1,6510 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "5ebbacc0",
+ "metadata": {},
+ "source": [
+ "# Predicting Breast Cancer Recurrence from TCGA-BRCA Genomic and Clinical Data\n",
+ "\n",
+ "**PredictMod ML Modeling Volunteership, Summer 2026**\n",
+ "\n",
+ "This notebook builds a machine learning model that predicts whether a breast\n",
+ "cancer patient's disease will recur or progress after treatment, using clinical\n",
+ "information (age, tumor stage, hormone receptor status) together with mutation\n",
+ "status for 12 genes highlighted in the landmark 2012 TCGA breast cancer paper\n",
+ "(\"Comprehensive molecular portraits of human breast tumors,\" Nature, 2012).\n",
+ "\n",
+ "**What this notebook covers, and how it maps to the project's weekly plan:**\n",
+ "\n",
+ "- **Weeks 1 to 3** (dataset selection, extraction, and harmonization) happened\n",
+ " in `hive_gwu (1).ipynb`, which pulls the raw TCGA-BRCA clinical and mutation\n",
+ " files from cBioPortal's data export and merges them into one ML-ready table,\n",
+ " `breast_cancer_ml_eda.csv`. This notebook picks up from that finished dataset.\n",
+ "- **Week 4** (model training): sections 1 through 10 below, three baseline\n",
+ " models trained the way the modeling tutorial describes.\n",
+ "- **Week 5 to 6** (model performance improvement): section 11 onward, where we\n",
+ " honestly test whether oversampling, extra models, and hyperparameter tuning\n",
+ " actually help, and pick a final model and decision threshold based on what\n",
+ " the data shows, not on what we hoped to see.\n",
+ "- **Weeks 7 to 8** (documentation, GitHub, single-patient prediction): the\n",
+ " final model is saved to `model/dfs_model.joblib`, and the standalone script\n",
+ " `predict_single_patient.py` in this same folder uses that saved file to score\n",
+ " one new patient at a time. The BioCompute Object is in `model_bco.json`, and\n",
+ " the full project write-up is in `README.md`.\n",
+ "\n",
+ "Every code cell below has comments explaining not just *what* the line does,\n",
+ "but *why* that choice was made, since the goal of this notebook is as much to\n",
+ "document the reasoning as it is to produce a model.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ba438de7",
+ "metadata": {},
+ "source": [
+ "## 1. Loading the data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "5feace98",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:13.128647Z",
+ "iopub.status.busy": "2026-07-26T15:38:13.128174Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.583704Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.579167Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Loaded 895 patients and 23 columns.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
PATIENT_ID
\n",
+ "
AGE
\n",
+ "
AJCC_PATHOLOGIC_TUMOR_STAGE
\n",
+ "
ER_STATUS_BY_IHC
\n",
+ "
PR_STATUS_BY_IHC
\n",
+ "
IHC_HER2
\n",
+ "
DFS_STATUS
\n",
+ "
SAMPLE_ID
\n",
+ "
CANCER_TYPE
\n",
+ "
CANCER_TYPE_DETAILED
\n",
+ "
...
\n",
+ "
GATA3
\n",
+ "
CDH1
\n",
+ "
PTEN
\n",
+ "
MAP3K1
\n",
+ "
MAP2K4
\n",
+ "
KRAS
\n",
+ "
KMT2C
\n",
+ "
ARID1A
\n",
+ "
RUNX1
\n",
+ "
ESR1
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
TCGA-3C-AALI
\n",
+ "
50.0
\n",
+ "
Stage IIB
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
0:DiseaseFree
\n",
+ "
TCGA-3C-AALI-01
\n",
+ "
Breast Cancer
\n",
+ "
Breast Invasive Ductal Carcinoma
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
TCGA-3C-AALJ
\n",
+ "
62.0
\n",
+ "
Stage IIB
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
Indeterminate
\n",
+ "
0:DiseaseFree
\n",
+ "
TCGA-3C-AALJ-01
\n",
+ "
Breast Cancer
\n",
+ "
Breast Invasive Ductal Carcinoma
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
TCGA-3C-AALK
\n",
+ "
52.0
\n",
+ "
Stage IA
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
0:DiseaseFree
\n",
+ "
TCGA-3C-AALK-01
\n",
+ "
Breast Cancer
\n",
+ "
Breast Invasive Ductal Carcinoma
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
TCGA-4H-AAAK
\n",
+ "
50.0
\n",
+ "
Stage IIIA
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
Equivocal
\n",
+ "
0:DiseaseFree
\n",
+ "
TCGA-4H-AAAK-01
\n",
+ "
Breast Cancer
\n",
+ "
Breast Invasive Lobular Carcinoma
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
TCGA-5L-AAT0
\n",
+ "
42.0
\n",
+ "
Stage IIA
\n",
+ "
Positive
\n",
+ "
Positive
\n",
+ "
Negative
\n",
+ "
0:DiseaseFree
\n",
+ "
TCGA-5L-AAT0-01
\n",
+ "
Breast Cancer
\n",
+ "
Breast Invasive Lobular Carcinoma
\n",
+ "
...
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " PATIENT_ID AGE AJCC_PATHOLOGIC_TUMOR_STAGE ER_STATUS_BY_IHC \\\n",
+ "0 TCGA-3C-AALI 50.0 Stage IIB Positive \n",
+ "1 TCGA-3C-AALJ 62.0 Stage IIB Positive \n",
+ "2 TCGA-3C-AALK 52.0 Stage IA Positive \n",
+ "3 TCGA-4H-AAAK 50.0 Stage IIIA Positive \n",
+ "4 TCGA-5L-AAT0 42.0 Stage IIA Positive \n",
+ "\n",
+ " PR_STATUS_BY_IHC IHC_HER2 DFS_STATUS SAMPLE_ID \\\n",
+ "0 Positive Positive 0:DiseaseFree TCGA-3C-AALI-01 \n",
+ "1 Positive Indeterminate 0:DiseaseFree TCGA-3C-AALJ-01 \n",
+ "2 Positive Positive 0:DiseaseFree TCGA-3C-AALK-01 \n",
+ "3 Positive Equivocal 0:DiseaseFree TCGA-4H-AAAK-01 \n",
+ "4 Positive Negative 0:DiseaseFree TCGA-5L-AAT0-01 \n",
+ "\n",
+ " CANCER_TYPE CANCER_TYPE_DETAILED ... GATA3 CDH1 PTEN \\\n",
+ "0 Breast Cancer Breast Invasive Ductal Carcinoma ... 0 0 0 \n",
+ "1 Breast Cancer Breast Invasive Ductal Carcinoma ... 0 0 0 \n",
+ "2 Breast Cancer Breast Invasive Ductal Carcinoma ... 0 0 0 \n",
+ "3 Breast Cancer Breast Invasive Lobular Carcinoma ... 0 0 0 \n",
+ "4 Breast Cancer Breast Invasive Lobular Carcinoma ... 0 0 0 \n",
+ "\n",
+ " MAP3K1 MAP2K4 KRAS KMT2C ARID1A RUNX1 ESR1 \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 0 0 \n",
+ "\n",
+ "[5 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "%matplotlib inline\n",
+ "# Core data handling and plotting libraries used throughout the notebook.\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "\n",
+ "# The dataset was originally read from a Google Drive path because this\n",
+ "# notebook was first developed in Google Colab. Running it locally instead,\n",
+ "# so we point it at the copy of the ML-ready CSV that lives in this same\n",
+ "# project folder. Using a relative path (no leading drive letter or \"/content\"\n",
+ "# prefix) means the notebook will still work if the whole project folder is\n",
+ "# moved or cloned somewhere else, which matters once this gets pushed to\n",
+ "# GitHub for the Week 8 submission.\n",
+ "df = pd.read_csv(\"breast_cancer_ml_eda.csv\")\n",
+ "print(\"Loaded\", df.shape[0], \"patients and\", df.shape[1], \"columns.\")\n",
+ "df.head()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3a40fd33",
+ "metadata": {},
+ "source": [
+ "## 2. First look at the data: columns and target balance"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "1aff7981",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.591316Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.590525Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.611033Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.608617Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['PATIENT_ID', 'AGE', 'AJCC_PATHOLOGIC_TUMOR_STAGE', 'ER_STATUS_BY_IHC', 'PR_STATUS_BY_IHC', 'IHC_HER2', 'DFS_STATUS', 'SAMPLE_ID', 'CANCER_TYPE', 'CANCER_TYPE_DETAILED', 'TMB_NONSYNONYMOUS', 'TP53', 'PIK3CA', 'GATA3', 'CDH1', 'PTEN', 'MAP3K1', 'MAP2K4', 'KRAS', 'KMT2C', 'ARID1A', 'RUNX1', 'ESR1']\n",
+ "\n",
+ "Target distribution (DFS_STATUS, raw text form):\n",
+ "DFS_STATUS\n",
+ "0:DiseaseFree 798\n",
+ "1:Recurred/Progressed 97\n",
+ "Name: count, dtype: int64\n",
+ "DFS_STATUS\n",
+ "0:DiseaseFree 89.162011\n",
+ "1:Recurred/Progressed 10.837989\n",
+ "Name: proportion, dtype: float64\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(df.columns.tolist())\n",
+ "\n",
+ "print(\"\\nTarget distribution (DFS_STATUS, raw text form):\")\n",
+ "print(df[\"DFS_STATUS\"].value_counts())\n",
+ "print(df[\"DFS_STATUS\"].value_counts(normalize=True) * 100)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "85a7856f",
+ "metadata": {},
+ "source": [
+ "About 89% of patients in this cohort stayed disease-free and about 11%\n",
+ "had their cancer recur or progress. That 89/11 split is the single most\n",
+ "important fact about this dataset, since it means a model that just guesses\n",
+ "\"disease-free\" for every patient would already be \"89% accurate\" while being\n",
+ "completely useless clinically (it would never catch a single recurrence).\n",
+ "Keeping this number in mind is essential for judging every metric that\n",
+ "follows: plain accuracy will be a misleading way to compare models here, and\n",
+ "we lean on ROC-AUC, precision, recall, and average precision instead."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9c7f154f",
+ "metadata": {},
+ "source": [
+ "## 3. Checking data quality before we trust it\n",
+ "\n",
+ "Before building anything, it is worth spending a few minutes looking for\n",
+ "values that do not make sense, columns that carry no real information, and\n",
+ "categories that might not belong. Skipping this step is one of the easiest\n",
+ "ways to end up with a model that looks fine on paper but is quietly built on\n",
+ "top of bad data. This section did not exist in the first version of this\n",
+ "notebook. It was added as part of a careful review pass, and it surfaces a few\n",
+ "real issues worth knowing about."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "8cce6c96",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.618028Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.617152Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.635270Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.632553Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Missing values per column:\n",
+ "Series([], dtype: int64)\n",
+ "(No output above this line means there are no missing values left, which makes sense since the harmonization notebook already replaced placeholder strings like '[Not Available]' with NaN and dropped rows without an outcome.)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Are there any missing values once the data has already been harmonized?\n",
+ "print(\"Missing values per column:\")\n",
+ "print(df.isna().sum()[df.isna().sum() > 0])\n",
+ "print(\"(No output above this line means there are no missing values left, \"\n",
+ " \"which makes sense since the harmonization notebook already replaced \"\n",
+ " \"placeholder strings like '[Not Available]' with NaN and dropped rows \"\n",
+ " \"without an outcome.)\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "5a1aa925",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.641121Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.640605Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.662060Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.659063Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Columns with only one unique value in this cohort: ['KMT2C']\n",
+ " KMT2C unique value: [0]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# A column that only ever takes one value cannot help a classifier tell\n",
+ "# patients apart, no matter how important the gene might be biologically. It\n",
+ "# is worth actively checking for this instead of assuming every column pulled\n",
+ "# from the raw data is useful.\n",
+ "nunique = df.drop(columns=[\"PATIENT_ID\", \"SAMPLE_ID\"]).nunique()\n",
+ "constant_columns = nunique[nunique <= 1].index.tolist()\n",
+ "print(\"Columns with only one unique value in this cohort:\", constant_columns)\n",
+ "\n",
+ "for col in constant_columns:\n",
+ " print(f\" {col} unique value:\", df[col].unique())\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "539af6bc",
+ "metadata": {},
+ "source": [
+ "**Flag:** `KMT2C` is constant, every patient in this cohort has a value\n",
+ "of 0 for it. That does not necessarily mean the extraction step was wrong; it\n",
+ "is plausible that the small subset of patients who both have a KMT2C mutation\n",
+ "and a recorded DFS status simply is not represented in this particular 895\n",
+ "patient table. Either way, a constant column carries zero predictive signal,\n",
+ "so it is dropped before modeling further down in this notebook."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "d4a655dd",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.669840Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.668387Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.684953Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.681010Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AJCC_PATHOLOGIC_TUMOR_STAGE:\n",
+ " ['Stage I', 'Stage IA', 'Stage IB', 'Stage II', 'Stage IIA', 'Stage IIB', 'Stage IIIA', 'Stage IIIB', 'Stage IIIC', 'Stage IV', 'Stage X', '[Discrepancy]']\n",
+ "\n",
+ "ER_STATUS_BY_IHC:\n",
+ " ['Negative', 'Positive']\n",
+ "\n",
+ "PR_STATUS_BY_IHC:\n",
+ " ['Indeterminate', 'Negative', 'Positive']\n",
+ "\n",
+ "IHC_HER2:\n",
+ " ['Equivocal', 'Indeterminate', 'Negative', 'Positive']\n",
+ "\n",
+ "CANCER_TYPE:\n",
+ " ['Breast Cancer', 'Breast Sarcoma', 'Skin Cancer, Non-Melanoma']\n",
+ "\n",
+ "CANCER_TYPE_DETAILED:\n",
+ " ['Adenoid Cystic Breast Cancer', 'Basal Cell Carcinoma', 'Breast Invasive Carcinoma, NOS', 'Breast Invasive Ductal Carcinoma', 'Breast Invasive Lobular Carcinoma', 'Breast Invasive Mixed Mucinous Carcinoma', 'Breast Mixed Ductal and Lobular Carcinoma', 'Invasive Breast Carcinoma', 'Malignant Phyllodes Tumor of the Breast', 'Metaplastic Breast Cancer', 'Paget Disease of the Nipple', 'Solid Papillary Carcinoma of the Breast']\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Looking at the actual category labels for every text column helps catch\n",
+ "# two kinds of problems at once: values that look like data entry issues, and\n",
+ "# categories that might not belong in this cohort at all.\n",
+ "categorical_cols_to_inspect = [\n",
+ " \"AJCC_PATHOLOGIC_TUMOR_STAGE\",\n",
+ " \"ER_STATUS_BY_IHC\",\n",
+ " \"PR_STATUS_BY_IHC\",\n",
+ " \"IHC_HER2\",\n",
+ " \"CANCER_TYPE\",\n",
+ " \"CANCER_TYPE_DETAILED\",\n",
+ "]\n",
+ "\n",
+ "for col in categorical_cols_to_inspect:\n",
+ " print(f\"{col}:\")\n",
+ " print(\" \", sorted(df[col].unique(), key=str))\n",
+ " print()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4597d010",
+ "metadata": {},
+ "source": [
+ "Two things stand out here, and both are worth flagging rather than\n",
+ "silently ignoring:\n",
+ "\n",
+ "1. **`AJCC_PATHOLOGIC_TUMOR_STAGE` has a `[Discrepancy]` category and a vague\n",
+ " `Stage X` / `Stage II` (no sub-stage) category.** These are legitimate\n",
+ " values that show up in real clinical records (sometimes staging is\n",
+ " genuinely unclear or was recorded before sub-staging was finalized), but\n",
+ " they are qualitatively different from a clean \"Stage IIB\". The one-hot\n",
+ " encoding pipeline will treat `[Discrepancy]` as just another category, which\n",
+ " is a reasonable default, but it is worth knowing that a small number of\n",
+ " patients are being staged with a value that really means \"we could not\n",
+ " determine the stage\" rather than an actual stage.\n",
+ "\n",
+ "2. **`CANCER_TYPE` includes `Breast Sarcoma` and `Skin Cancer, Non-Melanoma`\n",
+ " in addition to `Breast Cancer`.** This TCGA-BRCA cohort was assembled\n",
+ " around breast cancer, but pathology review sometimes reclassifies a small\n",
+ " number of cases after the fact, and those patients keep their original\n",
+ " TCGA barcodes and stay in the study. This is not a data extraction bug,\n",
+ " it is a known quirk of how TCGA cohorts work, but it does mean this\n",
+ " dataset is not perfectly 100% \"breast carcinoma\" in the strict sense. We\n",
+ " keep these patients in for this project since removing them was not part\n",
+ " of the original extraction plan and the count is small, but a stricter\n",
+ " version of this project could filter `CANCER_TYPE == \"Breast Cancer\"` only."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "58ed3bfd",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.691162Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.690643Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.708064Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.705422Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CANCER_TYPE\n",
+ "Breast Cancer 892\n",
+ "Breast Sarcoma 2\n",
+ "Skin Cancer, Non-Melanoma 1\n",
+ "Name: count, dtype: int64\n",
+ "\n",
+ "AJCC_PATHOLOGIC_TUMOR_STAGE\n",
+ "Stage IIA 303\n",
+ "Stage IIB 213\n",
+ "Stage IIIA 123\n",
+ "Stage IA 79\n",
+ "Stage I 72\n",
+ "Stage IIIC 56\n",
+ "Stage IIIB 20\n",
+ "Stage IV 10\n",
+ "Stage IB 6\n",
+ "Stage X 6\n",
+ "[Discrepancy] 4\n",
+ "Stage II 3\n",
+ "Name: count, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(df[\"CANCER_TYPE\"].value_counts())\n",
+ "print()\n",
+ "print(df[\"AJCC_PATHOLOGIC_TUMOR_STAGE\"].value_counts())\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "83cabb6b",
+ "metadata": {},
+ "source": [
+ "## 4. A note on follow-up time and censoring\n",
+ "\n",
+ "This is arguably the most important limitation of the whole project, so it\n",
+ "gets its own section rather than a single bullet point buried in the\n",
+ "conclusion.\n",
+ "\n",
+ "`DFS_STATUS` tells us whether a patient's cancer had recurred or progressed\n",
+ "*by the time they were last checked on*, but it does not tell us *how long*\n",
+ "that check-up window was. A patient marked \"DiseaseFree\" who was only followed\n",
+ "for 6 months is in a very different situation than one followed for 10 years.\n",
+ "The first patient has not been proven cancer-free forever, only cancer-free\n",
+ "*so far*. This is called **right-censoring**, and it is the reason cancer\n",
+ "outcomes are usually modeled with survival analysis (for example, a Cox\n",
+ "proportional hazards model) instead of plain binary classification.\n",
+ "\n",
+ "The modeling dataset used in this notebook (`breast_cancer_ml_eda.csv`) does\n",
+ "not include the follow-up time column, only the raw clinical file does. To\n",
+ "make this limitation concrete rather than abstract, the cell below pulls\n",
+ "`DFS_MONTHS` back in from the original TCGA clinical file just to look at it,\n",
+ "purely for context. It is not used anywhere in the modeling pipeline."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "1c9c8b2d",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.712396Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.711900Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.833940Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.827308Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Follow-up time (months), split by outcome:\n",
+ " count mean std min 25% 50% \\\n",
+ "DFS_STATUS \n",
+ "0:DiseaseFree 798.0 36.000163 34.373682 -0.23 14.175 24.54 \n",
+ "1:Recurred/Progressed 97.0 37.570722 34.794929 2.96 14.680 26.22 \n",
+ "\n",
+ " 75% max \n",
+ "DFS_STATUS \n",
+ "0:DiseaseFree 48.42 281.08 \n",
+ "1:Recurred/Progressed 46.39 214.72 \n"
+ ]
+ }
+ ],
+ "source": [
+ "# Pulling in follow-up time (DFS_MONTHS) from the raw clinical file, only to\n",
+ "# illustrate the censoring issue described above. This does not change the\n",
+ "# modeling dataset or the target variable used later in the notebook.\n",
+ "raw_clinical = pd.read_csv(\n",
+ " \"brca_tcga/data_clinical_patient.txt\",\n",
+ " sep=\"\\t\",\n",
+ " comment=\"#\",\n",
+ " dtype=str,\n",
+ ")\n",
+ "\n",
+ "follow_up = raw_clinical[[\"PATIENT_ID\", \"DFS_MONTHS\"]].copy()\n",
+ "follow_up[\"DFS_MONTHS\"] = pd.to_numeric(follow_up[\"DFS_MONTHS\"], errors=\"coerce\")\n",
+ "\n",
+ "context_df = df.merge(follow_up, on=\"PATIENT_ID\", how=\"left\")\n",
+ "\n",
+ "print(\"Follow-up time (months), split by outcome:\")\n",
+ "print(context_df.groupby(\"DFS_STATUS\")[\"DFS_MONTHS\"].describe())\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "58ae2145",
+ "metadata": {},
+ "source": [
+ "Notice that the \"DiseaseFree\" group includes patients with quite short\n",
+ "follow-up times (the minimum can be under a year), sitting right alongside\n",
+ "patients followed for a decade or more. Some of those short-follow-up,\n",
+ "\"DiseaseFree\" patients may well recur later, we simply do not know yet, and\n",
+ "the model has no way to tell the difference between \"confirmed disease-free\n",
+ "for 10 years\" and \"disease-free so far, only checked 6 months ago.\" This is a\n",
+ "real source of label noise that a binary classifier cannot fix. We proceed\n",
+ "with the classification approach anyway because that is what this phase of\n",
+ "the project calls for, but this caveat should travel with every result below."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8654f70d",
+ "metadata": {},
+ "source": [
+ "## 5. Building the binary target variable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "cf84494a",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.844705Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.843779Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.875200Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.869832Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "target\n",
+ "0 798\n",
+ "1 97\n",
+ "Name: count, dtype: int64\n",
+ "\n",
+ "1 = Recurred/Progressed, 0 = DiseaseFree\n"
+ ]
+ }
+ ],
+ "source": [
+ "# DFS_STATUS arrives as descriptive text (\"0:DiseaseFree\" or\n",
+ "# \"1:Recurred/Progressed\"). Scikit-learn classifiers want a plain 0/1 label,\n",
+ "# so we convert it here. Checking for the substrings \"Recurred\" or\n",
+ "# \"Progressed\" instead of matching the whole string exactly is a small\n",
+ "# defensive habit: it still works even if the exact prefix formatting\n",
+ "# (\"0:\" vs \"1:\") ever changes upstream.\n",
+ "df[\"target\"] = df[\"DFS_STATUS\"].apply(\n",
+ " lambda x: 1 if (\"Recurred\" in str(x) or \"Progressed\" in str(x)) else 0\n",
+ ")\n",
+ "\n",
+ "print(df[\"target\"].value_counts())\n",
+ "print(\"\\n1 = Recurred/Progressed, 0 = DiseaseFree\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0b2676cb",
+ "metadata": {},
+ "source": [
+ "## 6. Dropping ID columns, leakage columns, and the constant column\n",
+ "\n",
+ "Three kinds of columns need to come out of the feature set before modeling,\n",
+ "each for a different reason:\n",
+ "\n",
+ "- `PATIENT_ID` and `SAMPLE_ID` are identifiers. They do not describe biology\n",
+ " or clinical state, so keeping them in would let the model \"memorize\" patient\n",
+ " identities instead of learning general patterns.\n",
+ "- `DFS_STATUS` is the plain-text version of the exact thing we are trying to\n",
+ " predict. Leaving it in the feature set would mean the model can just read\n",
+ " the answer directly from one of its own inputs, which would make every\n",
+ " metric downstream meaningless.\n",
+ "- `KMT2C` is the constant column identified back in section 3. It cannot\n",
+ " possibly help any model since every patient has the same value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "e4c0a8e5",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.886289Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.884935Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.912755Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.909281Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Feature matrix shape:"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " (895, 19)\n",
+ "Target shape: (895,)\n"
+ ]
+ }
+ ],
+ "source": [
+ "drop_cols = [\n",
+ " \"PATIENT_ID\",\n",
+ " \"SAMPLE_ID\",\n",
+ " \"DFS_STATUS\",\n",
+ " \"target\",\n",
+ " \"KMT2C\", # constant across the whole cohort, see section 3\n",
+ "]\n",
+ "\n",
+ "X = df.drop(columns=drop_cols)\n",
+ "y = df[\"target\"]\n",
+ "\n",
+ "print(\"Feature matrix shape:\", X.shape)\n",
+ "print(\"Target shape:\", y.shape)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "65b191e3",
+ "metadata": {},
+ "source": [
+ "## 7. Splitting features into numeric and categorical groups"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "6652a163",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.922034Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.920451Z",
+ "iopub.status.idle": "2026-07-26T15:38:19.942751Z",
+ "shell.execute_reply": "2026-07-26T15:38:19.938492Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Numeric features: ['AGE', 'TMB_NONSYNONYMOUS', 'TP53', 'PIK3CA', 'GATA3', 'CDH1', 'PTEN', 'MAP3K1', 'MAP2K4', 'KRAS', 'ARID1A', 'RUNX1', 'ESR1']\n",
+ "Categorical features: ['AJCC_PATHOLOGIC_TUMOR_STAGE', 'ER_STATUS_BY_IHC', 'PR_STATUS_BY_IHC', 'IHC_HER2', 'CANCER_TYPE', 'CANCER_TYPE_DETAILED']\n"
+ ]
+ }
+ ],
+ "source": [
+ "numeric_features = X.select_dtypes(include=[\"int64\", \"float64\"]).columns.tolist()\n",
+ "categorical_features = X.select_dtypes(include=[\"object\"]).columns.tolist()\n",
+ "\n",
+ "print(\"Numeric features:\", numeric_features)\n",
+ "print(\"Categorical features:\", categorical_features)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "86f6d8fa",
+ "metadata": {},
+ "source": [
+ "## 8. Building the preprocessing pipeline\n",
+ "\n",
+ "Numeric and categorical columns need different treatment before a model can\n",
+ "use them, so we build one `ColumnTransformer` that applies the right steps to\n",
+ "the right columns automatically:\n",
+ "\n",
+ "- **Numeric columns** (age, tumor mutation burden, and the binary gene flags)\n",
+ " get median imputation, in case of any future missing values, followed by\n",
+ " standard scaling. Scaling matters most for Logistic Regression and SVM,\n",
+ " since both are sensitive to features being on very different numeric\n",
+ " scales (age ranges over tens of years, while the gene flags are just 0/1).\n",
+ "- **Categorical columns** (tumor stage, receptor status, cancer subtype) get\n",
+ " most-frequent imputation followed by one-hot encoding, so each category\n",
+ " becomes its own 0/1 column. `handle_unknown=\"ignore\"` means that if a\n",
+ " category shows up later (say, in a new single patient) that was never seen\n",
+ " during training, the pipeline encodes it as all zeros instead of crashing.\n",
+ "\n",
+ "Wrapping the whole `ColumnTransformer` inside each model's `Pipeline` (rather\n",
+ "than transforming `X` once up front) is what keeps this leak-free: every time\n",
+ "the pipeline is fit during cross-validation, the imputer and scaler are\n",
+ "re-fit using only that fold's training data, never peeking at the validation\n",
+ "fold."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "319a1e73",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:19.951264Z",
+ "iopub.status.busy": "2026-07-26T15:38:19.950440Z",
+ "iopub.status.idle": "2026-07-26T15:38:21.025749Z",
+ "shell.execute_reply": "2026-07-26T15:38:21.022214Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n",
+ "from sklearn.compose import ColumnTransformer\n",
+ "from sklearn.pipeline import Pipeline\n",
+ "from sklearn.impute import SimpleImputer\n",
+ "\n",
+ "numeric_transformer = Pipeline(steps=[\n",
+ " (\"imputer\", SimpleImputer(strategy=\"median\")),\n",
+ " (\"scaler\", StandardScaler())\n",
+ "])\n",
+ "\n",
+ "categorical_transformer = Pipeline(steps=[\n",
+ " (\"imputer\", SimpleImputer(strategy=\"most_frequent\")),\n",
+ " (\"onehot\", OneHotEncoder(handle_unknown=\"ignore\"))\n",
+ "])\n",
+ "\n",
+ "preprocessor = ColumnTransformer(\n",
+ " transformers=[\n",
+ " (\"num\", numeric_transformer, numeric_features),\n",
+ " (\"cat\", categorical_transformer, categorical_features)\n",
+ " ]\n",
+ ")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "272c386d",
+ "metadata": {},
+ "source": [
+ "## 9. Train-test split, stratified because the data is imbalanced\n",
+ "\n",
+ "We hold out 20% of patients as a test set that no model gets to see during\n",
+ "training or tuning. `stratify=y` tells scikit-learn to keep the same\n",
+ "89%/11% class balance in both the training and test sets. Without\n",
+ "stratification, a random split on a 90/10-imbalanced, 895-row dataset could\n",
+ "easily land a test set with, say, only 12 or 26 recurrence cases just by\n",
+ "chance, making the test metrics noisier and harder to compare across runs."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "bfb35755",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:21.031713Z",
+ "iopub.status.busy": "2026-07-26T15:38:21.030746Z",
+ "iopub.status.idle": "2026-07-26T15:38:21.061300Z",
+ "shell.execute_reply": "2026-07-26T15:38:21.058390Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Training set size: (716, 19)\n",
+ "Testing set size: (179, 19)\n",
+ "\n",
+ "Training target distribution:\n",
+ "target\n",
+ "0 638\n",
+ "1 78\n",
+ "Name: count, dtype: int64\n",
+ "target\n",
+ "0 89.106145\n",
+ "1 10.893855\n",
+ "Name: proportion, dtype: float64\n",
+ "\n",
+ "Testing target distribution:\n",
+ "target\n",
+ "0 160\n",
+ "1 19\n",
+ "Name: count, dtype: int64\n",
+ "target\n",
+ "0 89.385475\n",
+ "1 10.614525\n",
+ "Name: proportion, dtype: float64\n"
+ ]
+ }
+ ],
+ "source": [
+ "X_train, X_test, y_train, y_test = train_test_split(\n",
+ " X,\n",
+ " y,\n",
+ " test_size=0.20,\n",
+ " random_state=42,\n",
+ " stratify=y\n",
+ ")\n",
+ "\n",
+ "print(\"Training set size:\", X_train.shape)\n",
+ "print(\"Testing set size:\", X_test.shape)\n",
+ "\n",
+ "print(\"\\nTraining target distribution:\")\n",
+ "print(y_train.value_counts())\n",
+ "print(y_train.value_counts(normalize=True) * 100)\n",
+ "\n",
+ "print(\"\\nTesting target distribution:\")\n",
+ "print(y_test.value_counts())\n",
+ "print(y_test.value_counts(normalize=True) * 100)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "825c0cba",
+ "metadata": {},
+ "source": [
+ "## 10. Training the Week 4 baseline models\n",
+ "\n",
+ "Following the modeling tutorial, we train three standard classifiers with\n",
+ "mostly default settings, changing only what is needed to account for the\n",
+ "class imbalance:\n",
+ "\n",
+ "- **Logistic Regression**: a simple, interpretable linear baseline. Good\n",
+ " starting point for any classification problem, and easy to explain to a\n",
+ " non-technical audience later.\n",
+ "- **Random Forest**: an ensemble of decision trees, generally strong on\n",
+ " tabular data like this and able to capture non-linear interactions between\n",
+ " features (for example, a specific stage combined with a specific mutation).\n",
+ "- **Support Vector Machine (SVM)**: a different modeling philosophy again\n",
+ " (finding the boundary that best separates the two classes), useful as a\n",
+ " third point of comparison.\n",
+ "\n",
+ "All three use `class_weight=\"balanced\"`, which tells scikit-learn to\n",
+ "automatically up-weight the minority (recurrence) class during training, so\n",
+ "that the model is not simply rewarded for predicting \"disease-free\" every\n",
+ "single time."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15007d44",
+ "metadata": {},
+ "source": [
+ "### Logistic Regression"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "9a3ef8ea",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:21.067322Z",
+ "iopub.status.busy": "2026-07-26T15:38:21.066484Z",
+ "iopub.status.idle": "2026-07-26T15:38:21.270931Z",
+ "shell.execute_reply": "2026-07-26T15:38:21.267043Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import ConfusionMatrixDisplay\n",
+ "\n",
+ "for name, model in models.items():\n",
+ " y_pred = model.predict(X_test)\n",
+ "\n",
+ " ConfusionMatrixDisplay.from_predictions(\n",
+ " y_test,\n",
+ " y_pred,\n",
+ " display_labels=[\"DiseaseFree\", \"Recurred/Progressed\"],\n",
+ " cmap=\"Blues\"\n",
+ " )\n",
+ "\n",
+ " plt.title(f\"Confusion Matrix - {name}\")\n",
+ " plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8820e9ac",
+ "metadata": {},
+ "source": [
+ "## 15. What is driving Random Forest's predictions?\n",
+ "\n",
+ "Even though Random Forest is not our final choice (see section 19), looking at\n",
+ "its feature importances is still useful. It tells us which variables the\n",
+ "tree-based model leans on most, which is a good way to sanity-check that the\n",
+ "model is picking up on clinically sensible signals rather than noise."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "4fa9ee7b",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:34.328904Z",
+ "iopub.status.busy": "2026-07-26T15:38:34.328390Z",
+ "iopub.status.idle": "2026-07-26T15:38:34.375368Z",
+ "shell.execute_reply": "2026-07-26T15:38:34.372630Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Feature
\n",
+ "
Importance
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
AGE
\n",
+ "
0.223168
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
TMB_NONSYNONYMOUS
\n",
+ "
0.213920
\n",
+ "
\n",
+ "
\n",
+ "
17
\n",
+ "
AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IIA
\n",
+ "
0.038420
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
TP53
\n",
+ "
0.036579
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
PIK3CA
\n",
+ "
0.035109
\n",
+ "
\n",
+ "
\n",
+ "
18
\n",
+ "
AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IIB
\n",
+ "
0.029607
\n",
+ "
\n",
+ "
\n",
+ "
32
\n",
+ "
IHC_HER2_Negative
\n",
+ "
0.027969
\n",
+ "
\n",
+ "
\n",
+ "
14
\n",
+ "
AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IA
\n",
+ "
0.027590
\n",
+ "
\n",
+ "
\n",
+ "
28
\n",
+ "
PR_STATUS_BY_IHC_Negative
\n",
+ "
0.024088
\n",
+ "
\n",
+ "
\n",
+ "
19
\n",
+ "
AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IIIA
\n",
+ "
0.023754
\n",
+ "
\n",
+ "
\n",
+ "
29
\n",
+ "
PR_STATUS_BY_IHC_Positive
\n",
+ "
0.022670
\n",
+ "
\n",
+ "
\n",
+ "
40
\n",
+ "
CANCER_TYPE_DETAILED_Breast Invasive Ductal Ca...
\n",
+ "
0.021239
\n",
+ "
\n",
+ "
\n",
+ "
13
\n",
+ "
AJCC_PATHOLOGIC_TUMOR_STAGE_Stage I
\n",
+ "
0.020118
\n",
+ "
\n",
+ "
\n",
+ "
25
\n",
+ "
ER_STATUS_BY_IHC_Negative
\n",
+ "
0.019366
\n",
+ "
\n",
+ "
\n",
+ "
30
\n",
+ "
IHC_HER2_Equivocal
\n",
+ "
0.018906
\n",
+ "
\n",
+ "
\n",
+ "
26
\n",
+ "
ER_STATUS_BY_IHC_Positive
\n",
+ "
0.018800
\n",
+ "
\n",
+ "
\n",
+ "
33
\n",
+ "
IHC_HER2_Positive
\n",
+ "
0.018396
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
CDH1
\n",
+ "
0.018209
\n",
+ "
\n",
+ "
\n",
+ "
41
\n",
+ "
CANCER_TYPE_DETAILED_Breast Invasive Lobular C...
\n",
+ "
0.018013
\n",
+ "
\n",
+ "
\n",
+ "
8
\n",
+ "
MAP2K4
\n",
+ "
0.017434
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Feature Importance\n",
+ "0 AGE 0.223168\n",
+ "1 TMB_NONSYNONYMOUS 0.213920\n",
+ "17 AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IIA 0.038420\n",
+ "2 TP53 0.036579\n",
+ "3 PIK3CA 0.035109\n",
+ "18 AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IIB 0.029607\n",
+ "32 IHC_HER2_Negative 0.027969\n",
+ "14 AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IA 0.027590\n",
+ "28 PR_STATUS_BY_IHC_Negative 0.024088\n",
+ "19 AJCC_PATHOLOGIC_TUMOR_STAGE_Stage IIIA 0.023754\n",
+ "29 PR_STATUS_BY_IHC_Positive 0.022670\n",
+ "40 CANCER_TYPE_DETAILED_Breast Invasive Ductal Ca... 0.021239\n",
+ "13 AJCC_PATHOLOGIC_TUMOR_STAGE_Stage I 0.020118\n",
+ "25 ER_STATUS_BY_IHC_Negative 0.019366\n",
+ "30 IHC_HER2_Equivocal 0.018906\n",
+ "26 ER_STATUS_BY_IHC_Positive 0.018800\n",
+ "33 IHC_HER2_Positive 0.018396\n",
+ "5 CDH1 0.018209\n",
+ "41 CANCER_TYPE_DETAILED_Breast Invasive Lobular C... 0.018013\n",
+ "8 MAP2K4 0.017434"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get fitted preprocessor from Random Forest pipeline\n",
+ "fitted_preprocessor = rf.named_steps[\"preprocessor\"]\n",
+ "\n",
+ "# Numeric feature names\n",
+ "num_names = numeric_features\n",
+ "\n",
+ "# One-hot encoded categorical feature names\n",
+ "cat_names = fitted_preprocessor.named_transformers_[\"cat\"][\"onehot\"].get_feature_names_out(categorical_features)\n",
+ "\n",
+ "# Combine all names\n",
+ "all_feature_names = list(num_names) + list(cat_names)\n",
+ "\n",
+ "# Get feature importances\n",
+ "rf_importances = rf.named_steps[\"classifier\"].feature_importances_\n",
+ "\n",
+ "feature_importance_df = pd.DataFrame({\n",
+ " \"Feature\": all_feature_names,\n",
+ " \"Importance\": rf_importances\n",
+ "}).sort_values(by=\"Importance\", ascending=False)\n",
+ "\n",
+ "feature_importance_df.head(20)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "be133302",
+ "metadata": {},
+ "source": [
+ "**Interpretation:** `AGE` and `TMB_NONSYNONYMOUS` (tumor mutation\n",
+ "burden) come out as the two strongest predictors by a wide margin, together\n",
+ "accounting for over 40% of the total importance. That lines up with general\n",
+ "oncology knowledge: age at diagnosis and how mutated a tumor's genome is are\n",
+ "both well-established prognostic factors in breast cancer. After those two,\n",
+ "tumor stage categories and receptor status (ER, PR, HER2) show up next, which\n",
+ "is again clinically sensible, since stage and receptor status are the same\n",
+ "factors doctors already use to gauge prognosis. This is a reassuring sign that\n",
+ "the model, despite its modest overall performance, is not just fitting noise."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "3549a2cb",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:34.380501Z",
+ "iopub.status.busy": "2026-07-26T15:38:34.379874Z",
+ "iopub.status.idle": "2026-07-26T15:38:35.060814Z",
+ "shell.execute_reply": "2026-07-26T15:38:35.057515Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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N91UCOBeeeWV+Bz3xVlnnRXDXM49+8PnoVevXvGzusoqq8TA8Omnn47b4Jxm28zLcemll8awkM/3ueeeG/eBzwLh0sMPPxw/59ynBI4cM2MEEpRm24DTOgiSzz777HjMBGG///57vJ8JIZNRo0bFMejYBu3E3CsE9fzeYRzHFO5l9+vMM8+M2+f3AgEw55+/Z69JqnLk2qXnCes+/fTT+FnZd999wyWXXFJnn/mdxueUzxDv41pznPyjQzZkTuc8hXnsE/ce989UU00V97Oc68JnhKpk/mGDMPqjjz6K7+X3Xrr+kppQjSRJkjSenHrqqTX8L+jLL78cf/78889rpplmmpqNNtqo5o8//ojP/fPPPzU77rhjzZRTTlkzbNiw+NwXX3wR3zfPPPPUPPXUU4X1Pf/883G5Qw45pKL96NKlS838889f8vXFFlusZq655qrZYostajbccMOadu3a1XTs2LHm8ccfL2v9U0wxRc1mm21W67lPPvmkZqqppqpZc801G3z/iBEjamaeeeaaY489tvDcmWeeGc/BVlttVfPLL7/E5/7999+a9ddfv6ZDhw41f/75Z2HZ888/Py47YMCAwnNvvfVWTefOnePzzzzzTOH5iy66KD533XXX1do+x7/ccsvV2f7WW29dM2rUqPjcb7/9VtOpU6eazTffvGbLLbesGTlyZHx+9OjRNfPOO2/NJpts0uCx3nbbbXG9++yzT81VV11V6/H111/HZb777ruaGWaYoWattdaq+f333+Nz//33X82ee+4Zz/XQoUPjc5wX1sU+PfDAA4VtcJ8NGjQovta7d+/C89xr2223Xc1ss81WOKZFF100Hk/WDz/8UPPEE08UfmbfWNeHH35YU46BAwfG5Xfbbbc6x8i+gWNo1apVzf777x/3Kx3jQQcdVDPttNPWfPXVVyXX/+uvv9YsssgiNdtuu22dbWavdXLBBRfE17755ptaz/N54/mbbrqp8Nydd94Zn1thhRXifZG2x7Xmc8fn78knn6x1rhZccMEGr/3BBx8c18tnO+Ezw31/4IEHxmPHu+++W9OyZcuafffdN15v7nl88MEH8dqffvrptdab1tGzZ8/CeRwzZky8d2addda478n2229f06ZNm5pXX3218By/X1gv+1DfOtN169GjR83cc89dU67HHnssHvf9999fZ/3Za8+9zOd6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Ot94443QrVu3uN88llpqqdCvX78YcrHOJZdcMhx66KF19vnII48Miy22WPj9998n2DFUun+VXNdy95Pwjffedddddda79957h/XWW6+scy1JkiRJ1WAAJ2m82XjjjWNQkh78vMEGG9R6bvPNNy8sP//884drrrmm1jqGDh0avvzyyzDjjDPWWf8JJ5wQ10E11jvvvBM++eST0LNnz4r2kYDnqKOOihVfpfTv3z+sv/76Ye211w7ff/99DG7uvvvuMGjQoBj05IOchtb5yy+/xPd16tQpfPrpp/EYbrnllvDWW2+FN998sxBY9e3bN4ZRyTPPPBPDKl6bfvrpJ9gxVLp/lVzXSvezIQ2da0mSJEmqBgM4Sc3WdtttF1577bXw/vvvF567+uqrw0477RTbHutDlVT37t1jEFcJqqXefffdcPvttxd9nUqufffdN+y8884x8GvXrl18fvnllw/33ntveOmll8Ill1xS0ToJn3788cdwyimnhFlmmSW2ZlI1RqCVqtZWW2210KtXr7DrrruGUaNGxeCIvx944IFhzTXXnODHUMn+lXtdG7OfDSnnXEuSJElSUzOAk9Rs0Z665ZZbhmuvvbYQyNxxxx1h9913L7o81VAEPwRAr776amxH3GijjSra5hxzzBGDpOOPP75oddWjjz4afv7553DAAQfUeY3KLrbHPlayzvbt28c/77nnnnr37bTTTosh1EEHHRTbPRnvjDbQ5nAMlexfude1MfvZkHLPtSRJkiQ1JQM4Sc3aHnvsEW688cbwzz//xLCFMcQYs6uYs846K44BR1jUtWvXGPT07t274m3SakmId8UVV9R57eOPP45/sh/F8PxHH31U0TqXWWaZcPTRR8fgiv3fYostwoUXXhi++eabWssxBtpNN90UbrvttnD99dfHvxNyNYdjqHT/yrmujd3P+pR7rvOTOHDc2YckSZIkVcIATlKzRvsiM2Y++OCDsU2xVPVbdgw4KqpoM6QNlcH7mTmzEoxXdtxxx4VTTz21TtjSokWLwuyZxRAopWXKXSfOPPPM8MUXX4Q+ffqE2WabLZxzzjlhkUUWCc8991yt5bp06RLHRFtnnXVimNScjqGS/SvnujZ2PxtS7rnOLk9lX3pwX0mSJElSJQzgJDVrBCy77bZbDNeYvXKHHXYo633MhMp73n777TgZQKX222+/OPPn2WefXet5ghowHloxPJ+WKXedyZxzzhnHTaPCjMough7CrrwpppgiPprjMZS7f+Vc10r2s02bNmHKKacsGgyOHDmyMH5cpecazLjKOtKD8E6SJEmSKmEAJ6nZIyhhxsoePXrEttJyVVr5lsVkAAQyF1xwQa32RCq7aHE999xz67xn2LBhcdwyJg2oZJ3FECgxOQAVfRPrMYzrda1kPwn8FlxwwfD666/XWu6///6LM5wuuuiijT7XtNZS/Zd9SJIkSVIlDOAkNXsdOnSIlU3XXXddvculSRh+++23WPnGmGVzzz13nDWzMXbcccc4zhjjmWXDGH4eOHBgnBzgww8/DD/99FP8eZNNNokTA+y5554VrfOhhx6KkxLQjkl11ddffx2uueaacN9994Wtt966Ufs+vo+hGte10v2kUo3lWR/nkMo2Jo749ttv42ys1T7XkiRJklRKq5KvSFKVUXnEOF7FTDPNNLHaqpT86/x8/vnnxwftjcx2udJKK4V+/frFlsly5NfJepjYgcCG8coSxjgbOnRoHENs7bXXDmPGjAnzzjtvDHsIilq2bFnROrt16xbDw8svvzy8+eabccwz1nfppZeGnj17jtN5G1/H0Nj9a+j1SvZzp512ivtz0UUXxbHq2A8mdnjppZdiENuYcy1JkiRJTaFFTU1NTZOsSZKkyQBVe3Eyhl79Q8vWdQNISZIkaVI3ok/3Cb0Lzeq7AWNFNzRUjRVwkiYLVGT98ccfRV+jiqpYJZckSZIkSU3BAE7SZOGGG24IBx98cNHXaE9kzDhJkiRJkqrBAE7SZGGPPfaID0mSJEmSxjdnQZUkSZIkSZKqyABOkiRJkiRJqiJbUCVJaoThvbs1ONORJEmSJMEKOEmSJEmSJKmKDOAkSZIkSZKkKjKAkyRJkiRJkqrIAE6SJEmSJEmqIgM4SZIkSZIkqYqcBVWSpEZY/KTBoWXrtp67ydCIPt0n9C5IkiRpImMFnCRJkiRJklRFBnCSJEmSJElSFRnASZIkSZIkSVVkACdJkiRJkiRVkQGcJEmSJEmSVEXOgqpG69evX3j00UfDaaedFhZZZJFar/3666+hZ8+e4fjjjw9LLbVU4fnffvst3HbbbeHll18Of/31V5h//vnDpptuWmuZSpYrJm07mWGGGcISSywR9thjjzDttNMWnr/rrrvC7bffHg455JCwyiqrxOfuvvvuuN36XHzxxXGdO++8czjqqKPCcsstV+v18847L/zxxx/huOOOq7NfN954Y3j99dfDv//+Gzp37hzXMeeccxaWGTNmTMn1Zj399NPhvvvuC998802YeeaZQ7du3UL37t1DixYt6izL9u69997wySefhGmmmSaey6233jrMO++8hWWuv/768Pbbb4dzzjmn1ntfeeWV+N4RI0aEmWaaKSy55JJhhx12CG3b1j/zY48ePeIxlrLqqquGXr16hdNPPz1MPfXU4bDDDqv1+quvvhrOPPPMcPXVV8dzzf4NGjQorLnmmuGAAw6otezgwYPDVVddFRZaaKFwxhlnVHye0rrRqlWrMNdcc8Vl1l577VAJ9rl///5xW3PPPXfYcsstw9JLL13R+QDvP/DAA8Pyyy8fjjzyyKLLs677778/PPXUU+HHH38Ms88+e1h88cXjdrLXZu+99w4//fRTnfdvvPHGYdddd23wmNgOx/Tcc8/Fe5Pr/7///S+ey4T7geu37LLLhuaAY15//fXDVlttVfTn5LHHHgtXXHFF2G233eL1liRJkqRqsgJOjfLPP/+Ek046KTz++OPxS2weARRh1rffflt47qWXXoohyQ033BADsXXXXTfU1NSEPffcM1x44YUVL1dK2jah4HbbbRe6du0aw0L+/P333wvLERyy/xdccEHhucUWWyy+Jz0IHgghss9NN910MRRkG1999VWd7b/wwgvhmWeeqfVcOqYBAwaElVZaKayzzjrhtddei8+l8Af1rRf//fdfDAw22WSTGFwRpBDgETJstNFGYezYsYVlOWeEVYQ7hDScR87Bzz//HDbccMMYbiVvvPFGDFOz791///1j4DVq1KgYXHE+CeQIeghI60MQlM4XgRbHRACSnuMcgPPE+cojhOI9XMu0fw899FA4+eST4znKOvvss8PDDz8cnnjiiUadJ9ZNeMZ+bbHFFjGE22CDDWrdFw3h/iLE5XOx3nrrxRBsn332Ceeee25F5yMFgtyXvXv3juc+7+uvv47h7OGHHx5mnXXWGB516tQpPP/882HRRRcNn332WWHZBx54IEw55ZS17l8eKRisD/c96yZInmeeecIaa6wR70u2TVib3HPPPfF6NRcc87vvvlvy54SwmfNM0CtJkiRJ1WYFnBpl4MCBMWy49NJLw8EHHxzOOuus0Lp165LLEyRQwUagQ4VZtgKJII9QoZLlykHwRJACwqcFF1wwVnPtuOOOsbLunXfeKQQhP/zwQwwzCJmy1XxHH310WHjhhWPFWL6arVyEfptvvnlYffXVw5133lk4pl122SUce+yxMRBhXwhRGkIAedNNN8X9z4YoVDMRjFExdckll8TnLrroohiOEsxQTZVF5Vl9oQlVfoRKhGP5SjzOVX3XGlR/JSlEI9wiDGsswljOOxVt22yzTXyOqj6Oj/P76aefNuo8oV27doVrTFjGfXj++efH6shynHrqqXGdp5xySuG5Y445phCklns+CD6vvfbaWMlHQHTrrbfGIC+L/fv777/DW2+9FSsas3755ZcYuGURKufv33Jw7qgufPPNN2PlW0IIyvZBoMnf+/TpE4NDKuO4b6jg4/5q2bJlDBz5TK+11lq11s/7WHbo0KGhY8eOsfKT6lGuUapITZVqhHyEpl26dInbbNOmTRgXn3/+eVwv4Tfh7HvvvVenileSJEmSmpIVcGqUa665Jn5h3nbbbWPFEMFWfW655Zbw/fffx4qgYm2SqQ2z3OUqNd9884UpppiiUJHH/hPaUCFF1RCtodVyxx13xDCCkCJ/TARwnL8rr7yyrHURqhWrYJpjjjliWEQrZqryI0AibMyHb0jBSCm8l9bCYm2wBJVTTTVVmBBoI+baJfx9s802q9USWel5Kob2XK4ZgVg5COw4p3n1neNihgwZEre70047xTbq7LGmSspnn302BnT58A0zzjhjrTbrcZGq7/LHxXZpCwbnns/VaqutFs83P4PKOX4m+GOfCCCvu+66WuvZfffdY/UZ9yftzVQOEpp+8cUXhWUINFmO60EFHpWOK664Yvjzzz/H6dgIOQn5qASlGjV/niVJkiSpqVkBp4pR1cMXYSp0qLah1Y92RipzSiE4IDzr0KFDvesud7lKMV4WLXWMIcdYVlTXMQYc9tprr9C3b98645CVg/bHm2++udZzL774YqyyylYSERAtsMACdd5PWEKFEsfdkO+++y5W7hBAFLPCCivEYIKKJcZ5I8iobxy5hrZTLLib0Ah9TzjhhHhs3CdUXRHscH0bc55WXnnlOq9zn9DuSnhXLAQuhpCIUOzjjz+OgQ4tpVROVip9jmhzZp1Um7GfVH6lewmVXFfGOaTNNis77mF9FaS0SBOMcd45VwRthGUJ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/EywrbnnnjtsuOGGoX379hWdD/z666+hT58+8VzvsMMOJd8zbNiw8NRTT4Uff/wxzD777GHxxRcPq622Wq1lzjzzzDBy5Mg671111VXjvVcOPoN8zseMGRP3aYMNNojnKTnhhBPi9VtkkUVCc8Axr7jiimGttdYq+XM6Jy1btgyzzTZbvZ8fSZIkSWoKVsCpUQjIevXqFS688MJw5ZVXFg3BzjrrrBjqJPx92WWXjcHUV199Ff75558Y7qy00krh5ptvrni5UtK2v//++xi+EVCwrrXXXjuuKyEUYf/PO++8wnOtW7eO70mPq6++Orz44ou1nptiiiliUMY2PvjggzrbHzBgQLjjjjtqPccxLbXUUjHg4sv/33//HYMAwkkCpKS+9Sann356DDsIXwhC3nrrrbD88suH/fffP/z333+1luX45plnnnjeOHbOxa233hrDhnvuuaew3GOPPRauvfbaWu+94IILwrzzzhv69+8frzchHMEm14Ywpj7t2rUrnC/exzERpKXnUvjHeeJ85X300UfxPVzLtH/nn39+OPjgg+scI+eD12688cZGnSfWzXvZrzZt2sSfF1100Xjc5SLEI7DjT4I2wt2VV145hoiVnI8U4HLdCLa5H/J+++23sNVWW4VVVlklvPrqq/F+fOedd8KJJ54YAzICwKRv374x8M3ev+k4y7HvvvvGcIpAdOzYseGaa66JYfXHH39cWOacc86J16u54JgJDOv7OZ0Tzvtrr70WA9B+/fpNoD2WJEmSNDmwAk6N8sQTT8TqKIKEc889N1ZtUU1Syp9//hkrgqgu4stwNgDgi/2HH35Y0XLl2HbbbWO1Dqgu6tq1a7jvvvtiePH++++H559/Plx++eXh0EMPDRdddFGsaiM04ZEQwFE9c/TRR9daN1VK5SJso9qI6j0q4FLF2ymnnBKDwe7du8cAhQqthhCkURX2wAMPxIq+5JBDDonh0hxzzBFfx2233RafJ2jLV40RAn7++eclt3P77bfH80I4tvnmm9d6jSCrvmuNI488stY+E7Qdfvjhtar9KkWASbj06KOPhm7dutWq0ONcUIHWmPMEKtWy15jKs2OPPTbeQ+VgvVR7XnLJJYXnCM+4zyo9H4RcVJWxLq5dvgpu1113jaHtu+++Gz8nWdxHhMhZVMXl799yvPnmm+GKK66IAeYaa6xRq6ow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ZJP4L/+zzjprrdd79uwZjj766KbcR0mSJEmSJGnyCeC6du0azjjjjJKvL7XUUuO6T5IkSZIkSdLkG8B16dIlPiRJkiRJkiRVYQw4SZIkSZIkSVWsgLv00kvD8ccfX/L1Aw88MJx66qmVrlaSpInK4icNDi1bt53QuzFZGNGn+4TeBUmSJGn8BnDrr79+mH322Ws99/vvv4eBAweGt956K2yzzTbjtkeSJEmSJEnS5BzALbTQQvGRt8suu4Ru3brFGVKXXHLJpto/SZIkSZIkaaLWpGPArbzyyuGll15qylVKkiRJkiRJE7UmC+DGjh0bHnvssdCuXbumWqUkSZIkSZI0+bWg3nrrreHiiy+u9dy///4bPvroozDddNOFHXbYoSn3T5IkSZIkSZq8Arj55psvbLzxxrVX0qpV6NSpU9hss83CNNNM05T7p4nIaaedFgYNGhT69u0bll122Vqv/fzzz2GjjTYKF154YVhxxRULz3/55ZfhyiuvDC+//HL466+/wvzzzx8233zzuGxWucsVk7adzDDDDGGJJZYIvXr1CnPNNVfhedZ/7bXXhpNOOilsuOGG8bnrr78+XHHFFfWu/4477ggzzzxzWHfddcPZZ58dVl999VqvH3vssbFC9IILLqj1/Keffhouv/zy8Prrr8cQu3PnzmHPPfcMXbp0KSwzevTokutN/vvvv3D77beH++67L3zzzTdxXxiPcbfddgutW7eutWxNTU144IEHwoABA8Inn3wSP6+cyx49esQW8oTr9Nprr4Ubb7yx1nvvv//++N4RI0aEmWaaKY73uM8++9SZmCVv1VVXDf/880/J19dbb704e/IhhxwS2rRpE84444xarz/33HPhsMMOCw8++GDcLvvHMTMpzCmnnFJr2f79+4fzzz8/LL744uHqq6+u+Dyldaffbdwj3bt3DzvttFNo2bL8omHOFfcG25p77rnDVlttVfjdWe75SPfJ9ttvH68Px1UM98l1110XnnrqqfDjjz/G68Hx77HHHmHOOecsLLfpppuG77//vs77t9tuu/h5aAjb4Z7leowZMyZe/7322qvWuKBrrLFGvH6rrLJKaA445i233DLsuuuutZ6/++67wznnnBMOOOCAeG0lSZIkqVkFcFhppZXCOuusU+f5F198Mc6IWuw1Tdr++OOPcN5558VAh8DqqquuqvU6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l3ROy8H2mOl6scUWq7M9ZvvhGo1v3K8dO3aM92qy3HLLhZtvvjlsvvnm431/JEmSJKnJK+Cuu+66+MWWx9lnn13r5+zzkpqPZZZZJnTr1i1st912YdVVV40hVO/evYu+vvrqq8fXjzvuuIq2cffdd4d55pknLLroonEbhFynnnpqDMSefPLJuO70WGGFFcJqq61W6zlClWTPPfeMk71ce+21heduueWWWssvtdRSYd111631HNM+P/vss/G9BHZ5G264YbjgggsKP1988cVhlllmCV27do3ngLDssssuK+t4CRTZziabbBK33b1797iuLbbYIlZiEf7ttNNOoWfPnnXeu88++4Qddtghhn4NWWeddeJ4m6V+TthvXit2XRZffPEY9nH8BHcrr7xyeOyxx8o6TtbJ+++6664625tQYRfXasiQIbWe69y5c4NTfkuSJEnShFR2mQtfmvli3BC+rElqXk444YQY/ODOO+8M2267bVhyySVjYJR/fdCgQTFYIujYaqutypohefvttw/nnntuOPDAA0OLFi1iNRYB13fffRe23HLL+EgI6Kicuv766+usi+XZPtu9+uqrw3777RefP+yww+IjIezq1atXOProoxt1Ph566KFw6KGHhvvuuy+GZ/jiiy/CWWedVdF6+EeINddcM/79yy+/jOfszDPPDGeccUasyCLc43xvs802cZkBAwaEO+64I7z00kuxaq6aLr/88niOuA577LFHDAWp+HvllVfCo48+GgPMcsw888zh2GOPjYFbQ5WRVMaNHTs2Vqi1bFn333eopvvss89ilSWVeFTYzT777KFdu3aFKkVm2+a9LJOeT1ieY/j888/D8OHDY4hJ1R8TBKWqy48//jhWx+UrGj/99NO4zTnmmKPs/ZUkSZKk8R7AUbHCQ9LEjTCIwOHpp58uBHBZG2+8cejUqVOsJisngHvxxRdjsLLvvvvG8A0zzjhjOOmkkyreN4IUgsFLLrkk7sPrr78ell566dDUnnnmmVixl8I3cE4uvfTSRq+TAIgKQIK89I8RVAFyXggdafvde++9Y/Vhly5dQjURgB5xxBHhgAMOiNtMuD60a/IoF8EsYd6VV15ZCETzaKndeeedYyg2wwwzhNGjR8dqw//973+FZaiEpPKP9l1angll77333njOqSLEwQcfHMM1Xuc8EmhS/ZjCtf333z++n6CUKjzCO6r5si2offr0ie99+OGHC9umEpP7iDCS/SxnfyVJkiSpKflP/tJkhgCDNsnsGFpZhGm83rp167LWRzUbVUnnn39+HN9sXNB2utdee8UqJarwqIKrBvaZseJuv/32eD4ai6oqQpzXXnstBklUl+24446F16naY/w0WlEJwhZaaKFw5JFHjtO+U7XFNrMPnsuiwu3333+PlW/jioCKCrhTTjklBlV5nD/aW9dYY4041hznlUo/jpcANQVgnBeCth9++CE+qDz76aefaq3rwQcfjMdDSzLVkLTMHnLIIYXXCduoHOzbt29crlgrLa2/PM/7E6oq2U9Cv3L2N4+qPMa8yz4kSZIkqRIGcNJkgIkGCCxeeOGFsOuuu8ZApEePHkVfJywihGO5cjCmGG2XBDRUvlGNRMhEa2olqMijjZMqKRDE3XrrrTGoaWq77LJLbKmn4ol9Zuw7KtOyoU05OGZCJfaZY6ZiMFspTFsjVX1U3BGK8fdxbXWkhTU79h2P/BhttHmCce2aApV0BLLnnXdendcIzag44xzQQsqMpLStUuU3cODAQssvVXlUBFKFRzVgqfFCufdYH+HmBhtsUPZ4dQnXkgkxOE8JVXSbbbZZnCSjnP3N4/6mHTY9qJaUJEmSpEo4C6o0GbjmmmvCPffcEwMIqrBoL83ObJlepyKIaioCCyZVKRdjsTHeGEHT0KFDY2UZ7X6ETuW2rrMPVCWl8IgQhaCGiQSoampKrJe2StoVGdCf4JFqu4suuihWs9GeWukYcEwCQUsrgVg2yGFda6+9dgyW5p9//nHed8bZO/7442s9d/LJJ9eqFkzjy1GRWMmsp6UQvhE2EsSlsQITAixaRrOBbpJm12VcNlqK0yyxYIy3fBUmraWMn9emTZs42yuVZ8zeynHkZ5MthYCPcI2W1IMOOigGf4RuVLmVu795xxxzTBwzMKECzhBOkiRJUiUM4KTJQHaShYZeJwShOozxtxjgvlwEPeutt158HHXUUXGWUMZyKyeAI9CgimvuuecujAeGaaaZJgZL5QZwhDb4+eefC+OGJbQ7MnlDFtVMm266aXwcfvjhMSyjDZawqVKsi3HFaGWkVTMbNo1vjKOHt956qxAQjiuqBamA49zQGpoN+wjHqKAshdfzlYy0LROwZccS5D6kEnLFFVeMzz3yyCNxht5SwVgp3C/cx1S4MfYcbbTrr79+2ftbLIAstyVbkiRJkoqxBVVSLYRnSy21VBwQvxy0s+YxOyUhDSFLOWg1nW222eLYX9mxzQhjeHz00UdlrYeqPQIWKtrys2dSSZVmaS62z4R3BDPl7nMxVFtx7NWe4bScNkzCU8KyYuFVNvgqF62zVAwyGQPBVsIEExx3sVbRv/76K/7J/UR7MZVwCdcovY733nsvVj2m8A2PP/540aC3oXH7uM6EkFRy8qDaLc3gWs7+SpIkSVJTswJOUh3nnHNOHNuNAGSdddap9wzdd999sd2UMeNoa/33339jO+vzzz9fckytPKrcmMEyj4o4xuaiPZVxuBoy/fTTxwDxuOOOi62IBD+Mb8eMrLS3Uk0Fxh9jwoRtt902tuQy6QTBEq2O2Qq8hjBOGVV1tJcOGzYsnHvuubEKbkIHcLTY0gbM8VL5RdsqLZOEYLTcMvEArb2V2mijjWKAxbqZ8RXLL798rI6j7fO0006L14v1055LiMuEB9xLVOIRhHEdCbqYoIL9TDPnrrDCCuGrr76KIR8tu0888UTRWWnZLvfXvPPOG1tVS1VpMunDhRdeGL799tt4Pyfl7K8kSZIkNTUDOGkSRyiWWjPLfX2llVaKkyDceOONDQZwhCoEZddff32cZIBAhVlGGQ+O4CWPiQGy7aGEH1RkbbPNNkXXv9tuu8VZLPMhTLYNMouqL9pf+/fvH4O99u3bx5ZExgNLYQ+tjkwMwED9hDwEOZyHl156qRAs1YeAjeXTpARUV1G9xUQOTGKRx/khpKsUFX3sf6mfE57Lj9lH+EgVIWPdEZBSAcg4bARhTIZQ7vbzbbu0du6+++5hwQUXLDzHtSckJdQjyCTUpKV33XXXLSxDizHnnfHUCAMZb49JKzj34LwzThv7euedd8YqNu4/wlOCuuSKK66I55n7gskTqGTr3LlzDF+zCNhuuummuB5Ct6xy9leSJEmSmlKLmnHpt5IkqQwEkKkNFG+++WYMCWlnJbCdmDBmYZwNtVf/0LJ1eZNDqLYRfbp7SiRJkjTRS98NmJQvXxSQZwWcpHr98MMP4bvvviv6GtVLTTGzZ3NDqyYVY8UwoH9+gofGYBwyWi5LVdhRlVVN43v7aXZTJuXg/NImTEvrxBa+SZIkSVJjGMBJqldqCyyG9j7GA5vU9O3bt+T4dZtssklZ49E15NFHHy052+pcc80VBg8ePM7baE7bP/TQQ2MId8QRR8QgjjEDGQdOkiRJkiYHtqBKklQBW1DHnS2okiRJmtxaUFuOt72SJEmSJEmSJkMGcJIkSZIkSVIVOQacJEmNMLx3twbLzCVJkiQJVsBJkiRJkiRJVWQAJ0mSJEmSJFWRAZwkSZIkSZJURQZwkiRJkiRJUhU5CYMkSY2w+EmDQ8vWbT13FRrRp7vnTJIkSZMdK+AkSZIkSZKkKjKAkyRJkiRJkqrIAE6SJEmSJEmqIgM4SZIkSZIkqYoM4CRJkiRJkqQqchZUla2mpib8+++/oVWr4rfNP//8E6aYYorQokWL8X5W2XZSav+K7X96rj5p+VLH999//8U/W7ZsXJ49Ic4b+8yxs92mwDlkfaVwbniUOlf5a8NyPNL7ii3L+WrM/qd1Z/erqZV7PrL3QFPsS6ntNuVxsg3WNSE+5+XsT0M/5++jCfU7S5IkSdLkxQo4lW2bbbYJU045ZbjvvvvqvPbtt9/G1wYPHlzr+YEDB4a11147TDfddGHqqacOnTt3Dscee2z48ccfG7VcMWnbrVu3ju9lHSuttFJ49NFHay13yCGHxOX69u1beO7MM8+M70kPXp9qqqlqPff++++HX3/9teSxb7vttmGjjTaq8/zdd98dVl555dCmTZu4b0sttVTo169frWXqW2/y/fffh/322y/MNddcMaCaddZZw0477RQ++eSTOsuyvqOPPjosvPDC8ThmmGGGsOyyy4azzz47vpYceuih8fmsX375JRxxxBFhgQUWiPvUvn37sO6664ZBgwaFhkwzzTSF88Wx8v7sOfzf//4Xl+M8cb7yHnjggfgermXaP37efPPN6yx7+umnx9dWWWWVRp2ntO60ryy/1157hZ9//jmU6/fffw9HHnlkmHvuueM6FlxwwXjef/jhh4rOB1588cX4+hprrFFye2+88Ubo0aNHmG222eKxsc/dunUL9957byFMRNqf7LZ4cF3L8fbbb4fNNtsszDLLLPEYVlxxxXDDDTfUCrh5nuvVXHDM3BPl/pycddZZ8byfeOKJ421fJUmSJE2+DOBUFoKF+++/PwZb11xzTVnvIdwibOEL/ccffxx+++23MGDAgDDjjDOGa6+9tuLlGkIoQFDwxRdfxLBr0003DR9++GF87a+//go333xznf0n5OM96TH//PPHYCX7HGFWpfr06RN23HHHsPPOO4fvvvsujBw5Mn7RP/7448M+++xT9np47/LLLx/efffd8PDDD4c///wzvPTSS7F6Z7nllgvvvPNOrWvEc88880y4+uqr43n88ssv4zkkfCNIKYX3sp0XXngh3HjjjWHMmDHhvffei/t71VVXhZ9++qne/fzjjz8K5yttZ/To0YXnbrnlllCpjh07xkD3m2++KTzHcV933XVhnnnmafR5QpcuXeJ+sRwBI+8hvCvX3nvvHUPTu+66Kx7nI488EgM/znul54P7kaDrueeei2FvHvvH67PPPntchn1+7bXX4n1600031XlP7969a92/PM4777wGj4l7hMCV0JbAj0CSsPrpp58Or776alwmVYsS+rHe9DN/Zn9uqkrBauJzwe+D66+/vlaIKUmSJEnVYACnshDKLLroouGyyy4LDz74YPj666/rXZ7Ag/CGIOrggw+O1VRUmxBmUY1DeFDJcpUgQCBwIKhIVXAEelQO3X777WHYsGExwKiWjz76KB7TqaeeGsO26aefPlYhbbnlljFsoQru8ccfL2tdHP/YsWNjheASSywR2+XmnXfeGCYSQhEEJYcffngYNWpUeOihh8Jqq60WK6GmnXbaGDadccYZ8fyWwrkmJOS9VO1xDWaaaaaw5pprxqBp5plnDuPbnHPOGdZZZ5147yVPPPFEPB8bbLBBo89TFq2JSy+9dNhjjz3isZeLc7L//vvHcI9zxbYOO+ywcMwxx1R0jFTS3XHHHfFeWWutteqE2wShu+++e6w+veiii2J1IsdGJRznhipLPpdNYejQobECkUC8Q4cO8f6hSpJ9WmGFFeIyBNR8rrbYYot4T/MzFltssUK13xxzzBHPN/diFoHuqquuGiszed+5554brzHHnw0Be/bsGe+9tm3bxuCRQLmpDRkyJHz11VcxQGU/CWAlSZIkqZoM4FQWvoTTpkdl2TLLLFNvNRUIuggm9t133yZZrlKpqiaN7cT+77bbbqFTp05hk002KbuKLy9V/mQf+Qqe/v37xz8JaPKoyiMQuu222xrc1t9//x0DAgIYgrQsjuuggw4Kzz77bKxyY1nCGIIkAr9KpO0QfNC+25xwPNkqSCrMdt1111pjv1Vynuq7rlRJlluNRSD55JNPxtBvXBA+0e5JmEZoRdiYbfd87LHHYnUi7dNN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DwK3nXbaKYZy2QkU6jsffG4I34pV/PG5IqRKYywSIHNdWQ/XljZNJkzgXiK4JNRMOC5CxPy9RIVgQzhfm222WRzvjKpD7h/GhCOcpTowOeecc+JxzjjjjHHChRVWWCGce+65McTkXPB+Wjazx8y+EyISVhLYMdsp+0QLbQrHWZZQkRCVsfC4V5hwg21wnkvhmLOfy1I/E1byGajv9wEVquW2EEuSJElSJVrUNMeR1zXRGTZsWFhyySVj5doSSywxoXdHUjPH2I+Mf0dLKG2uExMq/eJkDL36h5ati1dlqrQRfbp7eiRJkjRJSN8N6OBpaKia0iUmUpkYB+6SSy6JFSu0lDY12udKtdBR2VKsKk1NLzugfl591WoTo0nxWPm3lvzYe/lKzGqiypFqttVWWy1WQFJpSRv4xBa+SZIkSVJjmFxonDBGE4PnU/nGbKm08jU1xorKt9SlB+NFqfoYA67UNeBBq/KkYlI91quuuqrkMVUjOC/W4sl4drS20mbKWHIPPfRQ1bcrSZIkSc2BLaiSJFXAFtRxYwuqJEmSJscWVCvgJEmSJEmSpCoygJMkSZIkSZKqaOIcTVySpAlseO9uDZaZS5IkSRKsgJMkSZIkSZKqyABOkiRJkiRJqiIDOEmSJEmSJKmKDOAkSZIkSZKkKjKAkyRJkiRJkqrIWVAlSWqExU8aHFq2buu5a8CIPt09R5IkSZrsWQEnSZIkSZIkVZEBnCRJkiRJklRFBnCSJEmSJElSFRnASZIkSZIkSVVkACdJarauvPLK8Omnn47zMpIkSZI0ITkLqqTw2muvheeffz6eiSmmmCLMOeecYeWVVw6zzjpr0dfnmGOOsNJKK4XZZputorP3999/hyFDhoTPP/88zDXXXHEb0003XXzt+uuvD6NHjy75XpbfYost4t//+++/0K9fv7ifm222WWHdPFefxRdfPKy55prhrrvuCjPPPHNYa621ar3+wQcfhEceeSTsu+++8Tjx22+/haeffjp89913Yb755ov7PNVUU5V1vI8//nh49913499btGgRZpxxxrD00kuHRRddND7Htn766aew/fbb13nv7bffHpfv1q1bvdt45513wlNPPRX222+/oj9nXXrppWHttdcOnTt3rvX8v//+G4YOHRref//9MPXUU8f9W2qppco6Rrb3xBNPxL+3bNkyzD777GHFFVeM16YpHHrooeHmm28O8847b/z5iiuuCBtssEGYZ555Si4jSZIkSc2NFXCSYhB01FFHhffeey8MGzYsnH322THMuOeee4q+fuGFF8bX77jjjrLPHkHNAgssEHr16hWeffbZcMkll4QuXbqE6667Lr7+8ccfx/XzeOyxx8KBBx4YXn755cJzhHYJ+3PAAQeEHXbYIYwaNSo+V1NTU1iWx5133hm3lX2OEA3nnntuuOWWW+rs40svvRS3S5iHRx99NAY9p512Wnjuuefin4R4PF+Om266KZx55plx2wRxAwYMCMsuu2w45JBD4usEmLvuumvhPCf3339/2HnnnQsBaH0IRg866KCSP2dxbClITV544YWwyCKLhB133DE8+eST4cEHHww9e/aMIVr2nDe0fY7x7bffDn379o1B5bXXXhuawt577x3Xl3BNhw8fXu8ykiRJktTcWAEnKaISjQqphABon332CVtuuWXR1/fcc88YgvXo0aOsM3jwwQfHoOfhhx+O1WAYOXJkDL1w6qmnFpYlgLvvvvtC7969a1U6JVdffXXYfffd43K33XZbDGCoSsvuH3+nqiv7XKXYBsHUxRdfXHjuq6++Cp999lnZ61hwwQVr7cONN94Ydtlll3D00UfHAPLkk0+O+7/KKqvEQO7HH38Me+21VzjxxBPDMsssE6qJir/1118/hoCEqqnqD6+++mqsjCsHlW/ZY6QijXuDc9e6det4vqh8pHJxjTXWqFOp9tdff8VQ8/vvv4/VeSussELhtYUXXrhWlST79MADD4QRI0aEaaedNu57dpm77747nsdVV1211jYIizt16hQrN/Hzzz/H+2fs2LHxOpRb8SdJkiRJjWEFnKSi1l133fDDDz/EQKiY1VdfPb7GMuX46KOPYqCUwje0a9curLfeehVdAbZHhRjhIJVa11xzTVWu4B9//BG+/PLLWLGWlVpnG4u2UqRw68gjjwwLLbRQDN3AcRE6HnPMMaHaqM6bYYYZwjnnnFMrfAPH3diWTu4dgi3GZaPCkYCMtt977703trfSRprQgrvYYouFk046KVYZHnbYYYXQN4V5b775ZqFKkkrHL774Ilbc8XN+mddffz1W+mVxn+60006Fakmq/Oaff/5www03xKq/DTfcsHD+JUmSJKkarICTVNRbb70VpplmmjDTTDMVfZ02QCqQCHDK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RvTp7jmRJEmScqyAkyRJkiRJkqrIAE6SJEmSJEmqIgM4SZIkSZIkqYoM4CRJkiRJkqQqMoCTNNH5888/40MTx7n4/fffw7///juhd0OSJEmSJphmMwtqTU1N+O+//8IUU0xRcpm//vorPqaddto6r/HeMWPGhFatWoWpp5661mtjx46N651qqqnK3m5aXzFt2rSJy2eXadGiRWjbtm38s1x8af7777/rXYZ9/ueff+K683gv52OaaaZpcF/KOZ76VHKsDW2L42nouLPXmPPEezjOPL7Uc315jf3J/1xq+WI4ppYtW9Zahp/Z50qua6lttW7dOkw55ZShOUnBDftWCvcYx8J5aC722GOP+Fm//vrrq7aN9PsGXLf6ztH4uhZNcS747I3v+3C22WYLN998c9h8883H63YlSZIkqbmY4BVw1157bVh22WVj0ETosuCCC4YTTjgh/Pzzz3WWXWONNcJ0000Xnn/++TqvvfXWW/G1Tp06hd9++63Wa6uttlo48cQTK9puWl/79u3D7LPPXuvxzDPP1FmGL5gEOMsvv3x44oknyjr2ww47rNZ6Wdcss8xS6zmOtV27duHRRx+t9V6Cga5du4Z99tmn6L4QQK200krh6aefLvt46pNfP+dt7rnnDrvssksYNmxYyWWLbauc485W9Cy55JLxGn3wwQd19uvJJ5+M7//qq6+K/lxqeY4hv29vv/12nWU4Bo51/vnnD3vttVf48MMPy7iyxbfFMXTs2DH06dMnNBdcv/3337/eZQ499ND4GWpOCNnzQXtT47j57HHtZpxxxhhA8jvjjDPOKBkwV/taNNb3338f1z3XXHPF31MzzDBDvKb33HNPGB+49wkJJUmSJGlyNUEDOMKjI444IgYyI0eOjG1KgwcPjl8Q77vvvlrLvvPOO+Gll14Kq6yySrjmmmtKrpMvxuecc06TbZcAbPTo0bUea665ZtFlfvjhh7DEEkuEzTbbLHzzzTcNHv+ll15aa71UoV144YV1tnX44YeH3XffPfz666+F95500knhl19+CZdccknRffn2229jaLTJJpvEv1dyPPVJ7ycAfOihh2I4RSgxaNCgksvmt1XOcacqIALEL774IoaN9V33Sr3//vt19o1rV2wZwsC77747jBo1Kiy11FLh2WefbdS2qIbr27dvOO6440L//v0Lr1Pdlw10WI7K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bNmy7uGpVauWC99atGhhW7ZscYFYoHvvvdfatWtnQ4cOdc/79etnb775pgsLFS5t3rzZ7TNkyJBk36/CJ53nmmuucf1WSLVixQp3Tb/44gsXDuk8CvS++eabBNf+wIEDQQFeYjp37uyuxxNPPBH2uUfh0zvvvONCuECvv/66Pfvss5Y3b173+XqvP/PMM9axY8eIzr9t2zYbM2aM3X///UHn0+eRXLAaC7pfde5WrVr5t91www0uXAUAAACAeEUAB6RxPXr0cKFNpPv89NNPrjpLFWUKi5KzfPlyd/zEiRNdwOVVXX3wwQcuaGrevLl7eK677jq79NJL7T//+U+CthSCzZw50x566CF79913/QGcwp/AAEhVZQrLBgwYYCmhvioUXLBggdWoUcNfwTdixIio2lFI6FWdqepNYd6LL75or732mnv/ChlHjRplDz/8sNtHIZmCN12zSMPNlBo8eLC9/PLLNmHCBGvZsqV/u8LJ0FAwKQoyn376aevUqZPlyJEj0f1URan3perAyy+/3B+oBtq7d6+tXLnShYEKT1Vhp329iksFrfocdG2KFy9uFStWtMyZ//9fU9r/zJkztmTJErddAaeuf/fu3V2ILD/++KMVKFAgqNJR9FkriKxUqVLE/QUAAACA1MIccAASDAdVJZsq4SKxdOlS97Nt27b+bQpHunbt6kKUaLz33ntuWOMLL7zgwrh58+bF5NNRgKP36IVvkjNnzhQHepI7d24rXbq0C5lEf1YFmkJEDdnctGmTPfbYYzZs2LAEQ0hT259//ukq+VTlFxi+icKvBx54IOK2HnzwQfP5fEFVjOGupwKvO++80/r37+/CNQWRgSZNmuTO3bNnT7vpppvc49Zbb3WhmkdVlzrPK6+84vpdtWpVW7t2rf91hbIKzj777DO3n56Lqi015FfGjx8fFNaKKjsVKHsVe5H0FwAAAABSExVwQBr3yy+/JKh40tBJVQmFo4ogzVOmaqFIXHnlle5n3759XcCk4CklVNmkAEbBUb58+Vw1nSrGVDGX2jSHmKrXFPTcfffddskll6SoHVULHjt2zM17pwBIw21VdeZRlZ7CIp1D88Rdf/31CcKhaGl4b+jnqYAvdFEC9SmSYabJUdWbqun0+SqMC71vjhw54oaFagiyKtFEoZnusbp161r9+vVddaCqGgcNGuQPOXv16pXg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wAEAAAAAAAAxRAAHAAAAAAAAxBABHAAAAAAAABBDBHAAAAAAAABADBHAAQAAAAAAADFEAAcAOGfKly9v33zzTdxd8XjtFwAAAIC0gQAOQJpRo0YNGz58eKLPPa+88op7LdTmzZutV69edtVVV1mZMmXs+uuvtyeffNL27NmTovMndT49L1KkSIKHzhdun3LlylnTpk1typQpCdr/4YcfrEOHDlahQgWrWbOmDRo0yA4fPhxRnyPtS2rZuXOnHTt2zOJNvPYLAAAAQNqQ+Xx3AABSy65du4KCp9DnHm3Ta4F+/PFHa9GihTVr1sxGjBhhJUuWtK1bt9r3339v3bp1swkTJkR9/qTOp+ddunRxgV+gnDlzht3n77//to8++shuueUWmzZtmuunrFmzxgYMGGA9evSwZ555xrZt22YPP/ywLV682L7++utk+xxpX1LLhg0bLE+ePKneLgAAAADEMyrgAKR7J0+etI4dO1r9+vVt4sSJdt1111np0qWtXr16NnDgQBs3blxMrlGuXLkSVJ1dfPHFYffREElVpKnKbfLkyf7XK1asaHPnzrX27du71xo1auQq7jSc8s8//0y1vqhCrFOnTla2bFlXGahrUq1aNfvss8/c63v37nXHrF69OqjdKlWq+PeROnXq2Hfffef+fN9991n37t2D9vf5fK4i7+2333bP9+3b5/bRe7v00kvtoYcesr/++ivomOPHj9vgwYNd5aL2U2C6f//+oHOqb8WKFbNrrrnGnn32WTtx4kTE1wYAAAAAzhYVcADSPQVCGn768ccfh70WGTPGz+8qLrroIjt06FCSfVMgJVmzZk218952223uXAr/1L6CsFWrVtnRo0fd62fOnHEhncLMQNrm7RM61FNVfA8++KALDHPkyOEfTrt8+XJr2bKl/7yqIPzwww/d+Xv27Glt2rSx+fPn+9u89dZb7bfffrNhw4a5kG7WrFn2xhtv+IfQfv7553bq1CnXx7Vr19ojjzxiR44csRdeeCHVrg8AAAAAJIUADkCa9uKLL9qbb74ZtE2BTt68ef3PvaqtypUrn5PzJbWvKr/atm0btu2pU6e6cKpv376Jnl9hl6rBbrzxRsufP/9Z9dvri4bhaojuxo0brVSpUu61d955x2rVqmVnQ20rgFNApgo+0TDbBg0aWIkSJVxl3+zZs239+vUuWPNev+yy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n9Nx06dPt8aNG/vbUVC3cuVKV4Xnadq0qWtr6NChib4XBWJdu3Z1/cuZM6e/PYWC6ruCwBMnTljlypXdfgMHDnT76D2oP1988YU7TtVuX375pauy88K+ihUr2siRI104eOzYMfdeWrZsaU8//XTMPhsAQHRYhAEAAADABeO2225zQZkUKlTIDbls3769C99Ewzn1WL9+fdBxbdu2deGbqGrtkUcesYkTJ/qryObNm2f9+/f3D13VMFYFb96w0sDzB4ZvSVFAqCBwwoQJdvToURcmhvZL7XlVeBrOqvN6lXAK5+bOneuCNC+0U8WcF7798ccfNmvWLHcNFBxOmjTJpk6d6obOqroPABA/GIIKAAAA4IKhOd4Caf63cNtUCRaoTJkyQc9VJadA7ODBg7Z582a3LXTONwVbCsECaR65SAwfPtyeeOIJu/LKK92ccVmyZHEVart27QrazxtqGth3DSf1AjbxgsNQqgYUDZddtGiRf7vOo4o8AED8IIADAAAAkObt27cvwXOFXZoLzlscYe/evW44q0fPQxdOULiVnEOHDlmfPn3csNEWLVq4bQr7VAkXzQxAXlXfnj17wgZ/uXPndj8V9Gl+OABA/GIIKgAAAIA076uvvnJzrAXOyabhnhrSqco3DSvVNo9WQtX8b5qnLTkK8QIr7jT0VHO1aW42zyeffBJ1n7WYgvo1duzYoO1qX7QQRPHixe3f//53gmO1sAMAIH5QAQcAAAAgzdMcbDfccIPdeeedtnjxYjf/mzdPWubMme21116zu+66y1WqKZAbM2aMG7Z6//33J9u2hnu+8847LhDTXG1aAEFDT9XefffdZ7/++qu9//77EVXPBVK/tEhEu3btbOfOnS4M1AquGprqLRbx7rvv2i233OKq5Jo3b+6q9lR5p2N69eqV4usFAEhdVMABAAAAiEt169a1hg0bBq02WrVq1aB9FDpp5dBACsBC503r3r27e2gFUy12oHnT1L7njjvusNmzZ7squQULFrjwTAsgaO62pM4vffv2td69e7s2p0yZ4qrhtPhCs2bN7Pvvv3dVdvPnz7eOHTsGDSUN1961114b1K9WrVq5VVJVCac2FA5+/PHHQe9/9erVVq1aNXd+DX999dVXCd8AIM5k8EUzCQEAAAAAXGBUOaawS6uJAgBwPlABBwAAAAAAAMQQARwAAACANC2xoaMAAJwrDEEFAAAAAAAAYogKOAAAAAAAACCGCOAAAAAAAACAGCKAAwAAAAAAAGKIAA4AAAAAAACIIQI4AAAAAAAAIIYI4AAAAAAAAIAYIoADAAAAAAAAYogADgAAAAAAAIghAjgAAAAAAADAYuf/AXkeoDp3622fAAAAAElFTkSuQmCC",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "top_features = feature_importance_df.head(15)\n",
+ "\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "plt.barh(top_features[\"Feature\"], top_features[\"Importance\"])\n",
+ "plt.gca().invert_yaxis()\n",
+ "plt.xlabel(\"Importance\")\n",
+ "plt.ylabel(\"Feature\")\n",
+ "plt.title(\"Top 15 Random Forest Feature Importances\")\n",
+ "plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15de0e9b",
+ "metadata": {},
+ "source": [
+ "## 16. Model performance improvement (Weeks 5 to 6)\n",
+ "\n",
+ "The baseline results above leave two clear problems to work on:\n",
+ "\n",
+ "1. Random Forest and SVM both lean heavily toward predicting the majority\n",
+ " class, giving poor recall on the class that actually matters most.\n",
+ "2. Every baseline model's cross-validated ROC-AUC sits in a fairly narrow,\n",
+ " modest band (roughly 0.60 to 0.64), so it is worth checking whether that\n",
+ " ceiling can be pushed up at all, or whether we should accept it and instead\n",
+ " spend our effort on picking a better decision threshold.\n",
+ "\n",
+ "We try two standard techniques for the first problem, and one additional\n",
+ "model type, then check all of it against cross-validation and the held-out\n",
+ "test set so that any \"improvement\" we report is real and not just noise from\n",
+ "trying enough things until something looked better."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cfe5b18c",
+ "metadata": {},
+ "source": [
+ "### 16.1 Attempt 1: SMOTE oversampling\n",
+ "\n",
+ "**What SMOTE does:** SMOTE (Synthetic Minority Oversampling Technique) creates\n",
+ "new, synthetic examples of the minority class (recurrence) by interpolating\n",
+ "between existing minority-class patients and their nearest neighbors in\n",
+ "feature space. This gives the model a more balanced training signal without\n",
+ "simply duplicating the same 78 recurrence patients over and over, which would\n",
+ "just make the model overconfident about those exact 78 people rather than\n",
+ "learning a general pattern.\n",
+ "\n",
+ "**Why we use `imblearn`'s `Pipeline` instead of scikit-learn's:** this is a\n",
+ "detail that is easy to get wrong and important enough to call out directly.\n",
+ "If SMOTE were applied to the whole dataset once, up front, before cross\n",
+ "validation, some of the synthetic patients generated from the test fold's\n",
+ "neighbors could leak information into the training folds, quietly inflating\n",
+ "the reported performance. `imblearn.pipeline.Pipeline` fixes this by only\n",
+ "applying SMOTE inside each cross-validation fold's training portion, and\n",
+ "skipping it entirely at prediction time. We install `imbalanced-learn` for\n",
+ "this (`pip install imbalanced-learn`) since it is not part of core\n",
+ "scikit-learn.\n",
+ "\n",
+ "We try SMOTE together with Logistic Regression, Random Forest, and a new\n",
+ "model type, Gradient Boosting, so we are not just improving one algorithm in\n",
+ "isolation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "a0e5445f",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:38:35.067255Z",
+ "iopub.status.busy": "2026-07-26T15:38:35.065946Z",
+ "iopub.status.idle": "2026-07-26T15:39:00.949785Z",
+ "shell.execute_reply": "2026-07-26T15:39:00.947676Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--- Gradient Boosting (no SMOTE) ---\n",
+ " Test ROC-AUC: 0.669\n",
+ " Test Average Precision: 0.201\n",
+ " 5-fold CV ROC-AUC: 0.638 +/- 0.062\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--- Logistic Regression + SMOTE ---\n",
+ " Test ROC-AUC: 0.684\n",
+ " Test Average Precision: 0.310\n",
+ " 5-fold CV ROC-AUC: 0.637 +/- 0.059\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--- Random Forest + SMOTE ---\n",
+ " Test ROC-AUC: 0.685\n",
+ " Test Average Precision: 0.177\n",
+ " 5-fold CV ROC-AUC: 0.618 +/- 0.052\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--- Gradient Boosting + SMOTE ---\n",
+ " Test ROC-AUC: 0.676\n",
+ " Test Average Precision: 0.200\n",
+ " 5-fold CV ROC-AUC: 0.611 +/- 0.045\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Model
\n",
+ "
Test_ROC_AUC
\n",
+ "
Test_Avg_Precision
\n",
+ "
CV_ROC_AUC_Mean
\n",
+ "
CV_ROC_AUC_Std
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
Gradient Boosting (no SMOTE)
\n",
+ "
0.669079
\n",
+ "
0.201050
\n",
+ "
0.638204
\n",
+ "
0.062378
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
Logistic Regression + SMOTE
\n",
+ "
0.683553
\n",
+ "
0.309943
\n",
+ "
0.636747
\n",
+ "
0.059384
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Random Forest + SMOTE
\n",
+ "
0.685033
\n",
+ "
0.176728
\n",
+ "
0.617833
\n",
+ "
0.052055
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
Gradient Boosting + SMOTE
\n",
+ "
0.675987
\n",
+ "
0.200065
\n",
+ "
0.611072
\n",
+ "
0.045241
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Model Test_ROC_AUC Test_Avg_Precision \\\n",
+ "0 Gradient Boosting (no SMOTE) 0.669079 0.201050 \n",
+ "1 Logistic Regression + SMOTE 0.683553 0.309943 \n",
+ "2 Random Forest + SMOTE 0.685033 0.176728 \n",
+ "3 Gradient Boosting + SMOTE 0.675987 0.200065 \n",
+ "\n",
+ " CV_ROC_AUC_Mean CV_ROC_AUC_Std \n",
+ "0 0.638204 0.062378 \n",
+ "1 0.636747 0.059384 \n",
+ "2 0.617833 0.052055 \n",
+ "3 0.611072 0.045241 "
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from imblearn.pipeline import Pipeline as ImbPipeline\n",
+ "from imblearn.over_sampling import SMOTE\n",
+ "from sklearn.ensemble import GradientBoostingClassifier\n",
+ "from sklearn.metrics import average_precision_score\n",
+ "\n",
+ "def evaluate_pipeline(name, pipeline):\n",
+ " # Fit a pipeline on the training split, score it on the held-out test\n",
+ " # set, and also run 5-fold cross-validation on the full dataset so we get\n",
+ " # both a single honest test-set read and a more stable averaged estimate.\n",
+ " pipeline.fit(X_train, y_train)\n",
+ " y_prob = pipeline.predict_proba(X_test)[:, 1]\n",
+ "\n",
+ " test_auc = roc_auc_score(y_test, y_prob)\n",
+ " test_ap = average_precision_score(y_test, y_prob)\n",
+ " cv_scores = cross_val_score(pipeline, X, y, cv=cv, scoring=\"roc_auc\")\n",
+ "\n",
+ " print(f\"--- {name} ---\")\n",
+ " print(f\" Test ROC-AUC: {test_auc:.3f}\")\n",
+ " print(f\" Test Average Precision: {test_ap:.3f}\")\n",
+ " print(f\" 5-fold CV ROC-AUC: {cv_scores.mean():.3f} +/- {cv_scores.std():.3f}\")\n",
+ "\n",
+ " return {\n",
+ " \"Model\": name,\n",
+ " \"Test_ROC_AUC\": test_auc,\n",
+ " \"Test_Avg_Precision\": test_ap,\n",
+ " \"CV_ROC_AUC_Mean\": cv_scores.mean(),\n",
+ " \"CV_ROC_AUC_Std\": cv_scores.std(),\n",
+ " }\n",
+ "\n",
+ "improvement_results = []\n",
+ "\n",
+ "# Gradient Boosting baseline (no SMOTE), added here as a fourth algorithm to\n",
+ "# compare against, since we had not tried it in the Week 4 baseline round.\n",
+ "gb_baseline = Pipeline(steps=[\n",
+ " (\"preprocessor\", preprocessor),\n",
+ " (\"classifier\", GradientBoostingClassifier(random_state=42))\n",
+ "])\n",
+ "improvement_results.append(evaluate_pipeline(\"Gradient Boosting (no SMOTE)\", gb_baseline))\n",
+ "\n",
+ "# SMOTE + Logistic Regression\n",
+ "log_reg_smote = ImbPipeline(steps=[\n",
+ " (\"preprocessor\", preprocessor),\n",
+ " (\"smote\", SMOTE(random_state=42)),\n",
+ " (\"classifier\", LogisticRegression(max_iter=2000, random_state=42))\n",
+ "])\n",
+ "improvement_results.append(evaluate_pipeline(\"Logistic Regression + SMOTE\", log_reg_smote))\n",
+ "\n",
+ "# SMOTE + Random Forest\n",
+ "rf_smote = ImbPipeline(steps=[\n",
+ " (\"preprocessor\", preprocessor),\n",
+ " (\"smote\", SMOTE(random_state=42)),\n",
+ " (\"classifier\", RandomForestClassifier(n_estimators=300, random_state=42))\n",
+ "])\n",
+ "improvement_results.append(evaluate_pipeline(\"Random Forest + SMOTE\", rf_smote))\n",
+ "\n",
+ "# SMOTE + Gradient Boosting\n",
+ "gb_smote = ImbPipeline(steps=[\n",
+ " (\"preprocessor\", preprocessor),\n",
+ " (\"smote\", SMOTE(random_state=42)),\n",
+ " (\"classifier\", GradientBoostingClassifier(random_state=42))\n",
+ "])\n",
+ "improvement_results.append(evaluate_pipeline(\"Gradient Boosting + SMOTE\", gb_smote))\n",
+ "\n",
+ "improvement_df = pd.DataFrame(improvement_results)\n",
+ "improvement_df\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "76c29562",
+ "metadata": {},
+ "source": [
+ "**Result:** Logistic Regression with SMOTE gives the best test ROC-AUC\n",
+ "(about 0.68, up from 0.66 without SMOTE) and a clearly better Average\n",
+ "Precision (about 0.31, up from 0.23). Random Forest and Gradient Boosting also\n",
+ "improve somewhat with SMOTE compared to their non-SMOTE versions, but neither\n",
+ "catches up to Logistic Regression + SMOTE on this dataset. This is a\n",
+ "reasonable outcome: with a fairly small, moderately noisy dataset and mostly\n",
+ "straightforward, roughly linear relationships between features like age,\n",
+ "stage, and receptor status and the outcome, a simpler linear model can hold\n",
+ "its own against, or beat, more flexible tree-based models that have more\n",
+ "capacity to overfit."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15725898",
+ "metadata": {},
+ "source": [
+ "### 16.2 Attempt 2: hyperparameter tuning\n",
+ "\n",
+ "The next natural step is to search over each model's hyperparameters (for\n",
+ "Logistic Regression, the regularization strength `C`; for Random Forest, tree\n",
+ "depth and leaf size; for Gradient Boosting, learning rate and number of\n",
+ "trees) to see if a better-tuned version of any of these pipelines can beat the\n",
+ "defaults used above. We use `RandomizedSearchCV`, which samples a fixed\n",
+ "number of hyperparameter combinations rather than trying every single one\n",
+ "(which would be `GridSearchCV`), since it is much faster and, in practice,\n",
+ "finds settings nearly as good with a lot less computation.\n",
+ "\n",
+ "We are upfront here about something that is easy to gloss over: **tuning does\n",
+ "not always help, and it is important to report that honestly rather than\n",
+ "searching until a bigger number happens to appear.**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "6761c1b4",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:39:00.952517Z",
+ "iopub.status.busy": "2026-07-26T15:39:00.952280Z",
+ "iopub.status.idle": "2026-07-26T15:39:30.393028Z",
+ "shell.execute_reply": "2026-07-26T15:39:30.387992Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Best Logistic Regression + SMOTE settings: {'smote__k_neighbors': 7, 'classifier__C': 0.1}\n",
+ "Best cross-validated ROC-AUC during search: 0.638\n",
+ "Test ROC-AUC with these tuned settings: 0.613\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import RandomizedSearchCV\n",
+ "\n",
+ "# Logistic Regression + SMOTE: tune the regularization strength and how many\n",
+ "# neighbors SMOTE uses when synthesizing new minority-class patients.\n",
+ "param_grid_lr = {\n",
+ " \"classifier__C\": [0.01, 0.03, 0.1, 0.3, 1, 3, 10],\n",
+ " \"smote__k_neighbors\": [3, 5, 7],\n",
+ "}\n",
+ "search_lr = RandomizedSearchCV(\n",
+ " log_reg_smote, param_grid_lr, n_iter=20, scoring=\"roc_auc\",\n",
+ " cv=cv, random_state=42, n_jobs=-1\n",
+ ")\n",
+ "search_lr.fit(X_train, y_train)\n",
+ "print(\"Best Logistic Regression + SMOTE settings:\", search_lr.best_params_)\n",
+ "print(\"Best cross-validated ROC-AUC during search:\", round(search_lr.best_score_, 3))\n",
+ "\n",
+ "tuned_lr_test_auc = roc_auc_score(y_test, search_lr.best_estimator_.predict_proba(X_test)[:, 1])\n",
+ "print(\"Test ROC-AUC with these tuned settings:\", round(tuned_lr_test_auc, 3))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "44893eeb",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:39:30.403585Z",
+ "iopub.status.busy": "2026-07-26T15:39:30.402038Z",
+ "iopub.status.idle": "2026-07-26T15:40:17.842846Z",
+ "shell.execute_reply": "2026-07-26T15:40:17.839073Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Best Random Forest + SMOTE settings: {'smote__k_neighbors': 5, 'classifier__n_estimators': 100, 'classifier__min_samples_leaf': 2, 'classifier__max_features': 'sqrt', 'classifier__max_depth': None}\n",
+ "Best cross-validated ROC-AUC during search: 0.606\n",
+ "Test ROC-AUC with these tuned settings: 0.663\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Random Forest + SMOTE: tune tree count, depth, leaf size, and feature sampling.\n",
+ "param_grid_rf = {\n",
+ " \"classifier__n_estimators\": [100, 200, 300, 500],\n",
+ " \"classifier__max_depth\": [None, 4, 6, 8, 12],\n",
+ " \"classifier__min_samples_leaf\": [1, 2, 4, 8],\n",
+ " \"classifier__max_features\": [\"sqrt\", \"log2\", 0.5],\n",
+ " \"smote__k_neighbors\": [3, 5],\n",
+ "}\n",
+ "search_rf = RandomizedSearchCV(\n",
+ " rf_smote, param_grid_rf, n_iter=30, scoring=\"roc_auc\",\n",
+ " cv=cv, random_state=42, n_jobs=-1\n",
+ ")\n",
+ "search_rf.fit(X_train, y_train)\n",
+ "print(\"Best Random Forest + SMOTE settings:\", search_rf.best_params_)\n",
+ "print(\"Best cross-validated ROC-AUC during search:\", round(search_rf.best_score_, 3))\n",
+ "\n",
+ "tuned_rf_test_auc = roc_auc_score(y_test, search_rf.best_estimator_.predict_proba(X_test)[:, 1])\n",
+ "print(\"Test ROC-AUC with these tuned settings:\", round(tuned_rf_test_auc, 3))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "19ad2d6b",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:40:17.849860Z",
+ "iopub.status.busy": "2026-07-26T15:40:17.849159Z",
+ "iopub.status.idle": "2026-07-26T15:41:07.289682Z",
+ "shell.execute_reply": "2026-07-26T15:41:07.285534Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Best Gradient Boosting + SMOTE settings: {'smote__k_neighbors': 5, 'classifier__subsample': 0.7, 'classifier__n_estimators': 200, 'classifier__max_depth': 3, 'classifier__learning_rate': 0.01}\n",
+ "Best cross-validated ROC-AUC during search: 0.611\n",
+ "Test ROC-AUC with these tuned settings: 0.682\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Gradient Boosting + SMOTE: tune tree count, learning rate, depth, and\n",
+ "# the fraction of rows sampled per boosting round.\n",
+ "param_grid_gb = {\n",
+ " \"classifier__n_estimators\": [100, 200, 300],\n",
+ " \"classifier__learning_rate\": [0.01, 0.03, 0.1, 0.2],\n",
+ " \"classifier__max_depth\": [2, 3, 4],\n",
+ " \"classifier__subsample\": [0.7, 0.85, 1.0],\n",
+ " \"smote__k_neighbors\": [3, 5],\n",
+ "}\n",
+ "search_gb = RandomizedSearchCV(\n",
+ " gb_smote, param_grid_gb, n_iter=30, scoring=\"roc_auc\",\n",
+ " cv=cv, random_state=42, n_jobs=-1\n",
+ ")\n",
+ "search_gb.fit(X_train, y_train)\n",
+ "print(\"Best Gradient Boosting + SMOTE settings:\", search_gb.best_params_)\n",
+ "print(\"Best cross-validated ROC-AUC during search:\", round(search_gb.best_score_, 3))\n",
+ "\n",
+ "tuned_gb_test_auc = roc_auc_score(y_test, search_gb.best_estimator_.predict_proba(X_test)[:, 1])\n",
+ "print(\"Test ROC-AUC with these tuned settings:\", round(tuned_gb_test_auc, 3))\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cfbe1c96",
+ "metadata": {},
+ "source": [
+ "**Honest result: tuning did not beat the untuned defaults here.** Every\n",
+ "searched configuration's cross-validated ROC-AUC during the search still\n",
+ "landed in the same 0.60 to 0.64 range we saw with the untuned models, and none\n",
+ "of the tuned pipelines beat the untuned Logistic Regression + SMOTE pipeline's\n",
+ "test ROC-AUC of about 0.68. This is not a failed experiment, it is a genuinely\n",
+ "useful finding: with only 895 patients and 97 recurrence events, a\n",
+ "hyperparameter search has very little signal to reliably distinguish \"truly\n",
+ "better settings\" from \"settings that happened to fit this particular\n",
+ "cross-validation split a bit better by chance.\" Reporting a tuned number that\n",
+ "just barely edged out the baseline by luck would be misleading, so instead we\n",
+ "keep the simpler, untuned Logistic Regression + SMOTE pipeline as the final\n",
+ "model. A larger dataset, with more recurrence events to learn from, would be\n",
+ "a reasonable place to revisit hyperparameter tuning in the future."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e3ac21ff",
+ "metadata": {},
+ "source": [
+ "## 17. Choosing the final model\n",
+ "\n",
+ "Putting the baseline and improvement results side by side:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "34bb0917",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:41:07.299336Z",
+ "iopub.status.busy": "2026-07-26T15:41:07.295987Z",
+ "iopub.status.idle": "2026-07-26T15:41:07.346120Z",
+ "shell.execute_reply": "2026-07-26T15:41:07.343959Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Model
\n",
+ "
Test_ROC_AUC
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
Random Forest + SMOTE
\n",
+ "
0.685033
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
Logistic Regression + SMOTE (FINAL MODEL)
\n",
+ "
0.683553
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Gradient Boosting + SMOTE
\n",
+ "
0.675987
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
Gradient Boosting (no SMOTE)
\n",
+ "
0.669079
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
Logistic Regression (Week 4 baseline)
\n",
+ "
0.662829
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
Random Forest (Week 4 baseline)
\n",
+ "
0.643586
\n",
+ "
\n",
+ "
\n",
+ "
6
\n",
+ "
SVM (Week 4 baseline)
\n",
+ "
0.584868
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Model Test_ROC_AUC\n",
+ "0 Random Forest + SMOTE 0.685033\n",
+ "1 Logistic Regression + SMOTE (FINAL MODEL) 0.683553\n",
+ "2 Gradient Boosting + SMOTE 0.675987\n",
+ "3 Gradient Boosting (no SMOTE) 0.669079\n",
+ "4 Logistic Regression (Week 4 baseline) 0.662829\n",
+ "5 Random Forest (Week 4 baseline) 0.643586\n",
+ "6 SVM (Week 4 baseline) 0.584868"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "final_comparison = pd.DataFrame([\n",
+ " {\"Model\": \"Logistic Regression (Week 4 baseline)\", \"Test_ROC_AUC\": results_df.loc[results_df.Model == \"Logistic Regression\", \"ROC_AUC\"].values[0]},\n",
+ " {\"Model\": \"Random Forest (Week 4 baseline)\", \"Test_ROC_AUC\": results_df.loc[results_df.Model == \"Random Forest\", \"ROC_AUC\"].values[0]},\n",
+ " {\"Model\": \"SVM (Week 4 baseline)\", \"Test_ROC_AUC\": results_df.loc[results_df.Model == \"SVM\", \"ROC_AUC\"].values[0]},\n",
+ " {\"Model\": \"Gradient Boosting (no SMOTE)\", \"Test_ROC_AUC\": improvement_df.loc[improvement_df.Model == \"Gradient Boosting (no SMOTE)\", \"Test_ROC_AUC\"].values[0]},\n",
+ " {\"Model\": \"Logistic Regression + SMOTE (FINAL MODEL)\", \"Test_ROC_AUC\": improvement_df.loc[improvement_df.Model == \"Logistic Regression + SMOTE\", \"Test_ROC_AUC\"].values[0]},\n",
+ " {\"Model\": \"Random Forest + SMOTE\", \"Test_ROC_AUC\": improvement_df.loc[improvement_df.Model == \"Random Forest + SMOTE\", \"Test_ROC_AUC\"].values[0]},\n",
+ " {\"Model\": \"Gradient Boosting + SMOTE\", \"Test_ROC_AUC\": improvement_df.loc[improvement_df.Model == \"Gradient Boosting + SMOTE\", \"Test_ROC_AUC\"].values[0]},\n",
+ "])\n",
+ "final_comparison.sort_values(\"Test_ROC_AUC\", ascending=False).reset_index(drop=True)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3c15bf5b",
+ "metadata": {},
+ "source": [
+ "**Final model: Logistic Regression + SMOTE, with default hyperparameters\n",
+ "(`C=1.0`).** Its held-out test ROC-AUC (about 0.684) is statistically tied\n",
+ "with Random Forest + SMOTE's 0.685, the gap is smaller than the noise we saw\n",
+ "across cross-validation folds, so neither model can honestly claim to \"win\"\n",
+ "on ROC-AUC alone. What sets Logistic Regression + SMOTE apart is its Average\n",
+ "Precision (about 0.31), by far the best of everything tried and roughly\n",
+ "double Random Forest + SMOTE's 0.18, meaning it does noticeably better at\n",
+ "ranking true recurrence cases near the top of its risk list. It is also\n",
+ "simpler and more interpretable (a real advantage for a clinical-adjacent tool\n",
+ "that someone other than the model's author will eventually need to trust and\n",
+ "explain), and the hyperparameter search in section 16.2 gave no honest reason\n",
+ "to prefer a more complicated, tuned alternative instead. We carry this\n",
+ "pipeline forward for threshold selection and saving."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "94989b68",
+ "metadata": {},
+ "source": [
+ "## 18. Picking a decision threshold instead of just defaulting to 0.5\n",
+ "\n",
+ "Every classifier above outputs a *probability* of recurrence, and by default,\n",
+ "scikit-learn's `.predict()` turns that into a 0 or 1 label using a threshold\n",
+ "of 0.5. But 0.5 is just a default, not a law of nature, and in a clinical\n",
+ "screening context, the \"right\" threshold depends on how costly a missed\n",
+ "recurrence is compared to a false alarm.\n",
+ "\n",
+ "To pick a threshold without cheating by peeking at the test set, we use\n",
+ "**cross-validated out-of-fold predictions on the training set only**: for\n",
+ "each of the 5 folds, the model is trained on the other 4 folds and used to\n",
+ "predict probabilities for the held-out fold. Stitching those predictions\n",
+ "together gives us a set of \"honest\" predicted probabilities for the entire\n",
+ "training set, none of which came from a model that had already seen that\n",
+ "particular patient. We then use those out-of-fold probabilities to find the\n",
+ "threshold that maximizes F1 (the balance between precision and recall), and\n",
+ "only afterward do we check how that threshold performs on the true, still\n",
+ "untouched test set."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "0b7dc5f1",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:41:07.351188Z",
+ "iopub.status.busy": "2026-07-26T15:41:07.350753Z",
+ "iopub.status.idle": "2026-07-26T15:41:08.610543Z",
+ "shell.execute_reply": "2026-07-26T15:41:08.606758Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "F1-optimal threshold (from training-set cross-validation only): 0.727\n",
+ " At this threshold: precision=0.247, recall=0.256, F1=0.252\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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jhmRN0PwhT63cqHnfyIi8jwGZkTeDkGYm7rE8DaWiuvymvzwG4go9zAwIyKvgfpfxn2g5UX54TcQUe5hBQMiIiIiL8HAjMjNfLB9DRGRz9FcdK1nYEbkJnorUIx/SERE+VvC7Wt9TnsAYB0zIjdBH1MYaxKDZAP6qvLlIXPQJB094aNJObtpYDoQz4n8cm3SNE0FZbjW45qv94voLAZmRG6k92OlB2e+DBcvdNoaFhbm0wFqbmM6eA+mRf5KhyJFirik70IGZkRuhJO8bNmyUqpUKdXZrS/D79+0aZO0bdvW4539EtPBG/GcyD/pEBQUlOOcMh0DMyIPwAnrqpM2r8LvxzBO6BGbgRnTgXhOeIsAL7s2sfI/ERERkZdgYEZERETkJRiYEREREXkJBmZEREREXoKBGREREZGXYGBGRERE5CUYmBERERF5CQZmRERERF6CgRkRERGRl2BgRkREROQlGJgREREReQkGZkRERERegoEZERERkZdgYEZERETkJRiYEREREXkJBmZEREREXoKBGREREZGXYGBGRERE5CUYmBERERF5CQZmRERERF6CgRkRERGRl2BgRkREROQlGJgREREReQkGZkRERERegoEZERERkZdgYEZERETkJQJzewN27twps2bNksuXL0uDBg1k7NixUrx4cavzZ2RkyPfffy+rVq2S69evS6VKlWT48OHStGlTj243ERERUb7KMdu6dau0atVKChUqJIMHDza8v3XrltVlXn/9dXn66aelRYsW8sQTT6hpd911l2zZssWDW05ERESUzwKzCRMmSPfu3WXGjBnSr18/WblypZw/f15mz55tdZklS5bIM888I88//7w8+OCD8umnn0qNGjXkxx9/9Oi2ExEREeWbwCwxMVE2b94sDz30kGEacs46duwoa9assbocijv37dunijTh0qVLcuHCBWnUqJFHtpuIiIjIq+qYHT16VDZt2iTnzp1T7ytWrCht27ZVOVf2ioqKUsFVhQoVTKbj/fr1660u9/XXX6sizDvuuEN975EjR2TSpEny2GOPWV0mOTlZvXRxcXHqb2pqqnq5mnY7aExPT3fL+sl++v5nOuQ+poV3YDp4D6aF76RDqgPrtjsw0zRNvv32W/noo49k9+7dUqxYMSldurT6DBX3Y2JipFmzZvLSSy/JwIEDxc/Pz+b6UlJS1N+w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9TcuLs4t609NTZWEhAS1fneNVE9Mi7yG54V3YDp4D6aF76RD3O14Q48/bPHJwCw+Pl79rVixYm5vChEREflQ/BEREWFzHj/NnvAtn8nIyJALFy5IoUKFxM/Pzy2RMYK+qKgoKVy4sMvXT0yLvIjnhXdgOngPpoXvpIOmaSooK1eunPj7265F5pM5ZtgpFSpUcPv3IIEZmHkHpoX3YFp4B6aD92Ba+EY6RGSTU6Zj5X8iIiIiL8HAjIiIiMhLMDBzg5CQEHnrrbfUX8pdTAvvwbTwDkwH78G08A4hXnbP9snK/0RERETeiDlmRERERF6CgRkRERGRl2BgRkREROQlGJg56datW/Lvv//KqVOn3LoMZe/cuXOyc+dOiY2NtWt3paeny+HDh+Xo0aOSlpbGXezCjpv37dunXvi/I44fPy5//fWXYVQOyhmcCzgncG444vTp07J3716eFy6E6z2u+7j+23t9wvmwa9cuiY6OduWm+DRN09Q+jYyMdGioJsx/6NAhu4ZSchlU/ifHfPPNN1rBggW1mjVrqr/33XefFhsb6/JlyLakpCStT58+WlhYmFanTh0tNDRUmz59us1lJk+erJUpU0arXbu2dscdd2jlypXTli9fzl2dQ5GRkWp/li1bVu1T/B/T7HHmzBmtePHiuOpp27ZtY1rkEM4BnAs4J3Bu4BzBuWLL0aNHtZYtW6p0aN68ubpObdmyhWmRA7i+4zpvfN3HfcCWv/76S5075cuX15o0aaLSb8iQIVpqairTIgc++ugjlQZFihTRGjVqZNcyGzduVPeKypUrayVKlNDq16+vnTx5UvMEBmYOOnz4sBYYGKjNnTtXvY+JidFq1KihjRw50qXLUPZef/11FQScO3dOvV+xYoW6udu6oUyYMEG7evWq4f0777yjbmL6OshxuGngeB40aJCWkZGhXv3791fT0tLSsl32nnvu0V555RUGZi6AG7ufn5/266+/qvdRUVHq5vLGG2/YDCAqVaqk0kwP4M6fP6/99NNPrtgknzVixAitVq1a6noPX331lboPHDlyxOoyCB4GDBigpaenq/cHDx7UgoODtXnz5nlsu/ObtLQ07cUXX1T34TFjxtgVmMXHx2slS5bURo8ebbhOIci+++67PbDFDMwchht7hQoVTKbNmDFDK1CggNWnUmeWoewhKENwZqxx48ba8OHD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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import cross_val_predict\n",
+ "from sklearn.metrics import precision_recall_curve\n",
+ "\n",
+ "final_pipeline = ImbPipeline(steps=[\n",
+ " (\"preprocessor\", preprocessor),\n",
+ " (\"smote\", SMOTE(random_state=42)),\n",
+ " (\"classifier\", LogisticRegression(max_iter=2000, random_state=42))\n",
+ "])\n",
+ "\n",
+ "# Out-of-fold probabilities computed using only the training set, so the test\n",
+ "# set stays completely untouched during threshold selection.\n",
+ "oof_probabilities = cross_val_predict(\n",
+ " final_pipeline, X_train, y_train, cv=cv, method=\"predict_proba\"\n",
+ ")[:, 1]\n",
+ "\n",
+ "precisions, recalls, thresholds = precision_recall_curve(y_train, oof_probabilities)\n",
+ "f1_scores = 2 * precisions * recalls / (precisions + recalls + 1e-12)\n",
+ "best_f1_idx = int(np.argmax(f1_scores[:-1])) # last point has no matching threshold\n",
+ "balanced_threshold = float(thresholds[best_f1_idx])\n",
+ "\n",
+ "print(f\"F1-optimal threshold (from training-set cross-validation only): {balanced_threshold:.3f}\")\n",
+ "print(f\" At this threshold: precision={precisions[best_f1_idx]:.3f}, recall={recalls[best_f1_idx]:.3f}, F1={f1_scores[best_f1_idx]:.3f}\")\n",
+ "\n",
+ "plt.figure(figsize=(7, 5))\n",
+ "plt.plot(recalls, precisions, label=\"Precision-Recall curve (out-of-fold, training set)\")\n",
+ "plt.scatter([recalls[best_f1_idx]], [precisions[best_f1_idx]], color=\"red\", zorder=5, label=\"F1-optimal point\")\n",
+ "plt.xlabel(\"Recall (class 1: recurrence)\")\n",
+ "plt.ylabel(\"Precision (class 1: recurrence)\")\n",
+ "plt.title(\"Precision-Recall Trade-off for the Final Model\")\n",
+ "plt.legend()\n",
+ "plt.grid(True)\n",
+ "plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d7b99745",
+ "metadata": {},
+ "source": [
+ "We save two thresholds for actual use, rather than picking just one,\n",
+ "because they serve different purposes:\n",
+ "\n",
+ "- **Screening threshold (0.50):** the plain default. It flags more patients\n",
+ " as at-risk (higher recall), at the cost of more false alarms (lower\n",
+ " precision). This fits a \"better safe than sorry\" triage use case, where a\n",
+ " flagged patient would simply get a closer follow-up, not an irreversible\n",
+ " decision.\n",
+ "- **Balanced threshold (F1-optimal, found above):** fewer false alarms, but\n",
+ " it will also miss more true recurrences. This fits a use case where acting\n",
+ " on a \"positive\" result is costly or invasive enough that false alarms need\n",
+ " to be kept to a minimum.\n",
+ "\n",
+ "Neither threshold is \"the correct one\" in any absolute sense. The right choice\n",
+ "depends entirely on what happens next for a patient who gets flagged, which is\n",
+ "a clinical and ethical judgment call, not a purely statistical one."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5b11ebf3",
+ "metadata": {},
+ "source": [
+ "## 19. Final model performance summary\n",
+ "\n",
+ "Fitting the final pipeline once on the training set and checking both\n",
+ "thresholds against the untouched test set:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "475e44fa",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:41:08.620815Z",
+ "iopub.status.busy": "2026-07-26T15:41:08.618767Z",
+ "iopub.status.idle": "2026-07-26T15:41:09.641108Z",
+ "shell.execute_reply": "2026-07-26T15:41:09.636731Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Held-out test ROC-AUC: 0.684\n",
+ "Held-out test Average Precision: 0.310\n",
+ "5-fold CV ROC-AUC (full dataset): 0.637 +/- 0.059\n",
+ "\n",
+ "--- Screening threshold (favors catching recurrences): 0.500 ---\n",
+ "[[93 67]\n",
+ " [ 5 14]]\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " 0 0.95 0.58 0.72 160\n",
+ " 1 0.17 0.74 0.28 19\n",
+ "\n",
+ " accuracy 0.60 179\n",
+ " macro avg 0.56 0.66 0.50 179\n",
+ "weighted avg 0.87 0.60 0.67 179\n",
+ "\n",
+ "\n",
+ "--- Balanced threshold (favors fewer false alarms): 0.727 ---\n",
+ "[[144 16]\n",
+ " [ 13 6]]\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " 0 0.92 0.90 0.91 160\n",
+ " 1 0.27 0.32 0.29 19\n",
+ "\n",
+ " accuracy 0.84 179\n",
+ " macro avg 0.59 0.61 0.60 179\n",
+ "weighted avg 0.85 0.84 0.84 179\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "final_pipeline.fit(X_train, y_train)\n",
+ "test_probabilities = final_pipeline.predict_proba(X_test)[:, 1]\n",
+ "\n",
+ "test_auc = roc_auc_score(y_test, test_probabilities)\n",
+ "test_ap = average_precision_score(y_test, test_probabilities)\n",
+ "cv_auc_scores = cross_val_score(final_pipeline, X, y, cv=cv, scoring=\"roc_auc\")\n",
+ "\n",
+ "print(f\"Held-out test ROC-AUC: {test_auc:.3f}\")\n",
+ "print(f\"Held-out test Average Precision: {test_ap:.3f}\")\n",
+ "print(f\"5-fold CV ROC-AUC (full dataset): {cv_auc_scores.mean():.3f} +/- {cv_auc_scores.std():.3f}\")\n",
+ "\n",
+ "screening_threshold = 0.5\n",
+ "\n",
+ "for label, threshold in [\n",
+ " (\"Screening threshold (favors catching recurrences)\", screening_threshold),\n",
+ " (\"Balanced threshold (favors fewer false alarms)\", balanced_threshold),\n",
+ "]:\n",
+ " preds = (test_probabilities >= threshold).astype(int)\n",
+ " print(f\"\\n--- {label}: {threshold:.3f} ---\")\n",
+ " print(confusion_matrix(y_test, preds))\n",
+ " print(classification_report(y_test, preds, zero_division=0))\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ac28d9ef",
+ "metadata": {},
+ "source": [
+ "**Summary in plain language:** at the screening threshold, the final\n",
+ "model correctly flags about 3 out of every 4 patients who truly go on to\n",
+ "recur (recall 0.74), but only about 1 in 6 of the patients it flags actually\n",
+ "recur (precision 0.17). At the balanced threshold, it flips: it catches fewer\n",
+ "true recurrences (recall 0.32) but is right much more often when it does flag\n",
+ "someone (precision 0.27), and overall accuracy jumps to 84% simply because it\n",
+ "is being more conservative about flagging anyone at all.\n",
+ "\n",
+ "Neither number is something to be defensive about. Given a 12-gene panel, no\n",
+ "imaging data, no treatment history, and under a hundred recurrence events to\n",
+ "learn from, a ROC-AUC in the high 0.60s represents real, moderate signal, not\n",
+ "a strong stand-alone diagnostic tool. Framed correctly, in a report or a BCO,\n",
+ "this is a legitimate proof-of-concept result: it shows that basic clinical and\n",
+ "genomic variables carry recurrence-relevant information, and it sets a\n",
+ "concrete, honest baseline that a future volunteer with more data (more\n",
+ "patients, richer genomic features, or actual follow-up time for a proper\n",
+ "survival model) could build on."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bdb41313",
+ "metadata": {},
+ "source": [
+ "## 20. Saving the final model for reuse\n",
+ "\n",
+ "The final pipeline above was fit on the 80% training split so that the\n",
+ "metrics reported in section 19 are an honest read on data the model never\n",
+ "saw. Now that we are done evaluating, standard practice is to refit the same\n",
+ "pipeline on *all* available patients (train and test combined) before saving\n",
+ "it, since more training data almost never hurts and we already have our\n",
+ "honest performance estimate locked in above.\n",
+ "\n",
+ "This exact save step (refit on everything, then `joblib.dump`) also lives in\n",
+ "`train_model.py` in this project folder, which is the clean, standalone\n",
+ "version of this same pipeline meant for the GitHub submission package. Running\n",
+ "that script end to end reproduces the two files written below without needing\n",
+ "this notebook at all."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "005d4657",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:41:09.649590Z",
+ "iopub.status.busy": "2026-07-26T15:41:09.647295Z",
+ "iopub.status.idle": "2026-07-26T15:41:09.830796Z",
+ "shell.execute_reply": "2026-07-26T15:41:09.828341Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saved model to model/dfs_model.joblib\n",
+ "Saved metadata to model/model_metadata.json\n"
+ ]
+ }
+ ],
+ "source": [
+ "import joblib\n",
+ "import json\n",
+ "from pathlib import Path\n",
+ "\n",
+ "MODEL_DIR = Path(\"model\")\n",
+ "MODEL_DIR.mkdir(exist_ok=True)\n",
+ "\n",
+ "# Refit on the full dataset (train + test) now that evaluation is done.\n",
+ "final_pipeline.fit(X, y)\n",
+ "\n",
+ "joblib.dump(final_pipeline, MODEL_DIR / \"dfs_model.joblib\")\n",
+ "\n",
+ "metadata = {\n",
+ " \"model_description\": \"Logistic Regression with SMOTE oversampling, predicting DFS recurrence/progression risk for TCGA-BRCA patients.\",\n",
+ " \"target_definition\": \"1 = Recurred/Progressed (DFS_STATUS), 0 = DiseaseFree\",\n",
+ " \"numeric_features\": numeric_features,\n",
+ " \"categorical_features\": categorical_features,\n",
+ " \"dropped_columns\": drop_cols,\n",
+ " \"n_patients_total\": int(len(df)),\n",
+ " \"n_recurrence_events\": int(df[\"target\"].sum()),\n",
+ " \"random_state\": 42,\n",
+ " \"held_out_test_metrics\": {\n",
+ " \"roc_auc\": round(float(test_auc), 4),\n",
+ " \"average_precision\": round(float(test_ap), 4),\n",
+ " },\n",
+ " \"cross_validated_metrics\": {\n",
+ " \"roc_auc_mean\": round(float(cv_auc_scores.mean()), 4),\n",
+ " \"roc_auc_std\": round(float(cv_auc_scores.std()), 4),\n",
+ " \"n_folds\": 5,\n",
+ " },\n",
+ " \"decision_thresholds\": {\n",
+ " \"screening\": {\"value\": screening_threshold, \"purpose\": \"Higher sensitivity, more false alarms. Meant for early triage, not diagnosis.\"},\n",
+ " \"balanced\": {\"value\": round(balanced_threshold, 4), \"purpose\": \"F1-optimal threshold from cross-validated training predictions. Fewer false alarms, lower sensitivity.\"},\n",
+ " },\n",
+ " \"notes_and_limitations\": [\n",
+ " \"Trained on 895 TCGA-BRCA patients with only 97 recurrence/progression events, so estimates carry real uncertainty.\",\n",
+ " \"DFS_STATUS is treated as a binary label, but it is really a time-to-event outcome with right-censoring (see section 4). A proper survival model would handle this correctly; this classifier does not.\",\n",
+ " \"Gene panel is limited to 12 genes highlighted in the 2012 TCGA breast cancer paper and does not reflect the full mutation landscape.\",\n",
+ " \"The cohort technically includes a handful of patients whose CANCER_TYPE is Breast Sarcoma or Skin Cancer, Non-Melanoma rather than a breast carcinoma subtype (see section 3).\",\n",
+ " \"This model has not been externally validated on any cohort outside TCGA-BRCA and is a research/educational artifact, not a clinical decision tool.\",\n",
+ " ],\n",
+ "}\n",
+ "\n",
+ "with open(MODEL_DIR / \"model_metadata.json\", \"w\", encoding=\"utf-8\") as f:\n",
+ " json.dump(metadata, f, indent=2)\n",
+ "\n",
+ "print(\"Saved model to model/dfs_model.joblib\")\n",
+ "print(\"Saved metadata to model/model_metadata.json\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "19f09380",
+ "metadata": {},
+ "source": [
+ "## 21. Single-patient prediction, demonstrated inline\n",
+ "\n",
+ "The completion criteria for this project call for a standalone single-patient\n",
+ "prediction script, which lives in `predict_single_patient.py` in this same\n",
+ "folder and can be run directly from the command line (see that file's\n",
+ "docstring for usage examples, or `README.md` for a walkthrough). The cell\n",
+ "below demonstrates the same logic inline, using the bundled example patient\n",
+ "in `example_patient.json`, so that the whole pipeline from raw patient data to\n",
+ "a final prediction is visible in one place without needing to leave this\n",
+ "notebook."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "db0b8381",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-07-26T15:41:09.834931Z",
+ "iopub.status.busy": "2026-07-26T15:41:09.834533Z",
+ "iopub.status.idle": "2026-07-26T15:41:09.883785Z",
+ "shell.execute_reply": "2026-07-26T15:41:09.879308Z"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Example patient record:\n",
+ "{\n",
+ " \"AGE\": 61,\n",
+ " \"TMB_NONSYNONYMOUS\": 1.4,\n",
+ " \"TP53\": 1,\n",
+ " \"PIK3CA\": 0,\n",
+ " \"GATA3\": 0,\n",
+ " \"CDH1\": 0,\n",
+ " \"PTEN\": 0,\n",
+ " \"MAP3K1\": 0,\n",
+ " \"MAP2K4\": 0,\n",
+ " \"KRAS\": 0,\n",
+ " \"ARID1A\": 0,\n",
+ " \"RUNX1\": 0,\n",
+ " \"ESR1\": 0,\n",
+ " \"AJCC_PATHOLOGIC_TUMOR_STAGE\": \"Stage IIB\",\n",
+ " \"ER_STATUS_BY_IHC\": \"Positive\",\n",
+ " \"PR_STATUS_BY_IHC\": \"Positive\",\n",
+ " \"IHC_HER2\": \"Negative\",\n",
+ " \"CANCER_TYPE\": \"Breast Cancer\",\n",
+ " \"CANCER_TYPE_DETAILED\": \"Breast Invasive Ductal Carcinoma\"\n",
+ "}\n",
+ "\n",
+ "Predicted probability of recurrence/progression: 52.2%\n",
+ "Screening threshold flag (>= 0.50): AT-RISK\n",
+ "Balanced threshold flag (>= 0.73): Not flagged\n"
+ ]
+ }
+ ],
+ "source": [
+ "import json\n",
+ "\n",
+ "with open(\"example_patient.json\", \"r\", encoding=\"utf-8\") as f:\n",
+ " example_patient = json.load(f)\n",
+ "\n",
+ "print(\"Example patient record:\")\n",
+ "print(json.dumps(example_patient, indent=2))\n",
+ "\n",
+ "# The saved pipeline expects a DataFrame with the exact same columns, in any\n",
+ "# order, that it was trained on. Wrapping the single patient dict in a list\n",
+ "# gives us a one-row DataFrame, which is what predict_proba expects.\n",
+ "expected_columns = numeric_features + categorical_features\n",
+ "patient_df = pd.DataFrame([example_patient])[expected_columns]\n",
+ "\n",
+ "loaded_model = joblib.load(MODEL_DIR / \"dfs_model.joblib\")\n",
+ "probability = loaded_model.predict_proba(patient_df)[0, 1]\n",
+ "\n",
+ "print(f\"\\nPredicted probability of recurrence/progression: {probability:.1%}\")\n",
+ "print(f\"Screening threshold flag (>= {screening_threshold:.2f}):\", \"AT-RISK\" if probability >= screening_threshold else \"Not flagged\")\n",
+ "print(f\"Balanced threshold flag (>= {balanced_threshold:.2f}):\", \"AT-RISK\" if probability >= balanced_threshold else \"Not flagged\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1c556d8d",
+ "metadata": {},
+ "source": [
+ "## 22. Limitations and flags, all in one place\n",
+ "\n",
+ "Gathering every caveat raised throughout this notebook into a single list,\n",
+ "since this is the section a reviewer or a future volunteer picking up this\n",
+ "project should read first:\n",
+ "\n",
+ "1. **Class imbalance is severe** (89% disease-free versus 11%\n",
+ " recurred/progressed), which makes plain accuracy a misleading metric and\n",
+ " limits how much any model can learn about the minority class. (Sections 2, 11)\n",
+ "2. **Right-censoring is not modeled.** `DFS_STATUS` is treated as a fixed\n",
+ " binary label, but it is really a snapshot in time. Some \"DiseaseFree\"\n",
+ " patients have short follow-up and may recur later; a survival model (Cox\n",
+ " proportional hazards, for example) would be the statistically correct way\n",
+ " to handle this, and would need the `DFS_MONTHS` column, which is not part\n",
+ " of the current modeling dataset. (Section 4)\n",
+ "3. **`KMT2C` is constant across the whole cohort** (always 0) and was dropped.\n",
+ " Worth double-checking against the source mutation file if a future\n",
+ " iteration of this project wants to know why. (Section 3)\n",
+ "4. **A handful of patients are not, strictly speaking, breast carcinoma\n",
+ " cases** (`Breast Sarcoma`, `Skin Cancer, Non-Melanoma`), a known artifact\n",
+ " of how the TCGA-BRCA cohort was assembled rather than an extraction bug.\n",
+ " (Section 3)\n",
+ "5. **`AJCC_PATHOLOGIC_TUMOR_STAGE` includes a `[Discrepancy]` category and a\n",
+ " vague, non-substaged `Stage X` / `Stage II` category**, both of which\n",
+ " represent genuine clinical uncertainty rather than a clean stage\n",
+ " assignment. (Section 3)\n",
+ "6. **The gene panel is small and dated.** The 12 genes used here come from a\n",
+ " 2012 landmark paper and do not reflect the full mutational landscape known\n",
+ " today, nor do they include copy number, methylation, protein expression,\n",
+ " or treatment history, all of which are available in the raw\n",
+ " `brca_tcga` folder but were out of scope for this phase of the project.\n",
+ "7. **Hyperparameter tuning did not meaningfully improve performance** over\n",
+ " sensible defaults, most likely because 97 recurrence events is not a lot\n",
+ " of signal for a search procedure to reliably exploit. This is reported\n",
+ " honestly rather than papered over. (Section 16.2)\n",
+ "8. **This model has not been externally validated.** All numbers in this\n",
+ " notebook come from one TCGA-BRCA cohort, split internally into training\n",
+ " and test sets. Real-world deployment would require validation on an\n",
+ " independent cohort, which is well beyond the scope of this volunteership\n",
+ " phase.\n",
+ "9. **This is a research and educational artifact, not a clinical decision\n",
+ " tool**, and should not be used to guide real patient care."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e55567d4",
+ "metadata": {},
+ "source": [
+ "## 23. Summary and next steps\n",
+ "\n",
+ "**What this notebook accomplished:**\n",
+ "\n",
+ "- Loaded and quality-checked the Week 3 ML-ready dataset, catching a constant\n",
+ " column and a couple of category-level data quality notes along the way.\n",
+ "- Trained and evaluated three Week 4 baseline models (Logistic Regression,\n",
+ " Random Forest, SVM), using both a held-out test set and 5-fold\n",
+ " cross-validation.\n",
+ "- Diagnosed *why* the baselines struggled (severe class imbalance) rather than\n",
+ " just reporting the numbers.\n",
+ "- Tried two standard remedies (SMOTE oversampling and hyperparameter tuning)\n",
+ " plus an additional model (Gradient Boosting), and reported honestly that\n",
+ " SMOTE helped while tuning did not, on this dataset size.\n",
+ "- Picked a final model (Logistic Regression + SMOTE) with a clear, written\n",
+ " justification, and derived two decision thresholds for two different use\n",
+ " cases, using proper cross-validation to avoid leaking the test set into the\n",
+ " threshold choice.\n",
+ "- Saved the final trained pipeline and its metadata to the `model/` folder,\n",
+ " and demonstrated the single-patient prediction workflow end to end.\n",
+ "\n",
+ "**What is left for the remaining project weeks**, none of which is a coding\n",
+ "task for this notebook:\n",
+ "\n",
+ "- **Week 7:** finish the BioCompute Object (`model_bco.json` in this folder is\n",
+ " a complete first draft) and start the symposium slides.\n",
+ "- **Week 8:** fork the PredictMod repository, add this project's model\n",
+ " package (dataset, `train_model.py`, `predict_single_patient.py`,\n",
+ " `model_bco.json`, this notebook, and `README.md`), and open a pull request.\n",
+ " Finalize and rehearse the symposium slides, and submit the 1 to 2 page\n",
+ " volunteership report.\n",
+ "- **Week 9:** respond to any review feedback on the pull request and present\n",
+ " at the Volunteership Symposium.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.14.0"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/breast_cancer_ml_eda.csv b/flask_backend/models/BRCA_DFS_Recurrence_v1/breast_cancer_ml_eda.csv
new file mode 100644
index 00000000..ddc36ec1
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/breast_cancer_ml_eda.csv
@@ -0,0 +1,896 @@
+PATIENT_ID,AGE,AJCC_PATHOLOGIC_TUMOR_STAGE,ER_STATUS_BY_IHC,PR_STATUS_BY_IHC,IHC_HER2,DFS_STATUS,SAMPLE_ID,CANCER_TYPE,CANCER_TYPE_DETAILED,TMB_NONSYNONYMOUS,TP53,PIK3CA,GATA3,CDH1,PTEN,MAP3K1,MAP2K4,KRAS,KMT2C,ARID1A,RUNX1,ESR1
+TCGA-3C-AALI,50.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-3C-AALI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-3C-AALJ,62.0,Stage IIB,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-3C-AALJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-3C-AALK,52.0,Stage IA,Positive,Positive,Positive,0:DiseaseFree,TCGA-3C-AALK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-4H-AAAK,50.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-4H-AAAK-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-5L-AAT0,42.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-5L-AAT0-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-5L-AAT1,63.0,Stage IV,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-5L-AAT1-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SB,70.0,Stage I,Positive,Negative,Negative,0:DiseaseFree,TCGA-A1-A0SB-01,Breast Cancer,Adenoid Cystic Breast Cancer,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SE,56.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A1-A0SE-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.6,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A1-A0SF,54.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A1-A0SF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SH,39.0,Stage IIA,Negative,Positive,Equivocal,0:DiseaseFree,TCGA-A1-A0SH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SI,52.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A1-A0SI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.633333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SJ,39.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A1-A0SJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SM,77.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-A1-A0SM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SN,50.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A1-A0SN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SO,67.0,Stage IIB,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A1-A0SO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A1-A0SP,40.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A1-A0SP-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,1,0,0,0,0,0,0,0,0,1,0,0
+TCGA-A1-A0SQ,45.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A1-A0SQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04N,66.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A04N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A04P,36.0,Stage IIIC,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A04P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.933333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04Q,48.0,Stage IA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A2-A04Q-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.266666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04R,36.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A04R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.133333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04T,62.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A2-A04T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.233333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04U,47.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A04U-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04V,39.0,Stage IIA,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-A2-A04V-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04W,50.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-A2-A04W-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.733333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04X,34.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A2-A04X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A04Y,53.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A04Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CK,60.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A2-A0CK-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.4,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A0CL,37.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0CL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CM,40.0,Stage IIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A0CM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CP,60.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0CP-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.5,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A0CQ,62.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0CQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CR,54.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0CR-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.066666667,0,1,0,1,0,0,0,0,0,1,0,0
+TCGA-A2-A0CT,71.0,Stage IIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-A2-A0CT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.933333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CV,41.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0CV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CW,67.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0CW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,1,1,0,0,0,0,0,0,0,0,1,0
+TCGA-A2-A0CX,52.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-A2-A0CX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,5.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CY,63.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0CY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0CZ,46.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0CZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0D0,60.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A0D0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.6,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0D1,76.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-A2-A0D1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.8,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0D2,45.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A0D2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0D3,42.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0D3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0D4,37.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0D4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EM,73.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0EM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EN,70.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0EN-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.9,0,1,0,0,0,0,0,0,0,0,1,0
+TCGA-A2-A0EO,54.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0EO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EP,56.0,Stage I,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A0EP-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EQ,64.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-A2-A0EQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.233333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0ER,63.0,Stage IB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0ER-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0ES,52.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0ES-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0ET,58.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0ET-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EU,79.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0EU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A0EV,80.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0EV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.766666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EW,53.0,Stage IIIC,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A2-A0EW-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.366666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0EX,46.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0EX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.833333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A0EY,62.0,Stage IIB,Positive,Negative,Positive,0:DiseaseFree,TCGA-A2-A0EY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.766666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0SU,66.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0SU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0SW,82.0,Stage IV,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A0SW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.4,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0SX,48.0,Stage IA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A0SX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0SY,62.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0SY-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.3,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A0T0,59.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A0T0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,8.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0T1,55.0,Stage IIIC,Negative,Negative,Positive,0:DiseaseFree,TCGA-A2-A0T1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0T3,37.0,Stage IB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0T3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0T4,62.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A0T4-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.866666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A0T5,39.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0T5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,36.56666667,0,0,1,0,0,0,0,0,0,1,0,0
+TCGA-A2-A0T6,50.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0T6-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.166666667,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A0T7,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0T7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YC,59.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A2-A0YC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YD,63.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0YD-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.466666667,0,0,0,1,0,1,0,0,0,0,0,0
+TCGA-A2-A0YE,48.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A0YE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YF,67.0,Stage I,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A0YF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A0YG,63.0,Stage IIIC,Positive,Positive,Positive,0:DiseaseFree,TCGA-A2-A0YG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YH,53.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0YH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YI,62.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0YI-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.333333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YJ,39.0,Stage IIIA,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A0YJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YK,61.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A0YK-01,Breast Cancer,Breast Invasive Lobular Carcinoma,4.7,0,1,0,1,0,1,0,0,0,0,0,0
+TCGA-A2-A0YL,48.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A0YL-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.266666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A0YM,67.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A0YM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A1FV,74.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A1FV-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.033333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A1FW,62.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A1FW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A1FX,61.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A1FX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A1FZ,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A1FZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A1G1,85.0,Stage IIB,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A2-A1G1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A1G4,71.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A1G4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,0,0,0,0,1,0,0,0,0,0
+TCGA-A2-A1G6,50.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A1G6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.133333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A259,70.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A259-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.366666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A25A,44.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A25A-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.666666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A25B,39.0,Stage IIB,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-A2-A25B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.966666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A2-A25C,50.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A25C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A25D,90.0,Stage IIIC,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A25D-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.366666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A25E,34.0,Stage IIIA,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-A2-A25E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A25F,66.0,Stage IIA,Negative,Positive,Negative,0:DiseaseFree,TCGA-A2-A25F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3KC,55.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A2-A3KC-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.766666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A3KD,47.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A3KD-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XS,62.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A3XS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XT,45.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-A2-A3XT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XU,35.0,Stage IIB,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A3XU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XV,46.0,Stage IIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-A2-A3XV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XW,42.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A3XW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XY,49.0,Stage IIB,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-A2-A3XY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3XZ,46.0,Stage I,Negative,Negative,Positive,0:DiseaseFree,TCGA-A2-A3XZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A3Y0,57.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A3Y0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.5,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A2-A4RW,49.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A4RW-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.0,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-A2-A4RY,46.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A4RY-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.333333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A4S1,66.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A2-A4S1-01,Breast Cancer,Metaplastic Breast Cancer,2.033333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A2-A4S2,62.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A4S2-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.033333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A2-A4S3,59.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A2-A4S3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0CD,66.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A7-A0CD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0CE,57.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A7-A0CE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,5.3,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0CG,78.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A7-A0CG-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.933333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0CH,79.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A0CH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0CJ,57.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A0CJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0D9,37.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A7-A0D9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0DA,62.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A7-A0DA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A0DB,56.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A0DB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.166666667,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-A7-A0DC,63.0,Stage IA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A7-A0DC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A13D,46.0,Stage IIA,Negative,Positive,Equivocal,0:DiseaseFree,TCGA-A7-A13D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,5.2,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A13E,62.0,Stage IIB,Positive,Negative,Equivocal,1:Recurred/Progressed,TCGA-A7-A13E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,6.9,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A13F,44.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-A7-A13F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.866666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A13G,79.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A7-A13G-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A13H,61.0,Stage IIB,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-A7-A13H-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.666666667,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A7-A26E,71.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A26E-01,Breast Cancer,Breast Invasive Lobular Carcinoma,9.1,0,1,0,0,0,0,0,0,0,0,1,0
+TCGA-A7-A26J,49.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A26J-01,Breast Cancer,Breast Invasive Ductal Carcinoma,5.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A3IY,71.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A3IY-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.366666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A3IZ,62.0,Stage IIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-A7-A3IZ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.133333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A7-A3J0,62.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A3J0-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.9,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A3J1,63.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A3J1-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.6,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A7-A3RF,79.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A7-A3RF-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,1.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A4SA,40.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-A7-A4SA-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A4SB,56.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A4SB-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.0,0,1,0,1,0,1,0,0,0,1,0,0
+TCGA-A7-A4SC,62.0,Stage IIB,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-A7-A4SC-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.866666667,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A7-A4SD,52.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A7-A4SD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A4SE,54.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A7-A4SE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A4SF,54.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-A7-A4SF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A56D,84.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A56D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,5.933333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A5ZV,62.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-A7-A5ZV-01,Breast Cancer,"Breast Invasive Carcinoma, NOS",4.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A5ZW,47.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A5ZW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-A7-A5ZX,48.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A5ZX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.566666667,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A7-A6VV,51.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A7-A6VV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A6VW,48.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A7-A6VW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A6VX,68.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A7-A6VX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A7-A6VY,48.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-A7-A6VY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A06N,66.0,Stage IIIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-A8-A06N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-A8-A06O,60.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A06O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.866666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A06P,63.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A06P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A06Q,63.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A06Q-01,Breast Cancer,Breast Invasive Ductal Carcinoma,5.733333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A06R,69.0,Stage IIB,Positive,Negative,Positive,0:DiseaseFree,TCGA-A8-A06R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A06T,75.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A06T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A8-A06Y,66.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A8-A06Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A8-A075,42.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A075-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.833333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A076,66.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A076-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A079,69.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A079-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,1,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07B,69.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A07B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.633333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A07C,57.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A8-A07C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07E,81.0,Stage X,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07F,65.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A07G,65.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07G-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07I,69.0,Stage IIIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-A8-A07I-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-A8-A07J,35.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07J-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-A8-A07L,58.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07L-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07O,51.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-A8-A07O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07P,68.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A07P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07S,73.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A8-A07S-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07U,66.0,Stage IIIA,Negative,Positive,Negative,0:DiseaseFree,TCGA-A8-A07U-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07W,76.0,Stage IV,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07W-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.0,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A07Z,85.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A07Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-A8-A081,80.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A081-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.266666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A082,58.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A082-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A083,67.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A083-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A8-A084,81.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-A8-A084-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A085,44.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A085-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A086,59.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A086-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A08A,89.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A08A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08B,52.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-A8-A08B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08C,65.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A08C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.066666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08F,59.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A08F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08G,41.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A08G-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08H,66.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A08H-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A08I,53.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A08I-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08O,45.0,Stage IV,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-A8-A08O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08P,70.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A08P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.033333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08R,52.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-A8-A08R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.233333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08S,71.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A08S-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08T,64.0,Stage IV,Positive,Positive,Positive,1:Recurred/Progressed,TCGA-A8-A08T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08X,43.0,Stage IIIC,Negative,Negative,Positive,1:Recurred/Progressed,TCGA-A8-A08X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A08Z,76.0,[Discrepancy],Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A08Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,1,0,0,0,1,0,0,0,0,1,0
+TCGA-A8-A090,74.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A090-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A091,61.0,Stage IIA,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-A8-A091-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A092,48.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A092-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.233333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A093,61.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A093-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.533333333,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-A8-A094,75.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-A8-A094-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A095,45.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A095-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A096,73.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A096-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A097,65.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A097-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.0,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09A,40.0,Stage X,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09B,58.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A09D,47.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09E,73.0,Stage IIIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A09E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,0,0,0,1,0,0,0,0,0,0,0
+TCGA-A8-A09G,79.0,Stage IIIC,Positive,Negative,Positive,0:DiseaseFree,TCGA-A8-A09G-01,Breast Cancer,Breast Invasive Ductal Carcinoma,6.366666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09I,84.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A09I-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09K,68.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09K-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09M,75.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09M-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.3,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-A8-A09N,57.0,Stage IIIC,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A09N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09Q,83.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09Q-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.5,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09R,82.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-A8-A09T,68.0,[Discrepancy],Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09T-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.8,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A09V,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A09V-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.733333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A09Z,83.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-A8-A09Z-01,Breast Cancer,Breast Invasive Lobular Carcinoma,34.03333333,0,0,1,1,0,0,0,0,0,1,1,0
+TCGA-A8-A0A1,84.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A0A1-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.0,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-A8-A0A2,66.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A0A2-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.766666667,0,0,0,0,0,0,0,0,0,0,1,0
+TCGA-A8-A0A4,73.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A0A4-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.8,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A0A6,64.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A0A6-01,Breast Cancer,Breast Invasive Lobular Carcinoma,69.7,1,1,0,1,0,0,0,0,0,1,0,0
+TCGA-A8-A0A7,57.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-A8-A0A7-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.366666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A0A9,80.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A0A9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-A8-A0AB,54.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-A8-A0AB-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.666666667,0,0,0,1,0,0,0,0,0,0,1,0
+TCGA-A8-A0AD,83.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-A8-A0AD-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.7,0,0,0,0,0,0,0,0,0,0,1,0
+TCGA-AC-A23E,50.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A23E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-AC-A23G,76.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AC-A23G-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.633333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A2BK,78.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AC-A2BK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A2BM,41.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A2BM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A2FB,65.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AC-A2FB-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.433333333,0,0,0,0,0,0,0,0,0,0,1,0
+TCGA-AC-A2FE,62.0,Stage IIIC,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AC-A2FE-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.6,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-AC-A2FF,40.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A2FF-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.5,0,0,0,1,1,1,0,0,0,0,0,0
+TCGA-AC-A2FG,79.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A2FG-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.266666667,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A2FK,45.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A2FK-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A2FM,87.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AC-A2FM-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A2FO,65.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A2FO-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.7,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A2QH,58.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-AC-A2QH-01,Breast Cancer,Metaplastic Breast Cancer,2.4,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A2QI,76.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A2QI-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.8,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A2QJ,48.0,Stage IIIB,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-AC-A2QJ-01,Breast Cancer,Metaplastic Breast Cancer,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A3BB,46.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A3BB-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.066666667,0,0,0,1,0,0,0,0,0,0,1,0
+TCGA-AC-A3HN,87.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A3HN-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A3OD,68.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A3OD-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.766666667,1,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A3QP,79.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AC-A3QP-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A3QQ,54.0,Stage IA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AC-A3QQ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A3TM,50.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AC-A3TM-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.233333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A3TN,75.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AC-A3TN-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.4,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A3W5,65.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A3W5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A3W6,90.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A3W6-01,Breast Cancer,Breast Invasive Lobular Carcinoma,5.1,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A3W7,66.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A3W7-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.733333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A3YJ,66.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A3YJ-01,Breast Cancer,Solid Papillary Carcinoma of the Breast,0.633333333,0,1,0,0,1,0,0,0,0,0,0,0
+TCGA-AC-A4ZE,63.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AC-A4ZE-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A5EH,76.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A5EH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.533333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A5EI,88.0,Stage IB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A5EI-01,Breast Sarcoma,Malignant Phyllodes Tumor of the Breast,0.833333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AC-A5XS,74.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A5XS-01,Breast Cancer,Breast Invasive Lobular Carcinoma,23.8,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AC-A5XU,74.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A5XU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A62X,72.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A62X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A62Y,79.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A62Y-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.766666667,0,0,0,0,1,0,0,0,0,0,0,0
+TCGA-AC-A6IV,47.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AC-A6IV-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A6IW,73.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AC-A6IW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A6IX,49.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A6IX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A6NO,43.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A6NO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A7VB,51.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AC-A7VB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A7VC,56.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-AC-A7VC-01,Breast Cancer,Metaplastic Breast Cancer,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A8OP,72.0,Stage IA,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-AC-A8OP-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A8OQ,72.0,Stage IIB,Negative,Negative,Indeterminate,0:DiseaseFree,TCGA-AC-A8OQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A8OR,75.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AC-A8OR-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AC-A8OS,71.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AC-A8OS-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A03X,74.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AN-A03X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-AN-A03Y,66.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A03Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AN-A046,68.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A046-01,Breast Cancer,Breast Invasive Ductal Carcinoma,147.1,1,1,0,0,1,0,0,1,0,0,0,1
+TCGA-AN-A049,62.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A049-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-AN-A04A,36.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A04A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A04C,51.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-AN-A04C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.1,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A04D,58.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-AN-A04D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0AJ,79.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AN-A0AJ-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.9,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0AK,76.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-AN-A0AK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,31.43333333,0,1,1,1,0,0,0,0,0,1,0,0
+TCGA-AN-A0AL,41.0,Stage IIIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-AN-A0AL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.166666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0AM,56.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AN-A0AM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0AR,55.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AN-A0AR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.9,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0AS,70.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AN-A0AS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-AN-A0AT,62.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AN-A0AT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FD,71.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AN-A0FD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FF,32.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A0FF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FJ,59.0,Stage IV,Positive,Negative,Positive,0:DiseaseFree,TCGA-AN-A0FJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.2,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FK,88.0,Stage IIIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AN-A0FK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FL,62.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-AN-A0FL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FN,61.0,Stage IA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AN-A0FN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FS,55.0,Stage IA,Positive,Negative,Positive,0:DiseaseFree,TCGA-AN-A0FS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FT,63.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AN-A0FT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.3,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FV,58.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-AN-A0FV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.966666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FW,67.0,Stage IIIA,Positive,Indeterminate,Negative,0:DiseaseFree,TCGA-AN-A0FW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.633333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FX,52.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-AN-A0FX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.166666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FY,55.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A0FY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0FZ,45.0,Stage IIIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-AN-A0FZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0G0,56.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AN-A0G0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0XL,61.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AN-A0XL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0XN,68.0,Stage IIIA,Negative,Positive,Negative,0:DiseaseFree,TCGA-AN-A0XN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.1,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AN-A0XO,59.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AN-A0XO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A03L,34.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AO-A03L-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A03M,29.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A03M-01,Breast Cancer,Breast Invasive Ductal Carcinoma,18.76666667,0,1,0,0,0,0,0,0,0,0,0,1
+TCGA-AO-A03N,59.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AO-A03N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.333333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A03P,54.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AO-A03P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AO-A03R,57.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A03R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.033333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A03T,42.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A03T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.333333333,0,0,0,0,0,0,1,0,0,0,0,0
+TCGA-AO-A03U,31.0,Stage I,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-AO-A03U-01,Breast Cancer,Invasive Breast Carcinoma,0.233333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A03V,41.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A03V-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.533333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0J2,41.0,Stage IA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-AO-A0J2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0J3,67.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AO-A0J3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.0,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0J4,41.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A0J4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.366666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0J6,61.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A0J6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.866666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0J7,71.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0J7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-AO-A0J8,61.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0J8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.566666667,0,0,0,1,0,0,0,0,0,0,1,0
+TCGA-AO-A0J9,61.0,Stage IIIC,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AO-A0J9-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.466666667,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-AO-A0JA,36.0,Stage IIIC,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AO-A0JA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,1,0,0,1,0,0,0,0,0,0,0
+TCGA-AO-A0JB,50.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0JB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.3,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JC,64.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0JC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.233333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JD,59.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0JD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JE,53.0,Stage IIIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-AO-A0JE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JF,68.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0JF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,1,0,0,0,1,1,0,0,0,0,0
+TCGA-AO-A0JG,49.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0JG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JI,56.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AO-A0JI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JJ,54.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A0JJ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JL,59.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A0JL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A0JM,40.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AO-A0JM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A124,38.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A124-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.833333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A125,72.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A125-01,Breast Cancer,Solid Papillary Carcinoma of the Breast,1.066666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A126,39.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AO-A126-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A128,61.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A128-01,Breast Cancer,Breast Invasive Ductal Carcinoma,23.33333333,1,0,0,1,0,0,0,0,0,0,0,0
+TCGA-AO-A129,29.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A129-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.2,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12A,47.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A12A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.366666667,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12B,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A12B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12C,42.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-AO-A12C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12D,43.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-AO-A12D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12E,51.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A12E-01,Breast Cancer,Breast Invasive Lobular Carcinoma,11.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12F,36.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A12F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A12G,75.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-AO-A12G-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,0,0,0,1,0,0,0,0,0,0,0
+TCGA-AO-A12H,69.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A12H-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A1KO,46.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A1KO-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A1KP,77.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A1KP-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A1KQ,84.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-AO-A1KQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A1KR,51.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AO-A1KR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A1KS,69.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AO-A1KS-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AO-A1KT,78.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AO-A1KT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A04H,61.0,Stage IIIA,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-AQ-A04H-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.733333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A04J,45.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AQ-A04J-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.466666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A04L,48.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-AQ-A04L-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A1H2,84.0,Stage IIIA,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-AQ-A1H2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A1H3,49.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-AQ-A1H3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A54N,51.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-AQ-A54N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.0,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AQ-A54O,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AQ-A54O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A0TQ,27.0,Stage IIIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-AR-A0TQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A0TU,35.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-AR-A0TU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.9,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A0TV,66.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AR-A0TV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A0U2,47.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AR-A0U2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AH,51.0,Stage IIB,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-AR-A1AH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.033333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AI,47.0,Stage IIA,Negative,Negative,Equivocal,1:Recurred/Progressed,TCGA-AR-A1AI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AJ,83.0,Stage I,Positive,Negative,Negative,0:DiseaseFree,TCGA-AR-A1AJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,1,0,0,0,1,0,0,0,0,0,0,0
+TCGA-AR-A1AK,70.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-AR-A1AK-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AL,60.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AR-A1AL-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.633333333,0,1,0,1,0,0,0,1,0,0,0,0
+TCGA-AR-A1AM,52.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AR-A1AM-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.7,0,0,0,0,1,0,0,0,0,0,0,0
+TCGA-AR-A1AN,46.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-AR-A1AN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,1,0,0,0,0,0,0,0,0,0,1,0
+TCGA-AR-A1AO,47.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-AR-A1AO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.133333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AP,80.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AR-A1AP-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,1,0,1,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AQ,49.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-AR-A1AQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A1AR,50.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-AR-A1AR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A24O,43.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-AR-A24O-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.466666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A250,58.0,Stage IIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-AR-A250-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A2LR,49.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-AR-A2LR-01,Breast Cancer,Metaplastic Breast Cancer,1.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A5QM,62.0,Stage IIA,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-AR-A5QM-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.7,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-AR-A5QN,68.0,Stage IIIC,Positive,Positive,Positive,0:DiseaseFree,TCGA-AR-A5QN-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A5QP,54.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-AR-A5QP-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.766666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-AR-A5QQ,68.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-AR-A5QQ-01,Breast Cancer,Metaplastic Breast Cancer,1.4,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0I1,73.0,Stage IIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0I1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.266666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0I2,45.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A0I2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0I5,49.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A0I5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0I6,49.0,Stage IIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0I6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0I8,46.0,Stage X,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0I8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0IA,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A0IA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0IB,64.0,Stage IV,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0IB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,0,0,0,0,0,0,1,0,0,0,0,0
+TCGA-B6-A0IE,38.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0IE-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.933333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0IJ,42.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A0IJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.7,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0IK,63.0,Stage IIIB,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0IK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.566666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0IN,45.0,Stage X,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0IN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0IO,66.0,Stage IIA,Positive,Indeterminate,Negative,0:DiseaseFree,TCGA-B6-A0IO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,0,0,1,0,1,1,0,0,0,0,0,0
+TCGA-B6-A0IQ,40.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A0IQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.466666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RE,61.0,Stage X,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A0RE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RG,26.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A0RG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,0,1,1,0,0,0,1,0,0,1,0,0
+TCGA-B6-A0RH,51.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0RH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,1,1,0,0,0,0,1,0,0,0,0,0
+TCGA-B6-A0RI,44.0,Stage IIIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0RI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RN,60.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A0RN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RO,71.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A0RO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.8,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RS,38.0,Stage IIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0RS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RT,39.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A0RT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RU,40.0,Stage IA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0RU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0RV,42.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A0RV-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.0,0,0,0,0,0,0,1,0,0,0,0,0
+TCGA-B6-A0WT,61.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0WT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0WW,58.0,Stage X,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0WW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,1,0,0,1,0,0,0,0,0,0,0
+TCGA-B6-A0WX,40.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0WX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.733333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0WY,40.0,Stage IIIA,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0WY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0WZ,50.0,Stage II,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0WZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,0,1,0,0,0,0,0
+TCGA-B6-A0X1,48.0,[Discrepancy],Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A0X1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A0X4,62.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0X4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,0,1,0,0,0,1,0,0,0,0,0
+TCGA-B6-A0X5,61.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-B6-A0X5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A1KC,67.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-B6-A1KC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-B6-A1KF,68.0,Stage IIB,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-B6-A1KF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A1KI,63.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-B6-A1KI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-B6-A1KN,57.0,Stage IIIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A1KN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A3ZX,50.0,Stage IV,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A3ZX-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.1,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A400,43.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-B6-A400-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.933333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A401,47.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A401-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A402,47.0,Stage I,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-B6-A402-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A408,55.0,Stage IIIC,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-B6-A408-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.0,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A409,44.0,Stage IIIA,Negative,Negative,Equivocal,1:Recurred/Progressed,TCGA-B6-A409-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-B6-A40B,76.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A40B-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.366666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-B6-A40C,51.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-B6-A40C-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.0,0,0,1,1,0,0,0,0,0,0,0,0
+TCGA-BH-A0AU,45.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-BH-A0AU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0AV,52.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0AV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0AW,56.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-BH-A0AW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.533333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0AY,62.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0AY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0AZ,47.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0AZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.533333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B0,56.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0B0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B1,66.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0B1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B3,53.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0B3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B4,65.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0B4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.8,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B5,40.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0B5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B6,47.0,Stage I,Positive,Positive,Positive,0:DiseaseFree,TCGA-BH-A0B6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,16.76666667,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A0B7,42.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-BH-A0B7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B8,64.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0B8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.0,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0B9,44.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0B9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BA,51.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BA-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.533333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-BH-A0BC,60.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.033333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BD,47.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BG,73.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0BG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BJ,41.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BL,35.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0BL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.9,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BM,54.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A0BM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,0,1,0,0,0,0,0,0,0,0,1,0
+TCGA-BH-A0BO,54.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-BH-A0BQ,39.0,Stage I,Positive,Positive,Positive,1:Recurred/Progressed,TCGA-BH-A0BQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BR,59.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.8,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BS,55.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.333333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BT,56.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BV,78.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BW,71.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0BW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0BZ,59.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0BZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,6.066666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0C0,62.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0C0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0C1,61.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-BH-A0C1-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.733333333,0,0,0,1,0,0,0,0,0,0,1,0
+TCGA-BH-A0C3,47.0,Stage I,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-BH-A0C3-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.366666667,1,0,0,0,0,0,0,0,0,0,1,0
+TCGA-BH-A0C7,48.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A0C7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DD,58.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-BH-A0DD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DE,62.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DG,30.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A0DG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DH,63.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DI,63.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DK,49.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.366666667,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DL,64.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A0DL-01,Breast Cancer,Metaplastic Breast Cancer,2.166666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DO,78.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DP,60.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DP-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.933333333,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A0DQ,42.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DS,71.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,0,0,0,0,0,0,1
+TCGA-BH-A0DT,41.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.366666667,0,1,1,0,0,1,0,0,0,0,0,0
+TCGA-BH-A0DV,54.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.133333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-BH-A0DX,62.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0DX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0DZ,43.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-BH-A0DZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,11.6,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-BH-A0E0,38.0,Stage IIIC,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0E0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0E1,52.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0E1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0E2,49.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0E2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0E6,69.0,Stage IA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-BH-A0E6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0E7,79.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0E7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,0,0,0,0,1,0,0,0,1,0,0
+TCGA-BH-A0E9,53.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0E9-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.3,0,0,0,1,1,0,0,0,0,0,0,0
+TCGA-BH-A0EB,69.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0EB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0EE,68.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-BH-A0EE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.0,0,1,0,0,0,0,0,0,0,1,0,0
+TCGA-BH-A0EI,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0EI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,0,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A0GY,67.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0GY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,1,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A0GZ,62.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0GZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0H0,69.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0H0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0H3,46.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0H3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,1,1,0,0,0,0,0,0,0,1,0
+TCGA-BH-A0H5,45.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0H5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0H6,82.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0H6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0H7,65.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0H7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0H9,69.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0H9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.933333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HA,31.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,7.8,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A0HB,55.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0HB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HF,77.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,18.96666667,0,1,1,0,0,0,0,0,0,1,0,0
+TCGA-BH-A0HI,78.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HK,81.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A0HK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HL,56.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0HL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HN,67.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0HN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HO,48.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HP,65.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A0HP-01,Breast Cancer,Breast Invasive Lobular Carcinoma,10.8,0,0,1,1,1,0,0,0,0,0,1,0
+TCGA-BH-A0HQ,56.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HU,52.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HW,62.0,Stage IA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-BH-A0HW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-BH-A0HX,54.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0HX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0HY,60.0,Stage I,Positive,Negative,Positive,0:DiseaseFree,TCGA-BH-A0HY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0RX,59.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0RX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0W3,58.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0W3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0W4,46.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0W4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A0W5,77.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A0W5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-BH-A0W7,49.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A0W7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.933333333,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A0WA,82.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-BH-A0WA-01,Breast Cancer,Metaplastic Breast Cancer,2.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A18F,50.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A18F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-BH-A18I,53.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-BH-A18I-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A1EY,79.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-BH-A1EY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,1,0,0,0,0,0,1,0,0,0,0,0
+TCGA-BH-A201,64.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A201-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A28O,50.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A28O-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A28Q,46.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A28Q-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.533333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-BH-A2L8,45.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A2L8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,9.766666667,0,1,1,1,1,0,0,0,0,0,0,0
+TCGA-BH-A42V,41.0,Stage IB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A42V-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-BH-A5IZ,51.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-BH-A5IZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A5J0,63.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A5J0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A6R8,46.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A6R8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A6R9,61.0,Stage IIA,Negative,Positive,Negative,0:DiseaseFree,TCGA-BH-A6R9-01,Breast Cancer,Metaplastic Breast Cancer,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A8FZ,58.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-BH-A8FZ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-A8G0,54.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-A8G0-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-BH-AB28,53.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-BH-AB28-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12K,80.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12K-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12L,67.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-C8-A12L-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.9,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12M,70.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-C8-A12M-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.533333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12N,58.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-C8-A12O,50.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,1,0,0,0,0,0,0,0,0,0,1,0
+TCGA-C8-A12P,55.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-C8-A12P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.833333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12T,43.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-C8-A12T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.066666667,1,1,0,0,0,0,0,0,0,1,0,0
+TCGA-C8-A12U,46.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12U-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12V,55.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-C8-A12V-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12W,49.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12W-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12X,62.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12X-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,1.066666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12Y,44.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A12Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A12Z,45.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-C8-A12Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A130,52.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-C8-A130-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A131,82.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-C8-A131-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.466666667,1,1,0,0,0,0,0,1,0,0,0,0
+TCGA-C8-A132,56.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A132-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.266666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A133,65.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A133-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A134,52.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-C8-A134-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.4,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A135,64.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-C8-A135-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A137,34.0,Stage IIB,Negative,Negative,Positive,1:Recurred/Progressed,TCGA-C8-A137-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A138,54.0,Stage IIIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-C8-A138-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,1,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HE,59.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-C8-A1HE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HF,48.0,Stage IIA,Negative,Positive,Positive,0:DiseaseFree,TCGA-C8-A1HF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,1,1,0,0,0,0,0,0,0,0,1,0
+TCGA-C8-A1HG,50.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A1HG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HI,40.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A1HI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HJ,53.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-C8-A1HJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.0,1,0,0,0,0,0,0,0,0,0,1,0
+TCGA-C8-A1HK,53.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-C8-A1HK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HL,38.0,Stage IIIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-C8-A1HL-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.733333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HM,74.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A1HM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,7.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HN,56.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-C8-A1HN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A1HO,34.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A1HO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,1,0,0,1,0,0,0,0,0
+TCGA-C8-A26V,47.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A26V-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.833333333,1,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A26W,58.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-C8-A26W-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.266666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A26X,58.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-C8-A26X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A26Y,90.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-C8-A26Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,17.46666667,0,0,0,0,1,0,0,0,0,0,0,0
+TCGA-C8-A26Z,59.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A26Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A273,29.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A273-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-C8-A274,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A274-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.5,0,1,0,1,0,0,0,0,0,0,1,0
+TCGA-C8-A275,56.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A275-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A278,61.0,Stage IIIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-C8-A278-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A27A,48.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A27A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A27B,48.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-C8-A27B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A3M7,60.0,Stage IIIB,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-C8-A3M7-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.666666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-C8-A3M8,68.0,Stage IA,Positive,Positive,Positive,0:DiseaseFree,TCGA-C8-A3M8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.333333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-C8-A8HP,59.0,Stage IIIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-C8-A8HP-01,Breast Cancer,Metaplastic Breast Cancer,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A8HQ,53.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A8HQ-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A8HR,49.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A8HR-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-C8-A9FZ,49.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-C8-A9FZ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A13Y,52.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A13Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A142,74.0,Stage IIB,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-D8-A142-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A143,51.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A143-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A145,80.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A145-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1J8,77.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1J8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,18.36666667,0,1,1,0,1,0,0,0,0,0,0,1
+TCGA-D8-A1J9,48.0,Stage IA,Positive,Negative,Positive,0:DiseaseFree,TCGA-D8-A1J9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.933333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JA,60.0,Stage IIA,Negative,Negative,Positive,1:Recurred/Progressed,TCGA-D8-A1JA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,23.23333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JB,54.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A1JB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JC,59.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.9,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JD,41.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.2,0,1,0,0,0,0,0,0,0,1,0,0
+TCGA-D8-A1JE,62.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JF,79.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A1JF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JG,62.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-D8-A1JG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.9,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JH,56.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-D8-A1JI,54.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,0,0,1,0,0,0,0,0,0,0
+TCGA-D8-A1JJ,54.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.6,1,1,1,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JL,72.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A1JL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.433333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JM,59.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-D8-A1JM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JN,80.0,Stage IIIC,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-D8-A1JN-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.633333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-D8-A1JS,77.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JT,70.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A1JT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1JU,51.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1JU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.233333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-D8-A1X5,81.0,Stage IIIC,Positive,Positive,Positive,0:DiseaseFree,TCGA-D8-A1X5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1X6,80.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1X6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,0,0,1,0,0,1,0,0,0,0,0,0
+TCGA-D8-A1X8,62.0,Stage IIIA,Positive,Indeterminate,Negative,0:DiseaseFree,TCGA-D8-A1X8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1X9,66.0,Stage IIB,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-D8-A1X9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XA,64.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A1XA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-D8-A1XB,62.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-D8-A1XD,36.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XF,45.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.933333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XG,86.0,Stage IIIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-D8-A1XG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XJ,76.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-D8-A1XJ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.966666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XK,55.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A1XK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,24.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XL,34.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A1XL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.733333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XM,57.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XO,56.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XO-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.366666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-D8-A1XQ,69.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A1XQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,18.96666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XR,56.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XS,48.0,Stage IIIC,Positive,Positive,Positive,0:DiseaseFree,TCGA-D8-A1XS-01,Breast Cancer,Invasive Breast Carcinoma,0.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XT,61.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-D8-A1XT-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XU,56.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XV,84.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A1XV-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XW,53.0,Stage IIA,Negative,Positive,Negative,0:DiseaseFree,TCGA-D8-A1XW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1XY,74.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-D8-A1XY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-D8-A1XZ,81.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-D8-A1XZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.633333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1Y0,65.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A1Y0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1Y2,71.0,Stage IIA,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-D8-A1Y2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A1Y3,61.0,Stage IIIA,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-D8-A1Y3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27E,66.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.266666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27F,40.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A27F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27G,75.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A27G-01,Breast Cancer,Breast Invasive Lobular Carcinoma,24.4,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-D8-A27H,72.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A27H-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.066666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27I,58.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27I-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.9,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-D8-A27K,47.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27K-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27L,49.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27L-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,0,1,0,0,1,1,0,0,0,0,0,0
+TCGA-D8-A27M,59.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-D8-A27M-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27N,36.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-D8-A27N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27P,64.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A27R,41.0,Stage IIIC,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A27R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-D8-A27T,53.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27T-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.6,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-D8-A27V,62.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A27V-01,Breast Cancer,Breast Invasive Lobular Carcinoma,5.266666667,0,0,0,1,1,0,0,0,0,0,0,1
+TCGA-D8-A27W,55.0,Stage IIIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-D8-A27W-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A3Z5,54.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A3Z5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.433333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-D8-A3Z6,56.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A3Z6-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.766666667,0,1,0,1,0,1,0,0,0,0,0,0
+TCGA-D8-A4Z1,68.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A4Z1-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A73U,88.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A73U-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-D8-A73X,53.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-D8-A73X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A105,79.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A105-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.566666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A106,34.0,Stage IB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A106-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A107,54.0,Stage IIIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A107-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.733333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-E2-A10A,41.0,Stage IIB,Positive,Positive,Positive,1:Recurred/Progressed,TCGA-E2-A10A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,1,0,0,1,0,0,0,0,0,1
+TCGA-E2-A10B,67.0,Stage IIB,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-E2-A10B-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A10C,54.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A10C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,8.6,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A10E,64.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A10E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A10F,47.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A10F-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.666666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-E2-A14N,37.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A14N-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14O,76.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A14O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14P,79.0,Stage IIIC,Negative,Negative,Positive,0:DiseaseFree,TCGA-E2-A14P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.733333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14Q,50.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A14Q-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14R,62.0,Stage IIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-E2-A14R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.933333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14S,65.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A14S-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14T,52.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A14T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14U,74.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A14U-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.366666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14V,53.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-E2-A14V-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.9,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14W,78.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A14W-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.233333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14X,55.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A14X-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14Y,35.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A14Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A14Z,64.0,Stage I,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-E2-A14Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A150,48.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A150-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A152,56.0,Stage I,Positive,Negative,Positive,1:Recurred/Progressed,TCGA-E2-A152-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.166666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A153,51.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A153-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A154,68.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A154-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A155,58.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-E2-A155-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A156,61.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A156-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-E2-A158,43.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A158-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.6,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A159,50.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A159-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.6,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15A,45.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A15A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15C,61.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15C-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-E2-A15D,47.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15E,40.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A15E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15F,64.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A15F-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15G,76.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A15G-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.333333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-E2-A15H,38.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15H-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15I,44.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15I-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.166666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15J,51.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15J-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15K,58.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15K-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.833333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15L,65.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15L-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15O,89.0,Stage I,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-E2-A15O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.866666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-E2-A15P,61.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A15P-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15R,64.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15R-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15S,34.0,Stage IIB,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A15S-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.133333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A15T,65.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A15T-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1AZ,63.0,Stage IIB,Negative,Negative,Indeterminate,0:DiseaseFree,TCGA-E2-A1AZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1B0,50.0,Stage IIIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-E2-A1B0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.9,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1B1,45.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1B1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1B5,46.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1B5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.7,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1B6,44.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A1B6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1BC,63.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1BC-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.566666667,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-E2-A1BD,53.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1BD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-E2-A1IE,61.0,Stage IIB,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-E2-A1IE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1IF,74.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1IF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,1,0,0,0,0,0,1,0,0,0,0
+TCGA-E2-A1IG,45.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1IG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.066666667,0,0,0,0,0,0,1,0,0,1,0,0
+TCGA-E2-A1IH,80.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1IH-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.733333333,0,0,0,1,1,0,0,0,0,0,0,0
+TCGA-E2-A1II,51.0,Stage I,Negative,Positive,Negative,0:DiseaseFree,TCGA-E2-A1II-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1IJ,57.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1IJ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.5,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-E2-A1IK,71.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1IK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.333333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1IN,60.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1IN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.5,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1IO,37.0,Stage I,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1IO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1IU,60.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1IU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1L6,44.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1L6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1L7,40.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-E2-A1L7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.9,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1L8,52.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1L8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.733333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-E2-A1L9,40.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A1L9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LA,59.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A1LA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.0,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-E2-A1LB,41.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-E2-A1LB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LE,71.0,Stage IIIC,Negative,Negative,Positive,1:Recurred/Progressed,TCGA-E2-A1LE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LG,50.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A1LG-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.033333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LH,59.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A1LH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LI,57.0,Stage IIB,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A1LI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.333333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LK,84.0,Stage IIIC,Negative,Negative,Equivocal,1:Recurred/Progressed,TCGA-E2-A1LK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LL,73.0,Stage IIIA,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-E2-A1LL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A1LS,46.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-E2-A1LS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.966666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A2P5,78.0,Stage IIIC,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-E2-A2P5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.166666667,1,1,0,1,0,0,0,0,0,0,0,0
+TCGA-E2-A2P6,77.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A2P6-01,Breast Cancer,Breast Invasive Lobular Carcinoma,3.3,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-E2-A3DX,43.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-E2-A3DX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A56Z,69.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A56Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A570,47.0,Stage IB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A570-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E2-A572,72.0,Stage IIIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A572-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A573,48.0,Stage IA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A573-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A574,44.0,Stage IIA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A574-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A576,69.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-E2-A576-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E2-A9RU,90.0,Stage IIIC,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-E2-A9RU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1N3,70.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1N3-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.7,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1N4,41.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A1N4-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.566666667,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-E9-A1N5,45.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A1N5-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.733333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1N6,52.0,Stage IIB,Positive,Positive,Positive,1:Recurred/Progressed,TCGA-E9-A1N6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1N8,48.0,Stage IIA,Negative,Positive,Negative,0:DiseaseFree,TCGA-E9-A1N8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1N9,58.0,Stage IIA,Negative,Positive,Positive,0:DiseaseFree,TCGA-E9-A1N9-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.333333333,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-E9-A1NA,58.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A1NA-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,2.466666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1NC,61.0,Stage IIB,Negative,Positive,Positive,0:DiseaseFree,TCGA-E9-A1NC-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,4.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1ND,75.0,Stage IIB,Negative,Negative,Positive,0:DiseaseFree,TCGA-E9-A1ND-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.766666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1NE,28.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1NE-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.0,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1NF,60.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-E9-A1NF-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.2,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1NH,71.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1NH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1NI,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1NI-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,4.2,0,1,1,0,0,0,1,0,0,0,0,0
+TCGA-E9-A1QZ,61.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1QZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.3,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1R0,58.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1R0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1R2,51.0,Stage IIIC,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-E9-A1R2-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1R3,70.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1R3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1R4,66.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1R4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.5,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1R5,63.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1R5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1R6,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1R6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-E9-A1R7,64.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1R7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RA,48.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RC,56.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RC-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.1,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RD,67.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-E9-A1RE,74.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RE-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.266666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RF,68.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.366666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RG,62.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RG-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RH,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.1,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A1RI,43.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A1RI-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,0.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A226,45.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-E9-A226-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A227,42.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A227-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A228,58.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A228-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A229,37.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A229-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A22A,74.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-E9-A22A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A22B,71.0,Stage IA,Positive,Negative,Negative,0:DiseaseFree,TCGA-E9-A22B-01,Breast Cancer,Breast Mixed Ductal and Lobular Carcinoma,1.333333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A22D,38.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A22D-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A22E,56.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A22E-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A22G,47.0,Stage IIA,Negative,Negative,Positive,0:DiseaseFree,TCGA-E9-A22G-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A22H,42.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A22H-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-E9-A243,52.0,Stage IIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-E9-A243-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.666666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A244,54.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A244-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A247,59.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A247-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A248,51.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A248-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A249,45.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A249-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.366666667,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A24A,69.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A24A-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A295,71.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A295-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.866666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A2JS,72.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-E9-A2JS-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.566666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A2JT,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A2JT-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.133333333,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-E9-A3HO,49.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A3HO-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A3Q9,78.0,Stage IIIC,Positive,Positive,Indeterminate,0:DiseaseFree,TCGA-E9-A3Q9-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.133333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A3QA,33.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A3QA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.633333333,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-E9-A3X8,48.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-E9-A3X8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.433333333,0,0,0,1,0,0,0,0,0,0,1,0
+TCGA-E9-A54X,85.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A54X-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.833333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A54Y,63.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A54Y-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A5FK,60.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A5FK-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.466666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A5FL,65.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-E9-A5FL-01,Breast Cancer,Metaplastic Breast Cancer,2.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-E9-A5UO,41.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A5UO-01,Breast Cancer,Breast Invasive Mixed Mucinous Carcinoma,0.966666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-E9-A5UP,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-E9-A5UP-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1IW,80.0,Stage IIB,Positive,Positive,Positive,0:DiseaseFree,TCGA-EW-A1IW-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.933333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1IX,48.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1IX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.6,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1IY,38.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1IY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1IZ,53.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1IZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,7.8,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1J1,38.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1J1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,1,0,0,0,1,0,0,0,0,0,0
+TCGA-EW-A1J2,50.0,[Discrepancy],Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1J2-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.766666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-EW-A1J3,61.0,Stage IA,Positive,Positive,Positive,0:DiseaseFree,TCGA-EW-A1J3-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.733333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1J5,59.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1J5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,10.0,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-EW-A1J6,70.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1J6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1OV,56.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A1OV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.3,0,1,0,0,1,0,0,0,0,0,0,0
+TCGA-EW-A1OW,58.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A1OW-01,"Skin Cancer, Non-Melanoma",Basal Cell Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1OX,43.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1OX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.533333333,0,0,1,0,0,0,0,0,0,1,0,0
+TCGA-EW-A1OY,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1OY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.7,1,0,0,0,0,1,0,0,0,0,0,0
+TCGA-EW-A1OZ,56.0,Stage IIA,Positive,Negative,Equivocal,0:DiseaseFree,TCGA-EW-A1OZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P0,55.0,Stage IIB,Positive,Negative,Negative,1:Recurred/Progressed,TCGA-EW-A1P0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P1,68.0,Stage IIIC,Negative,Negative,Equivocal,1:Recurred/Progressed,TCGA-EW-A1P1-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.033333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P3,48.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1P3-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.433333333,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P4,43.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A1P4-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.5,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P5,77.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1P5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.466666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P6,64.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1P6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,0,0,0,1,0,0,0,0,0,0
+TCGA-EW-A1P7,59.0,Stage IIA,Negative,Negative,Equivocal,1:Recurred/Progressed,TCGA-EW-A1P7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1P8,58.0,Stage IIIC,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-EW-A1P8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PA,59.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1PA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PB,70.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A1PB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PC,66.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1PC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.166666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PD,61.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-EW-A1PD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.966666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PE,56.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1PE-01,Breast Cancer,Invasive Breast Carcinoma,0.8,0,1,0,0,0,0,1,0,0,0,0,0
+TCGA-EW-A1PF,50.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A1PF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PG,53.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-EW-A1PG-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A1PH,52.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A1PH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.166666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A2FR,59.0,Stage IIIC,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-EW-A2FR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.333333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A2FS,41.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-EW-A2FS-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.633333333,0,0,0,0,0,0,0,0,0,1,0,0
+TCGA-EW-A2FV,39.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A2FV-01,Breast Cancer,Invasive Breast Carcinoma,0.566666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A2FW,52.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A2FW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-EW-A3E8,60.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-EW-A3E8-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.233333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-EW-A3U0,61.0,Stage IIIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A3U0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.233333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A423,75.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A423-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.4,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A424,51.0,Stage IIIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-EW-A424-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A6S9,34.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-EW-A6S9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A6SA,59.0,Stage II,Positive,Negative,Negative,0:DiseaseFree,TCGA-EW-A6SA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A6SB,62.0,Stage II,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A6SB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A6SC,60.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-EW-A6SC-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-EW-A6SD,32.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-EW-A6SD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GI-A2C9,58.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-GI-A2C9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.366666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2D9,69.0,Stage I,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-GM-A2D9-01,Breast Cancer,Breast Invasive Ductal Carcinoma,9.533333333,0,1,0,0,0,0,0,0,0,0,1,0
+TCGA-GM-A2DA,46.0,Stage IIB,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-GM-A2DA-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.7,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DB,62.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-GM-A2DB-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.866666667,1,0,0,0,1,0,0,0,0,0,0,0
+TCGA-GM-A2DC,57.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A2DC-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DD,53.0,Stage I,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-GM-A2DD-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,1,1,0,1,0,0,0,0,0,0,0,0
+TCGA-GM-A2DF,53.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-GM-A2DF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.733333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DH,58.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-GM-A2DH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,3.033333333,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DI,52.0,Stage I,Negative,Negative,Negative,0:DiseaseFree,TCGA-GM-A2DI-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,1,1,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DK,58.0,Stage I,Positive,Negative,Negative,0:DiseaseFree,TCGA-GM-A2DK-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.5,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DL,50.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A2DL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.233333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DM,57.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A2DM-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.6,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DN,58.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A2DN-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.566666667,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-GM-A2DO,54.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A2DO-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.166666667,0,0,1,1,0,0,0,0,0,0,0,0
+TCGA-GM-A3NW,63.0,Stage IIA,Negative,Positive,Equivocal,0:DiseaseFree,TCGA-GM-A3NW-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.1,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A3NY,72.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A3NY-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.633333333,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A3XG,46.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A3XG-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A3XL,49.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-GM-A3XL-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-GM-A3XN,44.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A3XN-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.5,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-GM-A4E0,67.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A4E0-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.6,0,0,0,1,1,0,0,0,0,0,0,0
+TCGA-GM-A5PV,63.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A5PV-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.566666667,0,0,0,1,1,0,0,0,0,0,0,0
+TCGA-GM-A5PX,65.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-GM-A5PX-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.7,0,0,0,1,0,0,0,0,0,0,0,0
+TCGA-HN-A2NL,56.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-HN-A2NL-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.9,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-HN-A2OB,45.0,Stage IIB,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-HN-A2OB-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.366666667,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-LD-A66U,44.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-LD-A66U-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LD-A74U,79.0,Stage IIIC,Positive,Negative,Negative,0:DiseaseFree,TCGA-LD-A74U-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LD-A7W5,52.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-LD-A7W5-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LD-A7W6,54.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-LD-A7W6-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LD-A9QF,73.0,Stage IA,Negative,Negative,Positive,0:DiseaseFree,TCGA-LD-A9QF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A440,61.0,Stage IA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-LL-A440-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.2,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A441,62.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-LL-A441-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.433333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A442,56.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-LL-A442-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A50Y,84.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-LL-A50Y-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.866666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-LL-A5YM,88.0,Stage IIIB,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-LL-A5YM-01,Breast Cancer,Paget Disease of the Nipple,0.633333333,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A5YO,50.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-LL-A5YO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.966666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A6FP,90.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-LL-A6FP-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A6FR,50.0,Stage IIA,Negative,Positive,Equivocal,0:DiseaseFree,TCGA-LL-A6FR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A73Y,67.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-LL-A73Y-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A73Z,55.0,Stage IV,Positive,Positive,Equivocal,1:Recurred/Progressed,TCGA-LL-A73Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A740,61.0,Stage IA,Negative,Negative,Equivocal,0:DiseaseFree,TCGA-LL-A740-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LL-A7SZ,49.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-LL-A7SZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-LQ-A4E4,73.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-LQ-A4E4-01,Breast Cancer,Breast Invasive Lobular Carcinoma,2.133333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-MS-A51U,44.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-MS-A51U-01,Breast Cancer,Breast Invasive Lobular Carcinoma,0.366666667,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-OL-A5D7,70.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-OL-A5D7-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.3,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5D8,40.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A5D8-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.8,0,0,1,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5DA,61.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A5DA-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.433333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-OL-A5RU,63.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A5RU-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.766666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5RV,43.0,Stage IIIC,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A5RV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.4,0,0,0,1,0,0,0,0,0,0,1,0
+TCGA-OL-A5RW,40.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-OL-A5RW-01,Breast Cancer,Breast Invasive Ductal Carcinoma,4.066666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5RX,51.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A5RX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.666666667,0,1,1,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5RY,52.0,Stage IIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-OL-A5RY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.266666667,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5RZ,57.0,Stage IA,Positive,Negative,Negative,0:DiseaseFree,TCGA-OL-A5RZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,2.6,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A5S0,66.0,Stage IIB,Positive,Negative,Negative,0:DiseaseFree,TCGA-OL-A5S0-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.0,0,1,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A66I,36.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-OL-A66I-01,Breast Cancer,Breast Invasive Ductal Carcinoma,0.833333333,1,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A66J,80.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A66J-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.566666667,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A66L,71.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A66L-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A66N,59.0,Stage IIIC,Positive,Negative,Negative,0:DiseaseFree,TCGA-OL-A66N-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A66O,39.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A66O-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A6VO,43.0,Stage IA,Negative,Negative,Negative,0:DiseaseFree,TCGA-OL-A6VO-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A6VQ,49.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A6VQ-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A6VR,48.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-OL-A6VR-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-OL-A97C,67.0,Stage IIB,Negative,Negative,Negative,1:Recurred/Progressed,TCGA-OL-A97C-01,Breast Sarcoma,Malignant Phyllodes Tumor of the Breast,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-PE-A5DD,64.0,Stage IIA,Positive,Negative,Positive,0:DiseaseFree,TCGA-PE-A5DD-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.433333333,0,1,0,1,0,0,0,0,0,0,0,0
+TCGA-PE-A5DE,41.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-PE-A5DE-01,Breast Cancer,Breast Invasive Lobular Carcinoma,9.2,1,1,0,1,0,0,0,0,0,0,0,0
+TCGA-PL-A8LV,54.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-PL-A8LV-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-PL-A8LX,35.0,Stage IV,Positive,Positive,Negative,0:DiseaseFree,TCGA-PL-A8LX-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-PL-A8LY,30.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-PL-A8LY-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-PL-A8LZ,29.0,Stage IIIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-PL-A8LZ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-A6ZF,64.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-S3-A6ZF-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-A6ZG,71.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-S3-A6ZG-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-A6ZH,29.0,Stage IIIC,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-S3-A6ZH-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA0Z,63.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-S3-AA0Z-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA10,65.0,Stage IIA,Negative,Negative,Negative,0:DiseaseFree,TCGA-S3-AA10-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA11,67.0,Stage IIA,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-S3-AA11-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA12,82.0,Stage IIIA,Positive,Negative,Negative,0:DiseaseFree,TCGA-S3-AA12-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA14,47.0,Stage I,Positive,Positive,Positive,0:DiseaseFree,TCGA-S3-AA14-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA15,51.0,Stage IIB,Negative,Negative,Negative,0:DiseaseFree,TCGA-S3-AA15-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-S3-AA17,64.0,Stage IIB,Positive,Positive,Equivocal,0:DiseaseFree,TCGA-S3-AA17-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-UL-AAZ6,73.0,Stage IIA,Positive,Positive,Positive,0:DiseaseFree,TCGA-UL-AAZ6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-V7-A7HQ,75.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-V7-A7HQ-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-W8-A86G,66.0,Stage IIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-W8-A86G-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-WT-AB41,55.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-WT-AB41-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-WT-AB44,77.0,Stage IA,Positive,Positive,Negative,0:DiseaseFree,TCGA-WT-AB44-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-XX-A899,46.0,Stage IIIA,Positive,Positive,Negative,0:DiseaseFree,TCGA-XX-A899-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-XX-A89A,68.0,Stage IIB,Positive,Positive,Negative,0:DiseaseFree,TCGA-XX-A89A-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-Z7-A8R5,61.0,Stage IIIA,Positive,Positive,Negative,1:Recurred/Progressed,TCGA-Z7-A8R5-01,Breast Cancer,Breast Invasive Lobular Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
+TCGA-Z7-A8R6,46.0,Stage I,Positive,Positive,Negative,0:DiseaseFree,TCGA-Z7-A8R6-01,Breast Cancer,Breast Invasive Ductal Carcinoma,1.1,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/demo_app/app.py b/flask_backend/models/BRCA_DFS_Recurrence_v1/demo_app/app.py
new file mode 100644
index 00000000..02b27a50
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/demo_app/app.py
@@ -0,0 +1,128 @@
+"""
+app.py
+
+A small, standalone demo web app for the BRCA disease-free survival (DFS)
+recurrence model. This is not part of the PredictMod platform integration
+(it does not touch analysis_interface.py or any other shared file), it is
+just a simple browser interface for demoing the model on your own machine,
+for example at the volunteership symposium, where someone can fill in one
+patient's clinical and genomic details and immediately see a prediction.
+
+How to run it:
+ pip install flask joblib pandas
+ python app.py
+
+Then open http://127.0.0.1:5000 in a browser.
+"""
+import json
+from pathlib import Path
+
+import joblib
+import pandas as pd
+from flask import Flask, render_template, request
+
+APP_DIR = Path(__file__).resolve().parent
+
+# The trained model already lives one directory up, in this same model
+# submission's model/ folder (dfs_model.joblib and model_metadata.json are
+# also what train_model.py produces and predict_single_patient.py reads).
+# Pointing here instead of keeping a second copy inside demo_app/ avoids
+# shipping the same ~48 KB binary twice in this pull request.
+MODEL_PATH = APP_DIR.parent / "model" / "dfs_model.joblib"
+METADATA_PATH = APP_DIR.parent / "model" / "model_metadata.json"
+
+app = Flask(__name__)
+
+# Loaded once at startup, not per-request, so every prediction is fast and we
+# are not re-reading these files from disk on every form submission.
+model = joblib.load(MODEL_PATH)
+with open(METADATA_PATH, "r", encoding="utf-8") as f:
+ metadata = json.load(f)
+
+NUMERIC_FEATURES = metadata["numeric_features"]
+CATEGORICAL_FEATURES = metadata["categorical_features"]
+SCREENING_THRESHOLD = metadata["decision_thresholds"]["screening"]["value"]
+BALANCED_THRESHOLD = metadata["decision_thresholds"]["balanced"]["value"]
+
+# Age and tumor mutation burden get their own number inputs on the form.
+# Every other numeric feature in this dataset is a 0/1 gene mutation flag,
+# so those get rendered as checkboxes instead.
+GENE_FEATURES = [f for f in NUMERIC_FEATURES if f not in ("AGE", "TMB_NONSYNONYMOUS")]
+
+# The dropdown choices shown for each categorical field. These are the exact
+# categories that existed in the training data (see section 3 of
+# brca_dfs_model.ipynb), so a user of this demo can only pick a category the
+# model actually learned something about, rather than typing in free text
+# that might not match anything the model has seen.
+CATEGORY_OPTIONS = {
+ "AJCC_PATHOLOGIC_TUMOR_STAGE": [
+ "Stage I", "Stage IA", "Stage IB", "Stage II", "Stage IIA", "Stage IIB",
+ "Stage IIIA", "Stage IIIB", "Stage IIIC", "Stage IV", "Stage X", "[Discrepancy]",
+ ],
+ "ER_STATUS_BY_IHC": ["Positive", "Negative"],
+ "PR_STATUS_BY_IHC": ["Positive", "Negative", "Indeterminate"],
+ "IHC_HER2": ["Positive", "Negative", "Equivocal", "Indeterminate"],
+ "CANCER_TYPE": ["Breast Cancer", "Breast Sarcoma", "Skin Cancer, Non-Melanoma"],
+ "CANCER_TYPE_DETAILED": [
+ "Breast Invasive Ductal Carcinoma", "Breast Invasive Lobular Carcinoma",
+ "Adenoid Cystic Breast Cancer", "Breast Mixed Ductal and Lobular Carcinoma",
+ "Breast Invasive Mixed Mucinous Carcinoma", "Metaplastic Breast Cancer",
+ "Breast Invasive Carcinoma, NOS", "Solid Papillary Carcinoma of the Breast",
+ "Malignant Phyllodes Tumor of the Breast", "Invasive Breast Carcinoma",
+ "Basal Cell Carcinoma", "Paget Disease of the Nipple",
+ ],
+}
+
+
+@app.route("/", methods=["GET"])
+def home():
+ return render_template(
+ "index.html",
+ gene_features=GENE_FEATURES,
+ category_options=CATEGORY_OPTIONS,
+ result=None,
+ submitted_values={},
+ )
+
+
+@app.route("/predict", methods=["POST"])
+def predict():
+ form = request.form
+
+ # Build one patient record from the submitted form, in exactly the
+ # column layout the model's pipeline expects. The pipeline handles its
+ # own imputation, scaling, and one-hot encoding internally, so we just
+ # need to hand it a one-row DataFrame with the right raw values.
+ patient = {
+ "AGE": float(form["AGE"]),
+ "TMB_NONSYNONYMOUS": float(form["TMB_NONSYNONYMOUS"]),
+ }
+ for gene in GENE_FEATURES:
+ # Checkboxes only appear in form data when checked, so a missing key
+ # means "not mutated" (0).
+ patient[gene] = 1 if form.get(gene) == "on" else 0
+ for cat_col in CATEGORICAL_FEATURES:
+ patient[cat_col] = form[cat_col]
+
+ patient_df = pd.DataFrame([patient])[NUMERIC_FEATURES + CATEGORICAL_FEATURES]
+ probability = float(model.predict_proba(patient_df)[0, 1])
+
+ result = {
+ "probability_pct": f"{probability:.1%}",
+ "screening_flag": probability >= SCREENING_THRESHOLD,
+ "balanced_flag": probability >= BALANCED_THRESHOLD,
+ "screening_threshold_pct": f"{SCREENING_THRESHOLD:.0%}",
+ "balanced_threshold_pct": f"{BALANCED_THRESHOLD:.0%}",
+ }
+
+ return render_template(
+ "index.html",
+ gene_features=GENE_FEATURES,
+ category_options=CATEGORY_OPTIONS,
+ result=result,
+ submitted_values=form,
+ )
+
+
+if __name__ == "__main__":
+ app.run(debug=True)
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/demo_app/templates/index.html b/flask_backend/models/BRCA_DFS_Recurrence_v1/demo_app/templates/index.html
new file mode 100644
index 00000000..ff17ecbe
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/demo_app/templates/index.html
@@ -0,0 +1,204 @@
+
+
+
+
+BRCA DFS Recurrence Risk Demo
+
+
+
+
+
BRCA Disease-Free Survival Recurrence Risk
+
A demo interface for the PredictMod volunteership model. Fill in one patient's details below.
+
+{% if result %}
+
+
Estimated probability of recurrence or progression
+ This is a research and educational demo built for the GWU HIVE Lab PredictMod
+ volunteership. The underlying model was trained on 895 TCGA-BRCA patients (97
+ recurrence events), reaches a held-out test ROC-AUC of about 0.68, and has not
+ been externally validated. It does not account for right-censored follow-up
+ time. This tool is not a diagnostic device and must not be used to guide real
+ patient care.
+
+
+
+
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/example_patient.json b/flask_backend/models/BRCA_DFS_Recurrence_v1/example_patient.json
new file mode 100644
index 00000000..a5d67ea5
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/example_patient.json
@@ -0,0 +1,21 @@
+{
+ "AGE": 61,
+ "TMB_NONSYNONYMOUS": 1.4,
+ "TP53": 1,
+ "PIK3CA": 0,
+ "GATA3": 0,
+ "CDH1": 0,
+ "PTEN": 0,
+ "MAP3K1": 0,
+ "MAP2K4": 0,
+ "KRAS": 0,
+ "ARID1A": 0,
+ "RUNX1": 0,
+ "ESR1": 0,
+ "AJCC_PATHOLOGIC_TUMOR_STAGE": "Stage IIB",
+ "ER_STATUS_BY_IHC": "Positive",
+ "PR_STATUS_BY_IHC": "Positive",
+ "IHC_HER2": "Negative",
+ "CANCER_TYPE": "Breast Cancer",
+ "CANCER_TYPE_DETAILED": "Breast Invasive Ductal Carcinoma"
+}
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/model/dfs_model.joblib b/flask_backend/models/BRCA_DFS_Recurrence_v1/model/dfs_model.joblib
new file mode 100644
index 00000000..cd118d58
Binary files /dev/null and b/flask_backend/models/BRCA_DFS_Recurrence_v1/model/dfs_model.joblib differ
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/model/model_metadata.json b/flask_backend/models/BRCA_DFS_Recurrence_v1/model/model_metadata.json
new file mode 100644
index 00000000..a50a0756
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/model/model_metadata.json
@@ -0,0 +1,63 @@
+{
+ "model_description": "Logistic Regression with SMOTE oversampling, predicting DFS recurrence/progression risk for TCGA-BRCA patients.",
+ "target_definition": "1 = Recurred/Progressed (DFS_STATUS), 0 = DiseaseFree",
+ "numeric_features": [
+ "AGE",
+ "TMB_NONSYNONYMOUS",
+ "TP53",
+ "PIK3CA",
+ "GATA3",
+ "CDH1",
+ "PTEN",
+ "MAP3K1",
+ "MAP2K4",
+ "KRAS",
+ "ARID1A",
+ "RUNX1",
+ "ESR1"
+ ],
+ "categorical_features": [
+ "AJCC_PATHOLOGIC_TUMOR_STAGE",
+ "ER_STATUS_BY_IHC",
+ "PR_STATUS_BY_IHC",
+ "IHC_HER2",
+ "CANCER_TYPE",
+ "CANCER_TYPE_DETAILED"
+ ],
+ "dropped_columns": [
+ "PATIENT_ID",
+ "SAMPLE_ID",
+ "DFS_STATUS",
+ "target",
+ "KMT2C"
+ ],
+ "n_patients_total": 895,
+ "n_recurrence_events": 97,
+ "random_state": 42,
+ "held_out_test_metrics": {
+ "roc_auc": 0.6836,
+ "average_precision": 0.3099
+ },
+ "cross_validated_metrics": {
+ "roc_auc_mean": 0.6367,
+ "roc_auc_std": 0.0594,
+ "n_folds": 5
+ },
+ "decision_thresholds": {
+ "screening": {
+ "value": 0.5,
+ "purpose": "Higher sensitivity, more false alarms. Meant for early triage, not diagnosis."
+ },
+ "balanced": {
+ "value": 0.7271,
+ "purpose": "F1-optimal threshold from cross-validated training predictions. Fewer false alarms, lower sensitivity."
+ }
+ },
+ "notes_and_limitations": [
+ "Trained on 895 TCGA-BRCA patients with only 97 recurrence/progression events, so estimates carry real uncertainty.",
+ "DFS_STATUS is treated as a binary label, but it is really a time-to-event outcome with right-censoring (see section 4). A proper survival model would handle this correctly; this classifier does not.",
+ "Gene panel is limited to 12 genes highlighted in the 2012 TCGA breast cancer paper and does not reflect the full mutation landscape.",
+ "The cohort technically includes a handful of patients whose CANCER_TYPE is Breast Sarcoma or Skin Cancer, Non-Melanoma rather than a breast carcinoma subtype (see section 3).",
+ "This model has not been externally validated on any cohort outside TCGA-BRCA and is a research/educational artifact, not a clinical decision tool."
+ ]
+}
\ No newline at end of file
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/predict_single_patient.py b/flask_backend/models/BRCA_DFS_Recurrence_v1/predict_single_patient.py
new file mode 100644
index 00000000..f1ccef9a
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/predict_single_patient.py
@@ -0,0 +1,175 @@
+"""
+predict_single_patient.py
+
+This is the "single-patient prediction script" required by the volunteership
+completion criteria: a small, standalone tool that takes one patient's clinical
+and genomic information and returns a disease-free survival (DFS) recurrence
+risk prediction, using the model that train_model.py already trained and
+saved to model/dfs_model.joblib.
+
+The point of keeping this separate from the training script is that, in a real
+BioCompute-style submission package, someone should be able to run a single
+prediction without needing to retrain anything or understand the notebook.
+They just need the saved model file, this script, and one patient's data.
+
+How to run it:
+
+ Using the built-in example patient:
+ python predict_single_patient.py --example
+
+ Using your own patient, from a JSON file:
+ python predict_single_patient.py --input my_patient.json
+
+ See example_patient.json in this folder for the exact fields expected.
+
+What you get back:
+ - the predicted probability of recurrence/progression (a number from 0 to 1)
+ - a plain-language risk classification at two different decision
+ thresholds saved by train_model.py: a "screening" threshold (more
+ sensitive, flags more patients) and a "balanced" threshold (fewer false
+ alarms, but also catches fewer true recurrences)
+"""
+
+import argparse
+import json
+import sys
+from pathlib import Path
+
+import joblib
+import pandas as pd
+
+PROJECT_DIR = Path(__file__).resolve().parent
+MODEL_PATH = PROJECT_DIR / "model" / "dfs_model.joblib"
+METADATA_PATH = PROJECT_DIR / "model" / "model_metadata.json"
+EXAMPLE_PATIENT_PATH = PROJECT_DIR / "example_patient.json"
+
+
+def load_model_and_metadata():
+ """Load the fitted pipeline and the metadata that describes how to use it.
+
+ Loading both together matters because the metadata file is what tells us
+ which columns the model expects and which decision thresholds to apply.
+ Without it, we would have to hard-code those values here and they could
+ silently drift out of sync with whatever train_model.py actually saved.
+ """
+ if not MODEL_PATH.exists():
+ sys.exit(
+ f"Could not find a trained model at {MODEL_PATH}.\n"
+ "Run 'python train_model.py' first to train and save the model."
+ )
+
+ model = joblib.load(MODEL_PATH)
+
+ with open(METADATA_PATH, "r", encoding="utf-8") as f:
+ metadata = json.load(f)
+
+ return model, metadata
+
+
+def load_patient_record(input_path: Path | None, use_example: bool) -> dict:
+ """Read one patient's feature values from either a JSON file or the
+ bundled example patient.
+ """
+ if use_example:
+ source_path = EXAMPLE_PATIENT_PATH
+ elif input_path is not None:
+ source_path = input_path
+ else:
+ sys.exit(
+ "Please provide either --input or --example."
+ )
+
+ if not source_path.exists():
+ sys.exit(f"Patient file not found: {source_path}")
+
+ with open(source_path, "r", encoding="utf-8") as f:
+ return json.load(f)
+
+
+def validate_patient_record(patient: dict, metadata: dict) -> None:
+ """Check that the patient record has every column the model expects.
+
+ We check this ourselves, instead of just letting the pipeline fail with a
+ confusing internal error, so that anyone using this script (who might not
+ know scikit-learn) gets a clear message about exactly what is missing.
+ """
+ expected_columns = metadata["numeric_features"] + metadata["categorical_features"]
+ missing = [col for col in expected_columns if col not in patient]
+
+ if missing:
+ sys.exit(
+ "The patient record is missing the following required fields:\n"
+ + "\n".join(f" - {col}" for col in missing)
+ + f"\n\nSee {EXAMPLE_PATIENT_PATH.name} for a complete example."
+ )
+
+
+def predict(model, metadata: dict, patient: dict) -> dict:
+ """Run the pipeline on a single patient and translate the raw probability
+ into something a human can act on.
+ """
+ # The pipeline expects a DataFrame with the same column layout it was
+ # trained on, even though we are only scoring one row. Wrapping the single
+ # patient dict in a list gives us a one-row DataFrame.
+ expected_columns = metadata["numeric_features"] + metadata["categorical_features"]
+ patient_df = pd.DataFrame([patient])[expected_columns]
+
+ probability = float(model.predict_proba(patient_df)[0, 1])
+
+ screening_threshold = metadata["decision_thresholds"]["screening"]["value"]
+ balanced_threshold = metadata["decision_thresholds"]["balanced"]["value"]
+
+ return {
+ "recurrence_probability": round(probability, 4),
+ "screening_flag": (
+ "AT-RISK (recurrence flagged)"
+ if probability >= screening_threshold
+ else "Not flagged"
+ ),
+ "balanced_flag": (
+ "AT-RISK (recurrence flagged)"
+ if probability >= balanced_threshold
+ else "Not flagged"
+ ),
+ }
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="Predict DFS recurrence risk for a single patient."
+ )
+ parser.add_argument(
+ "--input",
+ type=Path,
+ default=None,
+ help="Path to a JSON file describing one patient's features.",
+ )
+ parser.add_argument(
+ "--example",
+ action="store_true",
+ help="Run the prediction on the bundled example patient instead of a file.",
+ )
+ args = parser.parse_args()
+
+ model, metadata = load_model_and_metadata()
+ patient = load_patient_record(args.input, args.example)
+ validate_patient_record(patient, metadata)
+ result = predict(model, metadata, patient)
+
+ print("=" * 60)
+ print("DFS RECURRENCE RISK PREDICTION")
+ print("=" * 60)
+ print(f"Predicted probability of recurrence/progression: {result['recurrence_probability']:.1%}")
+ print()
+ print(f"Screening threshold (>= {metadata['decision_thresholds']['screening']['value']:.2f}): {result['screening_flag']}")
+ print(f"Balanced threshold (>= {metadata['decision_thresholds']['balanced']['value']:.2f}): {result['balanced_flag']}")
+ print()
+ print(
+ "Reminder: this model is a research and educational artifact trained on "
+ "895 TCGA-BRCA patients. It has not been clinically validated and should "
+ "not be used to make real treatment decisions."
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/flask_backend/models/BRCA_DFS_Recurrence_v1/train_model.py b/flask_backend/models/BRCA_DFS_Recurrence_v1/train_model.py
new file mode 100644
index 00000000..0e37cbfe
--- /dev/null
+++ b/flask_backend/models/BRCA_DFS_Recurrence_v1/train_model.py
@@ -0,0 +1,311 @@
+"""
+train_model.py
+
+This script trains the final Disease-Free Survival (DFS) recurrence risk model
+for the TCGA-BRCA volunteership project and saves it to disk so that it can be
+reused later without retraining (for example, by predict_single_patient.py).
+
+Why this script exists, separate from the notebook:
+The notebook (brca_dfs_model.ipynb) is where the exploration, comparisons, and
+plots live, since that is the best place to explain reasoning step by step. This
+script is the clean, no-frills version of just the winning pipeline, meant to be
+the "model script" that ships in the GitHub submission package. Running this
+file end to end reproduces the saved model artifacts from scratch.
+
+How to run:
+ python train_model.py
+
+What it produces:
+ model/dfs_model.joblib -> the fitted scikit-learn pipeline
+ model/model_metadata.json -> feature lists, chosen thresholds, and
+ other details needed to use the model
+ correctly later on
+"""
+
+import json
+import warnings
+from pathlib import Path
+
+import joblib
+import numpy as np
+import pandas as pd
+from imblearn.over_sampling import SMOTE
+from imblearn.pipeline import Pipeline as ImbPipeline
+from sklearn.compose import ColumnTransformer
+from sklearn.impute import SimpleImputer
+from sklearn.linear_model import LogisticRegression
+from sklearn.metrics import (
+ average_precision_score,
+ classification_report,
+ confusion_matrix,
+ precision_recall_curve,
+ roc_auc_score,
+)
+from sklearn.model_selection import (
+ StratifiedKFold,
+ cross_val_predict,
+ cross_val_score,
+ train_test_split,
+)
+from sklearn.pipeline import Pipeline
+from sklearn.preprocessing import OneHotEncoder, StandardScaler
+
+# imbalanced-learn sometimes prints noisy future warnings that are not relevant
+# to correctness here, so we quiet them down for a cleaner console output.
+warnings.filterwarnings("ignore")
+
+# ---------------------------------------------------------------------------
+# 1. Paths and constants
+# ---------------------------------------------------------------------------
+# Keeping these in one place at the top makes the script easy to adapt if the
+# project folder ever moves or the data file gets renamed again.
+PROJECT_DIR = Path(__file__).resolve().parent
+DATA_PATH = PROJECT_DIR / "breast_cancer_ml_eda.csv"
+MODEL_DIR = PROJECT_DIR / "model"
+MODEL_PATH = MODEL_DIR / "dfs_model.joblib"
+METADATA_PATH = MODEL_DIR / "model_metadata.json"
+
+RANDOM_STATE = 42 # fixed so results are reproducible run to run
+
+# Columns that must never be used as predictive features. PATIENT_ID and
+# SAMPLE_ID are identifiers, not biology. DFS_STATUS is the raw text version
+# of the label we are trying to predict, so keeping it in X would leak the
+# answer straight into the model. KMT2C is dropped because, in this cohort,
+# every single patient has KMT2C == 0. A column with zero variance carries no
+# information for a classifier, so keeping it would just be dead weight (and
+# in a one-hot/gene-panel context, a constant column is a common thing to
+# double check for, since it can also be a sign of an extraction bug upstream).
+ID_AND_LEAKAGE_COLS = ["PATIENT_ID", "SAMPLE_ID", "DFS_STATUS"]
+CONSTANT_COLS = ["KMT2C"]
+
+
+def build_target(df: pd.DataFrame) -> pd.Series:
+ """Turn the raw DFS_STATUS text into a binary target.
+
+ The source data encodes disease-free survival status as strings like
+ "0:DiseaseFree" and "1:Recurred/Progressed". We convert that into a plain
+ 0/1 target where 1 means the cancer recurred or progressed, since that is
+ the event we ultimately want the model to flag early.
+ """
+ return df["DFS_STATUS"].apply(
+ lambda x: 1 if ("Recurred" in str(x) or "Progressed" in str(x)) else 0
+ )
+
+
+def build_preprocessor(numeric_features, categorical_features) -> ColumnTransformer:
+ """Build the preprocessing pipeline shared by every model we try.
+
+ Numeric columns (age, tumor mutation burden, and the binary gene mutation
+ flags) get median imputation followed by standard scaling. Median is used
+ instead of mean because a couple of these columns (like tumor mutation
+ burden) are right-skewed, so the median is a more robust "typical value".
+
+ Categorical columns (tumor stage, receptor status, cancer subtype) get
+ most-frequent imputation followed by one-hot encoding. handle_unknown is
+ set to "ignore" so that if the test set (or a future single patient) has
+ a category the training data never saw, the pipeline will not crash. It
+ will just encode that patient as all zeros for that feature instead.
+ """
+ numeric_transformer = Pipeline(
+ steps=[
+ ("imputer", SimpleImputer(strategy="median")),
+ ("scaler", StandardScaler()),
+ ]
+ )
+
+ categorical_transformer = Pipeline(
+ steps=[
+ ("imputer", SimpleImputer(strategy="most_frequent")),
+ ("onehot", OneHotEncoder(handle_unknown="ignore")),
+ ]
+ )
+
+ return ColumnTransformer(
+ transformers=[
+ ("num", numeric_transformer, numeric_features),
+ ("cat", categorical_transformer, categorical_features),
+ ]
+ )
+
+
+def main():
+ # -----------------------------------------------------------------------
+ # 2. Load data and rebuild the same feature set used during exploration
+ # -----------------------------------------------------------------------
+ df = pd.read_csv(DATA_PATH)
+ df["target"] = build_target(df)
+
+ drop_cols = ID_AND_LEAKAGE_COLS + CONSTANT_COLS
+ X = df.drop(columns=drop_cols + ["target"])
+ y = df["target"]
+
+ numeric_features = X.select_dtypes(include=["int64", "float64"]).columns.tolist()
+ categorical_features = X.select_dtypes(include=["object"]).columns.tolist()
+
+ preprocessor = build_preprocessor(numeric_features, categorical_features)
+
+ # -----------------------------------------------------------------------
+ # 3. Train/test split
+ # -----------------------------------------------------------------------
+ # We hold out 20% of patients and never let the model see them during
+ # training, tuning, or threshold selection. That held-out set is the one
+ # honest, untouched check of how the model behaves on new patients.
+ X_train, X_test, y_train, y_test = train_test_split(
+ X, y, test_size=0.20, random_state=RANDOM_STATE, stratify=y
+ )
+
+ # -----------------------------------------------------------------------
+ # 4. Final model: Logistic Regression with SMOTE oversampling
+ # -----------------------------------------------------------------------
+ # Why this model won, after comparing it against Random Forest, SVM, and
+ # Gradient Boosting, both with and without SMOTE, and with and without
+ # hyperparameter tuning (see brca_dfs_model.ipynb, section "Model
+ # Performance Improvement", for the full comparison table):
+ #
+ # - SMOTE (Synthetic Minority Oversampling Technique) creates synthetic
+ # examples of the minority class (recurrence) inside the training
+ # folds only, so the model sees a more balanced view of the two
+ # outcomes during learning without ever touching the test set.
+ # - Logistic Regression paired with SMOTE lands in a statistical tie
+ # with Random Forest + SMOTE on held-out test ROC-AUC (0.684 vs 0.685,
+ # well within the noise seen across cross-validation folds), but it
+ # gives by far the best Average Precision (0.31, roughly double
+ # Random Forest's 0.18) of every configuration we tried, meaning it
+ # ranks true recurrence cases near the top of its risk list much more
+ # reliably.
+ # - Hyperparameter tuning (RandomizedSearchCV over C, penalty, and the
+ # SMOTE neighbor count) did not meaningfully beat the untuned default
+ # settings here. With only 895 patients and 97 recurrence events, the
+ # search has very little signal to work with, so we kept the simpler,
+ # untuned pipeline rather than pretend a marginal, noisy improvement
+ # was real. That is a genuine and useful finding in its own right,
+ # not a shortcut. It is written up in the notebook and the README.
+ #
+ # imblearn's Pipeline (not scikit-learn's) is used here specifically
+ # because it applies SMOTE only to the training fold during cross
+ # validation, never to validation or test data. Using scikit-learn's
+ # regular Pipeline with SMOTE glued in would leak synthetic copies of
+ # test-like patients into training and inflate the scores.
+ final_pipeline = ImbPipeline(
+ steps=[
+ ("preprocessor", preprocessor),
+ ("smote", SMOTE(random_state=RANDOM_STATE)),
+ ("classifier", LogisticRegression(max_iter=2000, random_state=RANDOM_STATE)),
+ ]
+ )
+
+ cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=RANDOM_STATE)
+
+ # -----------------------------------------------------------------------
+ # 5. Pick a decision threshold using cross-validated predictions on the
+ # training set only (never the test set, to avoid quietly leaking
+ # test information into a "tuned" threshold).
+ # -----------------------------------------------------------------------
+ oof_probabilities = cross_val_predict(
+ final_pipeline, X_train, y_train, cv=cv, method="predict_proba"
+ )[:, 1]
+
+ precisions, recalls, thresholds = precision_recall_curve(y_train, oof_probabilities)
+ f1_scores = 2 * precisions * recalls / (precisions + recalls + 1e-12)
+ best_f1_idx = int(np.argmax(f1_scores[:-1]))
+ balanced_threshold = float(thresholds[best_f1_idx])
+
+ # A second, more clinically-minded operating point: the plain default of
+ # 0.5. In this project, missing a true recurrence is far more costly than
+ # flagging a patient who turns out fine, so a lower, more sensitive
+ # threshold is a reasonable choice for a screening-style use case, even
+ # though it means more false alarms. We keep both thresholds saved so the
+ # person using the model later can pick the one that fits their purpose.
+ screening_threshold = 0.5
+
+ # -----------------------------------------------------------------------
+ # 6. Fit the final pipeline on the full training set and evaluate once,
+ # honestly, on the untouched test set.
+ # -----------------------------------------------------------------------
+ final_pipeline.fit(X_train, y_train)
+ test_probabilities = final_pipeline.predict_proba(X_test)[:, 1]
+
+ test_auc = roc_auc_score(y_test, test_probabilities)
+ test_ap = average_precision_score(y_test, test_probabilities)
+ cv_auc_scores = cross_val_score(final_pipeline, X, y, cv=cv, scoring="roc_auc")
+
+ print("=" * 70)
+ print("FINAL MODEL: Logistic Regression + SMOTE")
+ print("=" * 70)
+ print(f"Held-out test ROC-AUC: {test_auc:.3f}")
+ print(f"Held-out test Average Precision: {test_ap:.3f}")
+ print(f"5-fold CV ROC-AUC (full dataset): {cv_auc_scores.mean():.3f} +/- {cv_auc_scores.std():.3f}")
+ print()
+
+ for label, threshold in [
+ ("Screening threshold (0.50, favors catching recurrences)", screening_threshold),
+ ("Balanced threshold (F1-optimal, favors fewer false alarms)", balanced_threshold),
+ ]:
+ preds = (test_probabilities >= threshold).astype(int)
+ print(f"--- {label}: {threshold:.3f} ---")
+ print(confusion_matrix(y_test, preds))
+ print(classification_report(y_test, preds, zero_division=0))
+
+ # -----------------------------------------------------------------------
+ # 7. Refit on ALL available data before saving.
+ # -----------------------------------------------------------------------
+ # The evaluation above uses the 80/20 split so the numbers we just printed
+ # are an honest estimate of real-world performance. But once we are happy
+ # with the pipeline choice, it is standard practice to refit on every
+ # patient we have (train + test combined) before shipping the model,
+ # since more training data almost always helps a bit and we have already
+ # gotten our honest performance read from the held-out set above.
+ final_pipeline.fit(X, y)
+
+ # -----------------------------------------------------------------------
+ # 8. Save the fitted pipeline and its metadata to disk.
+ # -----------------------------------------------------------------------
+ MODEL_DIR.mkdir(parents=True, exist_ok=True)
+ joblib.dump(final_pipeline, MODEL_PATH)
+
+ metadata = {
+ "model_description": "Logistic Regression with SMOTE oversampling, predicting DFS recurrence/progression risk for TCGA-BRCA patients.",
+ "target_definition": "1 = Recurred/Progressed (DFS_STATUS), 0 = DiseaseFree",
+ "numeric_features": numeric_features,
+ "categorical_features": categorical_features,
+ "dropped_columns": drop_cols,
+ "n_patients_total": int(len(df)),
+ "n_recurrence_events": int(df["target"].sum()),
+ "random_state": RANDOM_STATE,
+ "held_out_test_metrics": {
+ "roc_auc": round(float(test_auc), 4),
+ "average_precision": round(float(test_ap), 4),
+ },
+ "cross_validated_metrics": {
+ "roc_auc_mean": round(float(cv_auc_scores.mean()), 4),
+ "roc_auc_std": round(float(cv_auc_scores.std()), 4),
+ "n_folds": 5,
+ },
+ "decision_thresholds": {
+ "screening": {
+ "value": screening_threshold,
+ "purpose": "Higher sensitivity. Flags more patients as at-risk, at the cost of more false alarms. Meant for early triage, not diagnosis.",
+ },
+ "balanced": {
+ "value": round(balanced_threshold, 4),
+ "purpose": "F1-optimal threshold chosen from cross-validated predictions on the training set only. Trades some sensitivity for fewer false alarms.",
+ },
+ },
+ "notes_and_limitations": [
+ "Trained on 895 TCGA-BRCA patients with only 97 recurrence/progression events, so estimates carry real uncertainty.",
+ "DFS_STATUS is treated as a binary label, but it is really a time-to-event outcome. Patients marked DiseaseFree with short follow-up have not been proven cancer-free forever, only cancer-free so far. A proper survival model (for example, Cox proportional hazards) would handle this censoring correctly; this classifier does not.",
+ "Gene panel is limited to 12 genes highlighted in the 2012 TCGA breast cancer paper and does not reflect the full mutation landscape.",
+ "The cohort technically includes a handful of patients whose CANCER_TYPE is Breast Sarcoma or Skin Cancer, Non-Melanoma rather than a breast carcinoma subtype. These are retained TCGA-BRCA barcodes, not modeling errors, but they are a scope note worth knowing about.",
+ "This model has not been externally validated on any cohort outside TCGA-BRCA and is a research/educational artifact, not a clinical decision tool.",
+ ],
+ }
+
+ with open(METADATA_PATH, "w", encoding="utf-8") as f:
+ json.dump(metadata, f, indent=2)
+
+ print(f"\nSaved trained pipeline to: {MODEL_PATH}")
+ print(f"Saved metadata to: {METADATA_PATH}")
+
+
+if __name__ == "__main__":
+ main()