Hedging with ‘free’ bets

Hedging with free bets

Headline

Ever wondered how you should spend that free/bonus bet your bookmaker has given you? Should you place it on a long odds team, on the favorite, or can you use it to hedge your bets?

Find out below!

Introduction

From time to time, a bookmaker may offer you a ‘free’ (‘bonus’) bet under some promotional offer. So if you have ‘generous’ bookmaker, what do you do with that free bet? Most of us might just stick it on a long shot in the hope of a big payout, or maybe we will just use it as part of our normal staking strategy or (if you’re boring) you might use it to hedge your bet/s to gaurentee a profit. I was actually recently given a free bet, and I had an opportunity to use it to guarantee a profit on a recent (round 14) NRL match. Since this might be a relatively uncommon strategy among casual punters, I thought I might share how it works!

Hedging with a free bet

As I said in the introduction I recently had an opportunity to hedge on a NRL match to garetuentee myself a profit on the outcome. I’ll briefly explain the scenario.

I was given a free bet ($100) by a bookmaker under the condition that:

  • I used the bet before 01-July-2016 & that it could only be used on a single match (IE I had to place the entire $100 amount on the outcome of an event)

I can’t quite figure out why I was given a free bet, but from time to time I presume as a ‘new’ punter in the system they give me free bets to encourage me to bet more often. I’m sure its all part of the bookmakers sophisticated customer profiling etc but I have not ‘cracked’ the code on when I might receive a free bet. It would be an interesting exercise to get a few peoples betting history (including when free bets were offered) to see if I can predict what is driving free bet offers.. but that’s for another time (PS if anyone wants to share their bet history/profile with me let me know!). Anyway, I diverge.

So now that I had my free bet, what was I going to do with it? Well the temptation is just to go chuck it on a really long odds match and hope it pays off (after all its a ‘free’ throw away bet right?). And trust me I was actually tempted just to do this. However I thought for moment, “surely I can be a little smarter than that” and ultimately chose to use to hedge the free bet to gaurentee myself a small profit. This isn’t a very romantic way to bet (I would prefer to tell the story about the time I used my free bet to back a horse at 1000:1 and landed a massive pay day), but at least I made a profit..

I have already previously discussed hedging in detail so I wont dwell on it too much, suffice to say that its a betting technique which involves (in our case) placing bets on both teams to guarantee a profit. Opportunities enabling you to do this arise when the odds of your initial stake favorably change before a match starts or during live play. However an opportunity to hedge also exists if you have a ‘free’ bet.

How it works

Here’s how it works (using my real world example):

Taking a look at the odds of matches for round 14, I can calculate the potential gaurenteed profit I will make under a few assumptions.

My aim is to match the profit I would get if I staked the free bet on my preferred team. For example if I put the $100 free bet on a team at 1.40 odds, my potential profit is $40. So I want to determine what amount of money I need to put on the opposing team to match this profit. Then I want to determine if my overall profit is positive. If it is then its a good match to hedge on.

So lets take a look at how this works on the actual match I staked on.

I chose to use my $100 free bet to stake on the Broncos playing at home to beat Canberra in round 14.

The Broncos were at odds of 1.33 while Canberra were at odds of 3.45

If I use the $100 free bet to stake on Broncos my potential profit is $33 ($100*1.33 - $100).

If I want to ‘match’ this profit by betting on Canberra I would need to put $13.75 on Canberra to win. ($13.47*3.45 - $13.47 = $33)

So now; given I have placed a $100 (free) bet on Broncos and 13.75 bet on Canberra then I am gaurenteed to profit $19.53. Yup that’s right, no matter who wins I get $19.53 profit. Now I don’t even have to watch the game and I can go off and buy that ‘special’ something I’ve always wanted….

But in all seriousness at least its a profit, and I only had to outlay $13.47 to gaurentee it.

You can double check the math if you like:

I put $13.47 on Canberra to win @ 3.40 (total actual outlay $13.47).

I put $100 (free bet) on Broncos to win @ 1.33 (total actual outlay = $0.00 because its a free bet)

If Broncos win I get (1.33*100-100)-$13.47 = $19.53

If Canberra wins I get (3.4*13.47)-$13.47 = $19.53

So there you go! As demonstrated you can use that free bet to guarantee yourself a profit (I actually did)

Math

Here’s the step by step guide (with formula) to determine how much to stake on the opposing team, and how much overall profit you will make using this strategy. You can use the amount of overall profit to determine which match is the best value to hedge on

  1. Determine the:
  • free bet amount (s1)

  • odds of the team which free stake will be used (o1)

  • odds of the opposing team (o2)

  1. Calculate the expected profit (p) from the free bet stake
  • p = s1*o1 - s1
  1. Calculate the amount of money needed to bet on the opposing team in order to match the expected profit from the free bet stake (s2)
  • s2 = p/(o2-1)
  1. Calculate the total expected profit (tp) from the hedge betting
  • tp = p-s2
  1. Use the hedging strategy to stake on the game with the highest total profit (tp).

Using my real world example:

s1 = $100

o1 = 1.33 (Odds on Broncos)

o2 = 3.4 (odds on Canberra)

p= $100*1.33-100 = $33

s2 = 33/(3.45-1) = $13.47

tp = $33- $13.47 = $19.53

This was the highest tp of all matches in round 14 (at the time of betting) so was my preferred hedging stake.

If we wanted to quickly look at the best free bet hedging opportunities we can tabulate and graph to get a bit of an idea of how this works.

Assuming a $100 free bet and a completely fair market free of vig/overround; lets tabulate and plot the total potential profit of odds from 1.0 through to 2.0:

o1 o2 s1 p s2 tp
1.00 Inf 100 0 0.00 0.00
1.05 21.00 100 5 0.25 4.75
1.10 11.00 100 10 1.00 9.00
1.15 7.67 100 15 2.25 12.75
1.20 6.00 100 20 4.00 16.00
1.25 5.00 100 25 6.25 18.75
1.30 4.33 100 30 9.00 21.00
1.35 3.86 100 35 12.25 22.75
1.40 3.50 100 40 16.00 24.00
1.45 3.22 100 45 20.25 24.75
1.50 3.00 100 50 25.00 25.00
1.55 2.82 100 55 30.25 24.75
1.60 2.67 100 60 36.00 24.00
1.65 2.54 100 65 42.25 22.75
1.70 2.43 100 70 49.00 21.00
1.75 2.33 100 75 56.25 18.75
1.80 2.25 100 80 64.00 16.00
1.85 2.18 100 85 72.25 12.75
1.90 2.11 100 90 81.00 9.00
1.95 2.05 100 95 90.25 4.75
2.00 2.00 100 100 100.00 0.00

We observe that in a fair market the maximum profit of $25 is achieved when you put a $100 free bet on odds of 1.5 and $25 on the opposing team at odds of 3.00. Profit declines from this maximum as you move lower towards 1.2 or higher towards 2.0. At odds of 2.00 no profit is achieved. While this is the theoretical maximum in a fair market, the reality is that the ‘best’ value hedging opportunity will vary based on the vig/overround offered for the match, and the vig/overround bias. To refresh your memory a bookmakers market is never fair as the probabilities they offer on each team will add up to over 1.00.

For example, in a fair market assuming even probability (50%) that each team will win, then the odds offered should be 2.00 on each team.

In the bookmakers market when the odds are ‘even’ instead of being set at 2.00 you will observe that they might be at 1.92.

For example, the opening odds for the round 14 match up between the Sharks and Cowboys were 1.92 each. This is equivalent to an implied chance of 52% chance that each team will win. This adds up to 104% so the bookmaker has a 4% overround.

So unfortunately you can’t use 1.50 exclusively, you will need to do the calculation to determine which match has the highest profit potential like I did.

Lets take the odds of the round 14 matches* and see how the profit is affected by the vig/overround. We will also order the odds lowest to highest.

NB these odds are slightly different to the odds determined at the time of my stake - these are just the latest odds I had in my database

favorite favorite.odds non.favorite non.favorite.odds vig overround s1 p s2 tp
Brisbane Broncos 1.32 Canberra Raiders 3.50 0.041 0.043 100 32 12.800 19.200
New Zealand Warriors 1.32 Newcastle Knights 3.50 0.041 0.043 100 32 12.800 19.200
Canterbury Bulldogs 1.38 St George Illawarra Dragons 3.15 0.040 0.042 100 38 17.674 20.326
Melbourne Storm 1.42 Sydney Roosters 2.95 0.041 0.043 100 42 21.538 20.462
Penrith Panthers 1.47 Manly Sea Eagles 2.75 0.042 0.044 100 47 26.857 20.143
South Sydney Rabbitohs 1.58 Wests Tigers 2.45 0.039 0.041 100 58 40.000 18.000
Gold Coast Titans 1.73 Parramatta Eels 2.15 0.041 0.043 100 73 63.478 9.522
Cronulla Sharks 1.92 North Queensland Cowboys 1.92 0.040 0.042 100 92 100.000 -8.000

We can see that odds of 1.5 no longer represents the maximum profit but rather, maximum profit is achieved at odds of ~1.42. You can also see that the vig/overround does actually vary slightly between matches which does play into the potential profit. So the bottom line is that to maximize your profit you need to make sure that you do your math in the market you want to apply your hedging stake in.

Finally, although I said that this hedging strategy guarantees you a profit… there is a slight caveat. In the event of a draw I would have lost my free bet and also lost my $13.47…. however draws are a relatively rare beast..

Also as a final disclaimer in reality I had to put $14 on Canberra to win, as I wasnt able to put fractional bets on.. so my actual profit was very slightly lower

Introduction to Hedging and Arbitrage

Introduction to Hedging and Arbitrage

Introduction

There are already some really great articles ([1], [2], [3]) which explain (sports bet) hedging and arbitrage in detail, and the point of this post is not to re-write these articles, but rather to:

  • briefly introduce the concept/s and provide example/s of opportunities I have had for hedging in my own bet placement this year

  • demonstrate what opportunities have existed (for hedging) in the 2016 NRL season to date and how to identify them

  • calculate (maximum) theoretical profit which could have been made by taking advantage of hedging

This post will focus more so on hedging over arbitrage, however the calculations/concepts are very similar.

Sports bet Hedging and Arbitrage

Hedging

Definition

Sports bet hedging is the process of placing multiple non-similtanuoes bets in the opposite direction on dependent events to guarantee profits (or mitigate loss) [4]. Opportunity for hedging usually arises in the event of odds shifting over time. An example is initially placing a bet on a team to win an NRL match at long odds, and after an odds shift, subsequently placing a bet on the opposing team to also win. Dependent on the size of the odds shift hedging can guarantee a profit no matter the outcome because at least one of the teams must win.

The main point of difference to arbitrage is that odds shifts are assumed or unknown and an initial stake may already be placed on one outcome. In arbitrage similtaneous or near similtaneous stakes are placed to guarantee profits.

Real world example

The most basic (and real) example follows:

In round 9 of the 2016 NRL season, I put a $100 stake on St George (at 2.45 odds) to defeat the Warriors (who were $1.65 favorites). At the time I placed the bet it was about four days before the actual match was to take place. Two days before the match took place, the Warriors coach announced that he was dropping six players from the squad and replacements would only be announced immediately before the match. This caused the odds for Warriors to shift dramatically and the odds (just before the game commenced) were 1.65 for St George and 2.39 for the Warriors. So in this case the odds almost completely flipped and St George became favorites.

This presented me with a hedging opportunity. This is because if I now placed a specified stake on the Warriors to win I would be gaurenteed profit no matter who actually won.

Lets just do the quick calculation. First I staked $100 on St George to win at 2.45 odds. Now I see that just before the match, the Warriors are paying $2.39. I know this is a hedging opportunity and so lets just say I also stake $100 on Warriors to win. This means we have staked $200 in total.

The return I will get if St George win = odds x initial stake - total stake

Which is: 2.45 x $100 - $200 = $45

The return I will get if Warriors win is = 2.39 x $100 - $200 = $39

So you can see if I did this I would have been guaranteed to either get a $45 profit if St George won, or a $39 profit if Warriors won!!

Of course the actual stake I put on the Warriors does matter which is why I said we need to put a specified stake on the Warriors. If you want to guarantee you get the exact same profit no matter who wins, the calculation to determine how much I should stake (called an unbiased stake) on Warriors is:

Stake on St George x (odds for St George/odds for Warriors )

100 x (2.45/2.39) = $102.51

If we just re-do the return calculation/s above using a stake of $102.51 for the Warriors and $202.51 as the total stake you will notice that the result is $42.49 for each. So now I have a gaurenteed profit of $42.49 no matter who wins!!

You might think this is pretty incredible and a no brainier to take the guaranteed profit, however in this case I did not!. Again you need to way up the risk vs reward. In this example my predictive model indicated St George had a 73% chance of winning, Warriors were down 6 players and I stood to profit $145 as opposed to the gaurenteed profit of $42.49. What would have you done???

Determining hedging oppertunities and formulas

I thought I would start with a real world example before I jumped into the formulas, but if you want to determine if an opportunity for hedging exists, we need to determine the margin and/or profit margin of the outcome/s. Intuitively if the profit margin is positive then a hedging opportunity exists and additionally indicates how much guaranteed profit you will make.

Given:

o1 = Decimal odds of initial stake

o2 = Decimal odds of the dependent outcome to compare

The margin (m) = 1/o1 + 1/o2

The profit margin (p) = 1/m - 1

If the margin is less than 1 or (more intuitively), if the profit margin is greater than zero, then a hedging opportunity exists. The profit margin is the amount of profit you will receive if you place an unbiased stake on the dependent outcome. We can check this by again using our real world example.

o1 = 2.45 (odds of initial stake on St George)

o2 = 2.39 (odds of Warriors at odds close (IE just before the game))

m = 1/2.45 + 1/2.39 = 0.83

p = 1/0.83 - 1 = 0.21

We observe that the margin is less than 1 and the profit margin is positive. We observe that a hedging opportunity exists and we expect a 21% profit on our total stake if we choose to take the hedging opportunity. Lets confirm with our real example:

Recall if I stake $100 on St George at 2.45 and 102.51 on Warriors at 2.39 I stand to profit $42.49 no matter the outcome. $42.49 as a percentage of the total stake (t) ($202.51) = 0.21 which is the same as our calculated profit margin!

For completeness the formula for determining the amount to stake on the dependent outcome is:

Given

s1 = initial stake

s2 = amount to stake on the dependent outcome

o1 = Decimal odds of initial stake

o2 = Decimal odds of the dependent outcome to compare

s2 = s1 x (o1/o2)

In our real world example:

s1 = initial stake = $100

s2 = amount to stake on the Warriors

o1 = 2.45 (odds of initial stake on St George)

o2 = 2.39 (odds of Warriors at odds close (IE just before the game))

s2 = 100*(2.45/2.39) = 102.51

Hedging oppertunities in the 2016 NRL season to date

Before I go on I must stress that hedging opportunities are not known (although might be predicted) at the time of initial stake. This is the point of difference to arbitrage. If an odds difference exists in which you can simultaneously place bets (say at different bookmakers) to guarantee profit this is arbitrage bet placement. If the opportunity to guarantee profit arises due to odds shift over time by placing opposing bets (for example placing a bet that both team/s will win) on dependent events, then this is hedging. Therefore when I determine the hedging opportunities which have existed in the NRL this year, it doesn’t mean that we were aware of these opportunities, it just highlights how many have existed and how large the opportunities were.

If you are placing a bet on a match in the hope that you will get a hedging opportunity then you still have to have some way of forecasting (predicting) the probability that this will happen!!

OK, so lets take a look at the hedging opportunities (and their profit margin size) which have existed this year. To do this we need to have a data set which contains odds shift details (such as min max, open close odds) of each match.

You can compile this yourself (from historic odds websites) or refer to some pre-processed generally available data sets. I am going to utilize a pretty decent (and generally maintained) data set which is posted on Aussportsbetting.com. In accordance to the terms of use of this data-set I can only provide a link to the website and cannot provide or supply this data-set directly.

The data-set contains basic match details such as the home/away team, the scores, and importantly (averaged) opening and closing odds, and min/max odds. The odds details are mainly compiled from the OddsPortal.

We are reviewing matches up to round 9 which represents 72 matches.

To use this data set what I am going to do is assume a couple of scenarios:

The first scenario assumes that we have staked on a team as soon as odds have opened up and see how often a hedging opportunity has come up at odds close (just before match start). This represents my real world example.

The second scenario takes the best (maximum) odds for a team and compares the opposing teams odds at close. This represents a scenario when you have been ‘lucky’ enough to grab the odds for a team when they have been highest and should represent the theoretical maximum hedging profit margin.

To analyse these scenarios we need to:

  • Determine the margin and profit margin of the opening odds of home teams and the closing odds of away teams

  • Determine the margin and profit margin of the opening odds of away teams and the closing odds of home teams

  • Subset the data on any matches where the profit margin was >0

  • Identify the best historic hedging opportunities and determine the total potential profit

  • Complete the same exercise using maximum odds

There is one final scenario which would potentially present more hedging opportunities - that is odds movement during live matches. Since I don’t have the details of in-game odds movement for all matches I could not present these results but suspect that there may be more (and higher profit margin) opportunities.

OK, lets take a look at all matches where the profit margin was positive when comparing home team opening odds against away team closing odds (ordered by highest to lowest profit margin):

Date Home.Team Away.Team Home.Score Away.Score Home.Odds.Open Away.Odds.Close Profit.Margin
2016-03-12 Canberra Raiders Sydney Roosters 21 20 2.03 2.15 0.044
2016-03-19 Gold Coast Titans Wests Tigers 30 18 2.16 2.02 0.044
2016-03-06 Sydney Roosters South Sydney Rabbitohs 10 42 2.16 1.95 0.025
2016-03-12 Parramatta Eels North QLD Cowboys 20 16 2.47 1.74 0.021
2016-05-01 Gold Coast Titans Melbourne Storm 0 38 2.31 1.81 0.015
2016-04-02 Wests Tigers Cronulla Sharks 26 34 2.30 1.81 0.013
2016-03-26 Sydney Roosters Manly Sea Eagles 20 22 2.40 1.75 0.012
2016-03-06 Gold Coast Titans Newcastle Knights 30 12 2.10 1.95 0.011
2016-03-14 Wests Tigers Manly Sea Eagles 36 22 2.58 1.66 0.010
2016-04-28 South Sydney Rabbitohs Wests Tigers 22 30 1.40 3.52 0.002

We observe that there are 10 instances where if we placed a stake on the home team when odds first opened we would have been presented with a hedging opportunity. We notice though that aside from the top two hedging opportunists (4.4%), the majority of present a potential profit margin of less than 2% or close to break even.

Using the top match (Canberra v Roosters) as an example, the way to read this result is; If I placed a stake on Canberra (home) to win when the odds first opened at 2.03, and then placed a subsequent specified stake on the Roosters at odds close (2.15), I could guarantee myself a profit of 4.4%.

Lets quickly check the math. I know the profit margin is 4.4% and so this is the amount I expect on top of my total stake (t):

The profit margin (p) = 1/m - 1

= 1/(1/2.03+ 1/2.15) - 1

=0.044

To guarantee the 4.4% profit I need to determine the amount to stake on Roosters. Lets assume I have already staked $100 on Canberra, the amount I will need to stake on Roosters to get the 4.4% profit margin is $94.42:

s2 = s1 x (o1/o2)

= 100 * (2.03/2.15)

= $94.42

Now now matter if Canberra or Roosters win I get a return of $8.58:

If Canberra win: 2.03*100 - 194.42= 8.58

If Roosters win: 2.15*94.42 - 194.42 = 8.58

8.58 as a percentage of 194.42 (8.58/194.42) equals 4.4%

Now lets take a look at all matches where the profit margin was positive comparing away team opening odds and home team closing odds.

Date Home.Team Away.Team Home.Score Away.Score Away.Odds.Open Home.Odds.Close Profit.Margin
2016-05-01 New Zealand Warriors St George Dragons 26 10 2.31 2.39 0.175
2016-04-29 Parramatta Eels Canterbury Bulldogs 20 12 1.98 2.36 0.077
2016-04-17 Wests Tigers Melbourne Storm 18 19 1.77 2.74 0.075
2016-03-20 New Zealand Warriors Melbourne Storm 14 21 2.05 2.11 0.040
2016-04-04 Canterbury Bulldogs Canberra Raiders 8 22 3.03 1.56 0.030
2016-03-13 Melbourne Storm Gold Coast Titans 34 16 5.33 1.26 0.019
2016-04-17 Canberra Raiders Cronulla Sharks 16 40 2.09 1.97 0.014
2016-03-13 Cronulla Sharks St George Dragons 30 2 2.63 1.65 0.014
2016-04-30 Penrith Panthers Canberra Raiders 19 18 2.58 1.67 0.014
2016-04-09 New Zealand Warriors Manly Sea Eagles 18 34 3.02 1.52 0.011
2016-03-26 Canberra Raiders Gold Coast Titans 20 24 2.97 1.53 0.010
2016-03-27 St George Dragons Penrith Panthers 14 12 2.07 1.97 0.009
2016-04-03 Parramatta Eels Penrith Panthers 18 20 2.79 1.58 0.009
2016-04-25 Newcastle Knights Manly Sea Eagles 10 26 1.50 3.08 0.009
2016-04-02 Melbourne Storm Newcastle Knights 18 14 6.31 1.20 0.008
2016-04-09 Penrith Panthers North QLD Cowboys 18 23 1.68 2.52 0.008
2016-04-30 Manly Sea Eagles North QLD Cowboys 18 34 1.34 4.05 0.007
2016-04-10 Newcastle Knights Wests Tigers 18 16 1.81 2.25 0.003
2016-04-02 North QLD Cowboys St George Dragons 36 0 4.59 1.28 0.001

This list of opportunities is a bit longer (19) purely because away teams tend to start a longer odds. You can see that The St George v Warriors game is by far and away the largest hedging opportunity and has been for the entire season. The profit margin (17.5%) is slightly lower than in my real world example simply because I had higher odds at time of stake, where-as the odds in the table represent the average across bookmakers. We can also see a couple of matches in would have returned 7.7% and 7.5% respective while the remainder would have returned < 4%.

Finally lets just have a quick look at the maximum theoretical hedging opportunity/s. To do this we are just running the same exercise as above but we are looking at the maximum odds of a home/away team as compared to the closing closing odds of the home/away team. This represents our maximum hedging opportunity assuming we are going to hedge on a game just before it starts:

First the maximum odds of a home team vs the close odds of an away team:

Date Home.Team Away.Team Home.Score Away.Score Home.Odds.Max Away.Odds.Close Profit.Margin
2016-04-29 Parramatta Eels Canterbury Bulldogs 20 12 2.79 1.67 0.045
2016-03-12 Canberra Raiders Sydney Roosters 21 20 2.03 2.15 0.044
2016-03-19 Gold Coast Titans Wests Tigers 30 18 2.16 2.02 0.044
2016-03-31 Manly Sea Eagles South Sydney Rabbitohs 12 16 2.98 1.59 0.037
2016-04-17 Canberra Raiders Cronulla Sharks 16 40 2.24 1.93 0.037
2016-05-01 Gold Coast Titans Melbourne Storm 0 38 2.42 1.81 0.036
2016-03-19 Newcastle Knights Canberra Raiders 24 24 2.67 1.69 0.035
2016-03-20 St George Dragons South Sydney Rabbitohs 8 6 3.45 1.47 0.031
2016-03-12 Parramatta Eels North QLD Cowboys 20 16 2.50 1.74 0.026
2016-03-06 Sydney Roosters South Sydney Rabbitohs 10 42 2.16 1.95 0.025
2016-03-26 Sydney Roosters Manly Sea Eagles 20 22 2.45 1.75 0.021
2016-03-05 North QLD Cowboys Cronulla Sharks 20 14 1.47 3.31 0.018
2016-03-21 Manly Sea Eagles Cronulla Sharks 22 12 2.11 1.96 0.016
2016-04-07 Brisbane Broncos St George Dragons 26 0 1.20 6.52 0.013
2016-03-10 Penrith Panthers Canterbury Bulldogs 16 18 2.53 1.69 0.013
2016-04-02 Wests Tigers Cronulla Sharks 26 34 2.30 1.81 0.013
2016-03-04 Manly Sea Eagles Canterbury Bulldogs 6 28 1.67 2.57 0.012
2016-04-28 South Sydney Rabbitohs Wests Tigers 22 30 1.42 3.52 0.012
2016-03-06 Gold Coast Titans Newcastle Knights 30 12 2.10 1.95 0.011
2016-03-14 Wests Tigers Manly Sea Eagles 36 22 2.58 1.66 0.010
2016-04-08 South Sydney Rabbitohs Sydney Roosters 10 17 1.54 2.93 0.009
2016-04-17 Wests Tigers Melbourne Storm 18 19 2.97 1.52 0.005

And finally the maximum odds of an away team vs the closing odds of a home team:

Date Home.Team Away.Team Home.Score Away.Score Away.Odds.Max Home.Odds.Close Profit.Margin
2016-05-01 New Zealand Warriors St George Dragons 26 10 2.33 2.39 0.180
2016-04-29 Parramatta Eels Canterbury Bulldogs 20 12 2.05 2.36 0.097
2016-04-17 Wests Tigers Melbourne Storm 18 19 1.77 2.74 0.075
2016-03-25 South Sydney Rabbitohs Canterbury Bulldogs 12 42 1.75 2.78 0.074
2016-03-27 St George Dragons Penrith Panthers 14 12 2.32 1.97 0.065
2016-04-10 Newcastle Knights Wests Tigers 18 16 2.01 2.25 0.062
2016-03-20 New Zealand Warriors Melbourne Storm 14 21 2.11 2.11 0.055
2016-04-25 Newcastle Knights Manly Sea Eagles 10 26 1.58 3.08 0.044
2016-04-09 Penrith Panthers North QLD Cowboys 18 23 1.77 2.52 0.040
2016-03-20 St George Dragons South Sydney Rabbitohs 8 6 1.61 2.91 0.037
2016-04-25 Melbourne Storm New Zealand Warriors 42 0 2.63 1.70 0.033
2016-04-04 Canterbury Bulldogs Canberra Raiders 8 22 3.03 1.56 0.030
2016-04-30 Manly Sea Eagles North QLD Cowboys 18 34 1.38 4.05 0.029
2016-04-23 Canberra Raiders Wests Tigers 60 6 3.35 1.48 0.027
2016-04-30 Penrith Panthers Canberra Raiders 19 18 2.66 1.67 0.026
2016-03-17 North QLD Cowboys Sydney Roosters 40 0 5.02 1.28 0.020
2016-03-13 Cronulla Sharks St George Dragons 30 2 2.67 1.65 0.020
2016-03-13 Melbourne Storm Gold Coast Titans 34 16 5.33 1.26 0.019
2016-04-17 Canberra Raiders Cronulla Sharks 16 40 2.11 1.97 0.019
2016-03-28 Wests Tigers Parramatta Eels 0 8 1.70 2.54 0.018
2016-03-18 Canterbury Bulldogs Parramatta Eels 6 20 2.66 1.65 0.018
2016-04-09 New Zealand Warriors Manly Sea Eagles 18 34 3.04 1.52 0.013
2016-04-01 Gold Coast Titans Brisbane Broncos 16 24 1.26 5.16 0.013
2016-03-26 Canberra Raiders Gold Coast Titans 20 24 2.97 1.53 0.010
2016-03-06 Gold Coast Titans Newcastle Knights 30 12 2.09 1.95 0.009
2016-04-03 Parramatta Eels Penrith Panthers 18 20 2.79 1.58 0.009
2016-04-02 Melbourne Storm Newcastle Knights 18 14 6.31 1.20 0.008
2016-04-24 Cronulla Sharks Penrith Panthers 20 18 3.05 1.50 0.005
2016-04-02 North QLD Cowboys St George Dragons 36 0 4.65 1.28 0.004
2016-03-28 Cronulla Sharks Melbourne Storm 14 6 2.27 1.79 0.001

As expected the hedging opportunities are a little more prevalent when we compare maximum odds against closing odds, and observe that maximum away team odds vs closing home team odds present the most opportunities (30).

Conclusion

Now that we have looked at the different scenarios we can conclude that:

  • Of 72 matches to date, the maximum theoretical number of (positive profit margin) hedging opportunities which were available was 30 (41% of matches).

  • The number of hedging opportunities which have arisen from comparing opening odds of away teams against closing odds of home teams is 19 (26% of matches).

  • Hedging opportunists rarely return more than 4% profit

  • St George vs Warriors has been the best hedging opportunity of the season at 18% profit margin (using bookmakers averages)

  • Hedging is opportunistic and while the opportunities do arise, they may still be unpredictable (but you can keep an eye out for them!)

Tables and graphs to assist in intepreting hedging oppertuities

OK, so now we have identified the opportunities which have existed and we understand how to calculate the potential profit margins; how do you easily keep an eye on any hedging opportunities after you have put down a stake?

Probably the easiest way to do this is to visualize in a graph and/or refer to a table rather than scribbling down calculations all the time. If you are code eccentric, I’ll show you how to quickly whip these visualizations up in R programming language (otherwise just keep my table/graph handy).

The first table/graph we will look at is a break even hedging opportunity. This is our baseline. A break even hedging opportunity is one where; if you stake a specified amount on the opposing team you are gaurenteed to break even. You might want to do this if you fear that the team you placed (maybe a large) bet on really doesn’t stand a chance to win and so you are looking to ‘opt out’ without loosing money (if given the opportunity)

Lets quickly review a few formulas so we know how to calculate this. What we want to calculate is the o2 under a break even scenario (margin = 1, profit margin = 0)

We know that given:

o1 = Decimal odds of initial stake

o2 = Decimal odds of the dependent outcome to compare

The margin (m) = 1/o1 + 1/o2 and the profit margin (pm) = 1/m - 1

Therefore to calculate o2 for m=1 we re-arrange the formula/s so that:

o2 = o1/(o1*m-1)

Or if we want to know o2 given a desired profit margin:

o2 = o1/((1/pm+1)-1)

So for example if we have put down a stake at odds of 1.90 we would need to wait until the opposing teams odds are at least 2.11 to be able to hedge to break even

o2 = 1.90/(1.90*1-1) = 2.11

We can quickly and easily generate a reference table using this knowledge. All we will do is generate a table showing the odds ‘o1’ of the team we may have bet on and the corresponding value of the the opposing odds ‘o2’. The value of ‘o2’ is what the odds must be on the opposing team in order to break even when hedging:

o1 o2 m pm
1.3 4.33 1 0
1.4 3.50 1 0
1.5 3.00 1 0
1.6 2.67 1 0
1.7 2.43 1 0
1.8 2.25 1 0
1.9 2.11 1 0
2.0 2.00 1 0
2.1 1.91 1 0
2.2 1.83 1 0
2.3 1.77 1 0
2.4 1.71 1 0
2.5 1.67 1 0
2.6 1.62 1 0
2.7 1.59 1 0
2.8 1.56 1 0
2.9 1.53 1 0
3.0 1.50 1 0
3.1 1.48 1 0
3.2 1.45 1 0
3.3 1.43 1 0
3.4 1.42 1 0
3.5 1.40 1 0
3.6 1.38 1 0
3.7 1.37 1 0
3.8 1.36 1 0
3.9 1.34 1 0
4.0 1.33 1 0
4.1 1.32 1 0
4.2 1.31 1 0
4.3 1.30 1 0
4.4 1.29 1 0
4.5 1.29 1 0
4.6 1.28 1 0
4.7 1.27 1 0
4.8 1.26 1 0
4.9 1.26 1 0
5.0 1.25 1 0

The way to read the table is pretty simple. o1 represents the odds of the initial stake and o2 is the odds that the opposing team must reach in order to break even in hedging. So you can see that when o1 is 1.3 the opposing team odds must reach 4.33 before you have a hedging opportunity and so on. We also include ‘m’ which is the margin, and ‘p’ which is the profit margin. Since this is the break even odds, ’p is obviously 0.

An alternative way to visualize this is in a graph. You could plot o2 against o1 and read off the o2 value required directly from the graph:

As an example you can read from the graph that when ‘o1’ is 1.5, ‘o2’ must be 3.00:

Since we might want to do better than just break even, we can expand on the above and generate a table and graph with multiple options. Lets create a table showing the odds that o2 have to be in order to generate profit margins from 0-30%

Hedging opportunity table
o1 o2pm00 o2pm05 o2pm10 o2pm15 o2pm20 o2pm25 o2pm30
1.3 4.33 5.46 7.15 9.97 15.60 32.50 Inf
1.4 3.50 4.20 5.13 6.44 8.40 11.67 18.20
1.5 3.00 3.50 4.13 4.93 6.00 7.50 9.75
1.6 2.67 3.05 3.52 4.09 4.80 5.71 6.93
1.7 2.43 2.75 3.12 3.55 4.08 4.72 5.53
1.8 2.25 2.52 2.83 3.18 3.60 4.09 4.68
1.9 2.11 2.35 2.61 2.91 3.26 3.65 4.12
2.0 2.00 2.21 2.44 2.71 3.00 3.33 3.71
2.1 1.91 2.10 2.31 2.54 2.80 3.09 3.41
2.2 1.83 2.01 2.20 2.41 2.64 2.89 3.18
2.3 1.77 1.93 2.11 2.30 2.51 2.74 2.99
2.4 1.71 1.87 2.03 2.21 2.40 2.61 2.84
2.5 1.67 1.81 1.96 2.13 2.31 2.50 2.71
2.6 1.62 1.76 1.91 2.06 2.23 2.41 2.60
2.7 1.59 1.72 1.86 2.00 2.16 2.33 2.51
2.8 1.56 1.68 1.81 1.95 2.10 2.26 2.43
2.9 1.53 1.65 1.77 1.91 2.05 2.20 2.36
3.0 1.50 1.62 1.74 1.86 2.00 2.14 2.29
3.1 1.48 1.59 1.70 1.83 1.96 2.09 2.24
3.2 1.45 1.56 1.68 1.80 1.92 2.05 2.19
3.3 1.43 1.54 1.65 1.77 1.89 2.01 2.15
3.4 1.42 1.52 1.63 1.74 1.85 1.98 2.10
3.5 1.40 1.50 1.60 1.71 1.83 1.94 2.07
3.6 1.38 1.48 1.58 1.69 1.80 1.91 2.03
3.7 1.37 1.47 1.57 1.67 1.78 1.89 2.00
3.8 1.36 1.45 1.55 1.65 1.75 1.86 1.98
3.9 1.34 1.44 1.53 1.63 1.73 1.84 1.95
4.0 1.33 1.42 1.52 1.61 1.71 1.82 1.93

We observe that when our staking odds are 1.3 that to break even the odds of o2 have to be 4.33 to break even. To generate a profit margin of 30% the odds of o2 have to be impossibly high (infinite). For a more reasonable comparison, using starting odds (o1) of 2.0, we see that the odds range for a profit margin of 0-30 are 2.00-3.71.

Finally we can plot this table data if we want a visual graph to pick values from:

Again using o1 of 2.00, we can read across the y-axis and see that to break even we need an o2 of 2.00, to generate a profit of 20% we need an o2 of 3.00 etc.

Arbitrage

As I indicated in the introduction, this article focus’ more on Hedging, and if you want more detail on arbitrage I encourage you to read any of the articles I reference in the introduction. So briefly:

Arbitrage is very similar in concept to Hedging (and in fact you can determine the margin and profit margin of an arbitrage opportunity in the exact same way), however the difference is that arbitrage opportunities occur similtaniuosly or in very close space of time. As an example:

Lets just say that you observe that a bookmaker ‘A’ has the following (even) odds for two teams:

o1: 1.9

o2: 1.9

You also see that at the same time bookmaker ‘B’ has different odds for the same team/s:

o1: 1.6

o2: 2.35

Using the Hedging opportunity table, you see that when o1 is 1.9, then you can generate a profit margin of 5% when o2 = 2.35.

Knowing this, you will observe that if I placed a stake on ‘o1’ with bookmaker ‘A’ (at 1.9 odds), and immidiatly after/ similtaneuosly also stake on ‘o2’ at Bookmaker ‘B’ then I will guarantee myself a 5% profit. I have exploited the differing odds that bookmakers have offered and guaranteed myself a profit no matter the outcome of the match!

You can double check the math:

Assume a $100 stake on o1 at Bookmaker A.

Now calculate the stake I need to place on o2 at bookmaker ‘B’ to guarantee my 5% profit

Stake 2 = $100*(1.9/2.35) = $80.85

Now determine the guaranteed profit amount:

If o1 win: 1.9*100 - 180.85 = $9.15

If o2 win: 2.35*80.85 - 180.85 = $9.15

9.15 as a percentage of 180.85 (9.15/180.85) equals 5%

So we can see that the calculations are the same as for Hedging, and you can use the tables/graphs to also identify potential arbitrage opportunities. Fair warning however, Arbitrage opportunities are even less frequent then hedging opportunities and last for a very brief period of time. In order to take advantage of Arbitrage opportunities you need accounts with very many bookmakers, be able to place bets very quickly and additionally would need some sort of ‘automated’ notification system to alert you of any opportunity which arose.

Final words

This is by no means a comprehensive article on hedging/arbitrage, and as I alluded to in the introduction presents the most basic example of hedging/arbitrage. Specifically I have not explored hedging/arbitrage on events with multiple potential outcomes (such as horse racing where any one of 10+ horses can win) and have only given simplistic examples of head to head betting where two outcomes are assumed. Also for the purposes of simplicity I have ignored (assumed it is negligible) the potential for draws in NRL matches - and one reason is that draw odds are rarely offered for head to head NRL matches. So in reality hedging on NRL games is not absolute guaranteed profit because in the event of a draw you (at best) may get your money back (or at worst lose both bets). So make sure you check the terms of your bookmaker!! Generally if a draw event is not offered for a match, then you will get your money back in the event of a draw (dead heat). So be careful if your bookmaker actually offers odds for a draw occurring.

Calculating the value of multibets

How do you tell if a multibet if good value? How do you determine the odds and probability of multibets?

What about when a bookmaker has a ‘cash back’ promotional offer? How do I factor that in to my decision making process?

Find out below!

Calculating the value of multibets

Introduction

This is a quick post to explain how to identify if a head-to-head ‘multibet’ represents ‘good’ value or not. We will assume a good value bet is any bet where you think all teams (in your multibet) will win and expected return is positive (or more simply the perceived probability of an event/s occurring is higher than the bookmakers implied probability).

Calculating multibet odds & probability

Determining the value of a multibet is a simple exercise in which you multiply the implied odds of each match together (compute the product) and compare this to the product of your perceived odds. If your odds are shorter, then it would be a ‘good value’ (albeit long odds) bet. As an example, lets take the recent details of the multibet I placed for round 8 of the 2016 NRL season. In the table below, the team_descr is the team I tipped to win and the bookie_odds_stake were the odds at the time I placed the bet:

Round 8 multibet details
round_no game_no team_descr team_against_descr perceived_odds bookie_odds_stake
8 1 Brisbane Broncos South Sydney Rabbitohs 1.33 1.16
8 2 Canterbury Bulldogs Gold Coast Titans 1.42 1.33
8 3 Canberra Raiders Wests Tigers 1.51 1.42
8 5 Cronulla Sharks Penrith Panthers 1.37 1.60
8 8 Melbourne Storm New Zealand Warriors 1.31 1.67

If we calculate the product of the perceived odds we get 5.12 and if we calculate the product of the bookie odds we get 5.85. Because 5.12 is less than 5.85 it is a ‘good value’ bet. Just a reminder, the product of odds is simply all the odds multiplied together.

As an example the product of my perceived odds is:

1.33 x 1.42 x 1.51 x 1.37 x 1.31 = 5.12

If we look at it from a probability perspective, the perceived probability of this multibet paying off is 1/5.12 which is 19.5%. The bookmakers implied probability is 1/5.85 which is 17.1%. So I perceive that there is a greater chance of this event occurring than the bookmakers, therefore I deem it a good value bet. Of course we must also consider that the probability of it paying off (according to our own perceived probability) is only 19.5%.

Comparison of the precived odds/probabilty vs the bookmakers for the round 8 multibet
perceived_odds_prod perceived_prob bookie_odds_prod bookie_prob
5.118 0.195 5.854 0.171

Value of ‘cash back’ promotional offer/s

Now lets take a look at the scenario where a ‘cash back’ offer exists.

Specifically, for multibets, Sportsbet currently has a promotion whereby if you place a 5 leg multibet (on S2016 NRL matches) and only 4 of your tips actually win then you receive cash back (up to $50). So how do I tell if that’s good ‘value’ or not?

Well, I can tell you straight up that simply receiving your cash back on 4 of 5 legs is never good value because your perceived odds will be the product of 4 legs winning vs the cash back value which is equivalent to odds of 1.00. As an example the range of perceived odds for any 4 combinations of my 5 leg multi is between 3.39 and 3.9 and the odds offered (the cash back) is only 1.00. This is obviously negative expected return. So the ‘value’ of a cash back offer is really determined by your panchant for the overall risk of the multibet.

As an example in this 5 leg multi I can tell myself:

I perceive I have around (at best) a ~30% (1/3.39) chance of at least getting my cash back and about a 20% chance of a return of 5.8. So if I bet $50 I have around a 1 in 3 chance of getting my money back and about a 1 in 5 chance of a $290 return ($240 profit). In this case I took the ‘punt’ but at least I understood my chances. In this case it paid off!

As you can see multibets are high ‘risk’ high reward, and the promotional offer does not represent good value for the odds at time of potential cash back, however provides a ‘psychological’ buffer for the punter (which is why they offer them).

In all, given this sort of promotional offer it is worth understanding your chances of money back after 4 legs so you can put the multibet into perspective.

For example if you determine you have a 1 in 4 chance of money back and a 1 in 5 chance of a ‘big’ payout you might be less inclined to bet. Conversely if (in the case that one of your legs is very long odds) you might calculate you have a 1 in 2 chance of money back and a 1 in 4 chance of a big payout. In this case the higher chance of cash back might be enough for you to take a ‘punt’

Determing the odds of 4 of 5 betting legs

The odds of 4 of 5 of the multibet legs are simply calculated in the same way as previous (its just the product of the odds of 4 of the matches). If you assume that your top 4 ‘highest’ probability matches are most likely to win, just calculate the product of these odds and this is the (perceived) odds of cash back. For my multi, the highest probability games were games 1,2,3 and 8 and if I compute the product of these I get 3.3 which is equivalent to 29.5%. So I perceive I have a 29.5% chance of getting my money back.

It gets a little more tricky if you want to evaluate the range of odds for any four bets winning. To do this you have to compute the odds for every combination of odds for the 4 of 5 matches. Combination math is a little bit off topic (if your interested see http://stattrek.com/online-calculator/combinations-permutations.aspx#examples) but when you have 4 objects from a set of 5 objects there are 5 possible combinations of odds.

The 5 possible combinations of perceived odds odds expressed as a matrix looks like:

##      [,1] [,2] [,3] [,4] [,5]
## [1,] 1.33 1.33 1.33 1.33 1.42
## [2,] 1.42 1.42 1.42 1.51 1.51
## [3,] 1.51 1.51 1.37 1.37 1.37
## [4,] 1.37 1.31 1.31 1.31 1.31

Now If we compute the product of these combinations (re-ordered from lowest to highest) we observe the range of odds of getting our cash back after 4 legs:

## [1] 3.39 3.60 3.74 3.85 3.91

As probabilities this looks like:

## [1] 0.295 0.277 0.268 0.260 0.256

So if I assume that any combination of 4 legs is possible, the chances of getting my cash back is between 25.6% and 29.5%

Remember of course this all assumes my perceived probabilities are accurate 😉

Conclude

So now you know how to calculate the probability of a multibet based on your perceived odds and determine if its a good value bet. In the event of ‘cash back offer’, you will understand that the odds at time of cash back will never be favorable; however you will know its worth calculating the odds of to determine if the chances of cash back are favorable enough to factor into your psychology of bet placement. Finally you understand that multibets are high risk (long odds) high reward (high return) bets.

Bookmaker Analysis NRL 2009-2015

Forward

This is the first of many R-Rated posts to come! Now before you get excited, when i say R-Rated I mean that I will be providing R (programming language) code snippets throughout the post for those interested in re-creating some of the work I have done, and/or doing your own analysis. For those not interested in the R-Rated stuff, avert your precious eyes!!

Introduction

Its time to take a look at bookmakers historic odds data (and in fact this should be one of the very first things you look at). Also (and for me this is actually in retrospect), the bookmakers predictions should actually be the benchmark for any predictive modelling you do yourself. You will see this a bit later on, but trust me, the bookmakers are actually very good at predicting the outcomes of matches. In fact I would wager that the best predictive model or system you come up with, will only be on about par with the long term bookmakers precision!

But all is not lost, just because the bookmakers are as good as, or maybe even better than you at predicting game outcomes, there are still ways to at least identify what constitutes a safe bet and what constitutes a poor and or risky bet by analysing the bookmakers information.

The following takes a look at how good the bookmakers are a predicting games, and takes a look at opportunities for potential profit making staking strategies using statistical analysis of the bookmakers odds for winning and losing predictions

The data set

Of course what you need first and foremost is a decent data set of bookmaker odds. Luckily I have a sample up on my website which can be downloaded for such analysis. Some of the data manipulation is already done for you such as normalising the odds, calculating the implied probability, vig and overround, labeling true positive, false positive events etc. A couple of quick notes on the data set:

  • There is only one odds column (bookie_back_odds) and this represents the average of multiple bookmaker odds close to closing of bets.

  • Odds are the decimal odds of a team wining

  • The probability is simply calculated using 1/Odds

  • Normalised odds/probabilities are just weight averaged to 100%

The key variables of interest will be:

  • win_lose (binary indicator if the team won (1) or lost (0))

  • bookie_back_prob_norm (bookies probability that a team will win normalised to 100%)

  • bookie_label (binary indicator of the bookies prediction if the team will win or lose)

  • TP (True positive results (where predicted win and actual result was a win))

  • FP (False positive results (where bookie predicted a win and result was a loss))

OK, lets get started!!

Load and inspect data

Fist lets load the historic data from the maxwellAI website and call it b.

b <- read.csv ("http://maxwellai.com/wp-content/uploads/2016/03/nrl_2009_2015_bookmaker_odds.csv", header = TRUE)

Now Lets take a quick look at the list of features in the file

colnames(b)
##  [1] "match_id"              "match_team_id"        
##  [3] "season"                "round_no"             
##  [5] "game_no"               "team_descr"           
##  [7] "team_against_descr"    "score"                
##  [9] "score_against"         "home_away"            
## [11] "win_margin"            "win_lose"             
## [13] "bookie_back_odds"      "bookie_back_prob"     
## [15] "bookie_back_odds_norm" "bookie_back_prob_norm"
## [17] "overround"             "vig"                  
## [19] "bookie_label"          "TP"                   
## [21] "FP"                    "TN"                   
## [23] "FN"

And quickly take a look at the data (just the top 5 entries)

str(head(b, n=5))
## 'data.frame':    5 obs. of  23 variables:
##  $ match_id             : int  1 1 2 2 3
##  $ match_team_id        : int  1 2 4 3 5
##  $ season               : int  2009 2009 2009 2009 2009
##  $ round_no             : int  1 1 1 1 1
##  $ game_no              : int  1 1 2 2 3
##  $ team_descr           : Factor w/ 16 levels "Brisbane Broncos",..: 1 10 7 14 4
##  $ team_against_descr   : Factor w/ 16 levels "Brisbane Broncos",..: 10 1 14 7 12
##  $ score                : int  19 18 17 16 18
##  $ score_against        : int  18 19 16 17 10
##  $ home_away            : Factor w/ 2 levels "A","H": 2 1 2 1 2
##  $ win_margin           : int  1 0 1 0 8
##  $ win_lose             : int  1 0 1 0 1
##  $ bookie_back_odds     : num  1.69 2.15 1.4 2.93 1.42
##  $ bookie_back_prob     : num  0.592 0.465 0.714 0.341 0.704
##  $ bookie_back_odds_norm: num  1.6 2.03 1.33 2.78 1.35
##  $ bookie_back_prob_norm: num  0.56 0.44 0.677 0.323 0.669
##  $ overround            : num  0.057 0.057 0.056 0.056 0.053
##  $ vig                  : num  0.054 0.054 0.053 0.053 0.05
##  $ bookie_label         : int  1 0 1 0 1
##  $ TP                   : int  1 0 1 0 1
##  $ FP                   : int  0 0 0 0 0
##  $ TN                   : int  0 1 0 1 0
##  $ FN                   : int  0 0 0 0 0

Analyse Bookmakers historic precision

Right! Now lets have a look at how good the (collective) bookmaker actually is at predicting winners!

Subset data and calculate precision

First We need to subset the data so that bookie_label = 1 (we are only interested in the bookies win pick). Then we can calculate the precision of the bookmaker. We will just add the precision column to the data frame for convenience:

bp <- subset(b, b$bookie_label == 1)
#add precision column
bp$precision <- sum(bp$TP)/(sum(bp$FP) + sum(bp$TP))
#report the overall precision
round (max(bp$precision), digits=2)
## [1] 0.65
Observations

We observe that the overall precision is 0.65! This means that historically, across 2009-2015 the bookmaker has predicted 65% of games accurately which is really quite good.

Visualising precision across years

Now, lets have a quick look at what that looks like visually across each year by creating a simple line graph of the average precision by round. Also lets just add a linear trend line and a 0.5 ‘cut-off’ line to see if we can identify any simple trends (note i have omitted the R code to create the plots which is a bit lengthy):

Observations

We can see that:

  • for the majority of seasons, the predictive precision per round increases as the season progress’.The exception to this is 2013 and 2015. 2013 which started off very strong, but bombed in the later rounds after round 24. 2015 was relatively flat.

  • in most years the grand final (last round) was picked correctly.

  • Season 2010 & 2015 appear to have the lowest overall accuracy (tend line is closest to 0.5 cut off line)

  • the majority of the time, the precision is above the 0.5 cut off line, however there are a few very low precision rounds. It is difficult to correlate any specific low precision rounds across the seasons

Bookmakers probability distribution

Now let’s have a look at how the the bookmakers probabilities compare between the false positives (when they picked a team to win and they lost) and the true positives. This is going to tell us how well calibrated the probabilities are and will be useful for determining appropriate staking strategies

Fist let’s take a quick look at the summary statistics for the normalised probabilities for true positive events and false positive events:

For true positive events:

bTP <- subset(bp,bp$TP ==1)
#save third quartile for use later
bpTPq <-quantile(bTP$bookie_back_prob_norm, c(.75)) 

print (summary(bTP$bookie_back_prob_norm))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5010  0.5870  0.6470  0.6561  0.7070  0.9380

For false positive events:

bFP <- subset(bp,bp$FP ==1)
#save third quartile for use later
bpFPq <-quantile(bFP$bookie_back_prob_norm, c(.75)) 
print (summary(bFP$bookie_back_prob_norm))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5010  0.5630  0.6180  0.6267  0.6740  0.9120

And lets take a look at that visually in a simple box-plot:

p2 <- ggplot(bp,aes(factor(TP),bookie_back_prob_norm))
p2 <- p2 + geom_boxplot()
plot(p2)

Great! we can see straight way that the probabilities are well calibrated because the mean of the probability of the false positive events is lower than the mean of the probability of the true positives. This means that even though the bookies have mis-predictions (false positives) their implied probability is lower for these events (which is really good! (for them – not so much for the punters)).

We also observe that the third quartile for false positives is 0.67 (equivalent to 1.49 odds) and that there are a large number of true positive >0.67. Now this is important; this means that when the bookmaker gives odds odds on which are >0.67 implied probability (<1.49 odds) then in the overwelwing majority of cases, the bookmaker will accurately pick the winner. We can actually calculate the bookmakers precision in this region Which is 75%!!. This means if you bet on anything with odds <1.49, then you should win ~75% of you bets:

bp75 <- subset(b, b$bookie_back_prob_norm> bpTPq)
#add precision column
bp75$precision <- sum(bp75$TP)/(sum(bp75$FP) + sum(bp75$TP))
#report the overall precision
round (max(bp75$precision), digits=2)
## [1] 0.75

If you want to look at it from an odds perspective, we can create the same box-plot; but just with odds on the y axis instead of the probability. Note that the plot should be reversed because higher (IE longer odds means lower probability). I personally prefer looking at it from a probability point of view but in some scenarios it might be good to look from and odds point of view. Lets see:

p3 <- ggplot(bp,aes(factor(TP),bookie_back_odds_norm))
p3 <- p3 + geom_boxplot()
plot(p3)

Yes the box-plots are reversed but you can make the same inference as above. That if odds on are <1.49 then in the majority of cases the bookie will be correct!

But what does it all mean??

So what does all this mean for us?? Well for one the bookmaker is going to be damn hard to beat! They have well calibrated probabilities a precise predictive model, and on top of this have a little lea-way due to the overround/vig. But like I said in the introduction all is not lost; just in doing this simple exercise we have learnt a great deal about the bookmakers. And we can try use this analysis to help us out in our own ‘informed’ gambling. So lets review what we know and think about how we can use it logically.

Ok, so we know that the bookmaker predicts winners correctly about 75% of the time when odds on are <1.47. This means that if we pick games when the odds are <1.47 then we also have a 75% chance of a return on a bet… but does it mean we will make a profit? We should just be able to place bets on anything less than odds of <1.47 and get a return right?

Lets see. I will quickly make a simulated bet with the logic of staking on everything which is >0.67 in probability (equivalent to <1.47 odds):

#create a new dataframe using bp for simple simulated staking
bss <- bp
#create a 'stake' column and just set it to a fixed staking value
bss$stake <- 10
#find the 3rd quantile of the bookie probability
bssFPq <-quantile(bFP$bookie_back_prob_norm, c(.75)) 
bssTPq <-quantile(bTP$bookie_back_prob_norm, c(.75)) 
#create stake column using logic
bss$stake <- ifelse(bss$bookie_back_prob_norm > bssFPq , bss$stake,0)
#now simulate profit/loss on the stake amount
bss$profit <- ifelse (bss$TP == 1, (bss$stake*bss$bookie_back_odds-bss$stake),-bss$stake)
#create a total profit/loss cloumn
bss$profit_total <- sum(bss$profit)
#now create a cumulative profit for graphing
bss$profit_cum <-  round(cumsum(bss$profit),2)

#print the amount of profit we would make
print(max(bss$profit_total))
## [1] -284.6

Bummer!! that’s -$-284.6, so we actually made a loss. Seems its not so simple after all!! So what went wrong here? Well, there must be enough outliers in the False positive region to offset our small profits.

Lets take a look at how many false positives there are which are > 0.67

sum(ifelse(bss$bookie_back_prob_norm >bssFPq & bss$FP ==1, 1,0))
## [1] 120

So there a 120 of these occurrences. Ok so that means straight up we are going to lose $1,200 ($10 stake * the amount of false positives).

Now lets count the number of occurrences of True positives which are >0.67 probability

sum(ifelse(bss$bookie_back_prob_norm >bssFPq & bss$TP ==1, 1,0))
## [1] 338

Ok, so there are 338 of these. That seems like a lot more, but obviously not enough.. lets see why. The average of the odds for the bookmaker above >0.67 probability is 1.28:

mean(subset(bp$bookie_back_odds,bp$bookie_back_prob_norm >bssFPq))
## [1] 1.276114

So on average our profit on all our bets above >0.67 is (on average) going to be $946:

# (1.34 * stake * number of bets) - stake * number of bets
(1.28 * 10 * 338) - (10 * 338)
## [1] 946.4

So we can see straight away that we are going to make a loss because this value ($946) is smaller than than the value from false negatives at the same threshold ($1,200)

We can use this knowledge to create a simple formula to check if we can profit from any sort of ‘short odds’ betting. We can use:

((TPd*TPb)-TPb) - FPb

where

  • TPd is the average decimal odds of the true positives above/within the threshold
  • FPd is the number of False positive bets above/within the threshold
  • TPb is the number of True positive bets above/within the threshold

So we could reduce our previous staking simulation to: (1.28*338)-338 - 120

((1.28 *338)-371)-131
## [1] -69.36

Which is -69. Since this is negative we aren’t going to make any sort of money staking like this because the number of false postives outwieghs the number of true postives times the odds of the true postives

Right! so is there anything that might work? Well when we looked at the box plot there looked to be as many outliers in the False positive range above 0.67 as there were True positives in this range. So what about if we just use the range between the 3rd quartiles (75th percentiles) of the false positives and true positives?

p2b <- ggplot(bp,aes(factor(TP),bookie_back_prob_norm))
p2b <- p2b + geom_boxplot()
p2b <- p2b + geom_hline(aes(yintercept=bpFPq), col = "coral", linetype = "dashed", size = 0.8)
p2b <- p2b + geom_hline(aes(yintercept=bpTPq), col = "coral", linetype = "dashed", size = 0.8)
plot(p2b)

Sounds like a pretty simple strategy, maybe to good to be true so lets quickly check how it performs. Just using a really simple fixed staking calculation on the data using the logic that we will bet $10 on every game which has an implied probability of between ~0.67 and ~0.71:

#create a 'stake' column and just set it to a fixed staking value
bp$stake <- 10

#save 75 percentile (3rd quartile of true postives and false postives)
bpTPq <-quantile(bTP$bookie_back_prob_norm, c(.75)) 
bpFPq <-quantile(bFP$bookie_back_prob_norm, c(.75)) 
#set up basic staking logic 
  #if the bookie back odds are between 3rd q of the FP and 3rd Q of the TP then we are going to stake $10 otherwise we are not going to stake ($0)
bp$stake <- ifelse(bp$bookie_back_prob_norm > bpFPq & bp$bookie_back_prob_norm < bpTPq, bp$stake,0)
#now simulate profit/loss on the stake amount
bp$profit <- ifelse (bp$TP == 1, (bp$stake*bp$bookie_back_odds-bp$stake),-bp$stake)
#create a total profit/loss cloumn
bp$profit_total <- sum(bp$profit)
#now create a cumulative profit for graphing
bp$profit_cum <-  round(cumsum(bp$profit),2)

#print the amount of profit we would make
print(max(bp$profit_total))
## [1] 42.2

Yay!!!! All that hard work and we got $42.00!! On my way to money town oh yeah!!

Ahem… back to reality. Lets chart that baby up and see what it looks like..

p4 <- ggplot(bp, aes(match_id,profit_cum))
p4 <- p4 + geom_path(aes(col=profit_cum), size = 0.5)
p4 <- p4 + geom_hline(aes(yintercept=0.0), col = "red", linetype = "dashed", size = 0.8)
plot(p4)

Not so pretty… BUT what really stands out is that profit never dropped below 0… now that is interesting…

So it appears that betting in this region is profitable (just). Lets just explore a little bit further. The total amount staked across all seasons was $42:

sum(bp$stake)
## [1] 1500

So if we made $42 then return on investment (ROI) is ~3%:

(sum(bp$profit)/sum(bp$stake))
## [1] 0.02813333

That is we invested $1,500 over the term and ended up with $1,542 (profit $42) for a total return of…. ~3%… amazing.. (I am being sarcastic, BUT making any profit as you will come to know is actually quite a challenge)

So how many bets did we actually make?

sum(ifelse(bp$stake ==10, 1,0))
## [1] 150

184 bets! That’s not many…, how many games did we forgo betting on…

sum(ifelse(bp$stake ==0, 1,0))
## [1] 1242

1,242! Ok so we ended up betting and profiting small on a low number of games, but came out on top. What was our staking accuracy??

Its the number of bets we placed and had profit over the total number of bets we placed:

(sum(ifelse(bp$profit >0, 1,0)))/
  (sum(ifelse(bp$stake >0, 1,0)))
## [1] 0.7466667

74%!! well that’s pretty damn good!

Recap

Ok lets just recap what we have learned.

  • If we use the bookmakers normalized probability to predict the outcome of matches then we would have achieved a 64% precision across seasons 2009-2015

  • If we stake on matches within the noramilsed probability of the 3rd quartile of the true positives and false positive results then we can achieve small (~3% ROI) and hence constitutes a safe bet

  • Using a simple staking threshold to back strong favorites did not achieve profit because the number of false positives outweighed the number of true positives times the odds.

Exploring long odds

So what if we look at the same scenario but for true positive and false negative events in the chance that we can gains some profit from betting on long odds (>2.0)

I’ll just jump straight to the box-plots for these, and quickly plot our preferred betting range as before:

bn <- subset(b, b$bookie_label == 0)
bTN <- subset(bn,bn$TN ==1)
bFN <- subset(bn,bn$FN ==1)
bnTNq <-quantile(bTN$bookie_back_prob_norm, c(.75)) 
bnFNq <-quantile(bFN$bookie_back_prob_norm, c(.75)) 
bn <- subset(b,b$bookie_label ==0)
p5 <- ggplot(bn,aes(factor(TN),bookie_back_prob_norm))
p5 <- p5 + geom_boxplot()
p5 <- p5 + geom_hline(aes(yintercept=bnTNq), col = "coral", linetype = "dashed", size = 0.5)
p5 <- p5 + geom_hline(aes(yintercept=bnFNq), col = "coral", linetype = "dashed", size = 0.5)
plot(p5)

Right, now lets put our opposite hats on. Looking at the box-plots we see that the plots are reversed compared to our previous probability distribution plots which is what we expect for well calibrated probabilities in the true/false negative space. But now what we want to explore is the area where there are a higher number of false negatives than there are true negatives. This is because a false negative means the model has predicted a loss, but the result was a win. So lets see if we can leverage off this because these are long odds so will pay out more.

Using a similar approach as before lets explore placing bets on games which are above the 3rd quartile of the true negative results and below the third quartile of the false negatives (the region between the dashed line/s)

#create a 'stake' column and just set it to a fixed staking value
bn$stake <- 10
#set up basic staking logic 
  #if the bookie back odds are between 0.67 & 0.71 we are going to stake $10 otherwise we are not going to stake ($0)
bn$stake <- ifelse(bn$bookie_back_prob_norm > bnTNq & bn$bookie_back_prob_norm < bnFNq, bn$stake,0)
#now simulate profit/loss on the stake amount
bn$profit <- ifelse (bn$FN == 1, (bn$stake*bn$bookie_back_odds-bn$stake),-bn$stake)
#create a total profit/loss cloumn
bn$profit_total <- sum(bn$profit)
#now create a cumulative profit for graphing
bn$profit_cum <-  round(cumsum(bn$profit),2)

#print the amount of profit we would make
print(max(bn$profit_total))
## [1] -120

Bugger!! looks like backing long odds in the region of higher false negatives doesn’t quite pay -off, we are down $120 which means that this would have wiped our profit from the short odds betting…Back to the drawing board on that one..

Summary

While brief, the above is a simple review of how good the bookmakers are at predicting winners (65% accuracy across 2009-2015) and gives brief in-site into the structure of the bookmakers odds. It shows that the bookmakers probabilities are well calibrated (the mean of the false positives is lower than the mean of the true positives) and additionally shows that there is a theoretical window of short odds betting which can make a very small, long term return on investment (~3%).

Now its time to explore any strategies which might make a higher ROI!! Stay tuned!!

24

Bookmaker Upsets

When the bookies strongly back a team to win.. and they don’t… well that’s an upset. We call this ‘choking’ [1], that is they should have won but choked under the ‘pressure’

So, which team ‘chokes’ the most, and who do they ‘choke’ against??

“Guest” (or maybe i’ll have to attribute as ‘regular’..)  data visualisationist [2]  Matt Dick explores this in the following post

 

[1] Choking, despite what Wikipedia says is not the “mechanical obstruction of the flow of air from the environment into the lungs” ;0

 

[2] Yes I made this job title up – however apt

 

Without ado:

Upsets

In light of the round 2 predictions following the bookie predictions, we thought this would be a great time to start looking at bookie upsets.
What I would like to do is analyse the dataset and determine if there are any common factors where the game resulted in an upset with respect to the bookies odds.

To do this, we have merged the dataset with the player information, as well as the bookies odds, model odds, predictions etc, as well as the ongoing performance of the model/bookmaker.

There is a field in the dataset, “B_FP” which indicates bookie false positives; ie. where the bookie favoured this team to win, but they did not. To further define an “upset”, I’ve picked a bookie odds cutoff of 1:1.4 (0.71). The cutoff of 1.4 is supposed to represent a strong favourite losing the game.

The total fraction of “upsets” at the 1:1.49 bookmaker odds cutoff is around 13.6% of all games.

We can have a look at the number of times each club lost when they were strong favourites.

Assuming we are happy with the volume of data being representative, lets have a look at the percentage of bookie upsets by club, sorted from highest percentage of upsets, to lowest.

Following on from this, I thought it would be interesting to see if there are certain matchups where there a particular team causes more upsets versus another. A heatmap is a convenient way to represent this, where the Y-axis represents the bookmaker favourite, and the X-axis is the opposing side. The higher the number/brighter the cell, the more often that opponent causes upsets versus the favourite side.

For example; when the warriors have been picked as strong favourites against the Dragons, the Dragons have still won all match-ups analysed (all 2 times!).

Could a reasonable staking strategy be formed around taking a punt on the Dragons in a case like this? The Dragons odds for this game (excluding the Vig) should have been at least 3:1…Or can the NRLexp model use a “choking index” as an input parameter?

 

 

 

 

The Vig

Beware ‘The Vig’…

‘The Vig’ is a hideous and foul beast, the thing of nightmares for sports punters.

The vig or vigorous, is essentially how the bookmakers are able to maintain an advantage over the average punter and (almost) guarantee a profit. It is also known as a bookmakers margin and is sometimes used interchangeably with the term overround although they are slightly different as explained below.

Let’s take the Sportsbett odds I posted for Brisbane vs Parramatta in round 1 of the 2016 season as an example. The odds (at time I posted) were 1.65 for the Broncos and 2.35 for Parramatta. Turning those odds into implied probabilities (1/odds) that indicates the bookies are giving broncos a 60.6% chance of winning and Parramatta a 42.5% winning. Hmmm…. 60.6 + 42.5 gives 103.2%. That extra 3.2% is how those sneaky buggers make their money… This 103.2% is actually termed the overround

Although it makes little difference in this example, but is important for explaining the outcome, the real value of the vig is actually (1.031-1)/1.031 = 0.31 = 3.1% and this represents the bookmakers expected profit margin.

Hers how it works in a nutshell using a simple example:

Given the odds on broncos and Parramatta, the bookmakers expect to drive the market (ie drive punters) towards betting specific proportions on the outcomes. If the bookmakers drive the market so that the proportions are equal to the reciprocal of the odds multiplied by the overround then they are guaranteed the 3.2% (vig) profit. The reciprocal of the odds multiplied by the ovveround is really just normalizing the implied probabilities to 100%

Using the figures above the proportions the bookmakers are driving the market towards are:

1/(1.65*103.2) = 0.587

1/(2.35*103.2) = 0.413

0.587 + 0.413 = 1

If they have successfully driven the market to these proportions and end up with $58.7 wagered on the Broncos and $41.3 on Paramatta (total of $100 wagered in the market) then:

If Broncos win they have to pay the punters back $58.7*1.35 = $96.9

Which means they profit $3.1

If Parramatta wins then have to pay the punters back $41.3*2.35 = $96.9

Which again means they will profit $3.1

This profit, as a % is equal to the devilish vig (3.1/100 = 3.1%)

Odds movement is all about driving the market towards these proportions so the bookmakers can make profit. In cases where the odds are close to even (2.0) then sometimes the market will drive the implied outcome. For example, if the bookmakers originally post odds in favor the Tigers to win (say 1.9 = 53% implied probability) but there is a large amount of money staked on the alternative team (say St George) to win, then they will shift the odds in attempt to realign the market towards the vig. This might mean that the original odds move, for example, to 2.2 (45% implied probability) now indicating that the bookmakers think that St George will win. In reality it is the market (ie punters) that has shifted the implied outcome.

Beware the vig!!