Posted on

Apologies, I was in the midst of creating a card for yesterday, but then I got mired in looking at backtested data for improvements. I knew a change had to be made after two days in a row of big losses, but it was going to be a tough one as I wanted to tweak the adjustor and not just eROI cutoffs. I opted to skip the day as the model needed a large overhaul.

July 20, 2023 MLB Baseball Betting Cards details:

MODEL 9.0:

Preamble to Model changes:

First there needs to be an acknowledgement of potential hangups to my 2023 MLB model. I’ve outsourced the base of my Win Probability calculation to whatever Fangraphs has listed for each game. The backtested results showed these projections to end up roughly in line to 2022 results for games of similar WP%. The problem here arises is that I have no clue how they are calculating this. I have a rough idea, but overall the algorithm is a mystery to me.

In review, the data for 2023 so far lines up to relatively close. Below is how I check the accuracy by bucketing the games into groups of 5% bins and seeing if the teams are winning as expected.

This split grouping shows that Away teams are winning at a higher rate than expected from Fangraphs by about 27 games so far this season. Other than that, the bins are relatively performing to expectation as the sample size in the >60% groups and <30% groups should explain the difference there and the overall game expectancy impact is low. This grouping is a good way to show that the WP% is relatively close, but there is nuance within each bin as that’s where the winners and losers are made as there are more variations at play.

Now the problem is that if one were to go off Fangraphs projections alone one would be a big loser to the books. Looking at the 50% bin where there are 315 games with an actual win rate of 56.8% for these Away teams there should be plenty of opportunity to beat the books. I have 138 of these Away teams above 50% to take a favored bet, but only 8 of these games have a positive edge of 5%+ to the books offered line. And as luck would have it of those 8 games only 2 won out of an expected 4-5. Clearly the books know something more on these games that the Fangraphs WP% algorithm isn’t taking into account. As the books are able to stay relatively close in value to take their 5% vig from each game and when the lines are out of sync it usually ends up the books favor.

That’s where my model kicks in to do some extra magic to give the WP% a boost and find a way to beat the books. I have an adjustor to look at team over/under performance to expected WP% and try to adjust the WP% closer to what the trend has been. This should be a balance to adjust for Fangraph’s deficiencies as it’s able to identify the problem areas and adjust.

My model also looks at the book’s lines each game to backtest the adjustments to see how the model would’ve performed overtime with the parameters I set. This helps weight the adjustments as the books also have their own defiencies when setting lines the adjustments I make to calculated WP% should hopefully stay ahead of them. My new changes looked at the adjustor and tried to find ways to keep it logical and profitable to backtested data.

It’s easy to calculate WP% and say anything above or below a line should have line, but finding that value in theory and realizing it in the real world is easier said than done. Which is where the backtesting comes in to see if the theory holds up to the lines offered. But the books can change their line creation process, or Fangraphs base. Just like sports themselves, sportsbetting is a game of constant adjustments and one needs to be vigilant to stay ahead of trends to maintain profitability.

The guts of Model 9.0:

  • After tedious review, the L9 adjustor wasn’t working as well as intended. It’s too much of a flash for a grind out season. Yes teams go on streaks, but the adjustor would either over adjust the recent trend or not capture it fast enough.
  • I’ve gone to a larger macro review. If I believe the algorithm from Fangraphs is imperfect and could use help then it would stand to reason it’s out of sync more than just the Last 9 days. Therefore, I’ve decided to change the assessment period to a rolling 90 days period.
    • The idea here is that things are usually set in stone at the beginning of season and possibly an adjustment is made at the All-Star break. There’s no real way to determine this, so all I can do is assess trends over a long period of time.
    • In 2022 the MLB teams based on standings overperformed to Fangraphs WP% calculations from the top to the middle, and underpeformed relative to WP% once we reached the middle of the standings to the bottom of them. However there is one curious outlier, the Baltimore Orioles. They ranked 14 out of 30 of the teams in the season in final win% with 51%, but they overperformed to Fangraphs average WP% each game of 41%. Only the top 2 teams, the Dodgers and Houston, also exceeded Fangraphs WP% by 9%+ last year.
    • This year, the Orioles and the Reds have exceeded WP% projections at the largest rates. While the Mets, Royals, and Athletics lead the pack of underperformers. There is something here and I want whatever it is to be reflected in future WP% calculations as Fangraphs is clearly not adjusting it for it too well over the last 90 days.
  • I’ve set the model to cap these rolling 90 day over/underperformances by 10% and use them in adjusting each game.
  • Another adjustment factor is the view that there is a lot of parity in MLB. No matter what the projected WP% is each day, it just seems that overall everything is random coinflip where any given team can win each day and the WP% calculations show that with about 85% of the games in the 40-60% WP% range. A pretty narrow band. To hopefully become more profitable the model needs to embrace this coinflip nature, so after applying the 90 day rolling adjustment to the Fangraph’s WP% I’ve added a coinflip WP% factor, 50% and average the two WP% to get the projected WP% for the game.
  • Lastly with one more final adjustment as the data in the example in the preamble showed, the Away teams are winning slightly more than expected so I forced an additional 2% to the WP% for each Away team.

The eROI cutoffs:

Once the adjustor changes were made it was time to test various eROI cutoffs to see if the changes would prove profitable to backtested games and their available lines.

  • MAIN BETS:
    • If the BE ML odds are postive then the cutoff is 5% eROI, but if it’s negative odds then the cutoff is raised to 7%. In addition all MAIN bets have a hard cap of 30% eROI.
  • RUNT BETS:
    • The cutoff for RUNTS is 17% eROI with up to 40% eROI.
    • Also to note that RUNTS do not have their WP% calculated as just the inverse of a MAIN bet in the matchup, but they know are the inverse minus 2% as this will give the Model some extra cushion on eROI calculation as these are projected to lose the majority of time.

This is a very large cutoff for RUNTS but any lower and the profitability was reduced down. There is still plenty of game volume to be had at this cutoff level so overall profitability is best suited here. Also RUNTS still show the best ROI unit at this level at 17%. The MAINS only check in at 8% ROI.

The Return of Edge Units:

The game volume does take a bit of a hit, but the overall quality of the model should be vastly improved. I may want to eventually get my churn level down to the 20-25 game range, but at 4 units a game and 150 unit total bankroll it’s currently at 37.5 game churn. After further review 20 may be too low, but 25-30 could be feasible. The idea here is to have enough game volume to ride out bad variance and reduce Risk of Ruin, but low enough to churn profitable ROI based on available bankroll.

To slowly ease into reducing game quantity per churn cycle I’ve brought back Edge units where each bet will get an additional unit for each eROI range of 10% the bet contains. MAINS get a base of 4 units and will get an extra EDGE unit if the bet has 10%+ eROI and 2 if it’s above 20% eROI. RUNTS have a larger cutoff for a qualified bet at 17% so they will start at a base of 3 units as they will automatically get 1 edge unit as a qualified bet.

The hard cap at 30% eROI for MAINS automatically disqualifies the bet as does the 40% level for RUNTS so all bets will have a range of 4-6 for potential unit sizes.

*See Glossary for details to help explain terms and other recent model changes.

___________________________________

___

Leave a Reply