Machine Learning Engineer

I build ML tools that work
on data they've never seen.

Fourteen projects, all live and all interactive. Every one opens with real data already loaded and results on screen — then you can drop in your own CSV, because none of them hardcode a dataset. Most run real Python in your browser, so there is no server to wake up and nothing you upload ever leaves your machine.

16
live, interactive projects
0
servers to keep running
100%
with automated tests in CI

three clusters, projected in real time

Projects

Every card opens a demo that is already running when you arrive — nothing to sign up for and nothing to upload first. Each one also names a real bug found while building it, because that says more than a feature list does.

How I work

The model is the easy part

Calling .fit() is four characters. What decides whether a project works is everything around it: is that all-unique integer column an ID or a rounded price? Does resample().sum() return zero or NaN for a month with no sales? Is 01/02/2023 January 2nd or February 1st?

Each of those got the wrong answer at some point in these projects, and each produced plausible output rather than an error. That's the dangerous kind.

A number nobody checked is a guess

The A/B analyser's distribution functions are validated against scipy on 464 committed cases. The digit recognizer's JavaScript forward pass is compared to its NumPy original at 4.77e-6. The forecaster's models are scored by walk-forward validation against naive baselines that stay visible in the leaderboard.

Writing those checks is where most of the bugs turned up.

Say when the answer is weak

k-means will happily partition pure noise. A 40-row dataset will happily report 94% cross-validated accuracy and 56% on held-out data. A test checked twenty times has a 64% false-positive rate, not 5%.

These tools say so, in plain language, at the point where you'd otherwise draw the wrong conclusion. A portfolio project that tells you when to distrust it is more useful than one that never does.

Ship it, or it doesn't count

Everything here is deployed and reachable. Most run Python compiled to WebAssembly in a Web Worker, which means no cold starts, no hosting bill, no service to go down before someone clicks the link — and your data never crosses the network.

Every repository runs its tests in CI on every push, and deploys itself.

What I use

Everything listed here appears in a project above — nothing is here because it looks good on a CV.

Get in touch

I'm looking for a machine learning engineering role. Happy to walk through any of these in detail — including the parts that went wrong.