Kalman Filter Model for NCAA Basketball

The model behind the NCAA Kalman ratings, for both the men's and the women's Division I, is the one developed for the NBA in 2011, with two modifications. The first concerns the time between games, and the second concerns what happens between seasons. The idea itself is simple. Every team has a hidden strength that drifts over time. The strengths are never seen directly, only the scores of the games, which depend on the difference between the two teams' strengths plus quite a lot of randomness. The Kalman filter turns the stream of scores into running estimates of the strengths, together with a measure of how uncertain those estimates are.

College basketball adds a twist that the NBA does not have to the same degree. Every spring, players graduate, enter the transfer portal, or leave for the professional ranks, and new freshmen arrive in the fall. A team that was excellent in March can look very different in November. The model therefore lets team strengths change more between seasons than during them. The men's and the women's competitions use the same model, with parameters estimated separately for each.

State-space model

Consider a league of \(n\) teams. The state of the league at time \(t\) is the vector \(\mathbf{x}_t \in \mathbb{R}^n\), whose element \(x_t(i)\) is the strength, or rating, of team \(i\). The strength of a team depends on players developing and declining, injuries, roster changes, coaching, and plenty of intangibles. Instead of modelling any of these explicitly, the model treats their combined effect as random noise:

\[ \mathbf{x}_t = \mathbf{x}_{t-1} + \mathbf{w}_t, \qquad \mathbf{w}_t \sim N(\mathbf{0}, \mathbf{M}_t). \tag{1} \]

There is no trend: the best guess for tomorrow's strength is today's strength. In the thesis, \(t\) counted the game days of one NBA season and \(\mathbf{M}_t = \sigma_w^2 \mathbf{I}\). Each season was analysed on its own, starting with every team at the same level.

College teams play two or three times a week from November to March and then not at all for seven months. The NCAA model therefore measures time in calendar days and adds an extra change at the start of each season:

\[ \mathbf{M}_t = \operatorname{diag}\bigl(m_t(1), \ldots, m_t(n)\bigr), \qquad m_t(i) = \sigma_w^2\, \Delta_t(i) + \sigma_J^2\, \mathbf{1}\bigl[\text{team } i \text{ starts a new season}\bigr]. \tag{2} \]

Here \(\Delta_t(i)\) is the number of days since the previous game of team \(i\), \(\sigma_w^2\) is the variance of the change in team strength per day, and \(\sigma_J^2\) is the variance of the extra change between seasons. During a season, each rating is a Brownian motion in calendar time. Over the summer, it also takes a jump whose size reflects roster turnover.

This is a natural extension of the thesis that noted that a multi-season analysis could instead carry the final ratings over and increase their variance during the off-season. That is what the NCAA model does. Duke and Kansas among the men, or UConn and South Carolina among the women, start every season as strong teams, but with more uncertainty than they ended the previous one.

The ratings are observed only through game scores. In a game between teams \(i\) and \(j\), the observation \(y_t\) is the point differential, i.e., the points scored by team \(i\) minus the points scored by team \(j\):

\[ y_t = x_t(i) - x_t(j) + \mu \cdot h_t + v_t, \qquad v_t \sim N(0, \sigma_v^2). \tag{3} \]

Here \(\mu\) is the home-court advantage. In college basketball, about one men's game in ten and one women's game in fifteen is played on a neutral court, including the early-season tournaments, many conference tournaments, and the whole NCAA Tournament. So \(h_t = 1\) if team \(i\) plays at home and \(h_t = 0\) on a neutral court. The noise term \(v_t\) collects everything else that affects a single game, such as luck in shot making and foul trouble. The noise terms of different games are independent of each other and of the changes \(\mathbf{w}_t\).

Two properties follow directly. First, the ratings are measured in points, because the point differential on the left-hand side is in points. Second, only differences of ratings are observed. Adding the same constant to every rating changes nothing, so the absolute level is a matter of convention. Here every team starts from zero when it first appears in Division I.

Kalman filter

The Kalman filter estimates the state recursively, one game at a time. After the games up to time \(t\), everything known about the ratings is summarized by the estimate \(\hat{\mathbf{x}}_{t|t}\) and its covariance matrix \(\boldsymbol{\Sigma}_{t|t}\). The diagonal of \(\boldsymbol{\Sigma}_{t|t}\) tells how uncertain each team's rating is. The off-diagonal elements tell how the errors of different teams' ratings are linked. When a team first appears, it gets rating 0 and variance \(\sigma_0^2\), uncorrelated with everyone else.

Each game then involves two steps. In the prediction step, the ratings stay where they are, but they become more uncertain with time, and much more uncertain over a summer:

\[ \hat{\mathbf{x}}_{t|t-1} = \hat{\mathbf{x}}_{t-1|t-1}, \qquad \boldsymbol{\Sigma}_{t|t-1} = \boldsymbol{\Sigma}_{t-1|t-1} + \mathbf{M}_t. \tag{4} \]

The predicted point differential and its variance are

\[ \begin{aligned} \hat{y}_t &= \hat{x}_{t|t-1}(i) - \hat{x}_{t|t-1}(j) + \mu \cdot h_t, \\ O_t &= \Sigma_{t|t-1}(i,i) + \Sigma_{t|t-1}(j,j) - 2\,\Sigma_{t|t-1}(i,j) + \sigma_v^2. \end{aligned} \tag{5} \]

The variance \(O_t\) has two parts: the uncertainty about the difference of the two ratings and the randomness of a single game. The winning probability of team \(i\) is \(\Phi(\hat{y}_t / \sqrt{O_t})\), where \(\Phi\) is the standard normal cumulative distribution function.

In the update step, the score is compared with the prediction and the estimates are corrected:

\[ \begin{aligned} d_t &= y_t - \hat{y}_t, \qquad \mathbf{K}_t = \boldsymbol{\Sigma}_{t|t-1} \mathbf{C}_t^{\top} O_t^{-1}, \\ \hat{\mathbf{x}}_{t|t} &= \hat{\mathbf{x}}_{t|t-1} + \mathbf{K}_t d_t, \qquad \boldsymbol{\Sigma}_{t|t} = \boldsymbol{\Sigma}_{t|t-1} - \mathbf{K}_t O_t \mathbf{K}_t^{\top}. \end{aligned} \tag{6} \]

Here \(\mathbf{C}_t\) is the schedule row with \(+1\) for team \(i\), \(-1\) for team \(j\) and zeros elsewhere. The innovation \(d_t\) is the prediction error, i.e., the actual point differential minus the expected one. The Kalman gain \(\mathbf{K}_t\) decides how much the ratings move and in which direction. The two teams move in opposite directions. Other teams move as well if their ratings are correlated with either of them. Correlations build up within conferences, where teams play each other repeatedly. If one conference's teams keep winning their non-conference games, the whole conference moves up, including teams that did not play.

The behavior of the filter is easiest to see when the two teams have equal prior variances \(\sigma^2\) and correlation \(\rho\). Then (6) reduces to

\[ \hat{x}_{t|t}(i) = \hat{x}_{t|t-1}(i) + \frac{d_t}{2 + r^2}, \qquad \hat{x}_{t|t}(j) = \hat{x}_{t|t-1}(j) - \frac{d_t}{2 + r^2}, \qquad r^2 = \frac{\sigma_v^2}{(1-\rho)\,\sigma^2}. \]

The ratio \(r^2\) compares the noise of a single game with the uncertainty of the ratings. In March, after 30 games, \(\sigma^2\) is small, \(r^2\) is large, and a single upset moves the ratings only a little. In November, the season jump has made \(\sigma^2\) large, \(r^2\) smaller, and the first games of the season move the ratings much more. This is how the model learns quickly which teams have succeeded in recruiting new players.

Estimation of the model parameters

The model has five parameters, \(\boldsymbol{\theta} = (\sigma_0^2, \sigma_w^2, \sigma_J^2, \sigma_v^2, \mu)\), listed in Table 1. The initial variance \(\sigma_0^2\) is fixed at 1000, a standard deviation of 32 points: before its first game, a team could be almost anything. The other four are estimated by the maximum likelihood method of the thesis. Given the games so far, the next point differential is normally distributed with the mean and variance (5). The log-likelihood is therefore a sum over games:

\[ \ell(\boldsymbol{\theta}) = -\frac{1}{2} \sum_{t} \Bigl( \log(2\pi O_t) + \frac{d_t^2}{O_t} \Bigr), \qquad \hat{\boldsymbol{\theta}} = \arg\max_{\boldsymbol{\theta}} \ell(\boldsymbol{\theta}). \tag{7} \]

Each evaluation of \(\ell\) means running the filter through every game. The standard errors come from the curvature of \(\ell\) at its maximum, as in the thesis.

The thesis estimated a new parameter vector for each NBA season of 1,230 games. Here one vector is estimated for each competition from the Division I games of the seasons 2002-03 to 2025-26: 126,991 men's games and 123,886 women's games. The season 2001-02 was used only to let the ratings settle. The men's ratings back to 1984-85 and the women's ratings back to 1997-98 use the same values.

Table 1. Parameters of the model and their values for the NCAA men's and women's ratings. \(\sigma_0^2\) is fixed and the others are maximum likelihood estimates (standard errors in parentheses). The thesis's NBA estimates for 2005–2010 are shown for comparison.
ParameterInterpretationNCAA menNCAA womenNBA (thesis)
\(\sigma_0^2\)Uncertainty of a team's first rating100010006.88–25.53
\(\sigma_w^2\)Uncertainty of the change in team strength per day0.0192 (0.0030)0.0566 (0.0043)0.0000–0.0917
\(\sigma_J^2\)Uncertainty of the change between seasons10.79 (0.98)12.40 (1.37)—
\(\sigma_v^2\)Uncertainty of the point differential of a game109.07 (0.47)120.73 (0.54)127.08–133.99
\(\mu\)Home-court advantage (points)3.30 (0.03)3.08 (0.03)2.72–3.37

The NBA \(\sigma_w^2\) is per game day and its \(\sigma_0^2\) is a per-season restart, so those two columns are not directly comparable.

The estimates have intuitive interpretations. For the men, the variance of the change in team strength over a season of about 150 days is \(150 \times 0.0192 \approx 2.9\), i.e., about \(\pm 1.7\) points. Over the off-season of about 215 days, it is \(215 \times 0.0192 + 10.79 \approx 14.9\), i.e., about \(\pm 3.9\) points. For the women, the same figures are \(150 \times 0.0566 \approx 8.5\) (\(\pm 2.9\) points) and \(215 \times 0.0566 + 12.40 \approx 24.6\) (\(\pm 5.0\) points). Women's team strengths therefore change more, both during a season and between seasons. Over a full year, 84% of the men's change and 74% of the women's change happens between seasons, which is what roster turnover would suggest. Both season jumps are close to the thesis's start-of-season variances (6.88–25.53), which played the same role in the NBA.

The random variation of a single game has a standard deviation of \(\sqrt{109.07} \approx 10.4\) points for the men and \(\sqrt{120.73} \approx 11.0\) points for the women, both smaller than the 11.3–11.6 of the NBA. One plausible reason is that college games are 40 minutes long instead of 48, leaving fewer possessions for random events to accumulate. The home-court advantage, 3.3 points for the men and 3.1 for the women, is close to the NBA's.

The season jump is clearly supported by the data. Its estimate is eleven standard errors from zero for the men and nine for the women. For the men, the filter predicts the winner correctly in 72.9% of the games without the jump and in 73.3% with it. The difference looks small, but over 127,000 games it means about 470 more correct predictions.

Previous
Previous

Kalman Filter Model for European Club Competitions

Next
Next

EuroLeague test