Projects

Scenario Builder

I am currently working with The Fizz, a start-up that have partnered with the Sustainability Accelerator at Chatham House. We're working on a project to create positive visions of future worlds. If you'd like to read more about the project, you can find write-ups from both Chatham House's Sustainability Accelerator here and from the futurist David Bent here.

Contact me if you are interested in a demo or a walkthrough of the scenario-building workflow and supporting research, or read my blogs about future thinking both here and here.

A preview of the tool and the output.

Building alternative futures

Mission Statement

Traditional approaches to the future are stuck in familiar sets of assumptions. We need new tools to help us break free.

Scenario builder

Design your scenario

Define signals and seeds of the future and set parameters for generation.

Generate a sample short story

Press the button to watch the tool draft a story from a future world.

Click the button to generate a sample scenario.

Machine learning capstone

Exploring Bayesian Optimisers

Bayesian optimisation and Gaussian Processes.

From 2025 to 2026, I completed a Machine Learning course at Imperial College in order to develop my ML skills. One of the required outputs was a black-box optimisation (BBO) challenge, which involved optimising eight functions. Each function took a continuous input vector and returned a single output score. We had no information on the functions except for a series of previous inputs and output.

A classic problem in both machine learning and life is the explore-exploiit trade-off. Is it worth listening to a new album that you might enjoy, or relistening to an old album that you know you love? This project offered a gamified way of thinking about that trade-off. Should we explore new areas or exploit areas that already seemed promising?

There are plenty of scenarios where these decisions matter in the real world. Let's say we could send ten robots to Mars because we want to drill and collect a sample. Where should we land these robots so that our last robot gives us the highest possible yield of our sample? To give a more concrete example, choosing the hyperparameter settings of a neural network can be modelled in this way.

Play the Game.

If you're interested in the technical side, you can read the notes below or you can see the entire code on my GitHub. But to make this more fun, I also built a small browser game where you too can try to beat a Bayesian Optimiser.

In the game, the player and a Gaussian-process optimiser search the same hidden two-dimensional landscape. The player chooses points manually. The optimiser chooses points using different strategies. At the end, the shape of the landscape is revealed.

This demo is simpler than what a real project in this space might involve. Firstly, it's two-dimensional, so you can actually see the landscape - everything is harder in more dimensions! Secondly, it uses a lightweight Gaussian process rather than a full BoTorch workflow. But the game is just to give you a flavour of the project.

Play the Bayesian optimisation gameBayesian optimisation game preview

Technical note

The model uses a Gaussian process with an additive linear plus Matérn kernel, and output transformations such as Box-Cox, sign-flipped Box-Cox, or Yeo-Johnson where useful. The functions were small-data, continuous, and expensive to query, so a Gaussian process was a natural starting point.

Once the surrogate is fitted, the pipeline generates a mixed pool of candidate points:

  • Global Sobol samples, designed to preserve broad coverage of the search space.
  • Trust-region candidates, concentrating search around the current most promising area.
  • Elite-region candidates, which look around several of the best observed points, preserving promising alternatives.

Each candidate is then scored using several acquisition-style signals, including expected improvement (EI), log expected improvement (logEI), probability of improvement (PI), upper confidence bound set with a range of betas (UCB), Thompson-style scores, posterior uncertainty, and novelty.

Go to the Model Card

Personal tool

Reading River

Reading River is a way to lower the pressure to read everything. It is aimed at people who spend a lot of time reading, and who want to make calmer choices about what to read next.

The core idea is that your reading list should be more like a river than a bucket. You wade in at a spot, grab something you want to read, and then let the rest keep moving.

The Philosophy and How It Works

Things often seem much more important than they are when we see them for the first time. Letting things sit lets us better assess how worthwhile they are. The Reading River can also send out an email including items from your River, creating a small personal newsletter curated by you.

If you set how long you have to read, it first winnows your list down to pieces that fit that time, falling back to shorter options if needed. Then it sorts by a simple equation that considers priority, reading time, and age.

If you'd like to join the Reading River beta, just drop me an email saying you'd like to try it and I'll get back to you.

Sign up for the Reading River