Skip to content

Instantly share code, notes, and snippets.

@daveklotz
Created July 31, 2021 19:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daveklotz/83f0da28919fcd383d81707255544225 to your computer and use it in GitHub Desktop.
Save daveklotz/83f0da28919fcd383d81707255544225 to your computer and use it in GitHub Desktop.
Generate the data and run the ANN so I can get picks for today's games
######
# NOTE: this includes calculaiton for my first Wins Above Replacement approach, as well as the current DRA- approach
######
games = mlbgame.day(2021,7,30)
daily_game_id = 1
unique_row_id = 1. # just to make sure i have the same format as legacy spreadsheet
location_index = 0
pix_index = 0
for game in games:
# First for AWAY team, then do the same thing for HOME team
team = game.away_team
h1v0 = 0
opp = game.home_team
#API is sending back home starter as visitor, and visitor starter as home...
# and sometimes doesnt have one even for future games
try:
team_starter = game.p_pitcher_home
opp_starter = game.p_pitcher_away
#print(team_starter)
team_starter_war = get_starter_war(pecota_df, team_starter)
opp_starter_war = get_starter_war(pecota_df, opp_starter)
team_starter_dra_minus = get_starter_dra_minus(pecota_df, team_starter)
opp_starter_dra_minus = get_starter_dra_minus(pecota_df, opp_starter)
except AttributeError:
team_starter = "NONE"
opp_starter = "NONE"
team_starter_war = -888
opp_starter_war = -888
team_starter_dra_minus = 888
opp_starter_dra_minus = 888
money_line = get_money_line(odds_df, team)
implied_win_prob = bu.money_line_to_win_prob(money_line)
team_win_pct = get_win_pct_nickname(teams, injury_df, team, "PECOTA Win Pct 7/5")
opp_win_pct = get_win_pct_nickname(teams, injury_df, opp, "PECOTA Win Pct 7/5")
win_pct_diff = team_win_pct - opp_win_pct
starter_war_diff = team_starter_war - opp_starter_war
starter_dra_minus_diff = team_starter_dra_minus - opp_starter_dra_minus
prediction_warp_based = ann_warp.predict([[h1v0, starter_war_diff, win_pct_diff]])
predicted_win_prob_warp = prediction_warp_based[0][0]
team_1_predicted_pct_warp = predicted_win_prob_warp
key_vars = [h1v0, win_pct_diff, starter_dra_minus_diff ]
key_vars = dra_minus_scaler.transform([key_vars])
prediction_dra_minus_based = ann_dra_minus.predict([key_vars])
predicted_win_prob_dra_minus = prediction_dra_minus_based[0][0]
team_1_predicted_pct_dra_minus = predicted_win_prob_dra_minus
pred_minus_implied_warp = predicted_win_prob_warp - implied_win_prob
pred_over_implied_05_warp = (1 if pred_minus_implied_warp > .05 else 0)
pred_over_implied_10_warp = (1 if pred_minus_implied_warp > .1 else 0)
result_wl = ('?' if pred_over_implied_05_warp == 1 else '')
stake = (100 if money_line > 0 else abs(money_line)) * pred_over_implied_05_warp
pred_minus_implied_dram = predicted_win_prob_dra_minus - implied_win_prob
pred_over_implied_dram = (1 if pred_minus_implied_dram > 0 else 0)
pred_over_implied_05_dram = (1 if pred_minus_implied_dram > .05 else 0)
pred_over_implied_10_dram = (1 if pred_minus_implied_dram > .1 else 0)
result_wl_dram = ('?' if pred_over_implied_dram == 1 else '')
stake_dram = (100 if money_line > 0 else abs(money_line)) * pred_over_implied_dram
daily_df.loc[location_index] = [daily_game_id, team, h1v0, opp, team_starter, opp_starter,
money_line, implied_win_prob,
team_win_pct, opp_win_pct, team_starter_war, opp_starter_war, win_pct_diff,
starter_war_diff, unique_row_id, predicted_win_prob_warp, pred_minus_implied_warp,
pred_over_implied_05_warp, pred_over_implied_10_warp, result_wl, stake,
team_starter_dra_minus, opp_starter_dra_minus, starter_dra_minus_diff,
team_1_predicted_pct_dra_minus, pred_minus_implied_dram,
pred_over_implied_dram,
pred_over_implied_05_dram, pred_over_implied_10_dram, result_wl_dram,
stake_dram]
#print(daily_game_id, team, h1v0, opp, team_starter, opp_starter, money_line, implied_win_prob,
# team_win_pct, opp_win_pct, team_starter_war, opp_starter_war, win_pct_diff,
# starter_war_diff, unique_row_id, predicted_win_prob, pred_minus_implied,
# pred_over_implied_05, pred_over_implied_10, result_wl, stake)
if pred_over_implied_05_warp == 1:
if pred_over_implied_10_warp == 1:
over_10 = 1
else:
over_10 = 0
if not (team_starter_war == -999 or opp_starter_war == -999):
pix_df_warp.loc[pix_index] = [team, team_starter, opp, opp_starter, money_line, 1, over_10]
pix_index = pix_index + 1
if pred_over_implied_dram == 1:
if pred_over_implied_05_dram == 1:
over_05_dram = 1
else:
over_05_dram = 0
if not (team_starter_dra_minus == 888 or opp_starter_dra_minus == 888):
pix_df_dram.loc[pix_index] = [team, team_starter, opp, opp_starter, money_line, 1, over_05_dram]
pix_index = pix_index + 1
location_index = location_index + 1
unique_row_id = unique_row_id + 1
# then for HOME team
team = game.home_team
h1v0 = 1
opp = game.away_team
#API is sending back home starter as visitor, and visitor starter as home...
try:
team_starter = game.p_pitcher_away
opp_starter = game.p_pitcher_home
#print(team_starter)
team_starter_war = get_starter_war(pecota_df, team_starter)
opp_starter_war = get_starter_war(pecota_df, opp_starter)
team_starter_dra_minus = get_starter_dra_minus(pecota_df, team_starter)
opp_starter_dra_minus = get_starter_dra_minus(pecota_df, opp_starter)
except AttributeError:
team_starter = "NONE"
opp_starter = "NONE"
team_starter_war = -888
opp_starter_war = -888
team_starter_dra_minus = 888
opp_starter_dra_minus = 888
money_line = get_money_line(odds_df, team)
implied_win_prob = bu.money_line_to_win_prob(money_line)
team_win_pct = get_win_pct_nickname(teams, injury_df, team, 'PECOTA Win Pct 7/5')
opp_win_pct = get_win_pct_nickname(teams, injury_df, opp, 'PECOTA Win Pct 7/5')
win_pct_diff = team_win_pct - opp_win_pct
starter_war_diff = team_starter_war - opp_starter_war
starter_dra_minus_diff = team_starter_dra_minus - opp_starter_dra_minus
prediction_warp_based = ann_warp.predict([[h1v0, starter_war_diff, win_pct_diff]])
predicted_win_prob_warp = prediction_warp_based[0][0]
team_2_predicted_pct = predicted_win_prob_warp
key_vars = [h1v0, win_pct_diff, starter_dra_minus_diff ]
key_vars = dra_minus_scaler.transform([key_vars])
prediction_dra_minus_based = ann_dra_minus.predict([key_vars])
predicted_win_prob_dra_minus = prediction_dra_minus_based[0][0]
team_2_predicted_pct_dra = team_2_predicted_pct
pred_minus_implied_warp = predicted_win_prob_warp - implied_win_prob
pred_over_implied_05_warp = (1 if pred_minus_implied_warp > .05 else 0)
pred_over_implied_10_warp = (1 if pred_minus_implied_warp > .1 else 0)
result_wl = ('?' if pred_over_implied_05_warp == 1 else '')
stake = (100 if money_line > 0 else abs(money_line)) * pred_over_implied_05_warp
pred_minus_implied_dram = predicted_win_prob_dra_minus - implied_win_prob
pred_over_implied_dram = (1 if pred_minus_implied_dram > 0 else 0)
pred_over_implied_05_dram = (1 if pred_minus_implied_dram > .05 else 0)
pred_over_implied_10_dram = (1 if pred_minus_implied_dram > .1 else 0)
result_wl_dram = ('?' if pred_over_implied_dram == 1 else '')
stake_dram = (100 if money_line > 0 else abs(money_line)) * pred_over_implied_dram
#let's see if adjusting the win percentages such that the total of the two equals 100% changes anything
#team_total_win_pct = team_1_predicted_pct + team_2_predicted_pct
#team_1_adjusted_win_pct = team_1_predicted_pct / team_total_win_pct
#team_2_adjusted_win_pct = team_2_predicted_pct / team_total_win_pct
# moved to the excel spreadsheet becasuse it was easer to do faster
#daily_df.loc[location_index] = [daily_game_id, team, h1v0, opp, team_starter, opp_starter, money_line, implied_win_prob,
# team_win_pct, opp_win_pct, team_starter_war, opp_starter_war, win_pct_diff,
# starter_war_diff, unique_row_id, predicted_win_prob, pred_minus_implied,
# pred_over_implied_05, pred_over_implied_10, result_wl, stake, ]
daily_df.loc[location_index] = [daily_game_id, team, h1v0, opp, team_starter, opp_starter,
money_line, implied_win_prob,
team_win_pct, opp_win_pct, team_starter_war, opp_starter_war, win_pct_diff,
starter_war_diff, unique_row_id, predicted_win_prob_warp, pred_minus_implied_warp,
pred_over_implied_05_warp, pred_over_implied_10_warp, result_wl, stake,
team_starter_dra_minus, opp_starter_dra_minus, starter_dra_minus_diff,
team_2_predicted_pct_dra, pred_minus_implied_dram, pred_over_implied_dram,
pred_over_implied_05_dram, pred_over_implied_10_dram, result_wl_dram,
stake_dram ]
#print(daily_game_id, team, h1v0, opp, team_starter, opp_starter, money_line, implied_win_prob,
# team_win_pct, opp_win_pct, team_starter_war, opp_starter_war, win_pct_diff,
# starter_war_diff, unique_row_id, predicted_win_prob, pred_minus_implied,
# pred_over_implied_05, pred_over_implied_10, result_wl, stake)
if pred_over_implied_05_warp == 1:
if pred_over_implied_10_warp == 1:
over_10 = 1
else:
over_10 = 0
if not (team_starter_war == -999 or opp_starter_war == -999):
pix_df_warp.loc[pix_index] = [team, team_starter, opp, opp_starter, money_line, 1, over_10]
pix_index = pix_index + 1
if pred_over_implied_dram == 1:
if pred_over_implied_05_dram == 1:
over_05_dram = 1
else:
over_05_dram = 0
if not (team_starter_dra_minus == 888 or opp_starter_dra_minus == 888):
pix_df_dram.loc[pix_index] = [team, team_starter, opp, opp_starter, money_line, 1, over_05_dram]
pix_index = pix_index + 1
location_index = location_index + 1
unique_row_id = unique_row_id + 1
daily_game_id = daily_game_id + 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment