Wind resource · Weather & climate data validation · Research software

EllyessBenmoufok

I build and validate models of weather and climate data, and the software that makes them usable by other people. My PhD at Imperial College London corrected ERA5 reanalysis wind against observed generation across 12 European countries, then measured what that correction changes inside European energy system models.

I released the method as PyVWF, an open-source Python library with continuous integration, typing, documentation and a Zenodo DOI. I am looking for data science, modelling or research software roles in climate, energy, weather and climate risk.

Status
Available now
Based
London, UK · Open to remote and hybrid roles
Eligibility
UK right to work, no sponsorship needed
Control points across 12 European countries used to train and validate the correction
1,729
NRMSE against ENTSO-E 2023 generation, improving 9 of 11 country and technology series
−36%
Test functions in the PyVWF v0.5.1 release, run in CI with ruff and mypy
469
Peer-reviewed papers, one as first author
3
01

Where I fit

Wind resource & energy yield

Corrected ERA5 reanalysis wind against observed generation and turned it into capacity factors, with wake losses and spatial resolution treated as modelling choices that move results.

Corrections from 1,729 control points in 12 countries, gridded over 23,989 ERA5 cells; capacity-factor MAE cut by 16 to 79% against uncorrected ERA5.

Weather & climate data verification

Owning the question of how far a dataset can be trusted, and for which decision. Bias, error decomposition and validation designs that do not leak.

Spatial and leave-one-country-out cross-validation; regions the observations could not support were masked, not published.

Model validation & climate risk

Pre-registered tests, failed predictions published as failures, and the simpler model kept when the complex one does not earn its place.

Ran the Oasis LMF PiWind catastrophe model end to end with an exposure sensitivity study on AAL and EP curves.

Geospatial & earth observation

Gridded climate fields, interpolation and projections, and supervised classification of satellite imagery.

Credited App Developer on I-Hex, the Island Health Explorer: land-cover and benthic classification over Maldivian atolls in Google Earth Engine.

Research software engineering

Turning research code into packages other people can install, test, cite and extend, and working inside other people's codebases to their conventions.

PyVWF: CI, typing, Sphinx docs built with warnings as errors, Docker, semantic versioning and a Zenodo DOI. A public fork of PyPSA-Eur.

02

Selected work

Author · open source

PyVWF: bias-corrected wind power from reanalysis

A Python rewrite of the Virtual Wind Farm model behind the wind simulations on Renewables.ninja, implementing the granular bias-correction method from my 2024 Energy paper. It trains correction factors against observed generation at turbine, regional or national scale and applies them to ERA5. I wrote every commit in the v0.5.1 release, which carries a Zenodo DOI.

Python · Xarray · Dask · SciPy · scikit-learn · pytest · GitHub Actions · ruff · mypy · Sphinx · Docker

Public fork · PhD Part II

Wind representation in PyPSA-Eur

Extended the open European energy system model with a density-tiered wake-loss correction, the gridded PyVWF corrections, and a spatial splitting algorithm that decouples offshore resource resolution from network topology. Factorial studies (bias × wake × resolution) across a regional North Sea system and a 25-country network. Every manuscript figure regenerates from one script, and the headline claims are held under automated test.

Python · PyPSA · Atlite · Snakemake · Gurobi · GeoPandas

Post-PhD · experimental

Physics-informed wind correction

A constrained model meant to transfer corrections to regions with no observations. Gates and thirteen predictions were fixed before each run. As registered it beat uncorrected ERA5 in 5 of 5 held-out regions, with thin margins in two. Seven predictions failed and are published as failures. Two physics extensions were built, tested and rejected.

PyTorch · pre-registration · leave-one-region-out validation

Catastrophe modelling · 2026

ERA5 windstorm × Oasis LMF

Reproduced the Oasis LMF PiWind example model end to end, then ran a single-site exposure sensitivity study comparing AAL and EP curves, ground-up against insured. It is a reproduction and a sensitivity study, not a catastrophe model; the event set and vulnerability curves are PiWind's example data.

Python · oasislmf · AAL · OEP / AEP

Earth observation · 2020–21

I-Hex, the Island Health Explorer

A Google Earth Engine suite giving policymakers and island communities free access to satellite and climate data for the Maldives. I worked on the supervised land-cover and benthic-feature classification, and digitised and assembled its 861-point labelled training set across nine classes. The classified imagery uses separate Landsat and Sentinel-2 classifiers, with per-atoll median compositing to handle cloud.

Google Earth Engine · JavaScript · Landsat · Sentinel-2 · pandas

ML research code

WGAN regression

The codebase behind the MOR-GANs paper, extended past publication: a PyTorch port, and benchmarks against Gaussian process, mixture density network and conditional diffusion baselines on twelve datasets over five seeds. The README reports where the newer baselines win.

TensorFlow · Keras · PyTorch · WGAN-GP

AI evaluation

LLM personas against real UK opinion

An evaluation harness testing whether populations of LLM personas reproduce the distribution of opinion in two nationally representative UK surveys. Five prompt-level persona methods, two Claude models, distribution metrics (TVD, JSD) with bootstrap confidence intervals, and diagnostics for a model being right for the wrong reasons.

Python · Anthropic API · Docker · bootstrap CIs

03

How I work

Validation first

I tested whether machine learning could beat my geometric correction. Random cross-validation gave R² of 0.35 to 0.41. Neighbouring sites share weather, so the folds were not independent. Under spatial cross-validation the best model scored 0.295, and on an unseen country the tree models fell below zero. I reported the lower figures and kept interpolation as the published method.

Decide before running

For the physics-informed work, the gates and thirteen predictions were fixed before each run. Seven predictions failed; they are published as failures. A configuration chosen after seeing results was re-tested on four new regions, lost to the simpler one in three, and the simpler one became the headline.

Build for the next user

PyVWF started as research code only I could read. When MSc and PhD students began building on it, I made it a package. When a student could not load their own data, I wrote a documented input framework with an example notebook, then used the same pipeline to integrate a lot more data myself.

04

Experience

Oct 2021 – Jun 2026London

PhD Researcher, Computational Science & Data Science

Imperial College London · EPSRC and Shell Industrial CASE award

  • Designed and released PyVWF for granular bias correction of reanalysis wind, trained and validated at 1,729 control points across 12 European countries.
  • Extended PyPSA-Eur with a density-tiered wake-loss correction, gridded bias correction and a spatial splitting algorithm; validated against ENTSO-E 2023 generation.
  • Wrote seven Python API clients for national generation data and ERA5, with rate-limit backoff, request batching and resumable downloads.
  • Reported to an industry supervisor at Shell throughout, presenting results in terms of system cost for a commercial audience.
Jun 2021 – Sep 2021London

Data Science Intern

Shell

  • Proof of concept for statistically downscaling CMIP6 climate projections to asset level for renewable-energy variables, using machine learning on large, heterogeneous climate datasets, with offshore wind lidar observations as ground truth.
  • Supported separate operational weather-modelling work, retrieving data from HPC.
Dec 2020 – Mar 2021London

Research App Developer

Imperial College London

  • App Developer on I-Hex, the Island Health Explorer, with Maldives National University and the Banyan Tree Foundation.
  • Supervised land-cover and benthic-feature classification of satellite imagery over Maldivian atolls in Google Earth Engine; assembled the 861-point labelled training set.
Jan 2019 – Aug 2019London

Data Scientist

Link Humans

  • Most technical member of a five-person team. Wrote Python scrapers and pipelines to collect employer-branding data from across the web.
  • Classified large volumes of unstructured text and produced insight reports for more than ten clients on monthly to quarterly cycles.
2020 – 2024Imperial

Research guidance and teaching

  • Co-supervised an MSc research project, named alongside Prof. Matthew Piggott, whose work became a co-authored paper in Energy.
  • Guided three MSc and PhD students through using and extending PyVWF and PyPSA-Eur, with a weekly session and written updates.
  • Teaching assistant for MSc scientific computing and numerical methods coursework sessions.
05

Education

Oct 2021 – Jun 2026PhD awarded 2026

PhD in Computational Science & Data Science

Imperial College London · Earth Science & Engineering

Thesis: Data Science-Enhanced Wind Power Modelling: From Reanalysis Correction to Energy System Representation. Findings

2019 – 2020Distinction · DIC

MSc, Applied Computational Science and Engineering

Imperial College London

Top marks in Modern Programming Methods (92.4) and Inversion and Optimisation (82.2). Dissertation on Wasserstein GANs for multi-output regression, which led to a co-authored paper.

2015 – 2018First Class Honours

BSc, Physics

University of Surrey

06

Publications

Energy · 2024First author

Improving wind power modelling through granular spatial and temporal bias correction of reanalysis data

Benmoufok, E.F., Warder, S.C., Zhu, E., Bhaskaran, B., Staffell, I., Piggott, M.D.

Energy, 313, 133759

View publication
Energy Conv. & Mgmt · 2026Co-author

Geographic variability in reanalysis wind speed biases: a high-resolution bias correction approach for UK wind energy

Wang, Y., Warder, S.C., Benmoufok, E.F., Wynn, A., Buxton, O.R.H., Staffell, I., Piggott, M.D.

Energy Conversion and Management, 352, 121066

View publication
Applied Sciences · 2022Co-author

Multi-Output Regression with Generative Adversarial Networks (MOR-GANs)

Phillips, T.R.F., Heaney, C.E., Benmoufok, E., Li, Q., Hua, L., Porter, A.E., Chung, K.F., Pain, C.C.

Applied Sciences, 12(18), 9209

View publication
07

Technical stack

LanguagesPython (advanced) · SQL (DuckDB) · JavaScript · TypeScript · R
Scientific dataNumPy · SciPy · Pandas · Xarray · Dask · NetCDF · Zarr · Matplotlib
Machine learningscikit-learn · PyTorch · TensorFlow / Keras · spatial cross-validation · GANs
Weather & climateERA5 · MERRA-2 · CMIP6 · Copernicus CDS · ENTSO-E
GeospatialGeoPandas · Rasterio · Cartopy · Shapely · pyproj · Google Earth Engine · IDW / kriging
Energy & riskPyPSA-Eur · Atlite · Gurobi · wake modelling · Oasis LMF
Software practicepytest · GitHub Actions · ruff · mypy · Sphinx · Docker · pre-commit · semantic versioning
WorkflowSnakemake · Conda · Git · Unix shell · Claude Code
CertificationMicrosoft Azure Fundamentals (AZ-900)