Я в процессе написания бота, который ставит ставки на веб-сайте Betfair, используя их API Python
. Я хочу делать ставки на футбольные матчи, когда они играют в игру.Probabalistic String Matching in Python
Я закодировал XML-канал, чтобы дать мне живые данные из игр, однако XML-фид не всегда использует одно и то же имя для футбольных команд, как использование Betfair.
Например, если ссылаться на «Манчестер Юнайтед Бетфейр», можно использовать «Манчестер Юнайтед», в то время как XML-канал может использовать «Man United» или какой-либо другой вариант. Я не ограничиваюсь популярными рынками, поэтому создание стандартной таблицы преобразования имен Betfair в XML не представляется возможным.
Я пытаюсь использовать какое-то вероятностное сопоставление строк, чтобы дать мне указание, что два источника данных относятся к тем же командам.
До сих пор я играл с преподобным, который, кажется, выполняет байесовские вычисления, однако я не думаю, что я использую его должным образом, поскольку мне нужно разбить строку на символы до 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]
. Я был бы очень благодарен за любые идеи или улучшения.
EDIT: У меня была другая мысль: мне нужна вероятность того, что это будет тот же самый матч на Betfair и фиде. Но это дает мне вероятность совпадения первого имени и совпадения второго имени. Мне нужно найти вероятность совпадения первых И-вторых имен. Поэтому я закодирован до следующей функции, которая, кажется, чтобы дать мне более разумные результаты:
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
я бы до сих пор ценю любые предложения для различных методов или рекомендаций существующих библиотек, которые делают то же самое, или советов по исправлению моей вероятности расчеты.
Вы решили эту проблему. – briankip
Я никогда не решал это правильно, лучшим решением, которое я нашел, было то, что я ввел в редактирование. Есть несколько вещей, которые я хотел бы попробовать в настоящее время, возможно, сравнение кодировок soundex двух строк или, возможно, повторяющейся нейронной сети, использующей LSTM или что-то в этом роде. – James