CJ Turtoro @cjtdevil.bsky.social · 13hxGs As of right now, most public models do not include blocked shots in xG models. Which is a defensible decision in some but not all situations. And you lose some important info, like how many xGs a Dman prevented by blocking those shots. 110
CJ Turtoro @cjtdevil.bsky.social · 14hI started writing for SB Nation 14 years ago. Which I think makes me 189 years old. 010
CJ Turtoro @cjtdevil.bsky.social · 14hBut I'm not convinced yet. It's decent but I keep tweaking it and the weirdness just keeps moving to different things. Plus I certainly haven't addressed the sampling bias in only using goal replay XYs. 000
CJ Turtoro @cjtdevil.bsky.social · 14hFWIW, I used ~600 NHL EDGE tracking pairs and built a two-component log-normal mixture in depth along the net-to-block ray (a stick-on-stick spike whose weight is logistic in distance, plus a lane term), with Gaussian lateral spread growing with depth. Value = calibrated E[xG] over the density. 100
CJ Turtoro @cjtdevil.bsky.social · 17hYeah I wanted to do something that didn't involve using private data to validate and then after seeing Matt's animations I realized that there's PROBABLY enough in there to at least get started. Sampling bias and all, but still pretty good. And the bias is bit removed from the thing we're measuring. 010
CJ Turtoro @cjtdevil.bsky.social · 18hOoh fun I either didn't know it forgot you had attempted this too! Yeah the positional adjustment was one of the most impactful pieces. I have a few models with various different ideas running rn so we'll see which one tests out best.. 100
CJ Turtoro @cjtdevil.bsky.social · 19hHT to @thebucketless.bsky.social for the groundwork on blocked shot location estimation, and @mattdonders.com for code on XY scraping. 000
CJ Turtoro @cjtdevil.bsky.social · 19hI used EDGE tracking data from the NHL gamecenter animations to find the location of blocked shots preceding goals in order to train a model to determine what the likely location of a blocked shot would be. You can see the model's results here: claude.ai/artifact/6Jr...claude.aiClaude ArtifactTry out Artifacts created by Claude users 331
CJ Turtoro @cjtdevil.bsky.social · 28/09/2026Edvinsson is a pretty rare case of a shot blocking enforcer that is actually a very good player due to his complete D game which extends to protecting the blueline and playing competent offense. I'm sure a ton of teams would love a 23yo like this. 031
CJ Turtoro @cjtdevil.bsky.social · 26/09/2026It's all just NHL pbp, Corey's A3Z, and my models. Working on getting access to some other stuff but I'm not optimistic lol 001
CJ Turtoro @cjtdevil.bsky.social · 08/01/2026I agree. But if we're just talking goalie, a couple of those shots weren't actually tough. Like the Barzal CHANCE was great, but the GOAL was on the totally wrong side of the net and Markstrom was so out of position it didn't matter. 000
CJ Turtoro @cjtdevil.bsky.social · 07/01/2026Did it LOOK like it? IMO, yes. Did it FEEL like it? Definitely no. And I suspect most people would disagree with my answer to the first because of my answer to the second. 110
CJ Turtoro @cjtdevil.bsky.social · 07/01/2026Good lord. I say that in response to the results of this game. Not your non-zero-indexed, asymmetrically saturated color formatting. 150
CJ Turtoro @cjtdevil.bsky.social · 07/01/2026Moneypuck had it as the largest by a pretty comfortable margin lol (they could only check games w/o a goalie change tho) 231
CJ Turtoro @cjtdevil.bsky.social · 07/01/2026I think it's a little that he's Luke HUGHES and the understanding was that $9M may have been a bit of an overpay but it was a wink wink that we'd end up with Quinn so, fine. Now it's a MASSIVE overpay, and Quinn is in Minnesota. 110
CJ Turtoro @cjtdevil.bsky.social · 07/01/2026@evolvingwild.evolving-hockey.com can you run a query for me real quick? What is the largest gap in GSAx between teams in one game on record. Where does tonight's NJD-NYI match land? 040
CJ Turtoro @cjtdevil.bsky.social · 06/01/2026This graph of yours went a bit viral over on the other place because it's objectively hilarious. x.com/CJTDevil/sta... 1252
CJ Turtoro @cjtdevil.bsky.social · 05/01/2026Like this movement of shots to right up on the doorstep seems VERY likely to inflate xGs somewhat dramatically. And yes intuitive to me. Human trackers generally had a bias towards the middle of the OZ it seems. bsky.app/profile/cjtd... 100
CJ Turtoro @cjtdevil.bsky.social · 05/01/2026I think weighting shot types in general to historic averages is a worthy enterprise for estimating impact of automating shot type classification (some may push xGs lower, after all). But we're talking a 10%+ overprediction on the twins' xG model this season. That's why I think warping is bigger. 100
CJ Turtoro @cjtdevil.bsky.social · 05/01/2026I think ALL shot types definitely need a look, but based on those shooting percentages I'm not sure I think this is as big of a deal as the coordinate warping is. 100
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026A reasonable philosophical assumption, but my entry point to this issue was more empirical. I first noticed it in 2023 relative to the previous year so I never really considered that something could've changed BEFORE that. I suppose that may have just been lucky. x.com/CJTDevil/sta... 000
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026How fundamentally differently does yours work? Ik the other models use like 3-4 different algorithms, but all use most of the same "training" data until now (except for Micah). 000
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026Oh oops, I thought it was from 2023-24 one. Oh well, apologies for mischaracterizing it in that thread. But regardless, yeah I think that that probably fixes MOST of the problem. This year seems to be not insubstantially worse than previous years too, and now your model has a few years headstart. 200
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026All good. I don't either, so it's been an education ~48 hours or so lol. 000
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026I agree. This is my full thoughts as it exists rn. I also give you your flowers as been the only site with which I'm familiar that correctly identified the warping and new shotdesignations as the principal issues with the overestimation. threadreaderapp.com/thread/20078...threadreaderapp.comThread by @CJTDevil on Thread Reader App@CJTDevil: Okay so I've talked to several of the modelers about this and I want to just give a sort of public report for posterity on the state of the public xG models and the NHL shot... 100
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026If someone more present on this site than me wants to recreate the thread. You have my permission lol. Just tag me in it. 000
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026Are you talking about the new shot designations now? That's kinda a different issue from the xG warping. 100
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026Apologies for everyone who is not on the other site, but I'm not rewriting the whole thread. Here are my thoughts on the state of the public NHL xG models. threadreaderapp.com/thread/20078...threadreaderapp.comThread by @CJTDevil on Thread Reader App@CJTDevil: Okay so I've talked to several of the modelers about this and I want to just give a sort of public report for posterity on the state of the public xG models and the NHL shot... 175
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026Certain shot locations were systematically over-recorded by humans and now that chips are doing it, there's been a drift. The drift has made some locations more/less dangerous than they seemed before. I'm describing this as "warping of xG fabric". 100
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026This is perhaps more illustrative. The low-slot shots were likely being incorrectly recorded by human trackers and the chips have correctly placed them as right in the crease. Small movement, hugh xG impact. 220
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026I just chose an arbitrary pre-tracking season as a control though, and it looks the way you'd expect. Interestingly their model always seems to underestimate the slot a bit, but it's definitely worse now. 100
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026I'm less convinced that those are of particular importance. It doesn't seem to offer any marginal improvement on the topic. 010
CJ Turtoro @cjtdevil.bsky.social · 04/01/2026Decided to look more at this and these graphs are using @evolving-hockey.com's xG (because they have an excellent query tool that makes it easy). So, while new shot designations are relevant, I think this graph screams that the true culprit was the warped xG fabric of the chip tracking. 483
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026Props to @hockeyanalysis.com for spotting that issue basically immediately and not letting his model drift into nonsensicality 020
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026Yeah so this says to me that, at minimum, we should think of these shot attempts fundamentally differently than other shot attempts. It's not unprecedented -- we already don't count blocks in xGs -- so we may as well bin these as something else. This is why private companies have several models. 220
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026Bah lol yup bsky.app/profile/cjtd... How many xGs was that bad boy 100
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026So on EH's model were under counting by 200/year from 2018-2022 and are overcounting by ~400/year since then with this year already being at 500. So those new shots are big (bigger than I thought tbh) but definitely still a lot of impact from warping. 000
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026Talked with someone in the league office btw and they said this was "largely correct" in determining the changes. So that's nice to know lol 140
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026How many total xGs league-wide are their from these new shot definitions? 200
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026I would say that's very likely to be relevant, though I'm not sure that gets us there. How many more of these types of shots are recorded than before, and how high are their xGs? Cuz almost all of the xG overestimation is from high-xG attempts. 000
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026I was gonna say, I don't think the low-xG noise explains the problem because most of the inflation is 0.2+ bsky.app/profile/dbom... 120
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026Yeah I think it's that your philosophical approach drops old data more readily than the other models and, since the tracking changes began 3 years ago, yours has caught up better than most of the rest of the public sites which are still trained on basically all the data we have. 110
Reposted by CJ TurtoroAaron K @ladyotreesyrup.bsky.social · 02/01/2026Most pbp derived rush timing is several seconds longer than actual rush timing, more evidence some kind of continuous variable stretching 10 seconds or so might be a better proxy for rush chances. Not sure how to deal with the relatively large number of rush chances that are 21+ seconds by pbp 001
CJ Turtoro @cjtdevil.bsky.social · 02/01/2026Yup. I'm sure I'm not the only one. And it's not like these guys didn't notice. But I think many underestimated the potential impact for down the line since xG models seemed to be mostly holding up that year. 010