Finding value in Singapore Pools
Of all places, this is the last place I expect to find value. But I found it - supposedly!
I compared the Singapore Pools Odds against Fivethirtyeight blog probabilities of teams’ winning various leagues.
The spread in Singpore Pools is often insane. In a typical 1X2 game, the odds is around 15% - as compared to a spread of 3% in overseas betting houses - which btw is illegal in Singapore.
Spread simply is summation of the inverse for all decimal odds subtracted by 1. The amount you concede to the ‘house’.
As much as this blog is about analytics and showcasing my skillset, it’s also about having skin in the game.
Disclosure: I bet 280 dollars on Barcelona to win Champions League in early March. Why $280 you may ask? I think that’s the amount of cash I had in my wallet at that point of time. I just realised Barcelona lost by 3-0 today. That’s like a black swan event. I was in the money - options terminology - 5 dollars odds down to 3 dollars. But poof! Oh well. It’s something I have to accept in the probability game.
Here’s my short analysis. Enjoy!
#Analyzing UEFA champons league odds
dat_cl = data.frame(team = c("real","bayern","barca","manu","mancity","jue"),
sg = c(4.5,5,5,15,3.3,8),
five = c(1/0.15,1/0.19,1/0.22,1/0.02,1/0.15,1/0.13))
dat_cl$underval = ifelse(dat_cl$five < dat_cl$sg,1,0)
print(dat_cl)
## team sg five underval
## 1 real 4.5 6.666667 0
## 2 bayern 5.0 5.263158 0
## 3 barca 5.0 4.545455 1
## 4 manu 15.0 50.000000 0
## 5 mancity 3.3 6.666667 0
## 6 jue 8.0 7.692308 1
#Championship league
dat_champ = data.frame(team = c("wolf","cardiff","aston","fulham"),
sg = c(1.03,5,15,30),
five = c(1/0.85,1/0.1,1/0.03,1/0.01))
dat_champ$underval = ifelse(dat_champ$five < dat_champ$sg,1,0)
print(dat_champ)
## team sg five underval
## 1 wolf 1.03 1.176471 0
## 2 cardiff 5.00 10.000000 0
## 3 aston 15.00 33.333333 0
## 4 fulham 30.00 100.000000 0
#europa
dat_eur = data.frame(team = c("ath","dort","ars","lazio","mars","rb_lei","lyon","ac","cska","sport","ath_bil","rb_sal","zenit","dyn"),
sg = c(2.9,5,6,9.5,17,10,12,11,40,15,17,150,40,80),
five = c(1/0.26,1/0.11,1/0.09,1/0.08,1/0.06,1/0.06,1/0.05,1/0.05,1/0.04,1/0.04,1/0.04,1/0.03,1/0.03,1/0.03))
dat_eur$underval = ifelse(dat_eur$five < dat_eur$sg,1,0)
print(dat_eur)
## team sg five underval
## 1 ath 2.9 3.846154 0
## 2 dort 5.0 9.090909 0
## 3 ars 6.0 11.111111 0
## 4 lazio 9.5 12.500000 0
## 5 mars 17.0 16.666667 1
## 6 rb_lei 10.0 16.666667 0
## 7 lyon 12.0 20.000000 0
## 8 ac 11.0 20.000000 0
## 9 cska 40.0 25.000000 1
## 10 sport 15.0 25.000000 0
## 11 ath_bil 17.0 25.000000 0
## 12 rb_sal 150.0 33.333333 1
## 13 zenit 40.0 33.333333 1
## 14 dyn 80.0 33.333333 1