Bayesian Prediction – wanna bet…? Putting your money where your mouth is…

[A disclaimer: I know virtually nothing about contemporary ice hockey, my interest faded when Börje Salming decided to put his skates on the shelf for a couple of decades ago, so I have not included any personal hockey insights into the predictions, e.g. current form etc of the teams, my predictions are purely based on:

  • 1) Stats & Mathematics
  • 2) current IIHF Ranking table
  • 3) about 1100 historical championship game results from 2000 and forward
  • 4) a few thousand lines of Python and PYMC code ]

So, after almost four weeks of intense development, my Bayesian Inference Engine for the soon-to-start IIHF 2018 World Championships is about ready for action.  I believe.

Thus, I will use it to predict the outcome of each game during the upcoming championships using its Bayesian Inference Model, and publish the predictions – obviously ahead of the game..! – here.  All this in the hopes of making some serious money by betting according to the predictions from my statistical model….

That objective leads to a well defined betting strategy: I’m going focus solely on high-odds games, thus taking a large amount of hopefully well calculated risk, expecting thereby to make huge gains on those bets that actually go my way.  This strategy means I’m not going to play any of the low odds games at all, no matter how “safe bets” they do appear.

To summarize the strategy: take a lot of calculated risk by only betting on high odds games, thereby expecting to loose most of the bets, but the few expected wins at high odds will hopefully compensate for the many losses. 

So, for those games where my program predicts a result that indicates an advantage over the odds of a specific professional betting shop, Unibet, I will make bets according to the predictions of my program, and publish the outcomes of those bets here.  That’s simpy “Skin-In-The-Game“, or “Putting Your Money Where Your Mouth is”, that is, standing up for one’s predictions/beliefs with real skin in the game, asop to being just a normal pundit with nothing to loose by erroneous predictions…. 🙂

Anyways, the championships start May 4th, with 4 games [Odds @ Unibet W/D/L]

  • Russia – France  ODDS:[1.12/10/15]
  • USA – Canada  ODDS:[5.30/5.10/1.47]
  • Sweden – Belarus  ODDS:[1.18/8/11]
  • Germany – Denmark ODDS:[1.94/4.25/3.20]

So, let’s compare the odds above given by Unibet, with the predictions from my statistical inference. In fact, my program computes two predictions, one based on the historical spreads, the other based on scores of each individual historical game between the teams, thus two graphs below. (Btw, don’t bother about the x-axis values, they do not correspond to anything real, at least not directly – they are scaled in various ways to make the prediction (hopefully) better…)

Anyways: looking at the graphs below, one of the outputs from my program, both RUS-FRA and SWE-BLR seem very much ín line with the Unibet predictions, thus no point in playing those low odds.  Same goes for USA-CAN, where my program gives even higher odds than Unibet for USA winning or a draw.

But there’s one (1) game that looks more interesting from “trying to make money on betting”-perspective: GER-DEN: the odds given by Unibet on that game to be a draw are 4.25, while the average of my two models predicts 3.4 for a draw.  Furthermore, DEN winning will give 3.20 according to Unibet, while my model predicts about 2.7.

Decision time: I’ll bet 1 unit on draw, and 1 unit on DEN winning !

(how much I’m actually betting in real money will remain my secret – after all, I don’t want the tax authorities after me…! 😉 )

So, my bet will cost me 2 “units”,  and according to my model, I have about 30% chance of winning the draw-bet, which in that case would give me 4.25 “units” back, i.e a win of 2.25 times my stake. And I have about 35% chance of winning my bet on DEN winning the game, giving me 3.20 units back, i.e. a win of 1.20 times my money.

Of course, I also have about 35% chance (or risk) loosing both bets, if GER wins, but no guts, no glory…

Another way to put it is in terms of EV, expected value, i.e. the expected returns on each “unit” of stake, of course in the long run… :

  • GER – DEN DRAW: EV = 0.29
  • GER – DEN DEN WIN: EV = 0.12

While e.g. USA – CAN has an EV of -0.42, which again confirms my decision not to play on that game.

I’d like to end this post with Disclaimer II:

“Prediction is difficult, particularly about the future”

Results of my betting will be published as soon as the games are finished on may 4th.

[EDIT April 25th: After having written a utility for Expected Value-analysis last night, I decided to add a few bets on the first day games, so the full betting list now looks like:

  • RUS-FRA : bet on draw at odds 10
  • SWE-BLR : bet on draw at odds 8
  • SWE-BLR : bet BLR winning at odds 11
  • GER-DEN : bet DEN winning at odds 3.20
  • GER-DEN : bet on draw at odds 4.25







About swdevperestroika

High tech industry veteran, avid hacker reluctantly transformed to mgmt consultant.
This entry was posted in Bayes, Business, Data Analytics, Data Driven Management, Gambling, HOCKEY-2018, Math, Numpy, Probability, PYMC, Python, Statistics and tagged , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s