ezPM ratings are back!

(If you want to get on with Christmas and stuff, you can read this later, and just check out the new ezPM link at the top of the page.)

It's taken me several months to re-code my play-by-play parser since Basketball-Value.com is no longer being updated (i.e. since Aaron Barzilai was hired by the 76ers). The cool part is that now I can make updates faster. I also have more data available to put in the model. Every play (or event) in my database has a lot of information associated with it that can be queried. To illustrate, here's a typical field goal attempt (it should be pretty straightforward to follow each field):

	"Lakers" : [
		"Steve Blake",
		"Kobe Bryant",
		"Antawn Jamison",
		"Pau Gasol",
		"Jordan Hill"
	"Warriors" : [
		"Stephen Curry",
		"Klay Thompson",
		"Richard Jefferson",
		"Carl Landry",
		"David Lee"
	"_id" : ObjectId("50d802605bca6d03c1008ad6"),
	"as" : 24,
	"away" : "Warriors",
	"block" : "Jordan Hill",
	"coords" : {
		"x" : 2,
		"y" : 10
	"date" : "2012-11-09",
	"distance" : 4,
	"espn_id" : "400277800",
	"event" : "Jordan Hill blocks a Stephen Curry driving finger roll shot from 4 feet out.",
	"home" : "Lakers",
	"hs" : 27,
	"made" : false,
	"opponent" : "Lakers",
	"pid" : 142,
	"q" : 2,
	"release" : "driving finger roll shot",
	"season" : "2013",
	"shooter" : "Stephen Curry",
	"t" : "9:22",
	"team" : "Warriors",
	"type" : "fga",
	"url" : "http://scores.nbcsports.msnbc.com/nba/pbp.asp?gamecode=2012110913",
	"value" : 2

Here's an example of a turnover (you'll see the fields are somewhat different, because it's a different type of event):

	"Suns" : [
		"Goran Dragic",
		"Jared Dudley",
		"P.J. Tucker",
		"Luis Scola",
		"Marcin Gortat"
	"Warriors" : [
		"Stephen Curry",
		"Jarrett Jack",
		"Klay Thompson",
		"David Lee",
		"Andrew Bogut"
	"_id" : ObjectId("50d801f85bca6d03c1001113"),
	"as" : 46,
	"away" : "Warriors",
	"date" : "2012-10-31",
	"espn_id" : "400277730",
	"event" : "Stephen Curry with a bad pass turnover: Bad Pass",
	"home" : "Suns",
	"hs" : 36,
	"opponent" : "Suns",
	"pid" : 195,
	"player" : "Stephen Curry",
	"q" : 2,
	"season" : "2013",
	"t" : "3:39",
	"team" : "Warriors",
	"tov_type" : "Bad Pass",
	"type" : "tov",
	"url" : "http://scores.nbcsports.msnbc.com/nba/pbp.asp?gamecode=2012103121"

Anyway, after doing all this, I can now get back to routinely calculating my various metrics, and hopefully, making them even more informative in the future. For example, here are a couple of things I'm working on for a future iteration of ezPM:

  • Change value of a rebound depending on the floor location and type of release. For example, if the offense tends to have a higher OREB% after a missed layup attempt, than the value of a defensive board in that situation should be higher.
  • Similarly, a player might be debited less for a missed layup attempt, since the offense has a better chance of securing the rebound.
  • Another change that I've been wanting to make for a while is to make the value of a possession dependent on the starting state. For example, possessions started after a steal, defensive rebound, or made basket, tend to have different expected values. This should be accounted for wherever the model uses PPP.

Leave a Reply