MSc Energy Systems & Data Analytics — UCL Bartlett School of Environment, Energy and Resources BEng Electrical & Electronic Engineering — University of Nottingham
I build numerical and statistical models of markets and physical systems: Monte Carlo and quadrature methods, time-series econometrics, and machine learning applied to energy and financial data. Previously at Ocado Technology building production data pipelines. National winner of the Capital One Product Challenge (2024).
Each repository below states the question it answers, the result it found, and what it does not claim.
| Repository | What it does | Methods | Result |
|---|---|---|---|
| fourier-option-pricing | Tests whether the peak-minimising damping vector of arXiv:2203.08196 is also error-minimising, and finds the answer depends on the quadrature family it is paired with | Damped Fourier inversion under multivariate GBM and Variance Gamma, closed-form basket-put payoff transform via loggamma, ridge-bound minimisation with trust-constr, tan-substitution / Gauss–Laguerre / truncated Gauss–Legendre quadrature, exact-simulation Monte Carlo validation |
Under Gauss–Laguerre the peak-minimising vector R* is best of five, by one to four orders of magnitude, down to the reference's own precision floor — reproducing the paper. Under truncated Gauss–Legendre it places third of five and R*−2 wins, because the ridge bound measures the peak and says nothing about the tail |
| crack-spread-econometrics | Asks whether crude cost-pushes refined products or gasoline demand pulls crude, on 1,361 weekly WTI, NY Harbor gasoline and heating oil observations (2000–2026) | Confirmatory ADF/KPSS unit-root strategy, Johansen trace and maximum-eigenvalue cointegration, VECM with structural-break dummies, moving-block bootstrap impulse responses, Bonferroni-corrected Granger causality, CUSUM stability | Gasoline Granger-causes crude (F = 8.72, adjusted p < 0.001); crude does not (F = 1.94, adjusted p = 0.61). Crude carries the only equilibrium-restoring loading on the first cointegrating vector (α = −0.042, p = 0.044, half-life 16.2 weeks) |
| afml-quant-pipeline | Assembles the López de Prado Advances in Financial Machine Learning toolchain end to end against a free data source, with each link tested in isolation | Dollar bars, fixed-width fractional differentiation with a minimum-d stationarity search, triple-barrier labelling and meta-labelling, sequential-bootstrap sample weights, purged and combinatorial-purged K-fold with embargo, probabilistic and deflated Sharpe, MDI/MDA/SFI importance | Implementation exhibit — no strategy result is claimed and no backtest is offered as evidence of edge |
| Repository | What it does | Methods | Result |
|---|---|---|---|
| gb-price-forecasting-leakage-audit | Forecasts GB day-ahead power prices, then finds and quantifies two data leaks in its own feature set — a rolling window crossing the auction boundary, and demand read as outturn rather than forecast | XGBoost and SVR over 23 features, rolling-origin validation, bootstrap intervals, Wilcoxon signed-rank against persistence, SHAP attribution, spike-detection screen | Correcting the leaks moved R2 from 0.838 to 0.763 and cut spike F1 from 0.667 to 0.312 — recall fell from 0.565 to 0.217, showing the screen had been reading realised demand. Still halves persistence RMSE (19.45 against 34.28) |
| gb-weather-to-price-forecasting | Tests whether explicitly modelling the weather to renewable generation to price chain beats price-only baselines, and whether the accuracy gain is worth money to someone dispatching a battery | Walk-forward XGBoost renewable forecasts from capacity-weighted regional weather feeding an XGB+SVR ensemble, TCN, PatchTST, LSTM and BiLSTM, with rolling-origin validation, conditional and grouped ablation, and a battery arbitrage LP in PuLP | Ensemble R2 = 0.860, RMSE 13.46 EUR/MWh over 6,676 held-out hours against ARIMA(5,1,0) at 72.94; a 100 MW / 200 MWh battery dispatched on the forecast captures 89.9% of perfect-foresight profit. Eight-person group project |
| heat-pump-peak-demand-modelling | Tests whether HDD-based grid planning underestimates heat pump peak demand because it averages away occupant behaviour | 2R1C thermal ODE on real EPW weather, 240-run full factorial (4 archetypes x 3 weather x 2 fabric x 10 reps), Type II ANOVA with eta-squared effect sizes, interaction regression, Ramsey RESET, validation against 730 Electrification of Heat field-trial homes | Occupant behaviour explains 27.0% of peak-demand variance against fabric's 21.2%, and the behaviour-fabric interaction is the largest single term at 26.9%. The HDD-linear model reaches R2 = 0.069 against 0.644 for the interaction model (RMSE 0.574 vs 0.355 kW). The original hypothesis that underestimation worsens in extreme cold is reported as not supported |
| uk-onshore-wind-siting | Screens GB land for onshore wind: hard environmental constraints, then AHP-weighted multi-criteria suitability, then indicative financials for the surviving zones | Constraint screening against Ramsar/SAC/SPA designations, Analytic Hierarchy Process with a consistency check, composite suitability surface, indicative LCOE and NPV, all layers on EPSG:27700 | Wind resource (41.3%) and grid distance (25.7%) carry two thirds of the weight; the pairwise comparisons are consistent at CR = 0.008, well inside the 0.10 threshold |
| Repository | What it does | Methods | Result |
|---|---|---|---|
| jobscan | Scans employer career sites for matching roles, spending an LLM call only on the minority that survive a deterministic keyword filter | Entry-point plugin registration for both sources and scoring backends, structured extraction via schema.org JobPosting, deterministic prefilter, SQLite de-duplication, 164 tests run offline against respx-mocked transport so the real clients and parsers are exercised, mypy strict |
One run scanned 526 unique postings across 9 sources and discarded 490 of them (93%) before any LLM call, leaving 36 to score |
| techniq-form-coach | Real-time lifting form feedback from a webcam, and an honest negative result on predicting which rep a set falls apart on | 33-landmark MediaPipe pose estimation, atan2 joint-angle geometry, rep-phase state machine, rule-based fault detection across four lifts, least-squares extrapolation to a fixed threshold | Fault detection works; the fatigue prediction does not — it is a straight line through fewer than ten noisy points and is reported as a demo of the mechanism, not a prediction |
Languages Python, JavaScript (ES6), SQL, C++, R, LaTeX
Numerical NumPy, SciPy (optimize.trust_constr, special.loggamma, quadrature), Gauss–Laguerre / Gauss–Legendre / tan-substitution quadrature, exact-simulation and moving-block-bootstrap Monte Carlo, ODE integration, PuLP/CBC for MILP
ML / statistics statsmodels (VECM, Johansen, ANOVA, ARIMA, ADF/KPSS, RESET, CUSUM), scikit-learn, XGBoost, PyTorch (TCN, PatchTST, LSTM), SHAP, arch
Geospatial GeoPandas, libpysal, esda, spreg, mgwr, GeoShapley, Moran's I / LISA, QGIS
Engineering Git, pytest, mypy, ruff, Jupyter, Streamlit, Vite, OpenBB, ETL pipelines, automated validation, Docker
Currently: finishing the MSc dissertation — an entropy-weighted digital infrastructure index for UK local authority districts, tested against GVA-deviation economic resilience with XGBoost–SHAP and MGWR. Code released once the work is marked.
Interested in stochastic numerics and quadrature design for high-dimensional pricing, Lévy models, and price formation and transmission in energy and commodity markets. Reach me at younis.y@outlook.com.
Also on this account as side projects rather than research: veo-area-recommender (hackathon build, with @MasteraSnackin, who wrote most of it), ki-legends (single-file browser fighting game).