Kalman Formulas

The basic formula for updating Team A's Offensive Rating (ORA) is this:


ORA+:	Updated estimate of team A's offensive rating
ORA-:	Prior estimate of team A's offensive rating (before the game)
KORA:	Kalman weight for updating the Offensive Rating of Team A
	= se2/(se2+sG2)
ORA,G:	Actual offensive rating of Team A in the game
DRB-:	Prior estimate of team B's defensive rating (before the game)
R:	League average offensive rating
se2:	Variance of the predicted offensive rating (fixed on 11/16/97)
	= [Var(ORA)-Var(DRB)- + ORA-ORA-Var(DRB)-+DRB-DRB-Var(ORA)-]/R2
sG2:	Variance of the offensive ratings in games
	= 100 to 150 usually

This formula essentially takes the original estimate (ORA-), then changes it by comparing how Team A actually did (ORA,G) to how they were predicted to do (ORA-DRB-/R) It changes it only so much as the Kalman weight (KORA) says it should. This Kalman weight is found from comparing the variance of the predicted rating to the variance of ratings from game to game. In other words, it acknowledges that there is noise in basketball games (sG2) and that there is noise in our predictions (se2); it then gives relative weight to our prediction and to the score according to the amount of noise in each of them.

The variance of the offensive rating estimate is updated according to

Var(ORA)+ = (1-KORA)Var(ORA)-

The uncertainty in the estimate decreases with every piece of information. This equation honors this. It also decreases the uncertainty most when any game is very certain to produce a "true" result. Of course, there is no such game that does this, which is why KORA is usually pretty small.

1997, L. Dean Turcoliver