Approximating Skills of Table Tennis Players Using Normal Distribution. Introduction

This post is part 1 of the "Approximating Skills of Table Tennis Players Using Normal Distribution" series:

  1. Approximating Skills of Table Tennis Players Using Normal Distribution. Introduction
  2. Mathematical Model for Player Ranking

The idea struck me during a friendly table tennis tournament. We had a marathon of matches to rank ourselves by skill, and somewhere in the middle of all those games, a question popped into my mind: How can we estimate players’ skill levels \(\mathcal{S}\) using just the game outcomes \(\mathcal{D}\)? Ideally, without needing to play \(O(n^2)\) matches (where everyone plays against everyone).

Table tennis

Credit goes to joshua_hoehne on Unsplash

Here are a few things I noticed:

  1. Each player has their own skill level — some are better, and some are worse.
  2. Game results aren’t always predictable. Even skilled players occasionally lose to less skilled ones.
  3. When two players have similar skill levels, matches tend to be close. Scores like \(3-2\) in a \(5\)-game series are common. On the other hand, players with big skill gaps end matches with scores like \(5-0\) or \(4-1\).
  4. Some players are inconsistent — they might win \(5-0\) one day and scrape by with \(3-2\) the next, even against the same opponent.
  5. Finally, there’s always a clear winner and loser. No draws here — someone has to win (fortunately, as it makes all the modeling much easier).

With these observations in mind, an idea was born: why not model player skills with normal distributions? Each player could have their own mean skill level and variation (scale). Using this, we could calculate the probability of different game outcomes as the chances of one player’s distribution generating a higher skill value than the other’s. This way, we can rank players by the means of their distributions, effectively sorting them by expected skill.

Here’s how we’ll approach it:

  1. During each game, a player “shows” a skill level \(s_i\), which comes from a random variable \(S_i\).
  2. The exposed skills of the two players in a game are independent (though, this is an oversimplification). In reality, some players have “awkward” opponents due to style matchups, mental pressure, or who knows what else.
  3. The player with the higher exposed skill wins. Simple rule: if \(s_i > s_j\), then player \(i\) beats player \(j\).
  4. Player skill distributions are modeled as normal distributions with specific parameters for each player: \(S_i \sim \mathcal{N}(\mu_i,\,\sigma_i^2)\,\).
  5. Using this model, we can calculate the probability of player \(i\) beating player \(j\) as \({P(S_i > S_j)}\).

Before diving into the math and the Python code, here are a few disclaimers.

First, this problem isn’t entirely new. Systems like Elo have already tackled similar problems, using comparable observations and assumptions. However, Elo doesn’t account for differences in scales — meaning how consistent or inconsistent players are with their performances.

Second, I’m pretty sure someone out there has already tried this exact idea of modeling players’ skills with both means and scales. But I resisted diving into existing literature or solutions; I wanted to figure it out myself for the fun of it (which is the best driver in my opinion).

In the next post, I’ll share the math behind this model and later show how to implement it in Python.

Mathematical Modeling Normal Distribution Player Ranking Table Tennis