我正在编写一个机器人,使用他们的API在Betfair网站上下注。Python
我想在足球(足球)比赛进行时下注。
我编写了一个 XML 提要来为我提供来自比赛的实时数据,但是 XML 提要并不总是使用与 Betfair 相同的足球队名称。
例如,当提到曼联时,必发可能会使用“Man Utd”,而 XML 提要可能会使用“Man United”或其他一些变体。我不限于流行的市场,因此建立一个标准的必发到 XML 名称转换表是不可行的。
我正在尝试使用某种概率字符串匹配来给我一些迹象,表明这两个数据源指的是同一个团队。
到目前为止,我玩过 Reverend,它似乎做了一些贝叶斯计算,但是我认为我没有正确使用它,因为我必须将字符串分解train
为guesser
. 然后我简单地平均每个字母与每个名称相关联的概率,我知道这在数学上是不正确的,但我认为这可能是一个可行的启发式测试。
这是我的代码:
import scorefeed
from reverend.thomas import Bayes
guesser = Bayes()
teams=['home','away']
def train(team_no, name):
for char in name:
guesser.train(teams[team_no], char)
def untrain(team_no, name):
for char in name:
guesser.untrain(teams[team_no], char)
def guess(name):
home_guess = 0.0
away_guess = 0.0
for char in name:
if len(guesser.guess(char)) > 0:
for guess in guesser.guess(char):
if guess[0] == teams[0]:
home_guess = home_guess + guess[1]
print home_guess
if guess[0] == teams[1]:
away_guess = away_guess + guess[1]
print away_guess
home_guess = home_guess / float(len(name))
away_guess = away_guess / float(len(name))
probs = [home_guess, away_guess]
return probs
def game_match(betfair_game_string, feed_home, feed_away):
home_team = betfair_game_string[0:betfair_game_string.find(' V ')]
away_team = betfair_game_string[betfair_game_string.find('V')+2:len(betfair_game_string)]
train(0, home_team)
train(1, away_team)
probs = []
probs.append(guess(feed_home)[0])
probs.append(guess(feed_away)[1])
untrain(0, home_team)
untrain(1, away_team)
return probs
print game_match("Man Utd V Lpool", "Manchester United", "Liverpool")
当前设置产生的概率是[0.4705411764705883, 0.5555]
。如果有任何想法或改进,我将不胜感激。
编辑:我有另一个想法,我希望它在必发和提要上是相同的匹配。但这给了我第一个名字匹配和第二个名字匹配的概率。我需要找到第一个和第二个名字匹配的概率。因此,我编写了以下函数,这似乎给了我更合理的结果:
def prob_match(probs):
prob_not_home = 1.0 - probs[0]
prob_not_away = 1.0 - probs[1]
prob_not_home_and_away = prob_not_home*prob_not_away
prob_home_and_away = 1.0 - prob_not_home_and_away
return prob_home_and_away
我仍然会很感激对不同方法的任何建议或现有库的建议做同样的事情,或纠正我的概率计算的提示。