Josh Beira, Head of Machine Learning at Warwick Racing

Josh Beira

Computer Science at Warwick. Head of Machine Learning at Warwick Racing.

I build machine learning systems that have to survive a constraint — a 50 ms deadline on a moving car, a user who cannot see the screen, or a benchmark designed to catch me fooling myself.

Right now that means the perception and steering stack for Warwick’s autonomous race car, a bursary-funded research project on text-to-image person re-identification, and a summer on Generating Genius’s technology and data science programme with PDT Partners and National Grid.

experience

2023 — now

—

Tech and Data Science Internship Scholar

Generating Genius · London

Selected for Generating Genius’s technology and data science programme, run with PDT Partners and National Grid.

details

Built pdtbench at the PDT hackathon: an agentic trading benchmark that separates a model’s trading skill from its memory of the chart.

— present

Research Intern, Artificial Intelligence and Machine Learning

Department of Computer Science, University of Warwick · Coventry

Bursary-funded independent research on text-to-image person re-identification, building a generative augmentation pipeline and fine-tuning CLIP against its attribute-binding weakness.

details

Engineered a generative data augmentation pipeline that uses Stable Diffusion to replace image backgrounds and isolate subjects, producing a lower-noise training set. Fine-tuned CLIP on it with custom loss functions and benchmarked against published baselines on CUHK-PEDES.

— present

Organiser, Logistics and Outreach

The Warwick Hackathon (WHACK) · Coventry

Secured £5,000 of sponsorship from tech firms, opening the event to 300+ students nationwide.

details

Ran venues, power and logistics with university stakeholders.

Competed the year before: led a four-person team to build an AI finance assistant for contract analysis and financial literacy, orchestrating parallel Gemini 2.5 Pro agents through asynchronous workflows to cut end-to-end latency, and demoed it to non-technical judges.

— present

Head of Machine Learning

Warwick Racing · Coventry

Software Engineer, —

Own the perception and steering stack for Warwick’s autonomous car: segmentation CNNs and LiDAR clustering in, steering and speed commands out, inside a 50 ms budget.

details
  • Built the perception stack: segmentation CNNs detect track cones from onboard camera data, with LiDAR clustering fused in for robust multi-sensor localisation.
  • Trained reinforcement learning and supervised steering models in closed-loop simulation, focused on sample efficiency and sim-to-real transfer.
  • Integrated SLAM and sensor-fusion outputs into the motion control loop, working with the electrical and mechanical sub-teams to turn perception into steering and speed commands inside a 50 ms frame-to-actuation budget.
  • Ran the workflow end to end: dataset pipelines, evaluation against precision/recall, IoU and reward curves, Docker packaging, and design reviews across a large cross-functional team.

—

Founder and Lead Developer

Student web development agency · Remote

Founded and led a student web development agency delivering end-to-end work for 10+ local businesses.

details

Led a cross-functional team across frontend, backend, database and marketing. Owned the full lifecycle from client consultation and requirements gathering through deployment and maintenance, and was the client-facing point of contact translating business requirements into technical specifications.

selected work

all 05 ↗

pdtbench — an agentic trading benchmark with a control group

2026 · PDT Partners hackathon — 1st place

A language model makes money on a historical market window. Is that skill, or does it remember the chart? Every real window gets a synthetic twin, so you can tell the difference.

Python MCP Streamlit Parquet pytest

details
  • Every real window is paired with a synthetic twin — matched on total return (±3pp), volatility (±15%) and regime, so the trade to make is identical and only the identity differs. Beating the real window by more than its twin is the edge.
  • Regressing that gap against how often the model can name the window turns “is this memorisation?” into a slope you can measure.
  • The engine fills at the next unseen open and a read-audit test makes look-ahead impossible by construction. Baselines and the agent enter through the same in-process MCP server, so fee parity holds by construction rather than by assertion.
  • Sharpe is floored at 0.25 × buy-and-hold daily volatility, because plain Sharpe on a mostly-cash account rewards deploying 1% of capital for two lucky days. An agent that never trades scores exactly zero.
  • 218 tests, none touching the network.
  • Environment, baselines and analysis complete; the live model batch is the next step.

Penny — voice-first banking for blind and low-vision customers

2026 · Barclays Accessibility Challenge

Banking for blind and low-vision customers, where voice and sound are the primary channels and the screen is secondary. Nothing executes until Penny says what will happen and you confirm it.

TypeScript React Vite Tone.js Tesseract.js Zustand PWA Playwright/axe

details
  • Read-Back Rule: nothing executes until Penny states exactly what will happen and is confirmed. Every completed action writes a hash-chained, tamper-evident receipt.
  • Post Box: photograph a letter, mask the sensitive digits on-device with Tesseract before anything leaves the phone, then hear it read back as a summary, verbatim, or explained — and act on it in the same flow.
  • Layout Lock, a Playwright + axe CI gate that fails the build if the accessibility tree changes without a migration flag. The accessibility contract is enforced by the pipeline, not by remembering.
  • Account health is a two-second earcon rather than a number, and the week’s spending plays as a five-second stereo sonification. Quiet Mode swaps speech for high-contrast cards and three named haptic patterns.
  • Runs fully offline: no key, no network, no crash — the demo works in airplane mode.

Byte the Evidence — an adversarial negotiation trainer for junior M&A lawyers

2026 · Hack the Law, Cambridge — 2nd, Legora track

An Ace Attorney-style trainer where junior M&A lawyers negotiate against AI opposing counsel — catching the errors it plants and drawing out the facts it hides, from LOI through to signing.

Python FastAPI Google ADK Gemini SSE

details
  • Four Google ADK agents behind one session: a persona-driven negotiator that plants legal errors and guards hidden facts, an adjudicator scoring every turn, a phase-boundary coach, and a final evaluator producing per-clause grades and a debrief of everything you missed.
  • Catching a planted error, or drawing out a fact the other side is hiding, is the scoring mechanic — so the trainer rewards the actual skill rather than fluency.
  • MOCK_LLM=1 returns canned responses for the whole agent graph, so the demo never depended on an API key or a rate limit holding up on the day.

λGPT — a natural-language REPL built from parser combinators, not an LLM

2026 · Warwick coursework

A conversational interface with no model behind it. Every intent is a parser, every answer is derived, and nothing is generated.

Haskell Megaparsec Aeson http-conduit Stack

details
  • Megaparsec’s try lets the parser backtrack between “what is two plus two” and “what is the weather like today” without consuming input; string' and optional make it case-insensitive and tolerant of trailing punctuation, so valid input doesn’t fail on a missing question mark.
  • Arithmetic is evaluated over an AST with a foldl accumulator for left-to-right natural-language precedence. evaluateExpr returns Either String Int, so referencing “that” before any maths has happened is an error value rather than a runtime crash.
  • Went past the spec with a live Open-Meteo forecast, isolated in its own module and fetched with httpJSONEither — a dropped network returns a polite string instead of killing the REPL. Keyless by choice, so it can’t fail on someone else’s rate limit.
  • Memory is an explicit association list threaded through the loop by tail recursion rather than a StateT transformer over IO — less machinery, same guarantee.

COVID-19 mortality risk — logistic regression from scratch, and a negative result

2025

Logistic regression written from scratch in NumPy — sigmoid, cross-entropy and hand-derived gradients. It scored 75.82% accuracy against a 75.63% baseline, which is to say it learned almost nothing.

Python NumPy Pandas from scratch

details
  • No scikit-learn in the model — the cost function and both partial derivatives are hand-derived, StandardScaler is the only thing borrowed, and only because unscaled age dominates the gradient and skews the cost surface.
  • 75.82% accuracy against a 75.63% majority-class baseline. Recall 2.35%: it found 27 of 1,148 deaths. On the metric that matters clinically it had learned almost nothing.
  • Diagnosed rather than buried: severe class imbalance, no class weighting, threshold left at 0.5. Written up in the README as unsuitable for clinical use, because it is.

education

—

University of Warwick

BSc (Hons) Computer Science

—

Cadbury Sixth Form

A-levels: A*A*A*A*A* — Mathematics, Further Mathematics, Computer Science, Physics, EPQ

UKMT Senior Mathematical Challenge 2023 — Gold · Further Mathematics Academic Excellence Award

contact

joshbeira@gmail.com

Always interested in opportunities, collaborations, and interesting conversations.