Work
🧩 End-to-end pipelines 🧠 Behavioural science 🤖 ML + data science
My experience integrates business, data, and technology — with behavioural science and ML — across 8+ years.
I turn fuzzy goals into crisp definitions and measurable success (what matters, what we optimise, what we trade off).
I build end-to-end pipelines: ingestion → modelling → deployment → monitoring, built to survive messy real‑world inputs.
I communicate for action: decisions first, details second — without losing the statistical honesty.
Quick links
Want the fastest scan? Hit the projects, then jump to apps + open source.
Inspiration → latest repos
behind-the-machine-lab
Behavioural science + data-led mini experiments on AI workflows that hold up.
AI systems don’t fail quietly — they fail in the gaps between prediction and human action. I wanted a practical lab to test “trust + autonomy + clarity” in real workflows, not just benchmark accuracy.
- What I built: A set of small, repeatable experiments (prompt variants + scoring rubrics) that turn messy LLM behaviour into something you can actually compare and improve
- ML / DS angle: Converted qualitative UX/behaviour signals into measurable metrics (e.g., autonomy threat, clarity, reactance risk) so interventions can be evaluated like models
- Pipeline & craft: End‑to‑end run artefacts (generate → score → summarise tables/plots → write‑up) so results are reproducible and stakeholder‑friendly
I learned that “good answers” aren’t enough — the winning systems reduce friction, preserve autonomy, and make the next step obvious.
retail-decisioning-demand-promo
Retail decisioning loop: forecast next-week demand and recommend constrained price/promo actions via predictive simulation.
Forecasts are nice, but retail teams need decisions. I wanted a “decisioning loop” that turns demand modelling into a concrete, constraint-aware price/promo recommendation.
- What I built: An end‑to‑end prototype that extracts the dunnhumby Excel to parquet, builds features (lags, rolling means, price/promo signals, seasonality), then trains a next‑week units model
- ML / DS angle: Simulated candidate actions (price grid × observed promo combinations) and compared policies (naïve revenue baseline vs a penalised, constraint-aware policy)
- Pipeline & craft: Config‑driven scripts + generated summary artefacts so you can rerun scenarios, compare policies, and review outputs without chasing notebooks
I learned that the hard part isn’t modelling — it’s counterfactual thinking and constraints. A “best” action in a sandbox can be a terrible action in a real store.
behavioural-ai-decision-engine
Behavioural simulation of AI-assisted decision-making (reactance + explainability buffer) with an interactive dashboard.
People don’t “use” AI advice — they negotiate with it. I wanted to model when explainability helps versus when it backfires, especially under disagreement and autonomy threat.
- What I built: A behavioural simulation engine plus a Streamlit dashboard to explore outcomes across reactance and explainability, and to reproduce paper-style figures/summary metrics
- ML / DS angle: Monte‑Carlo simulation with interpretable primitives (trust, signal strength, disagreement, regret, completion) to stress-test “AI utility” under realistic human responses
- Pipeline & craft: Batch runs + run-by-run archives so experiments can be repeated, compared, and extended without manual tweaking
I learned that explainability is not a checkbox — it’s a behavioural intervention. You can increase uptake, but you can also trigger resistance if you ignore autonomy.
Grid-Load-and-EV-station-Charging
Python prediction prototype packaged with an app + model artefacts (dataset + preprocessor + trained model files).
EV adoption turns charging into an infrastructure problem. I wanted to prototype a lightweight predictive workflow that connects grid load signals to charging demand.
- What I built: A small Python app and prediction workflow (app.py + prediction.py) with a bundled dataset and deployable artefacts
- ML / DS angle: Packaged the modelling stack as loadable objects (preprocessor.pkl, poly.pkl, dt_model.pkl) so inference stays consistent and reproducible
- Pipeline & craft: Made the “train → save → predict” path explicit with saved artefacts + requirements so the project is runnable without guesswork
I learned that simple, well-packaged ML often beats “fancier” models — shipping a reliable prediction path is the real win.
Education
What I enjoyed most: turning behavioural theory into testable experiments, then explaining results so they actually change decisions.
Outside of tech
I learned that
- Clarity beats cleverness: the best analysis is the one that changes a decision.
- Behavioural effects are measurable — you just need the right proxy metrics and honest baselines.
- “End-to-end” matters: modelling is the middle, not the finish line.
- Volunteering (incl. Omdena) taught me how to ship with strangers: crisp scope, rapid feedback, shared standards.