Mohamed Rodani

Mohamed Rodani

Machine learning, quantitative systems and scientific computing.

Physics undergraduate at Queen Mary University of London. I build predictive models, risk-aware decision tools and the software around them, and I put as much work into validation as into modelling. Several of the projects below became exercises in knowing when not to trust a model.

Open to 2026–27 internships and spring weeks in ML engineering or quantitative research. London.

Flagship · Quantitative ML · Team of two · Mar–Apr 2026

QMML Market Making Hackathon

Nine live rounds: predict a hidden fair value from an anonymised feature table, quote a bid and ask, then trade against whichever team became market maker. Our team, AlphaBetaPhi, finished 2nd of 93 on a simulated bankroll of £100,000 → £305,727, £1,153 behind 1st, and 1st on Sortino ratio.

The edge was decision-making under uncertainty, not exotic models: quoting wide to avoid the market-maker role, sizing up only where cross-validation backed a strong linear fit, and trading the minimum in the six rounds where the signal was weak or absent.

My part Prediction models and model selection, strategy design and the tiered sizing logic (strategy.py), rounds 1, 3, 5, 7 and 9. Kieran Cooke: EDA, feature engineering, Kelly implementation, rounds 2, 4, 6 and 8.

Model selected per stock and the sizing tier it justified
StockModelR² (in-sample)Sizing
1Linear regression0.98Big
2Linear regression0.96Big
3Linear regression0.93Moderate
4Gradient boosting0.27Minimum
5Ridge (α = 100)0.20Minimum
6Mean baseline0.00Minimum
7Ridge (α = 100)0.04Minimum
8Ridge (α = 100)0.04Minimum
9Mean baseline0.00Minimum
Nine synthetic stocks, one round each, as selected by strategy.py. Sizing: big ≈ 15% of bankroll at risk over a 2·RMSE move, moderate ≈ 5%, minimum = 10 shares. Cross-validated RMSE per stock is in the case study.

ML systems · Team of two · December 2025 → 2026

Gweizy — gas-price forecasting for the Base network

Winner of the QMUL AI Society × Coinbase hackathon. A live pipeline samples Base gas prices every five minutes, builds lag, rolling and cyclical-time features, and serves 1 h / 4 h / 24 h forecasts from a Flask API with Socket.IO push to a React front end.

The honest result: 59.8% directional accuracy at 1 h against a 50% baseline, longer horizons at chance level, and a later retraining run that failed its own baseline check — all reported in the case study, along with why the app's savings figure is an estimate.

My part Backend, data pipeline, features, model training and validation, API and deployment. Front end by teammate Senan.

  1. Base RPCbase fee per block, rotating endpoints
  2. Collector5-minute sampling → PostgreSQL
  3. Featureslags, rolling stats, momentum, cyclical time
  4. Models1 h / 4 h / 24 h regressors + spike classifiers
  5. Flask APIREST + Socket.IO, TTL cache
  6. Front endReact / TypeScript on Cloudflare Pages
Data path from chain to decision interface. Backend on Railway; models retrained from the collected history with a holdout baseline check.

NLP · Solo project · 2025

BERT financial sentiment — optimising for the class that matters

Fine-tuned bert-base-uncased on 5,842 labelled financial sentences, 15% of them negative. The first model reported 81.5% accuracy while missing 71% of negative examples.

Class-weighted loss, early stopping and per-class metrics raised negative recall from 28.6% to 87.4% for two points of accuracy, with negative precision falling to 52.8% — a trade the case study makes explicit rather than hiding behind a headline number.

Validation set (1,169 sentences), improved model
ClassPrecisionRecallF1n
Negative52.8%87.4%65.8%175
Neutral94.3%71.2%81.1%622
Positive81.2%89.3%85.0%372
Before and after class weighting
MetricOriginalImproved
Negative recall28.6%87.4%
Negative F10.410.66
Accuracy81.5%79.4%
Single 80/20 split, seed 42. Accuracy went down; the metric that matters for a bad-news detector went up.
  1. Kaggle Playground S5E11 — loan-default prediction

    LightGBM tuned with Optuna under 5-fold stratified CV (0.9234 ± 0.0007). The write-up keeps the experiments that failed — engineered ratios and multi-model ensembles — next to the multi-seed averaging and external statistics that helped.

    950 / 3,8500.92450 AUC · November 2025
  2. QMML Valentine's hackathon — weak-signal classification at scale

    700k rows, ROC-AUC objective, top scores within 0.0004 of each other. Out-of-fold target encoding, LightGBM / XGBoost / CatBoost tuned with Optuna, rank-averaged ensemble.

    2nd · 0.59235 AUCwinner 0.59275 · February 2026
  3. QMML Christmas hackathon — return prediction

    Seventeen engineered features and logistic regression on 8,000 transactions. The case study documents a target-leakage flaw in how the training aggregates were built and shows the out-of-fold construction that fixes it.

    2nd placeDecember 2025
  4. RYM investment framework — equity screening for the UK Investment Challenge

    S&P 500 technical scanner (MA50/200, RSI, MACD, volatility, Sharpe) and a weighted earnings-momentum scorer with FinBERT news sentiment. A research-prioritisation tool: no historical backtest has been run yet.

    3rd / 28 QMUL teams2025
  5. My Heat Pump Explained — rule engine plus LLM explanations

    An ordered rule engine classifies heat-pump measurements into eight operating conditions; Claude turns the detected condition into a ≤50-word explanation, with a templated fallback if the API call fails. Diverse AI Hackathon 2025.

    Team entryStreamlit · Anthropic API · November 2025

Education

  • 2025 – 2029 (expected)BSc Physics, Queen Mary University of London
  • 2022 – 2024A-levels: Mathematics, Further Mathematics, Physics

Focus

Mathematical methods and computational physics from the degree; machine learning and quantitative modelling through independent projects, Kaggle, and the QMUL Machine Learning Society, where I work with the quant division on competitions and shared notebooks.

Competencies, with the project that shows each

Modelling
PyTorch, Hugging Face Transformers, scikit-learn, LightGBM, XGBoost, CatBoost, OptunaBERT fine-tuning; boosted-tree tuning and ensembling; linear, ridge and boosting baselines chosen per dataset
Validation
Stratified k-fold, out-of-fold target encoding, time-series splits with embargo, holdout baseline checks, calibrated intervalsKaggle S5E11, Valentine's hackathon, Gweizy retraining pipeline
Quant
Uncertainty estimation, Kelly-style and tiered position sizing, survival constraints, technical indicatorsMarket-making strategy; RYM scanner and scorer
Data
pandas, NumPy, SciPy, Matplotlib, seaborn, PostgreSQLFeature pipelines, residual and influence analysis, EDA
Systems
Python, Flask, REST, Socket.IO, caching, pytest, GitHub Actions, Railway, Cloudflare Pages, StreamlitGweizy backend and deployment; heat-pump dashboard

The fastest route is email. I reply to every message about roles, research or collaboration.