Firstly, the results from 5/9:
Max Pacioretty u1.5 -105 W
Bobby Mcmann o1.5 +110 L
M Tkachuk u2.5 +115 W
Sam Bennet o2.5 -142 L
Forsling o1.5 -182 (1.5 units) L
-3 units with the big Forsling bet. Sizing goes against us yet again. Puts us -4.16 units after 52 plays.
First off, the bets from 5/7: I'm definitely done betting Mcmann overs. There's just something going on that I'm not capturing in the model. The winners were both legit but Bennet only had 2 attempts and was pretty invisible for what I saw from the game. I still think Forsling is a good bet and he had 4 attempts, 2 scoring chances and 28 minutes on the ice, but no PP time. He had an even quieter game last night too, which I didn't get to, with 1 shot on 2 attempts. So I don't know. I made him something like -220 to go over 1.5 shots, and that was good enough for me to make it a 1.5 unit play, so that kind of shows how thin the edges are, perceived or real.
Now for the bigger picture, I do have to admit that I'm running out of steam with these a little bit. I'll probably still get to 100 plays and gun to my head, I do think this model is profitable. But it's starting to not be fun anymore. I keep thinking about the model and ways to improve it, then I realize each bet I'm making is worth something like $3 in expectation, at best, and I start to question the whole thing. I don't think it's quite the best use of my time as possible, but then again, can I really throw in the towel and admit that I can't beat Shots On Goal props? So I'm torn, as you can see.
I'm going to get under the hood here and discuss the model. It occurred to me that it's ridiculous to treat it as some big secret. It's a shots on goal model that I made in a few hours and doesn't even have any track record of success yet. So it's not like I'm giving up some big edge. Maybe, worst case, there's someone out there reading this like me 15 years ago who might get some kernel of information that might help them with their own model. And if that is the case, good for you. I'm happy to help.
Anyway, the model is, like I said, pretty simple. The main stat I'm looking for is Shots per minute. So what I do is (using the current season and counting playoff games as two games) get each teams Shots Allowed (SA) per minute at even strength and Short Handed (SH), and their average time on ice per game for even strength, power play, and short handed. I do the same thing for the entire league to get league averages. I then normalize the teams for each other, meaning I do something like Team X shots against per minute at even strength divided by the average team SA per minute at even strength, multiplied by the opponent average SA per minute at even strength. So if a team gives up less shots per minute than the average team, you would expect their opponent to get less shots per minute than average, and vice versa. I do the same thing for short handed. So now I have each teams expected shots against per minute at even strength and short handed, normalized for each other. This part of the model feels solid to me.
Next we have to get time on ice. I'm looking for expected time on ice for each team at even strength, PP and SH, against each other. This is tricky. In my old model, I made it a function of penalties drawn and taken, which you then have to turn into PP time. You have to consider penalties taken at the same time, too. For this model, I just used PP and SH time per game. So if a team spends a lot more time than average on the PP, the model will assume its opponent will spend more time than average short handed. This is the part of the model I'm always thinking about. It doesn't feel exactly right but it does seem good enough, to me anyway. If a team spends more time than average on the penalty kill, it would stand to reason that whoever they're playing will spend more time than average on the power play.
Anyway, once I have each teams expected time on ice in each situation, I go player by player, running their stats into the model. I get each players shots per minute at even strength and on the PP and run that against the opponent, so I have each players expected shots per minute against the opponent. Then I run that against their expected time on ice at even strength and PP, then just add those two numbers up. To get their expected PP time, I use their PP share, or what percentage of a teams power play the player was on the ice for during the season. I throw in shots per game while on the penalty kill for guys that kill penalties, but that number is always tiny. I give a little 3% bump to the home team and a 3% penalty to the away team, and I've now got a number for his total expected shots. You put that number in a poisson calculator up against the bet that's being offered, and it'll show you if you have an edge or not. If the game is a heavy favorite against a big dog, I'll generally stay away from over bets on the favorite and under bets on the dog, just because of scoring effects. But since I'm not even betting every day, I generally just stay away from games that have big favorites/dogs.
So that's really it. The idea behind it, in a very general sense, is that we're looking for teams that give up a lot or a little shots per minute compared to the average team. By doing it per minute and breaking down special teams, we can potentially find teams that, say, take a lot of penalties and are playing a team with a guy that gets a lot of shots on the power play. Or vice versa. Say you're pricing a player who gets a big chunk of his shots on the PP. If he's playing a team that spends a loss less time SH than average and/or gives up a lot less shots per minute while SH, you would expect said player to have a lower shot total than if he was playing an average team.
Some improvements could obviously be made. I could use Shot Attempts instead of Shots, and turn those back into Shots. That's what I did in my old model but it was so clunky and with over 90 games now, corsi and shots are pretty much the same thing anyway. I think the most glaring problem with the model though is the way I come up with expected time on ice for PP and SH. I have read everything possible, thought about it for way longer than I care to admit, and I just can't come up with a better, feasible way. I guess the best way would be to get that teams expected lineup, each players expected time on ice, and each players expected penalty taken and drawn and normalize for each other. But that's way too much work and I'm kind of doing that already in a round about way. Maybe I'm not taking into enough consideration the fact that players moved teams mid season, but I really don't think so. I could weight the games better, making the more recent ones count more than old ones. I'm doing that a little bit in a mickey mouse way counting playoff games as two games, but that could definitely be improved.
Writing it all out and thinking about it as much as I do, I still refuse to believe this model is -EV. Remember, we're talking about player props here. If I was trying to model full games, the way I do stuff would never fly. But props are typically some of the softest bets you'll find at a sports book. But the edges I'm betting on are small. If my model says something should be -120 but I can get it at -110, I'm betting it. That's a tiny edge. When I was doing this full time and really crushing, I remember I used to get stuff that 'should' be something like -250 and be able to bet it at even odds. Like, stuff like that all the time. But now with a perceived edge that small, even if everything is correct, I'm at the mercy of the variance gods. And hockey is a super high variance sport in general. So I guess I would say that my model is anywhere between slightly -EV and slightly +EV, which really isn't a great feeling. Now that I'm thinking about it though, if I do continue, I'll probably do a lot less plays. Maybe just a few a night, only the very best ones. If I hadn't called that 8-1 night half units, we'd be about break even. A couple shot attempts turn into shots or vice versa and I'd be solidly in the green, thinking about what a genius I am.
Anyway, this is where I'm at. I get deep into it all and then snap out of it, like why am I even giving this so much time and mental energy?? Modeling is really a hobby for me at this point so I don't know. But who am I if I can't beat stuff like this? Just a guy who bets wong teasers and off market straights and team totals? Is that so bad? I mean I have family now for christ sakes. This shit shouldn't even be on my radar! Or should it?! You see?? The anguish?! AND FOR WHAT. I don't know. Maybe I'll get some plays up later but probably not.
Great post. Keep your head up!
ReplyDeleteHave you thought about a negative binomial distribution instead of poisson? I would think it fits better given counting stats like SOG are usually over dispersed
ReplyDeleteInteresting, I never thought about poisson being the problem. Honestly, its the only thing like this I really know how to do. Do you have any good links to understanding binomial distributions? And what do you mean by over dispersed? Thank you for the comment.
ReplyDeleteIf you open your Poogs X DMs, I will shoot you my thoughts. Ran some more math and I think this would be helpful.
DeleteCan I not accept DMs on X? I should be able to but I'll fix it tonight if not. Thank you!
DeleteNo sir!
DeleteWow, I had no idea. Thats embarrassing. I will 100% fix that tonight (I cant access that acct on the computer I'm on now). Thanks for letting me know!
DeleteThat is officially fixed btw, thanks for letting me know
DeleteLet me know if there is a better median of communication for you. Thanks
DeleteThe X account is good. Or even here would be fine, I check this just about every day. If we want to maybe start emailing, lets start on the X account and I could give you my email there. But lets start there (or here). Thanks again
DeleteGreat. Sent you a DM about 5 days ago on X.
Delete