7448 AI · Inside the model

What it does, and where it fails.

Every claim here is generated from the experiment outputs in the 7448 repository, not written by hand. If a number looks unimpressive, that is because it is the number the model actually produced.

The result that shaped this tool

An excellent number that is almost entirely artefact.

The obvious way to predict "which condition does this profile resemble" is to pool all fourteen cohorts and train one classifier. Done that way, it reaches a median AUROC 0.958: an excellent result, and the kind of number that gets published and productised.

It is almost entirely an artefact. Each cohort studied one disease, on one sequencing platform, in one lab. So "has Crohn's disease" is nearly perfectly correlated with "was processed by the lab that studied Crohn's disease", and a model can score brilliantly by recognising the lab's technical signature instead of anything biological.

The control that proves it: train a classifier on nothing but which cohort a sample came from, no bacteria at all. It scores a median AUROC 0.915. A model with zero biological information nearly matches the impressive one.

ModelWhat it can seeMedian AUROC
Pooled across cohortsBacteria plus, implicitly, which lab ran the sample0.958
Cohort identity onlyOnly which lab ran the sample. No biology whatsoever.0.915
Within cohortBacteria only: cases vs controls from the same lab and platform0.643

The honest number is the last one: 0.643. Of 17 condition-by-cohort models tested, only 6 clear chance once a 95% confidence interval is applied. That is why 7448 AI shows literature citations rather than risk scores, and says so on every signal it displays.

Cross-cohort transfer

It does not transfer to a lab it has never seen.

The headline accuracy, median r = 0.458, is measured on held-out patients drawn from the same fourteen cohorts the model trained on. A stricter test is to hold out an entire cohort: train on thirteen, predict the fourteenth, and repeat for all of them.

Under that test the median correlation is 0.0024. Not reduced: gone. Across all 14 held-out cohorts the best result was 0.126 and the worst was -0.162.

Pearson correlation is unaffected by rescaling, so this cannot be explained away as differing measurement units between mass-spectrometry platforms. The model genuinely fails to rank samples correctly in a cohort it was not trained on.

What this means for how you should read this tool. The predictions are informative about relationshipswithin this dataset, which is a real and useful thing for understanding how microbial composition and gut chemistry relate. They should not be treated as a validated instrument for a new sample from a new laboratory. Closing this gap is the central open problem for the project, not a caveat at the bottom of it.

Leakage check

The pipeline passes.

A pipeline can produce excellent scores purely by accidentally leaking the answer into the inputs. The test: shuffle each metabolite's values across training patients, destroying any real relationship, and refit everything unchanged. A correct pipeline should then score zero.

Real data scored r = 0.599; shuffled data scored r = -0.0018 across 60 metabolites. The within-cohort signal is real, whatever its limits.

Metabolite prediction accuracy

Measured on people the model never saw.

Split by individual rather than by sample, so repeat visits from one person cannot leak across the train/test boundary.

Median correlation (r)
0.458
Well predicted (r ≥ 0.5)
418
Usable (r ≥ 0.3)
621
Poorly predicted (r < 0.2)
185

The neural network lost to the linear model.

A deep network was trained on the same data and the same splits. It reached a median r = 0.376 against the elastic net's r = 0.458. With roughly 2,000 training samples against 5,038 input features, there is not enough data for the deep model to earn its complexity, so the simpler model ships.

That turns out to be a feature. Because the served model is linear, each prediction decomposes exactly into per-microbe contributions that sum to the answer. The "why this number" breakdown in the simulator is not an approximation of the model's reasoning; it is the model's reasoning, read directly off the weights.

Open problem

Help close the transfer gap.

Cross-cohort transfer is the failure that matters most. If you hold paired microbiome and metabolomics data from a lab outside these fourteen cohorts, we would like to test against it.

Pipeline run log

Every run, including the ones that failed.

Every data pull, training run and backtest appends a record, and nothing is curated for presentation. This is a snapshot taken September 13, 2026 with file paths redacted.

build_app_dataSep 13, 2026, 6:17 a.m. UTC · 2.3s · 6 artifactsok
n_key_taxa=24n_examples=32n_map_points=2900n_distributions=1098pca_explained_variance=0.2828n_healthy_reference=887
build_trajectoriesSep 13, 2026, 6:17 a.m. UTC · 0.2s · 1 artifactsok
n_samples=1372n_subjects=331n_cohorts=6n_subjects_absolute_time=261median_visits=4
build_app_dataSep 13, 2026, 6:05 a.m. UTC · 3.1s · 6 artifactsok
n_key_taxa=24n_examples=32n_map_points=2900n_distributions=1098pca_explained_variance=0.2828n_healthy_reference=887
build_app_dataSep 13, 2026, 5:58 a.m. UTC · 4.6s · 6 artifactsok
n_key_taxa=24n_examples=32n_map_points=2900n_distributions=1098pca_explained_variance=0.2828n_healthy_reference=887
backtest_cross_cohortSep 13, 2026, 5:54 a.m. UTC · 193.8s · 1 artifactsok
median_cross_cohort_r=0.0024median_within_cohort_r=0.4582n_cohorts_testable=14
build_trajectoriesSep 13, 2026, 5:55 a.m. UTC · 0.8s · 1 artifactsok
n_samples=1372n_subjects=331n_cohorts=6n_subjects_absolute_time=261median_visits=4
backtest_negative_controlSep 13, 2026, 5:54 a.m. UTC · 26.9s · 1 artifactsok
median_real_r=0.5994median_shuffled_r=-0.0018n_targets=60
backtest_chemical_classSep 13, 2026, 5:53 a.m. UTC · 0.1s · 1 artifactsok
n_classes=18
build_app_dataSep 13, 2026, 5:36 a.m. UTC · 5.5s · 6 artifactsok
n_key_taxa=24n_examples=32n_map_points=2900n_distributions=1098pca_explained_variance=0.2828n_healthy_reference=887
build_app_dataSep 13, 2026, 5:33 a.m. UTC · 4.2s · 5 artifactsok
n_key_taxa=24n_examples=32n_map_points=2900pca_explained_variance=0.2828n_healthy_reference=887
build_app_dataSep 13, 2026, 5:31 a.m. UTC · 4.3s · 5 artifactsok
n_key_taxa=24n_examples=32n_map_points=2900pca_explained_variance=0.2828n_healthy_reference=887
train_production_modelSep 13, 2026, 5:25 a.m. UTC · 199.0s · 2 artifactsok
n_targets=1098n_features=5038n_train_samples=2468coef_density=0.026median_test_r=0.4582fit_seconds=195.8
train_production_modelSep 13, 2026, 5:24 a.m. UTC · 12.2s · 2 artifactsok
n_targets=40n_features=5038n_train_samples=2468coef_density=0.0332median_test_r=0.6662fit_seconds=10.8
train_outcome_modelSep 13, 2026, 5:20 a.m. UTC · 193.5s · 2 artifactsok
median_within_cohort_auroc=0.6429median_pooled_auroc=0.9576median_cohort_identity_auroc=0.9153n_conditions=13n_within_cohort_models=17
train_outcome_modelSep 13, 2026, 5:19 a.m. UTC · 14.1s · 2 artifactsok
median_within_cohort_auroc=0.6429median_pooled_auroc=0.9576median_cohort_identity_auroc=0.9153n_conditions=13n_within_cohort_models=17
train_outcome_modelSep 13, 2026, 5:19 a.m. UTC · 2.6sfailed
KeyError: 'cohort'
build_outcome_labelsSep 13, 2026, 5:17 a.m. UTC · 0.8s · 2 artifactsok
n_samples=2900n_case=1541n_control=887n_excluded=472n_conditions=14n_comparison_cohorts=12