π

Jayden Shi · Statistics & Computer Science

Building things around problems that interest me.

Selected work below ↓

Chess board position showing engine candidate move with green arrow indicating pawn move from h5 to h4

I've always enjoyed chess, so why not build an engine to play for me?

I set out to build a chess engine in 2021, using Unity Engine and C#. Initially, it was only able to analyse a few hundred positions a second, and could barely look a few moves into the future. At this level, the engine wouldn't be competitive against even the weakest human players.

Years of reading and experimentation later, Stickshark was born. Using a combination of many optimisation techniques, it's now able to analyse millions of positions a second, often searching 20+ moves into the future for critical lines.

Stickshark is always online on Lichess, feel free to challenge it anytime!

Challenge the engine!

Stickshark is currently rated ~2000 for Bullet and Blitz time controls on Lichess

Kalman filter visualization

To teach myself the basics of data analysis and machine learning, I started this project which looks to predict the outcome of professional mens tennis matches. Above: Stochastic model of player skill implemented via the Extended Kalman Filter. I aimed to improve upon traditional outcome-based skill-rating systems such as Elo and Glicko-2.

Learn more
Feature permutation analysis

My best performing model is an XGBoost classifier with engineered player and match level contextual features. It achieves a test accuracy of 66.6% and a mean test log loss of 0.604. Left: Permutation importance scores for each feature, where a larger increase in log loss indicates greater importance assigned by the model.

Learn more
Transitive relationship diagram

Image source: A common-opponent stochastic model for predicting the outcome of professional tennis matches by Knottenbelt, Spanias, and Madurska (2012).

I also experimented with alternative models, including a transitive approach that leverages common opponents between two players to estimate point-winning probabilities. These point level probabilities are then converted into match win probabilities via direct computation using dynamic programming.

Learn more
Betfair data viewer

Through data processing, model development and backtesting, I've rediscovered the foundational principle that a model is ultimately bounded by the quality of data. And as a student with no access to the rich proprietary data bookmakers and betting sydicates do, beating the markets with pure predictive power stands to be a delusional dream. Next, I plan to study HFT style execution and apply these algorithms to sports betting exchanges. Above: A custom order book visualiser.

qf experiments

mathematics / quantitative finance

First Streamlit app screenshot

This is a streamlit application I built to help me understand portfolio hedging through a betting game framework. The game is based on a sequence of coin flips, where custom bets pay out depending on how many heads have appeared at each stage. Given a portfolio of bets on a sequence of coin flips, the app explores the space of possible allocations to identify optimal bets.

Try the app!
Second Streamlit app screenshot

To deepen my understanding of option pricing fundamentals, I explored the Binomial Option Pricing Model. This application reinforces the core concepts and generates visual option trees for both European and American style options, making the pricing mechanics more intuitive.

Try the app!

question bank

Full-stack Web Application

Question bank application screenshot showing problem list interface

Over the years as a student, I’ve learned that revision is essential to meaningful learning. This is especially true in problem solving, where success depends on transferring known patterns to unfamiliar domains. While flashcard apps like Anki are effective for memorisation, they are less suited to reinforcing conceptual links and problem solving intuition. I built this app to streamline the revision process for students by automating the question selection process.

Question bank application second screenshot

The review processed is powered by a spaced repetition engine, where it calculates the time until next review based on an estimated mastery of the question.

Question bank application third screenshot

After reviewing a question, you can add a reflection and rate its difficulty. This rating updates the system’s estimate of your mastery and determines when the question will be scheduled for review next.

Let's work together