# 世界杯足彩怎么买划算？机器学习AI告诉你答案(含预测)

## 引言

1、足彩靠服务费赚钱，选择的场次不存在假球因素
2、你的资金规模足以支撑长期买足彩

1）赔率陷阱

2）赌徒谬误陷阱

## 足彩赔率推导及返还率推导

(W-1) * 1 * P - 1* (1-P) = 0
W-1 为盈利， 1为输的时候的亏损。那么 求解方程 P = 1/W  , 同理 平的概率是  1/D ， 客胜的概率是  1/L   ，加起来是100%

## 定义问题，特征选取，数据抓取

绕了一大圈，其实简单来说，我们要做的就是自行计算胜平负的概率，然后套用EV公式看根据赔率投注是否划算。

# coding=utf-8
import urllib.parse
import urllib.request
import gzip
from bs4 import BeautifulSoup

class Game:
def __str__(self):
return '%s,%s,%s,%s,%s,%s,%s,%s,%s' %(self.race,self.turn,self.time,self.host,self.guest,self.rate_w,self.rate_tie,self.rate_lose,self.rate_back)

def getHtml(url,values):
user_agent='Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
headers = {'User-Agent':user_agent}
data = urllib.parse.urlencode(values)
response_result = urllib.request.urlopen(url+'?'+data).read()
#压缩过的数据，一般不需要unzip 视具体网页决定
html = gzip.decompress(response_result)
html = html.decode('gbk')
return html
#return ""

#获取数据
def requestOdds(index):
print('向足彩数据网站请求数据')
url = 'http://odds.500.com/#!league=%5B40%2C109%2C352%5D'
value= {
}
result = getHtml(url,value)
return result

if __name__ == '__main__':
print("start parse")
text = requestOdds(1)
soup = BeautifulSoup(text, 'html.parser')
items = soup.find_all('tr', attrs={'': ''}, limit=1000)
size = 15
for item in items:
#print(item)
tds = item.find_all('td')
games = []
#只抓世界杯比赛
if len(tds)>=size and tds[1].string=='世界杯':
game = Game()
game.race = tds[1].string
game.turn = tds[2].string
game.time = tds[3].string
game.host = tds[4].string
game.guest = tds[6].string
game.rate_w = tds[11].string
game.rate_tie = tds[12].string
game.rate_lose = tds[13].string
game.rate_back= tds[14].string
games.append(game)

## 模型建立，程序回测，预测胜率

from numpy import *
def sigmoid(inX):
return 1.0/(1+exp(-inX))

def stocGradAscent1(dataMatrix, classLabels, numIter=500):
m,n = shape(dataMatrix)
weights = ones(n)   #initialize to all ones
for j in range(numIter):
dataIndex = list(range(m))
for i in range(m):
alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not
randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constant
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights

5、结论及展望
综上，我们看球预测时，需要较精确地估算出一个胜率，然后看足彩给的赔率是否合适，如果 胜率> 1/赔率，则适合下注，是个正EV的游戏。而不是十分肯定地说某某队会赢，毕竟庄家都不敢这么预测。如何估算胜率？我们可以选择一些特征值，进行线性回归，确定特征值对应的系数，然后预测下场比赛的赛果。

https://zhuanlan.zhihu.com/p/26929562
《机器学习实战》

posted on 2018-07-30 12:05  坚毅的刀刀  阅读(2299)  评论(0编辑  收藏  举报