Hi, I’m Daniel (known as DSMok1 elsewhere), and this will be my first attempt at some fancy Google Visualizations. On my fancy new website.
This viz plots the 5-game TRAILING moving averages for each team in the NBA up through January 4th. It’s a bunch of data; we’ll see if the Google API can handle it. Here we go:
Notes: Efficiencies were adjusted for:
- Opponent (recursively)
- Game location
- Rest days of each team
Here’s an example of some of the data–this is what Miami’s season has looked like:
Game | Adjusted OE | Adjusted DE | Adjusted Margin | Result |
---|---|---|---|---|
10/26/10 @ BOS | -5.6 | -8.5 | 2.9 | L |
10/27/10 @ PHI | 1.4 | -10.3 | 11.7 | W |
10/29/10 vs. ORL | 2.7 | -27.5 | 30.2 | W |
10/31/10 @ NJN | 12.0 | -12.4 | 24.4 | W |
11/02/10 vs. MIN | 15.7 | -7.1 | 22.8 | W |
11/05/10 @ NOH | 3.4 | -0.3 | 3.7 | L |
11/06/10 vs. NJN | -2.0 | -5.4 | 3.4 | W |
11/09/10 vs. UTA | 2.6 | 3.8 | -1.1 | L |
11/11/10 vs. BOS | 17.3 | 18.8 | -1.5 | L |
11/13/10 vs. TOR | 5.4 | 7.7 | -2.2 | W |
11/17/10 vs. PHO | 11.7 | -11.0 | 22.7 | W |
11/19/10 vs. CHA | -6.1 | -4.3 | -1.8 | W |
11/20/10 @ MEM | 8.7 | 5.8 | 2.8 | L |
11/22/10 vs. IND | -21.4 | -1.7 | -19.6 | L |
11/24/10 @ ORL | 6.4 | 9.0 | -2.6 | L |
11/26/10 vs. PHI | 7.8 | 2.7 | 5.1 | W |
11/27/10 @ DAL | -1.6 | 3.1 | -4.7 | L |
11/29/10 vs. WAS | 0.6 | -3.8 | 4.4 | W |
12/01/10 vs. DET | -0.8 | -17.4 | 16.5 | W |
12/02/10 @ CLE | 21.8 | -6.9 | 28.6 | W |
12/04/10 vs. ATL | -4.4 | -15.9 | 11.6 | W |
12/06/10 @ MIL | 3.2 | -9.3 | 12.5 | W |
12/08/10 @ UTA | 21.8 | -0.2 | 22.0 | W |
12/10/10 @ GSW | 10.7 | -11.6 | 22.3 | W |
12/11/10 @ SAC | 3.7 | -15.2 | 18.9 | W |
12/13/10 vs. NOH | 10.7 | -1.8 | 12.5 | W |
12/15/10 vs. CLE | -1.0 | 6.4 | -7.3 | W |
12/17/10 @ NYK | 9.8 | -17.7 | 27.5 | W |
12/18/10 @ WAS | -5.4 | -7.1 | 1.7 | W |
12/20/10 vs. DAL | 3.5 | 2.2 | 1.3 | L |
12/23/10 @ PHO | -7.6 | -23.0 | 15.4 | W |
12/25/10 @ LAL | 5.3 | -20.1 | 25.4 | W |
12/28/10 vs. NYK | 5.6 | -1.7 | 7.2 | W |
12/29/10 @ HOU | 19.8 | 6.8 | 13.0 | W |
01/01/11 vs. GSW | 5.0 | 6.4 | -1.5 | W |
01/03/11 @ CHA | 4.9 | -8.0 | 12.9 | W |
01/04/11 vs. MIL | 11.1 | 0.6 | 10.5 | W |
(For offense, positive is good. For defense, negative is good.)
Again, all of those numbers are adjusted for opponent, location, etc.
Another way to look at this is through a chart. This chart does not show offense and defense, but it does show margin and the result.
Sometimes you play good and lose (say, if you’re on the road vs. a good team on the second night of a back-to-back), and sometimes you play bad and win. Like against Cleveland at home with advantageous rest.
For more on how I adjusted efficiencies, look at the rest-days analysis I conducted at the APBRMetrics forum.
P.S. Welcome to my new stats blog! I will probably not post often (how’s that to inspire confidence!). Primarily I’m putting this together because I post so much stuff elsewhere and wanted a personal repository for my work (who knows when some of the forums may crash?).
Thursday Bolts – 1.6.11 | Daily Thunder.com
[…] of DT’s commenters has made his own stats site and the first post is one of those cool Google motion charts. […]
Daniel
Hey Daniel,
nice work, I like this – especially they way of presentation through Google motion charts.
I have two quick questions to Your method:
– When You adjust efficiency for opponent strength – You take into account their YTD efficiency, or the one from the observed period?
– In order to ‘smooth’ results (Yes, I know it’s moving average, still You see some one-game peaks) weren’t You thinking to use f.ex trimmed mean?
Additionally – how frequently will You update it?
+ will it be possible to see also data for other teams – as presented above for MIA?
DanielM
Thanks, Daniel
I adjusted for opponent over the whole year (it’s the same opponent strength as in my team efficiency rankings). YTD wouldn’t take into account all of the data that we have.
I’ve never dealt with a trimmed mean. How would that be implemented? I used 5 game moving average because people know how that works.
I have the full data in a spreadsheet that’s easy to update; I’ll post the spreadsheet once I clean it up a bit. I don’t know how often I’ll update this, but once the spreadsheet is out there anybody can do it.
Daniel
Hey Daniel,
as for adjusting for strength of opponent – I meant to take level of opponent’s play not from whole season, but from shorter period, which better represents opponents strength during analyzed period.
As we analyze teams during the season their level of play differentiates due to changes of roster, injuries, tanking, etc. so it’s important not to take whole data without f.ex weighting, etc.
As for trimmed mean – I meant here to reject some % of ‘outlier’ observations from calculation of a mean, f.ex. if You analyze 5-game buckets, You can trim observations by 40%, which means that You don’t take into account 2 extreme observations (the highest and the lowest one). Personally I use trimmed means with a little bit higher no. of observations (at least 8).
Still with 5 observations You can f.ex. put some treshold for maximum margin (f.ex. 20 points – which means that if one team will win by 40 points, You take into calculations only 20 points).
DanielM
I don’t really like to adjust for only a segment of play in evaluating opposition, because:
1. The computation requirements are complicated
2. Sample size
I will explore other methods of evaluating besides moving average.