Post_20170529_3

Edge gone to hell, or seasonality?

It’s been some time since the last post, reason is that I had to put some time into my betting models… My problems started in march when my bank started to slowly decrease instead of increase AS SUPPOSED to.

First I kept calm and let the bots run unchanged (AS SUPPOSED),  but the bad trend continued into April and from there into May. In this period there were now quite many bets generated ( 2616 in the period 1.March to 15.May).

As seen in the table above I have been seriously hurt in the Draw and Away models, and the yield is -1.3% which is exactly my long term yield target BUT WITH THE WRONG SIGN.

I am getting older and older and my memory might not be as sharp as earlier (!), but I had a hunch that my models performed real bad in the same period last year. So I dived into my old betting history and took out the performance for the same period in 2016:

OK, my hunch was correct – I had shitty performance in the same period last year (-1.08% yield).

As a final check I plotted the accumulated yield% as a function of week to see if there is some kind similar behavior:

It is now getting quite obvious that I have a repeating pattern between 2016 and 2017. Great performance in January and February, terrible in March, April. If this pattern continues I will see better performance for the rest of the year.

I am still not sure what generates this “problem”, my guess is that its related to the mix of leagues (some starts and stops in March and April), and I don’t take that fact into my current models. So, as a start to address this issue (and hopefully avoid the same pattern in 2018) I have now developed a “League classification rating” which I intend to implement for the third quarter this year.

Some details about my new rating model will be presented in a later post.

 

Post_20170529_3

Betting results of 2017Q1

Another quarter has passed and it is time to check how the models are performing. The result for the first quarter of 2017:

I am happy to see that it is now my ninth quarter in a row with positive yield! This quarter my bot managed to get matched at least partially in 2316 unique markets. It turned about 2.700.000 SEK (approximately 284.000 EURO or 244.000 GBP) to a yield of 1.20%, bringing a profit of 32.691 SEK (approximately 3420 EURO or 2930 GBP).

My target for 2017 is to turn 10.000.000 SEK to a yield of 1.3%, I can conclude that I am a little ahead of the amount turned but a little behind on the yield. The bad apple of this quarter is the performance of the Away bets with a yield of -2.28%.

I only update my models when the long term performance seems to be falling, some models are updated more frequently than other…  My current models with lifetime and performance:

 

The Home model is the jewel in my portfolio – is has been unchanged for a year (exactly today), during that period it has generated 2118 bets with a yield of 2.33%.  The bad apple is the Away model which now is performing below expectation also when looking at its total lifetime! Unfortunately I haven’t found anything that could improve the model, so I decide to keep it running for a little longer (0.78% is still money in my pocket). When looking at the Draw and O/U models I have found some “low hanging fruits” that can improve the models with only a small reduction in expected number of bets, so even if they are performing above expectation I will launch these changes (or I actually did a couple of days ago). The jewel is unchanged and worshiped for another quarter!

Finally, summing up my total betting career since 2008:

55.523 bets (counting bets and not markets) with a lifetime P/L of 111.302 SEK (approximalety 11.600 EURO or 9980 GBP), most of the profit made in the last 18 months.

Post_20170529_3

Betfair Premium Charge simulation

As my bot now has a track record of 2 years in profitability I decided to do some research in the topic of Premium Charge on Betfair. As of today I am not paying any kind of additional charges, but I guess that if my bot keeps moving money to my account I will sooner or later reach the PC limit? Is there some strategy that I could use to optimize my model between profit and charges?

This will be a two part post. This first post will focus on the behavior of PC charges in the context of my model, the second post will focus on optimizing the model with charges as one of the factors.

Right now my total commission to gross profit ratio is 37.8%. All those years turning over money for a small loss are finally paying off! But the ratio is declining and if I have understood everything correct the first magic limit is 20%, when hitting that limit I will always need to pay the difference up to 20% in PC charge.

If I should be even more successful (that is my plan) I could eventually hit the Super Premium Charge (I need to have net profit of £250.000, which is far from my current profit…). In that case I could be eligible to pay the difference up to somewhere between 40-60% based on my actual ratio.

It is hard to get a grip of what that would mean to my kind of betting, so to clarify I created a small simulation where I simulate the behavior of my model (same kind of odds and tested it for different gross ROI%) and this is what I came up with:

The above chart shows which kind of commission/profit ratio (from now C/P Ratio) my model would generate for different edges.

A. This is the current expected yield of my model right now (1.3%). At this point I expect my C/P Ratio to be around 28 %.

B. This is the point to where I can adjust my model without reaching the Premium Charge (around 2% yield).

C. If I ever reach the level of Super Premium Charge (£250.000), I will need to hold my model up to max 0.9 % yield to avoid paying that charge.

The above chart show how my model would be effected by Premium Charge (PC) and Super Premium Charge (SPC). As an example I have plotted the line to show the effect of a model returning a gross yield of 3%. The PC would bring it down to 2.7 %, and finally when hitting SPC it would be brought down to 2.1 %.

How to conclude on this?

I now know that I can calibrate my model up to a gross yield of 2 % without paying the PC, and if I reach the SPC limit I must keep the model below 0.9% yield to avoid SPC.

In the next post I will apply these curves to my own models, calibrate them at different yield% and see how many bets are generated at different levels and finally calculate my expected monetary win (yes, I prefer to maximize money and not minimize charges!).

 

 

Post_20170529_3

A beautiful view!

Usually I only take a quick look at my bot once or twice a day to make sure that it is up and running. Often I just see a quite boring screen with no action, but when I looked yesterday I saw this:

Following 45 markets, with live bets on at least 13 of them. Most of them still being green at the end of the match, and a total exposure of around 36000 SEK. Did some reflecting yesterday: It would be impossible for me to manually trade all these markets, bot betting makes it possible for me to follow huge amount of markets and therefor it is also sufficient to only have a small edge to see some actual positive change on my bank. I calibrate my models to hit around ROI 101%, a target which I achieve because I have great data and I have excluded markets and situation when building my models. My models are niche models, and they are really good in their niche. I consider this to be the only possibility for me to build successful models, if I would try to model all markets and all live situations I would probably have a poor losing model (being an amateur with limitations in time and money I would be outperformed by the bigger syndicates).

If I were to give you a few tips how to be successful in your model building:

  1. Model one or few markets, and focus on a certain events/situations there.
  2. Settle with a low ROI, and maximize number of bets instead.
  3. Keep your costs low, don’t pay a lot of money for data, software or other. Your profit will vanish!

 

Post_20170529_3

Evaluating my bot bets with hit-rate

During the last few weeks I have noticed a drop in turnover and especially in number of bets placed by my bot. Is my edge vanishing? What is the problem?!

To answer these questions I needed to create three KPI’s that describes how my models are performing in terms of generating bets and turnover; Hit-rate%, Try-rate% and Model%. I define them as:

Hit-rate = # Matched markets / # Potential markets
Try-rate = # Amt req markets / # Potential markets
Model-rate = # Potential markets / # Followed markets

The gross number of markets followed by the bot is labeled “Followed markets”, the number of markets that are within my risk appetite (meaning a betting situation can occur) is labeled “Potential markets”, “Amt req markets” are the number of markets where I asked for a bet and finally the “Matched markets” is the number of markets where I at least got a bet partially matched.

Plotting these KPI’s for the last couple of years:

 

From the above chart we can see at least three important things:

a. The difference between my Try-rate and Hit-rate is constant => I still get at least partially matched in 90 % of my bets.
b. There seem to be a lift in hit-rate/try-rate in January 2017, which is contrary to what my intuition says. A rise from around 10 % to 15 %, which can be explained by the new strategies I have added for 2017 (they are only tested with minimum stakes and therefor their presence is only visible here and not in turnover).
c. The Model-rate is also constant at around 85%, meaning that my risk appetite have the same impact in relative terms as previous years.

In the above chart we see the absolute number of markets followed and markets within my risk appetite. We can clearly see two things:

a. The cyclic nature of soccer markets, with many markets played in April and October and less markets in December/January/June.
b. The increase of markets followed by the bot during the last years, explained mainly by improving my code and therefor making it possible to follow more markets simultaneously.

From these two charts I conclude that the low in bets generated is simply a problem with few markets played. When a market is followed I still have the same probability to find a betting opportunity and the same probability to get a bet through. I am also positive surprised that the test strategies lifts my hit-rate from 10 % to 15 %, now I only hope that they also will deliver a ROI of +101%.

Post_20170529_3

Top10 supported soccer teams – Looking for edges – Part 3 of 3

This is the third post in the following series:

1. If many “play-for-fun” supporters bet on their favorite team, can laying them pre-game be a winning strategy?
2. What if one of these teams take a one goal lead in-play. Should I back or lay?
3. What if their opponent takes the lead by one goal. Should I back or lay?

In this last exercise we examine the situation where the Top10 team suddenly is trailing by one goal. This doesn’t happen often so there is only a small amount of data.


There seem to be value in laying the Top10 team if it is the home team, and the match is a domestic league match. It seems like the market overestimates the comeback potential in those cases!

Now we have mined through some data and found a few angles that could be interesting to exploit, so in the next blog post I intend to create some strategies from these insights for 2017 – and will follow up on them during the year. So check back in a few days!

Post_20170529_3

Summing up 2016 and prognosis for 2017

It has been a fantastic year for the bot! Looking back for my 2016 prognosis one year ago, I wrote:

“So what do I hope for 2016? Its not of any value to have financial goals, I will just try to improve the model, bot and risk management as much as possible and hope for the best… But walking into 2016 with much better starting point than in 2015, a reasonable guess would be to turn at least 4 MSEK, and reach a ROI of 1 %. If that’s the case it would mean a profit around 40000 SEK.”

The actual performance for 2008-2016:

post_20170101_1

I managed to increase both turnover and ROI, instead of the prognosis to turn 4 MSEK I turned 6.1 MSEK and instead of 1 % yield I got 1.2%. Increasing both of them gave me a profit of 75 865 SEK (instead of the anticipated 40 000 SEK).

Breaking down the bets for 2016 on bet types:

post_20170101_2

I am happy to see that I am “green all over”, although the Draw and Over/Under models are performing below expectations.

The plan for 2017 is to keep the good models for Home and Away, and do some minor changes to Draw and Over/Under to slightly improve their yield. I aim to get all models +1.0% yield. My total yield goal is to improve from 1.24% to 1.30%.  A bigger wallet for 2017 will also mean bigger stakes and more turnover. Projecting the turn for the last few months indicates that 2017 could turn around 10 MSEK in total. If both these conditions hold I guess that the bot will generate around 130 000 SEK. That would be very satisfying!

I have also implemented two new models, one for Home and one for Over/Under. These are non-competitive with the other models (meaning that they wont ever bet on the same market). I will start these models with very small stakes, and evaluate during the year. If I could get these models going on full stakes later this year it would increase turnover a lot….

Finally, happy new year to you all and let us make 2017 a magic betting year!

 

 

Post_20170529_3

Top10 supported soccer teams – Looking for edges – Part 2 of 3

This is the second post in the following series:

1. If many “play-for-fun” supporters bet on their favourite team, can laying them pre-game be a winning strategy?
2. What if one of these teams take a one goal lead in-play. Should I back or lay?
3. What if their opponent takes the lead by one goal. Should I back or lay?

The data is from in-play match-odds from 2013, and the bet is calculated from the first recording after the first goal that also has an over-round of maximum 2 %.

I mined through the data and found something interesting when I separated league matches from other matches (cups, champions league etc). Domestic league are marked as “Y” and others as “N” in the table:

post20161203

Backing the top10 teams in other matches but league-matches has been a good profitable strategy the latest years, and has worked well both when the top10 team is playing home and when playing away.

The league matches show the opposite trend, backing the top10 team would have been something similar to setting fire to your money. On the other hand, laying them would have been profitable (including the negative yield laying away in 2016).

In the next post I will deep into the situation where the opponent to the top10 team takes a one goal lead…

Post_20170529_3

Top10 supported soccer teams – Looking for edges – I/III

I decided to look into the European soccer teams with the biggest supporter base. Doing a quick google on the subject I found the top10 teams to be:

1. Manchester United
2. Real Madrid
3. FC Barcelona
4. Chelsea
5. Arsenal
6. Liverpool
7. FC Bayern Munich
8. AC Milan
9. Juventus
10. Paris Saint-Germain

I found the list at totalsportek.com, it is their ranking (based on followers on social media, TV-viewership, shirt sales and sponsorship deals), and I decided to go with that. I have three questions I want to explore:

1. If many “play-for-fun” supporters bet on their favourite team, can laying them pre-game be a winning strategy?
2. What if one of these teams take a one goal lead in-play. Should I back or lay?
3. What if their opponent takes the lead by one goal. Should I back or lay?

I will split this subject into three different blog post, starting with the pre-game question. My hypotheses is that when big amounts of supporter money hits the line the odds on the big team will get eaten, therefore there might be an edge laying the big team.

I use my own recorded data on Betfair with the following notes:

1. The pre-game odds that I use is recorded a few minutes before the kick-off.
2. If it’s a match between two top10 teams, then it’s excluded.
3. Data from 2013 until today.
4. Not complete data, some matches have not been recorded and I know nothing about them.

The result I get is seen in the the table below:

post_20161128_1

I am looking for a strategy that have been consistent over time, and where I have some exposure. Both Premier League and Primera Division have a history of positive yield when laying any of the top10 teams. Maybe this could be an interesting pre-game strategy for 2017? It’s big markets and you can probably get large sums matched pre-game.

Post_20170529_3

Tools and infrastructure for analysing big data

coder

 

Its been some time since last update, I have been spending my (very limited) spare time recoding my whole analysis infrastructure. I use the PostgreSQL database with my bot, but it just dumps raw data into a database. I need to adjust, clean and process my data – something I have been using SAS to do earlier. SAS is a great tool for analysing data, but not that great when it comes to structuring millions and millions of lines. So I have rewritten my SAS code into SQL code instead. I will now create all my data tables (used in analysis) by SQL code into my database, this have increased the speed of creating my tables.

For analysis I will use the free edition of SAS (University edition), it is basically made for training so it has some limitations. One of the things I stumbled into was the issue of connecting my database to SAS and reading directly from it. It is NOT featured in the free edition, but it can be overruled by a few simple tricks. Download the PC Files Server for SAS, run it in the background and libname it with something like:
LIBNAME z PCFILES SERVER=computername port=9621 DSN=raw USER=username PASSWORD=xx;

This unlocks the free edition to actually being useful for big volume data analysis. As I get more and more data I also have to sharpen the infrastructure so that it’s manageable in size and time.

As I a last improvement I am going to write a simulation module in VBA costume made for my needs, sometimes it’s just not possible to fit all my needs into a fabricated software.

I have now spent many hours to create some analysis tables which are exactly the same as earlier, not as funny as improving models and looking for areas with edge but with the improved structure I will be in a better position when I start to analyse. Do the hard work and hopefully get the benefits later 🙂