← All projects

Dark proteome analysis using Machine Learning

Live University coursework
Python scikit-learn
Goal
Predict whether a protein is detectable by LC-MS/MS from properties known before any experiment
Inputs
23,674 A. thaliana PeptideAtlas proteins with molecular weight, GRAVY, pI, RNA detection rate and highest TPM
Outputs
Six classifier families benchmarked against a majority-class baseline, plus a tuned random forest and interpretation plots
Tools
Python, scikit-learn
Horizontal bar chart of five-fold cross-validated balanced accuracy on the training set. The majority-class dummy sits at 0.50; the six classifier families score between about 0.79 (decision tree) and 0.85 (RBF SVM), each with a narrow error bar.
Balanced accuracy across the six classifier families against a majority-class baseline. The baseline reaches 0.76 raw accuracy on this imbalanced data but only 0.50 balanced accuracy, which is why balanced accuracy is the ranking reported.

What it does

It asks whether a protein's detectability by mass spectrometry can be predicted from properties known before any experiment is run, and benchmarks six families of classifier against a baseline to find out.

Why it exists

Large parts of any proteome are never observed experimentally - the "dark" proteome. If detectability is partly predictable from sequence-derived and transcript-level properties, then absence from a dataset is not automatically evidence of absence in the organism. That distinction matters when interpreting proteomics results.

How it works

The dataset is the A. thaliana PeptideAtlas protein list: 23,674 proteins, of which 18,079 are canonical (observed) and 5,595 are not observed - a 76/24 class split that makes plain accuracy misleading on its own.

Five predictors are used: molecular weight, GRAVY hydrophobicity and isoelectric point from the sequence, plus RNA detection rate and highest TPM from expression data. Molecular weight and TPM are strongly right-skewed (skew 2.8 and 26.8), so both are log1p-transformed and scaled, while the other three are scaled only. All of it sits in a ColumnTransformer inside the pipeline, so every transformation is fitted within each cross-validation fold and cannot leak across the split.

Six classifier families - logistic regression, decision tree, random forest, gradient boosting, an RBF-kernel SVM and k-nearest neighbours - are compared under 5-fold stratified cross-validation against a majority-class dummy baseline. The random forest is then tuned with a randomised search inside a nested cross-validation.

What the results say

The baseline scores 0.764 accuracy by calling everything canonical, which is exactly why both metrics are reported. Random forest leads on raw accuracy (0.897 ± 0.003), but the RBF SVM leads on balanced accuracy (0.853 ± 0.002) - on imbalanced data the two rankings disagree, and balanced accuracy is the honest one. The tuned random forest reaches 0.885 accuracy on the held-out test set, recovering 90% of canonical proteins and 82% of the not-observed ones.

The class means show where the signal comes from: proteins that are never observed are roughly half the molecular weight of canonical ones (26.4 against 52.6) and are transcribed far less consistently (46% against 92% RNA detection).

Current state

Finished and published. The dataset and a requirements.txt sit in the repository alongside the notebook, so the analysis can be re-run as it stands.