The most significant change was to how I weight the games to calculate the daily rankings. My current approach was to weight all games played within the last 28 days equally. I now have a more methodologically sound weighting approach that also does a better job at predicting how the betting market sets the run totals and moneylines.
Games are now weighted as follows:
weight = 1 / (1 + d)
Where "d" equals the number of days elapsed since the game was played. If the game was played a week ago, it gets a weight of 1/8. I was able to derive this weighting approach by assuming that each team's RAA metric (Runs Above Average) moves randomly day to day according to a normal distribution with mean zero (the standard deviation was derived via trial and error). The Black Scholes equation for pricing stock options makes a similar assumption about stock price movements.
A key feature of this new weighting approach is that all games are counted, going back to the beginning of the season. This has some mathematical advantages in that my prior approach required some additional manipulation when the 28 days of games didn't include any inter-league games. I plan on using this approach for all of my future sports rankings. I believe it will allow me to pitch my one-off Elo-style rankings I had to use for college basketball.
Time permitting, I plan on a separate post explaining the new methodology and its theoretical underpinnings in more detail.
In addition to the weight changes, there were a couple minor changes:
- Pythagorean exponent: I am now using 1.50 instead of 1.75, as that appears to better match the Vegas moneylines. Using a 1.75 exponent led to overconfident game probability estimates.
- Team Defense Rankings: These average the team's starting pitcher rankings, using games started over the past 28 days as weights. I now smooth these out a bit to avoid jumpiness when a strong pitcher happens to have 6 games or 4 games in the 28 day window.