Due to some recent travel and work obligations, I’m unable to share a full write-up for this week. Instead of skipping this week, I thought it would be a good idea to highlight some others’ work in the community and give them a chance to share some new ideas and concepts. Below is the first “guest” appearance on the Bet It Up newsletter by Shawn. Hope you enjoy!
Hello there! As you may have already noticed, this Bet It Up newsletter is being brought to you by a new face. My name is Shawn, and a handful of you may know me from Twitter as @SamkonGado. No I am not the real Samkon Gado, just an avid fan of his and his tragically short tenure on the Packers who I am (currently unfortunately) a fan of. If you’re unfamiliar with my work, I have built an NFL model this past offseason that has accumulated a 60-34-4 record yielding a return of 82.46 units and a 22.11% ROI. I have been sharing the model’s plays on Reddit and Twitter since around October, and I am pleased to be sharing it with the Bet It Up subscribers here today.
So how does the model work?
The model takes various data inputs and assigns each team a rating for each of the following: pass offense, rush offense, pass defense, run defense, and special teams. The model then looks at the ratings of all teams in the league and determines the correlation of category performance to overall team strength, and generates a correlation coefficient for each of the categories. The model then uses a formula I devised to spit out a season-long expected wins number for each team using their category rankings and the league-wide correlation coefficients. This process is repeated after each week, and as a result, the correlation coefficients change over time. That change is where I think a lot of value is being generated.
So how does the model project a game?
For each game, each team’s expected wins number is divided by 16 to give their expected win probability for a single game. Those probabilities are then pooled and redistributed to give a final average expected win probability for each team on a neutral field. The model then assigns a best-fit spread to the game using historical data that analyzes the win probability of teams at each half-point spread interval (I will come back to this later). Then various game-specific factors (home field advantage, travel, rest, etc) are added to generate the final spread for that specific game.
So how does the model select plays?
For a play to qualify as a “model play”, the model’s spread must differ from the Vegas spread by two or more points. The “play” is to equate the points of disagreement to the amount of units in the “to win” amount in a wager. For example, if the model has Team X as -6.4 and the Vegas spread is -3, there are 3.4 points of disagreement and the model play would be to place a wager on Team X -3 to win 3.4 units. There are two exceptions to this which I introduced after Week 9 after monitoring how the model performed on particular sets of plays: 1) Thursday games and 2) spreads of +7 or higher. Both were sets of plays that I had actually flagged as potentially problematic as I was building the model.
Thursday games were flagged simply due to my experience watching, betting on, and analyzing those games. To me, Thursday Night Football is almost an entirely different type of game that I believe would need to be modeled differently from “regular” games. Spreads of +7 or higher were flagged for two reasons. The first is that declining motivation, coach’s “losing their locker room”, deliberate tanking, etc. can be hard to identify and even harder to quantify, and a vast majority of spreads that high this late into the season usually belong to teams that are experiencing one or more of those things. The other is that the previously mentioned historical data that shows the win probability of each team at each spread shows a lot of variance and fragility at higher spreads. A 10% swing in win probability covers the run from 2.5 to 3.5, while a similar 10% swing also covers the run from 7.5 to 12. Subjecting ourselves to questionable motivation at those spread ranges where small changes in win probability can move spreads with ease is a dangerous proposition. Since those adjustments, the model has gone 13-6-2 for +22.18u and a 32.48% ROI.
So what does the model think this week?
I’ll key in on one model play for this newsletter: CIN +4.5 -105 (3.797 for 3.6u). As Kieran touched in the previous newsletter, recency bias is a huge source of value in sports betting markets.
The Bengals just got destroyed by the Browns., they stink.
Andy Dalton is on the IR and the Bengals are starting a backup QB.
Denver just manhandled the playoff-bound Steelers.
Denver is in the playoff hunt., this game means more to them.
These are all statements you could find far and wide amongst casual NFL fans and bettors. These takes aren’t necessarily wrong, but this type of mindset and surface-level analysis is a big source of sportsbooks’ rakes everywhere. Yes, the Bengals are starting a backup QB this week – Jeff Driskel. Last week Driskel went 17/29 for 155 yards, 1 TD, and 0 INT, and reduced the Bengals’ deficit by 13 points against a pretty respectable CLE passing defense that ranks fourth in the model. By my model’s metrics, Driskel’s performance was the 16th best Week 13 QB performance, but if you extrapolate his production to a full game his performance would have likely landed him the 11th or 12th best Week 13 QB performance. But as we’ve seen in the past and especially this season, a backup QB starting or playing unexpectedly yields much different results than when the make consecutive or expected starts. This season alone we saw Osweiler beat the Bears in Week 5, Nick Mullens terrorize the Raiders in Week 9, Colt McCoy nearly lead a comeback against the Texans in Week 11, and Chase Daniels roast the Redskins in Week 12. The common theme of each of these quarterback’s following expected starts (with Chase Daniels to be determined) weren’t nearly as magical.
So what if we assume Jeff Driskel will regress?
That is my actual approach with the model when slotting in a backup QB: I insert worst-case scenario numbers that I think are still within the realm of reason. One caveat to this example is that the Bengals do get A.J. Green back this week, who in the model is one of the most important non-QB players in in terms of added win probability. With that in mind, a worst-case scenario for the Bengals pass offense this week yields a pass offense that produces around the level of the Jets’ current pass offense. There are obviously many other factors that go into the game that help determine the model’s win probability and spreads, but even with this worst-case scenario adjustment the model gives CIN a 37.73% chance of winning on a neutral field, making the spread CIN +3.
Some of you might be thinking “37.3% seems low, how did the model end up on CIN +0.9?”. If you recall, I previously mentioned that there is a one point spread run from 2.5 to 3.5 that eats up 10% of win probability. This game is an example of one that lands in that range. And once you add in the various factors specific to this game (home field advantage, travel, rest, etc.), CIN nets 2.1 points in their favor bringing the model spread to CIN +0.9 for this game.
So there you have it. Even with a presumed worst-case scenario passing offense performance from Jeff Driskel and the Bengals, the model still finds value in CIN +4.5. If you compared the Week 13 lookahead line of CIN -2.5 to the opening line of CIN +3.5 or even the current consensus line of CIN +5, you’d see that the implication is that Andy Dalton’s absence (as well as some other factors) is worth a swing of 6-7.5 points. That, to me and the model, sounds like a huge source of value due to recency bias.