title: Algorithm to calculate the odds of a team winning a sports match given full history
body: <p>Assumptions:</p>
  
  <ul>
  <li>The teams never change</li>
  <li>The teams don't improve in skill</li>
  <li>The entire history of each team's performance against some subset of other teams is known</li>
  <li>The number of games played between teams is large, but potentially sparse (each team hasn't played each other team)</li>
  </ul>
  
  <p>For example:</p>
  
  <p>I have a long list of match outcomes that look like this:</p>
  
  <pre><code>Team A beats Team B
  Team B beats Team A
  Team A beats Team B
  Team C beats Team A
  Team A beats Team C
  </code></pre>
  
  <p>Problem:</p>
  
  <p>Predict the correct betting odds of any team beating any other team.</p>
  
  <p>In the example above, maybe we conclude that A should beat B 66% of the time. That is based off direct observation and is pretty straightforward. However, finding the probability that C beats B seems harder. They've never played together, yet it seems like most likely that C > B, with some low confidence.</p>
  
  <p>Research I've Done:</p>
  
  <p>I've read a fair bit about different ranking systems for games of skill, such as the Elo and Glicko rating systems for Chess. These fall short because they make assumptions about the probability distributions involved. For example, Elo's central assumption was that the chess performance of each player in each game is a normally distributed random variable. However, according to wikipedia, there are other distributions that fit the existing data better.</p>
  
  <p>I don't want to assume a distribution. It seems to me that with 10,000+ match results on hand that I should be able to either deduce the distribution from the evidence (I don't know how to do this), or use some sort of reinforcement learning scheme that doesn't care what the distribution is.</p>