IMPORT & LOAD

back


In [1]:
####Import libraries
# SQL
import sqlite3
# Data Manipulation
import numpy as np
import pandas as pd
# Visualization
import seaborn as sns
import matplotlib.pyplot as plt
import missingno as msno   #NaNs
#Nice Tables
from ipy_table import *

# Import and suppress warnings
import warnings
warnings.filterwarnings('ignore')

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

In [2]:
#load data (make sure you have downloaded database.sqlite)
with sqlite3.connect(r'C:/Users/ernest.chocholowski/Desktop/Datasets/Soccer/database.sqlite') as con:
    country_df = pd.read_sql_query("SELECT * from Country", con)
    matches_df = pd.read_sql_query("SELECT * from Match", con)
    league_df = pd.read_sql_query("SELECT * from League", con)
    team_df = pd.read_sql_query("SELECT * from Team", con)
    player_df = pd.read_sql_query("select * from Player", con)
    player_stats_df = pd.read_sql_query("select * from player_attributes", con)

#load past results
super_table=[["Name", 'Regression function', "Train Acc", 'Validation Acc', "r2_score", "conf_matrix", 'Cross-Valid.'],]
df_load = pd.read_csv(r'C:/Users/ernest.chocholowski/Desktop/GIT/SoccerAnalysis/out/results_table.csv')
for row in df_load.values.tolist():
    super_table.append(row)

In [3]:
all_df = [country_df, matches_df, league_df, team_df, player_df]
country_df.dfname = 'country_df'
matches_df.dfname = 'matches_df'
league_df.dfname = 'league_df' 
team_df.dfname = 'team_df' 
player_df.dfname = 'player_df'
player_stats_df.dfname = 'player_stats_df'

DATA EXPLORATION

back


In [4]:
for df in all_df:
    print(df.dfname)
    print(df.info())
    print('-'*40)


country_df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11 entries, 0 to 10
Data columns (total 2 columns):
id      11 non-null int64
name    11 non-null object
dtypes: int64(1), object(1)
memory usage: 256.0+ bytes
None
----------------------------------------
matches_df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25979 entries, 0 to 25978
Columns: 115 entries, id to BSA
dtypes: float64(96), int64(9), object(10)
memory usage: 22.8+ MB
None
----------------------------------------
league_df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11 entries, 0 to 10
Data columns (total 3 columns):
id            11 non-null int64
country_id    11 non-null int64
name          11 non-null object
dtypes: int64(2), object(1)
memory usage: 344.0+ bytes
None
----------------------------------------
team_df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 299 entries, 0 to 298
Data columns (total 5 columns):
id                  299 non-null int64
team_api_id         299 non-null int64
team_fifa_api_id    288 non-null float64
team_long_name      299 non-null object
team_short_name     299 non-null object
dtypes: float64(1), int64(2), object(2)
memory usage: 11.8+ KB
None
----------------------------------------
player_df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11060 entries, 0 to 11059
Data columns (total 7 columns):
id                    11060 non-null int64
player_api_id         11060 non-null int64
player_name           11060 non-null object
player_fifa_api_id    11060 non-null int64
birthday              11060 non-null object
height                11060 non-null float64
weight                11060 non-null int64
dtypes: float64(1), int64(4), object(2)
memory usage: 604.9+ KB
None
----------------------------------------

In [7]:
msno.matrix(matches_df)



In [8]:
matches_df.dropna(thresh=80, inplace=True)

In [9]:
msno.matrix(matches_df)



In [8]:
msno.dendrogram(matches_df)



In [9]:
matches_df.hist(figsize = (100, 100))
plt.show()



In [10]:
bookies = ['B365', 'BW', 'IW', 'LB', 'PS', 'WH', 'SJ', 'VC', 'GB', 'BS']
bookies_H = [bookie+'H' for bookie in bookies]
bookies_A = [bookie+'A' for bookie in bookies]
bookies_D = [bookie+'D' for bookie in bookies]
bookies_types = {'Home odds':bookies_H, 'Draw odds':bookies_D, 'Away odds':bookies_A}

In [11]:
for home, draw, away in zip(bookies_H,bookies_A,bookies_D):
    fig, ax = plt.subplots()
    for odds in [home, draw, away]:
        sns.distplot(matches_df[odds].dropna(), ax=ax, label=odds, hist = False)
    #set title
    plt.title(home[:-1], fontsize=16)
    #remove x label
    ax.set_xlabel('')
    ax.set_xlim([0, 8])
    plt.show()



In [12]:
plt.rc('legend',fontsize=30)
#_______All bookmakers - Home/Draw/Away odds | KDE + BOXPLOTS
bookies_types = {'Home odds':bookies_H, 'Draw odds':bookies_D, 'Away odds':bookies_A}
for bookie_type, bookie_list in bookies_types.items():
    fig, axes = plt.subplots(ncols=2, figsize=(30,15))
    axes[0].set_xlim([0, 8])
    if bookie_type=='Home odds':
        axes[0].set_ylim([0, 0.65])
    elif bookie_type =='Draw odds':
        axes[0].set_ylim([0, 2.3])
    else:
        axes[0].set_ylim([0, 0.35])
    for bookie in bookie_list:
        sns.distplot(matches_df[bookie].dropna(), ax = axes[0], label=bookie, hist = False)
    #remove x label
    axes[0].set_xlabel('')
    #locate legend 
    plt.legend(loc='best')
    col_sel = bookie_list
    bookie_sel_df = matches_df[bookie_list]
    axes[1] = sns.boxplot(data=bookie_sel_df, palette='Set2', showmeans=True)
    if bookie_type=='Home odds':
        axes[1].set_ylim([1, 5])
    elif bookie_type =='Draw odds':
        axes[1].set_ylim([1, 10])
    else:
        axes[1].set_ylim([1, 5.5])
    
    plt.suptitle(str(bookie_type), fontsize=80)
    plt.show()



In [13]:
#How many goals - Home\Away
goals_df = matches_df[['home_team_goal', 'away_team_goal']]
color = ['red', 'lime']
fig, ax = plt.subplots()
ax.set_xlim([0, 10])
ax.set_ylim([0, 9500])
sns.distplot(goals_df.dropna(), ax = ax, kde = False, color = color)
plt.show()

#Contingency table
goals_home_vs_away = pd.crosstab(index = matches_df["home_team_goal"],
                                 columns = matches_df["away_team_goal"])
print(goals_home_vs_away)


away_team_goal     0     1     2    3    4   5   6  7  8  9
home_team_goal                                             
0               1678  1580  1026  450  194  58  17  5  3  1
1               2238  2556  1429  640  218  64  17  2  1  0
2               1807  1879  1120  411  144  38  14  1  1  0
3                972  1017   524  230   46  16   7  0  0  0
4                456   412   205   78   26   9   0  0  0  0
5                152   157    62   20    5   2   0  0  0  0
6                 55    52    24    4    1   0   1  0  0  0
7                 20    12     1    3    0   0   0  0  0  0
8                  5     3     1    0    0   0   0  0  0  0
9                  1     2     1    0    0   0   0  0  0  0
10                 1     0     1    0    0   0   0  0  0  0

In [182]:
from pivottablejs import pivot_ui
matches_df['nobonus_expect_elo_cat'] = pd.cut(matches_df['nobonus_expect_elo'], bins=10, labels=False)
matches_df['100bonus_expect_elo_cat'] = pd.cut(matches_df['100bonus_expect_elo'], bins=10, labels=False)
matches_df['200bonus_expect_elo_cat'] = pd.cut(matches_df['200bonus_expect_elo'], bins=10, labels=False)
pivot_ui(matches_df[['elo_home', 'elo_away', 'elo_home_cat', 'elo_away_cat', 'nobonus_expect_elo_cat', 
            '100bonus_expect_elo_cat','200bonus_expect_elo_cat', 'VSPointDiff', 'RESULT']])


Out[182]:

FEATURE ENGINEERING

back


In [4]:
def get_last_matches_against_eachother(matches, date, home_team, away_team, x = 1000, concat=False):
    ''' Get the last x matches of two given teams. '''
    
    #Find matches of both teams
    home_matches = matches[(matches['home_team_api_id'] == home_team) & (matches['away_team_api_id'] == away_team)]    
    away_matches = matches[(matches['home_team_api_id'] == away_team) & (matches['away_team_api_id'] == home_team)]  
    
    #Get last x matches
    if(concat == True):
        total_matches = pd.concat([home_matches, away_matches])
        try:    
            last_matches = total_matches[total_matches.date < date].\
            sort_values(by = 'date', ascending = False).iloc[0:x,:]
        except:
            last_matches = total_matches[total_matches.date < date].\
            sort_values(by = 'date', ascending = False).iloc[0:total_matches.shape[0],:]

            #Check for error in data
            if(last_matches.shape[0] > x):
                print("Error in obtaining matches")
            #Return data
            return last_matches
    else:
        try:    
            last_home_matches = home_matches[home_matches.date < date].\
            sort_values(by = 'date', ascending = False).iloc[0:x,:]
        except:
            last_home_matches = home_matches[home_matches.date < date].\
            sort_values(by = 'date', ascending = False).iloc[0:home_matches.shape[0],:]

            #Check for error in data
            if(last_matches.shape[0] > x):
                print("Error in obtaining matches")
        try:    
            last_away_matches = away_matches[away_matches.date < date].\
            sort_values(by = 'date', ascending = False).iloc[0:x,:]
        except:
            last_away_matches = away_matches[away_matches.date < date].\
            sort_values(by = 'date', ascending = False).iloc[0:away_matches.shape[0],:]

            #Check for error in data
            if(last_matches.shape[0] > x):
                print("Error in obtaining matches")
        #Return data
        return (home_matches, away_matches)

In [5]:
def label_point_diff_against_eachother(row, df):
    last_matches = get_last_matches_against_eachother(df, row.date, row.home_team_api_id,
                                                  row.away_team_api_id)
    d_home = {'WIN': 3, 'DRAW': 0, 'LOSE': -3}
    last_matches[0]['POINTS'] = last_matches[0]['RESULT'].map(d_home)
    d_away = {'WIN': -3, 'DRAW': 0, 'LOSE': 3}
    last_matches[1]['POINTS'] = last_matches[1]['RESULT'].map(d_away)
    return (last_matches[0]['POINTS'].sum()+last_matches[1]['POINTS'].sum())

In [6]:
def impute_numeric (dataset, formula):
    """
    Impute numeric values in a dataset usinng linear regression
    dataset = Pandas Dataframe
    formula e.g. 'Y ~ X1 + X2'
    """
    import statsmodels.formula.api as smf
    import pandas as pd
    
    lm = smf.ols(formula = formula, data = dataset)
    res = lm.fit()
    
    temp_train = dataset[pd.isnull(dataset).any(axis=1)].copy()
    temp_train = temp_train.drop(formula.split(None, 1)[0], axis=1).copy()
    
    var_pred = res.predict(temp_train)
    var_pred = var_pred.round(decimals=0)
    
    dataset[formula.split(None, 1)[0]].fillna(var_pred, inplace=True)

In [7]:
def label_win (row):
    if row['home_team_goal'] > row['away_team_goal']:
        return 'WIN'
    if row['home_team_goal'] == row['away_team_goal']:
        return 'DRAW'
    if row['home_team_goal'] < row['away_team_goal']:
        return 'LOSE'

In [8]:
def label_position (row, X, Y):
        posY = row[Y]
        posX = row[X]
        if (posY==1.0 and posX==1.0):#GOALKEEPERS
            return 'GK'
        elif (posY == 2.0):
            return 'SW'
        elif (posY == 3.0): #CB and RBs
            if (posX < 4.0):
                return 'RB'
            elif (posX < 7.0):
                return 'CB'
            else:
                return 'LB'
        elif (posY == 4.0): #DM and RWBs
            if (posX < 4.0):
                return'RWB'
            elif (posX < 7.0):
                return 'DM'
            else:
                return 'LWB'
        elif (posY < 7.0): #CM and RWs
            if (posX < 4.0):
                return 'RW'
            elif (posX < 7.0):
                return 'CM'
            else:
                return 'LW'
        elif (posY < 9.0): #AM and RWs
            if (posX < 4.0):
                return 'RW'
            elif (posX < 7.0):
                return 'AM'
            else:
                return 'LW'
        else:
            if (posX < 4.0):
                return 'RWF'
            elif (posX < 7.0):
                return 'CF'
            else:
                return 'LWF'

In [9]:
def label_formation (row, home_flag):
    #Check if home or away
    if home_flag == True:
        prefix = 'home'
    else:
        prefix = 'away'
    #Define the vectors needed     
    players_lst = ['_player_2_', '_player_3_',
       '_player_4_', '_player_5_',
       '_player_6_', '_player_7_',
       '_player_8_', '_player_9_',
       '_player_10_', '_player_11_']
    player_positions = [prefix+player+'position' for player in players_lst]
    #roles on the playfield
    defenders = ['SW', 'RB', 'CB', 'LB', 'RWB', 'LWB']
    midfielders = ['DM', 'CM', 'LW', 'RW', 'AM']
    forwarders = ['RWF', 'CF', 'LWF']
    formation = [0, 0, 0]
    
    for position in player_positions:
        pos = row[position]
        if pos in defenders:
            formation[0] += 1
        elif home in midfielders:
            formation[1] += 1
        else:
            formation[2] += 1
    formation_string = '{}-{}-{}'.format(away_formation[0], away_formation[1], away_formation[2])
    return formation_string

In [10]:
def calculate_age(row, which_player):
    from datetime import date, datetime
    birthday_date = which_player + '_birthDate'
    birthday_date = datetime.strptime(row[birthday_date][:10], "%Y-%m-%d").date()
    match_date = datetime.strptime(row.date[:10], "%Y-%m-%d").date()
    return(match_date.year - birthday_date.year - ((match_date.month, match_date.day)
                                                   < (birthday_date.month, birthday_date.day)))

In [11]:
def match_entropy(row):
    from scipy.stats import entropy
    bookies = ['B365', 'BW', 'IW', 'LB', 'WH', 'VC', 'BS']
    odds_h = [row[bookie+'H'] for bookie in bookies]
    odds_d = [row[bookie+'D'] for bookie in bookies]
    odds_a = [row[bookie+'A'] for bookie in bookies]
    odds = [np.mean(odds_h), np.mean(odds_d), np.mean(odds_a)]
    #change odds to probability
    probs = [1/o for o in odds]
    #normalize to sum to 1
    norm = sum(probs)
    probs = [p/norm for p in probs]
    return entropy(probs)

In [80]:
def calc_probs(row, where):
    odds = [row['Home_odds'], row['Draw_odds'], row['Away_odds']]
    probs = [1/o for o in odds]
    #normalize to sum to 1
    norm = sum(probs)
    probs = [p/norm for p in probs]
    if where == 'home':
        return probs[0]
    elif where == 'draw':
        return probs[1]
    elif where == 'away':
        return probs[2]
    else: return None

In [12]:
def calculate_group_ratings (row, home_flag, role):
    import numpy as np
    
    #Define the vectors needed    
    if home_flag == True:
        prefix = 'home'
    else:
        prefix = 'away'
    
    players_lst = ['_player_2_', '_player_3_',
       '_player_4_', '_player_5_',
       '_player_6_', '_player_7_',
       '_player_8_', '_player_9_',
       '_player_10_', '_player_11_']
    player_positions = [prefix+player+'position' for player in players_lst]
    player_ratings = [prefix+player+'overall_rating' for player in players_lst]
    
    if role == 'defenders':
        role_list = ['SW', 'RB', 'CB', 'LB', 'RWB', 'LWB']
    elif role == 'midfielders':
        role_list = ['DM', 'CM', 'LW', 'RW', 'AM']
    elif role == 'forwarders':
        role_list = ['RWF', 'CF', 'LWF']

    scores_vector = []

#Counts the number of players in Defenders, Midfielders, Forwarders    
    for position, rank in zip(player_positions, player_ratings):
        pos = row[position]
        if pos in role_list:
            rtng = row[rank]
            scores_vector.append(rtng)

#Counts the average of overall rating in Defeders/Midfieldes/Forwarders    
    return np.mean(scores_vector)

In [13]:
def rate_elo(winner, loser, times=10):
    from elo import rate_1vs1
    winn=winner
    los = loser
    for i in range (times):
        winn, los = rate_1vs1(winn, los)
    return winn, los

In [14]:
def fetch_elo(team_id, date, df):
    #DEBUG
    if fetch_elo.counter is None:
        fetch_elo.counter = 1
    else:
        fetch_elo.counter += 1 #debug

    #Find matches
    home_matches_df = df[(df['home_team_api_id'] == team_id)]    
    away_matches_df = df[(df['away_team_api_id'] == team_id)]  
    total_matches_df = pd.concat([home_matches_df, away_matches_df])
    #Get last match with this team
    last_match_df = total_matches_df[total_matches_df.date < date].\
             sort_values(by = 'date', ascending = False).iloc[0:1,:]

    #calculate new elo rating
    try:
        home_id = last_match_df.iloc[0]['home_team_api_id']
        away_id = last_match_df.iloc[0]['away_team_api_id']
        result = last_match_df.iloc[0]['RESULT']
    except:
        #print ('#', fetch_elo.counter, 'Exception when trying to fetch last match of', team_id, 'in fetch_elo(). Assigning 1500 ELO')
        return 1500.0

    #are they home team?
    if (home_id == team_id):
        last_elo_ = last_match_df.iloc[0]['elo_home']
        last_elo_opponent = last_match_df.iloc[0]['elo_away']
        if result == 'DRAW': #if last match result was draw, then whatever, elo stays the same
            return last_elo_
        elif result == 'WIN':
            return rate_elo(last_elo_, last_elo_opponent)[0]
        elif result == 'LOSE':
            return rate_elo(last_elo_opponent, last_elo_)[1]
        else:
            print ('#', fetch_elo.counter, "ERROR:: Can't fetch result!")
            return np.nan

    #are they away team?
    elif (away_id == team_id):
        last_elo_ = last_match_df.iloc[0]['elo_away']
        last_elo_opponent = last_match_df.iloc[0]['elo_home']
        if result == 'DRAW': #if last match result was draw, then whatever, elo stays the same
            return last_elo_
        elif result == 'LOSE':
            return rate_elo(last_elo_, last_elo_opponent)[0]
        elif result == 'WIN':
            return rate_elo(last_elo_opponent, last_elo_)[1]
        else:
            print ('#', fetch_elo.counter, "ERROR:: Can't fetch result!")
            return np.nan

    else:
        print ('#', fetch_elo.counter, "ERROR:: Can't find home_team_api_id in last_match_df")
        return np.nan

In [15]:
def calculate_elo_ratings(row, df):
    home_id = row['home_team_api_id']
    away_id = row['away_team_api_id']
    date = row['date']
    #Fetch elo_home
    elo_home = fetch_elo(home_id, date, df)
    #fetch elo_away
    elo_away = fetch_elo(away_id, date, df)
    return elo_home, elo_away

In [16]:
def label_expect_elo(row, bonus=0):
    from elo import expect
    return expect(row['elo_home']+bonus,row['elo_away'])

end of function declarations

back


In [17]:
#FREAKING CHEATING NO WAITING SO GOOD
matches_df = pd.DataFrame().from_csv('saved_matches_df')

In [199]:
matches_df.head()


Out[199]:
id country_id league_id season stage date match_api_id home_team_api_id away_team_api_id home_team_goal away_team_goal home_player_X1 home_player_X2 home_player_X3 home_player_X4 home_player_X5 home_player_X6 home_player_X7 home_player_X8 home_player_X9 home_player_X10 home_player_X11 away_player_X1 away_player_X2 away_player_X3 away_player_X4 away_player_X5 away_player_X6 away_player_X7 away_player_X8 away_player_X9 away_player_X10 away_player_X11 home_player_Y1 home_player_Y2 home_player_Y3 home_player_Y4 home_player_Y5 home_player_Y6 home_player_Y7 home_player_Y8 home_player_Y9 home_player_Y10 home_player_Y11 away_player_Y1 away_player_Y2 away_player_Y3 away_player_Y4 away_player_Y5 away_player_Y6 away_player_Y7 away_player_Y8 away_player_Y9 away_player_Y10 away_player_Y11 home_player_1 home_player_2 home_player_3 home_player_4 home_player_5 home_player_6 home_player_7 home_player_8 home_player_9 home_player_10 home_player_11 away_player_1 away_player_2 away_player_3 away_player_4 away_player_5 away_player_6 away_player_7 away_player_8 away_player_9 away_player_10 away_player_11 B365H B365D B365A BWH BWD BWA IWH IWD IWA LBH LBD LBA PSH PSD PSA WHH WHD WHA SJH SJD SJA VCH VCD VCA GBH GBD GBA BSH BSD BSA RESULT home_player_1_position home_player_2_position home_player_3_position home_player_4_position home_player_5_position home_player_6_position home_player_7_position home_player_8_position home_player_9_position home_player_10_position home_player_11_position away_player_1_position away_player_2_position away_player_3_position away_player_4_position away_player_5_position away_player_6_position away_player_7_position away_player_8_position away_player_9_position away_player_10_position away_player_11_position VSPointDiff home_player_1_overall_rating home_player_2_overall_rating home_player_3_overall_rating home_player_4_overall_rating home_player_5_overall_rating home_player_6_overall_rating home_player_7_overall_rating home_player_8_overall_rating home_player_9_overall_rating home_player_10_overall_rating home_player_11_overall_rating away_player_1_overall_rating away_player_2_overall_rating away_player_3_overall_rating away_player_4_overall_rating away_player_5_overall_rating away_player_6_overall_rating away_player_7_overall_rating away_player_8_overall_rating away_player_9_overall_rating away_player_10_overall_rating away_player_11_overall_rating home_formation away_formation home_player_1_birthDate home_player_2_birthDate home_player_3_birthDate home_player_4_birthDate home_player_5_birthDate home_player_6_birthDate home_player_7_birthDate home_player_8_birthDate home_player_9_birthDate home_player_10_birthDate home_player_11_birthDate away_player_1_birthDate away_player_2_birthDate away_player_3_birthDate away_player_4_birthDate away_player_5_birthDate away_player_6_birthDate away_player_7_birthDate away_player_8_birthDate away_player_9_birthDate away_player_10_birthDate away_player_11_birthDate home_player_1_Age home_player_2_Age home_player_3_Age home_player_4_Age home_player_5_Age home_player_6_Age home_player_7_Age home_player_8_Age home_player_9_Age home_player_10_Age home_player_11_Age away_player_1_Age away_player_2_Age away_player_3_Age away_player_4_Age away_player_5_Age away_player_6_Age away_player_7_Age away_player_8_Age away_player_9_Age away_player_10_Age away_player_11_Age entropy home_defenders_score home_midfielders_score home_forwarders_score away_defenders_score away_midfielders_score away_forwarders_score elo_home elo_away nobonus_expect_elo 200bonus_expect_elo 100bonus_expect_elo
9531 9532 7809 7809 2013/2014 29 2014-04-05 1479252 8406 9823 1 0 1.0 2.0 4.0 6.0 8.0 4.0 6.0 3.0 5.0 7.0 5.0 1.0 4.0 6.0 8.0 2.0 4.0 6.0 3.0 5.0 7.0 5.0 1.0 3.0 3.0 3.0 3.0 6.0 6.0 8.0 8.0 8.0 11.0 1.0 3.0 3.0 3.0 3.0 6.0 6.0 8.0 8.0 8.0 11.0 114737.0 26618.0 27425.0 245526.0 240348.0 303905.0 37319.0 147735.0 35997.0 215170.0 95094.0 27299.0 33085.0 37410.0 174018.0 298823.0 30872.0 95078.0 176300.0 25366.0 266523.0 75447.0 7.5 5.00 1.36 7.50 5.0 1.36 7.3 4.4 1.40 8.5 5.0 1.33 8.84 5.04 1.41 9.0 3.8 1.44 7.5 4.5 1.36 8.0 5.00 1.44 8.01750 4.71750 1.38750 8.01750 4.71750 1.38750 WIN GK RB CB CB LB CM CM RW AM LW CF GK CB CB LB RB CM CM RW AM LW CF -12 70.0 65.0 73.0 63.0 57.0 82.0 73.0 65.0 72.0 70.0 71.0 72.0 69.0 72.0 70.0 69.0 71.0 75.0 71.0 62.0 74.0 65.0 4-5-1 4-5-1 1992-03-04 00:00:00 1991-09-23 00:00:00 1986-01-25 00:00:00 1989-05-15 00:00:00 1985-10-24 00:00:00 1989-02-25 00:00:00 1987-06-16 00:00:00 1992-09-27 00:00:00 1990-07-08 00:00:00 1988-12-20 00:00:00 1978-01-04 00:00:00 1992-03-04 00:00:00 1990-04-12 00:00:00 1986-01-25 00:00:00 1989-02-03 00:00:00 1990-05-29 00:00:00 1990-03-16 00:00:00 1990-08-16 00:00:00 1987-04-23 00:00:00 1991-05-28 00:00:00 1989-12-17 00:00:00 1986-05-21 00:00:00 22 22 28 24 28 25 26 21 23 25 36 22 23 28 25 23 24 23 26 22 24 27 0.837057 64.50 72.4 71.0 70.00 70.6 65.0 1502 2103 0.030483 0.090434 0.052951
9517 9518 7809 7809 2013/2014 27 2014-03-25 1479237 8177 9823 1 3 1.0 2.0 4.0 6.0 8.0 4.0 6.0 3.0 5.0 7.0 5.0 1.0 2.0 4.0 6.0 8.0 5.0 2.0 4.0 6.0 8.0 5.0 1.0 3.0 3.0 3.0 3.0 6.0 6.0 8.0 8.0 8.0 11.0 1.0 3.0 3.0 3.0 3.0 6.0 8.0 8.0 8.0 8.0 11.0 36878.0 12330.0 29543.0 278831.0 40985.0 20125.0 27307.0 40108.0 394462.0 212960.0 50345.0 27299.0 27303.0 36183.0 38432.0 121633.0 30894.0 30834.0 30872.0 95078.0 177714.0 116772.0 13.0 6.50 1.20 11.00 7.0 1.20 12.0 5.5 1.22 11.0 6.5 1.22 15.25 6.98 1.23 13.0 6.0 1.22 10.0 5.8 1.22 13.0 6.50 1.25 12.28125 6.34750 1.22000 12.28125 6.34750 1.22000 LOSE GK RB CB CB LB CM CM RW AM LW CF GK RB CB CB LB CM RW AM AM LW CF -30 74.0 68.0 76.0 63.0 57.0 76.0 71.0 74.0 76.0 69.0 73.0 70.0 71.0 70.0 69.0 72.0 70.0 75.0 73.0 79.0 65.0 70.0 4-5-1 4-5-1 1992-03-04 00:00:00 1990-04-12 00:00:00 1984-09-28 00:00:00 1989-05-15 00:00:00 1985-10-24 00:00:00 1985-09-07 00:00:00 1989-09-16 00:00:00 1990-08-13 00:00:00 1993-08-06 00:00:00 1985-10-23 00:00:00 1983-08-12 00:00:00 1992-03-04 00:00:00 1992-06-16 00:00:00 1994-01-19 00:00:00 1989-02-03 00:00:00 1990-05-29 00:00:00 1989-09-16 00:00:00 1982-06-06 00:00:00 1986-05-28 00:00:00 1988-01-03 00:00:00 1987-06-10 00:00:00 1983-10-02 00:00:00 22 23 29 24 28 28 24 23 20 28 30 22 21 20 25 23 24 31 27 26 26 30 0.680009 66.00 73.2 73.0 70.50 72.4 70.0 1419 2102 0.019234 0.058394 0.033699
9508 9509 7809 7809 2013/2014 26 2014-03-22 1479228 9905 9823 0 2 1.0 2.0 4.0 6.0 8.0 6.0 3.0 5.0 7.0 4.0 5.0 1.0 2.0 4.0 6.0 8.0 4.0 6.0 3.0 5.0 7.0 5.0 1.0 3.0 3.0 3.0 3.0 6.0 8.0 8.0 8.0 6.0 11.0 1.0 3.0 3.0 3.0 3.0 6.0 6.0 8.0 8.0 8.0 11.0 287894.0 33823.0 193901.0 36806.0 130667.0 237542.0 97747.0 201888.0 95082.0 180126.0 20694.0 27299.0 30894.0 37410.0 36183.0 121633.0 95078.0 30872.0 30834.0 116772.0 30924.0 75447.0 11.0 6.50 1.22 9.75 6.0 1.25 10.0 5.2 1.27 11.0 6.5 1.22 13.00 6.21 1.28 12.0 5.0 1.29 9.0 5.8 1.25 10.5 6.50 1.29 10.78125 5.96375 1.25875 10.78125 5.96375 1.25875 LOSE GK RB CB CB LB CM RW AM LW CM CF GK RB CB CB LB CM CM RW AM LW CF -15 70.0 65.0 76.0 64.0 65.0 76.0 72.0 68.0 69.0 70.0 74.0 72.0 70.0 71.0 70.0 72.0 72.0 71.0 74.0 81.0 68.0 70.0 4-5-1 4-5-1 1992-03-04 00:00:00 1990-04-12 00:00:00 1985-09-07 00:00:00 1994-01-19 00:00:00 1985-10-24 00:00:00 1988-09-02 00:00:00 1984-05-18 00:00:00 1987-04-23 00:00:00 1993-09-20 00:00:00 1986-05-28 00:00:00 1983-08-12 00:00:00 1992-03-04 00:00:00 1993-03-03 00:00:00 1994-01-19 00:00:00 1989-02-03 00:00:00 1991-03-14 00:00:00 1991-12-05 00:00:00 1982-02-12 00:00:00 1993-08-17 00:00:00 1985-08-04 00:00:00 1988-08-21 00:00:00 1983-10-02 00:00:00 22 23 28 20 28 25 29 26 20 27 30 22 21 20 25 23 22 32 20 28 25 30 0.720415 67.50 71.0 74.0 70.75 73.2 70.0 1656 2095 0.073981 0.201685 0.124396
9486 9487 7809 7809 2013/2014 24 2014-03-08 1479206 8721 9823 1 6 1.0 2.0 4.0 6.0 8.0 4.0 6.0 3.0 5.0 7.0 5.0 1.0 2.0 4.0 6.0 8.0 5.0 2.0 4.0 6.0 8.0 5.0 1.0 3.0 3.0 3.0 3.0 6.0 6.0 8.0 8.0 8.0 11.0 1.0 3.0 3.0 3.0 3.0 6.0 8.0 8.0 8.0 8.0 11.0 30820.0 27472.0 28480.0 259296.0 115591.0 298915.0 119838.0 163670.0 169200.0 188498.0 104045.0 27299.0 27303.0 36183.0 38432.0 121633.0 30894.0 30834.0 176300.0 95078.0 30924.0 116772.0 9.0 5.75 1.29 8.50 5.5 1.30 8.0 5.0 1.33 10.0 5.0 1.30 10.78 5.79 1.33 7.5 5.5 1.33 8.5 5.0 1.30 9.5 5.75 1.33 8.97250 5.41125 1.31375 8.97250 5.41125 1.31375 LOSE GK RB CB CB LB CM CM RW AM LW CF GK RB CB CB LB CM RW AM AM LW CF -33 70.0 65.0 81.0 66.0 69.0 73.0 69.0 69.0 73.0 65.0 73.0 73.0 71.0 66.0 70.0 72.0 71.0 74.0 73.0 78.0 74.0 70.0 4-5-1 4-5-1 1992-04-30 00:00:00 1990-04-12 00:00:00 1994-01-19 00:00:00 1988-06-09 00:00:00 1990-07-11 00:00:00 1987-09-11 00:00:00 1988-01-02 00:00:00 1995-09-18 00:00:00 1985-04-19 00:00:00 1985-02-28 00:00:00 1983-08-12 00:00:00 1992-03-04 00:00:00 1992-01-11 00:00:00 1991-08-08 00:00:00 1988-06-09 00:00:00 1990-06-05 00:00:00 1987-09-26 00:00:00 1992-01-05 00:00:00 1989-11-27 00:00:00 1987-06-11 00:00:00 1988-12-20 00:00:00 1977-06-27 00:00:00 21 23 20 25 23 26 26 18 28 29 30 22 22 22 25 23 26 22 24 26 25 36 0.781728 70.25 69.8 73.0 69.75 74.0 70.0 1623 2086 0.065056 0.180354 0.110112
9467 9468 7809 7809 2013/2014 22 2014-02-23 1479186 9904 9823 0 4 1.0 2.0 4.0 6.0 8.0 2.0 4.0 6.0 8.0 4.0 6.0 1.0 2.0 4.0 6.0 8.0 4.0 6.0 3.0 5.0 7.0 5.0 1.0 3.0 3.0 3.0 3.0 7.0 7.0 7.0 7.0 10.0 10.0 1.0 3.0 3.0 3.0 3.0 6.0 6.0 8.0 8.0 8.0 11.0 41087.0 69833.0 78908.0 25483.0 38795.0 39045.0 36186.0 94916.0 260470.0 79982.0 72735.0 33473.0 27303.0 36183.0 37410.0 121633.0 30872.0 30894.0 116772.0 172949.0 177714.0 75447.0 10.0 7.00 1.22 10.00 6.0 1.25 9.0 6.0 1.25 10.0 6.0 1.25 13.26 6.59 1.26 12.0 5.5 1.25 10.0 5.5 1.25 12.0 6.50 1.25 10.78250 6.13625 1.24750 10.78250 6.13625 1.24750 LOSE GK RB CB CB LB RW AM AM LW CF CF GK RB CB CB LB CM CM RW AM LW CF -33 74.0 67.0 69.0 65.0 69.0 65.0 72.0 73.0 70.0 67.0 72.0 69.0 69.0 62.0 60.0 73.0 66.0 73.0 69.0 83.0 65.0 69.0 4-4-2 4-5-1 1992-04-30 00:00:00 1992-01-11 00:00:00 1983-05-15 00:00:00 1988-06-09 00:00:00 1990-06-05 00:00:00 1984-05-18 00:00:00 1990-09-18 00:00:00 1986-05-28 00:00:00 1991-05-28 00:00:00 1986-04-07 00:00:00 1983-08-12 00:00:00 1992-04-30 00:00:00 1992-01-11 00:00:00 1983-05-15 00:00:00 1985-02-14 00:00:00 1990-06-05 00:00:00 1990-05-22 00:00:00 1988-05-25 00:00:00 1992-07-14 00:00:00 1983-04-18 00:00:00 1987-06-10 00:00:00 1987-11-29 00:00:00 21 22 30 25 23 29 23 27 22 27 30 21 22 30 29 23 23 25 21 30 26 26 0.713719 67.50 70.0 69.5 66.00 71.2 69.0 1437 2070 0.025485 0.076382 0.044438

In [ ]:
#Win Labelling
matches_df['RESULT'] = matches_df.apply(lambda row: label_win(row), axis=1)

In [ ]:
#Position Labelling
positionX = ['home_player_X1', 'home_player_X2', 'home_player_X3', 'home_player_X4', 'home_player_X5', 
             'home_player_X6', 'home_player_X7', 'home_player_X8', 'home_player_X9', 'home_player_X10',
             'home_player_X11', 'away_player_X1', 'away_player_X2', 'away_player_X3', 'away_player_X4',
             'away_player_X5', 'away_player_X6', 'away_player_X7', 'away_player_X8', 'away_player_X9', 
             'away_player_X10', 'away_player_X11']
positionY = ['home_player_Y1', 'home_player_Y2', 'home_player_Y3', 'home_player_Y4', 'home_player_Y5', 
             'home_player_Y6', 'home_player_Y7', 'home_player_Y8', 'home_player_Y9', 'home_player_Y10', 
             'home_player_Y11', 'away_player_Y1', 'away_player_Y2', 'away_player_Y3', 'away_player_Y4',
             'away_player_Y5', 'away_player_Y6', 'away_player_Y7', 'away_player_Y8', 'away_player_Y9', 
             'away_player_Y10', 'away_player_Y11']

for X,Y in zip(positionX, positionY):
    player_pos = matches_df [[X, Y]]
    feature_name=X[:-2]+X[-1]+'_position'
    matches_df[feature_name] = player_pos.apply(lambda row: label_position(row, X, Y), axis=1)
    
matches_df = matches_df.rename(columns={'home_player_X0_position': 'home_player_10_position',
                        'home_player_X1_position': 'home_player_11_position', 
                        'away_player_X0_position': 'away_player_10_position', 
                        'away_player_X1_position': 'away_player_11_position'})

In [281]:
#Formations labelling
matches_df['home_formation'] = matches_df.apply(lambda row: label_formation(row, home_flag=True), axis=1)
matches_df['away_formation'] = matches_df.apply(lambda row: label_formation(row, home_flag=False), axis=1)

In [26]:
#Difference in points against each other [from Home POV]
matches_df['VSPointDiff'] = matches_df.apply(lambda row: label_point_diff_against_eachother(row, matches_df), axis=1)

In [163]:
#imputation for less popular bookies
bookies_types = {'Home odds':bookies_H, 'Draw odds':bookies_D, 'Away odds':bookies_A}
for bookie_type, bookie_list in bookies_types.items():
    bookie_sel_df = ml_matches_df[bookie_list]
    bookie_sel_df = bookie_sel_df.apply(lambda x: x.fillna(x.mean()),axis=1)
    matches_df[bookie_list]=bookie_sel_df.copy()

In [58]:
#Calculate match entropy from bookkeepers' odds
matches_df['entropy'] = matches_df.apply(match_entropy,axis=1)

In [4]:
player_vector = ['home_player_1', 'home_player_2',
       'home_player_3', 'home_player_4', 'home_player_5', 'home_player_6',
       'home_player_7', 'home_player_8', 'home_player_9', 'home_player_10',
       'home_player_11', 'away_player_1', 'away_player_2', 'away_player_3',
       'away_player_4', 'away_player_5', 'away_player_6', 'away_player_7',
       'away_player_8', 'away_player_9', 'away_player_10',
       'away_player_11']

In [207]:
#players ratings
for player in player_vector:
    player_stat = pd.merge(matches_df, player_stats_df, left_on = player, 
                                right_on = "player_api_id")
    matches_df[player+'_overall_rating'] = player_stat['overall_rating'].copy()

In [21]:
#ratings for position_groups
for is_home in (True, False):
    #Define the vectors needed    
    if is_home == True:
        prefix = 'home'
    else:
        prefix = 'away'
    for role in ('defenders', 'midfielders', 'forwarders'):
        feature_name=prefix+'_'+role+'_score'
        matches_df[feature_name] = matches_df.apply(lambda row: calculate_group_ratings(row, is_home, role), axis=1)

In [349]:
#Importing birth dates for players
for player in player_vector:
    player_stat = pd.merge(matches_df, player_df, left_on = player, 
                                right_on = "player_api_id")
    matches_df[player+'_birthDate'] = player_stat['birthday'].copy()

In [352]:
for player in player_vector:
    matches_df[player+'_Age'] = matches_df.apply(lambda row: calculate_age(row, player), axis=1)

In [141]:
#Calculated matches ELO Rating for teams
matches_df['elo_home'] = 1500
matches_df['elo_away'] = 1500
matches_df['date'] = pd.to_datetime(matches_df.date)
matches_df=matches_df.sort_values(by='date')
for i, row in matches_df.iterrows():
    out_tuple=calculate_elo_ratings(row, matches_df)
    matches_df.set_value(i, 'elo_home', out_tuple[0])
    matches_df.set_value(i, 'elo_away', out_tuple[1])

In [181]:
matches_df['nobonus_expect_elo'] = matches_df.apply (lambda row: label_expect_elo (row, 0),axis=1)
matches_df['100bonus_expect_elo'] = matches_df.apply (lambda row: label_expect_elo (row, bonus=100),axis=1)
matches_df['200bonus_expect_elo'] = matches_df.apply (lambda row: label_expect_elo (row, bonus=200),axis=1)

In [200]:
#SAVE YOURSELF THE EFFORT LATER
matches_df.to_csv('saved_matches_df')

ML DataFrame Selection!

back


In [170]:
def reduce_dim (matches_df):
    #CREATE SHORT_DF
    short_df = matches_df[['B365H', 'B365D', 'B365A', 'BWH', 'BWD', 'BWA',   #
           'IWH', 'IWD', 'IWA', 'LBH', 'LBD', 'LBA', 'PSH', 'PSD', 'PSA',    # bookkeepers
           'WHH', 'WHD', 'WHA', 'SJH', 'SJD', 'SJA', 'VCH', 'VCD', 'VCA',    #
           'GBH', 'GBD', 'GBA', 'BSH', 'BSD', 'BSA',                         #
            'home_player_1_overall_rating', 'away_player_1_overall_rating',        # goalkeepers
            'home_defenders_score', 'home_midfielders_score', 'home_forwarders_score',  #team roles
            'away_defenders_score', 'away_midfielders_score', 'away_forwarders_score',  #comparison
            'home_player_2_Age', 'home_player_3_Age', 'home_player_4_Age', #
           'home_player_5_Age', 'home_player_6_Age', 'home_player_7_Age',  #
           'home_player_8_Age', 'home_player_9_Age', 'home_player_10_Age', #
           'home_player_11_Age', 'away_player_2_Age',                      # AGES
           'away_player_3_Age', 'away_player_4_Age', 'away_player_5_Age',  #
           'away_player_6_Age', 'away_player_7_Age', 'away_player_8_Age',  #
           'away_player_9_Age', 'away_player_10_Age', 'away_player_11_Age']]# #OTHER STATS?

    #GET MEAN AGE FOR BOTH TEAM - EXCLUDING GOALKEEPER, FOR REASONS
    short_df['Age_home'] = short_df[['home_player_2_Age', 'home_player_3_Age', 'home_player_4_Age', 
          'home_player_5_Age', 'home_player_6_Age', 'home_player_7_Age',
          'home_player_8_Age', 'home_player_9_Age', 'home_player_10_Age', 
          'home_player_11_Age']].mean(axis=1)
    short_df['Age_away'] = short_df[['away_player_2_Age',
          'away_player_3_Age', 'away_player_4_Age', 'away_player_5_Age',  
          'away_player_6_Age', 'away_player_7_Age', 'away_player_8_Age',  
          'away_player_9_Age', 'away_player_10_Age', 'away_player_11_Age']].mean(axis=1)
    
    #WE DON'T NEED AGES ANYMORE
    short_df.drop(['home_player_2_Age', 'home_player_3_Age', 'home_player_4_Age', 
           'home_player_5_Age', 'home_player_6_Age', 'home_player_7_Age',
           'home_player_8_Age', 'home_player_9_Age', 'home_player_10_Age', 
           'home_player_11_Age', 'away_player_2_Age',
           'away_player_3_Age', 'away_player_4_Age', 'away_player_5_Age',  
           'away_player_6_Age', 'away_player_7_Age', 'away_player_8_Age',  
           'away_player_9_Age', 'away_player_10_Age', 'away_player_11_Age'], inplace = True, axis=1)
   # short_df['AgeCatHome'] = pd.cut(short_df['Age_home'], 10)
   # short_df['AgeCatAway'] = pd.cut(short_df['Age_away'], 10)
    #BOOKKEEPERS MEAN FOR EACH MATCH
    bookies = ['B365', 'BW', 'IW', 'LB', 'PS', 'WH', 'SJ', 'VC', 'GB', 'BS']
    bookies_H = [bookie+'H' for bookie in bookies]
    bookies_A = [bookie+'A' for bookie in bookies]
    bookies_D = [bookie+'D' for bookie in bookies]
    bookies_types = {'Home_odds':bookies_H, 'Draw_odds':bookies_D, 'Away_odds':bookies_A}
    for feature_name, feature_list in bookies_types.items():
        short_df[feature_name] = short_df[feature_list].mean(axis=1)
        short_df.drop(feature_list, inplace = True, axis=1)
        
    #Categorize elos
    elo_cats = [-1,]
    for i in range(1050,2200,50):
        elo_cats.append(i)
    short_df['elo_home_cat'] = pd.cut(matches_df['elo_home'], bins=elo_cats, labels=False)
    short_df['elo_away_cat'] = pd.cut(matches_df['elo_away'], bins=elo_cats, labels=False)
    
    #Categorize expects
    #short_df['NoBonus_cat'] = pd.cut(matches_df['nobonus_expect_elo'], bins=10, labels=False)
    #short_df['100Bonus_cat'] = pd.cut(matches_df['100bonus_expect_elo'], bins=10, labels=False)
    #short_df['200Bonus_cat'] = pd.cut(matches_df['200bonus_expect_elo'], bins=10, labels=False)
    
    #OTHERS
    short_df['home_formation'] = matches_df['home_formation']
    short_df['away_formation'] = matches_df['away_formation']
    short_df['NoBonus'] = matches_df['nobonus_expect_elo']
    short_df['VSPointDiff'] = matches_df['VSPointDiff']
    short_df['entropy'] = matches_df['entropy']
    short_df['RESULT'] = matches_df['RESULT']
        
    return short_df

In [199]:
def create_dummy_df(origin_df, categorize):
    #New data set for categorized features
    category_short_df = pd.DataFrame()
    for category in categorize:
        category_short_df[category] = pd.cut(origin_df[category], bins = 7, precision = 1)

    #Creating Dataframes with Dummy variables: 1 Dataset = All columns for 1 variable
    dummy_dfs = []
    for category in categorize:
        dummy_dfs.append(pd.get_dummies(category_short_df[category], prefix = category, drop_first = True))

    output_df = pd.DataFrame()
    output_df = pd.concat(dummy_dfs, axis=1)

    #Adding the rest of the variables from the origin_df that didn't need categorization
    vars_to_add = [var for var in origin_df.columns.values if var not in categorize]
    for add_var in vars_to_add:
        output_df[add_var] = origin_df[add_var]
    return output_df

In [171]:
short_df = reduce_dim(matches_df)

In [200]:
categorize = ['home_player_1_overall_rating', 'away_player_1_overall_rating',
       'home_defenders_score', 'home_midfielders_score',
       'home_forwarders_score', 'away_defenders_score',
       'away_midfielders_score', 'away_forwarders_score', 'Age_home', 'Age_away', 'home_formation',
       'away_formation', 'elo_home_cat', 'elo_away_cat']
dummied_df = create_dummy_df(short_df, categorize)

In [201]:
ml_matches_df = dummied_df

In [202]:
ml_matches_df.head()


Out[202]:
home_player_1_overall_rating_(52.6, 58.1] home_player_1_overall_rating_(58.1, 63.7] home_player_1_overall_rating_(63.7, 69.3] home_player_1_overall_rating_(69.3, 74.9] home_player_1_overall_rating_(74.9, 80.4] home_player_1_overall_rating_(80.4, 86.0] away_player_1_overall_rating_(52.6, 58.1] away_player_1_overall_rating_(58.1, 63.7] away_player_1_overall_rating_(63.7, 69.3] away_player_1_overall_rating_(69.3, 74.9] away_player_1_overall_rating_(74.9, 80.4] away_player_1_overall_rating_(80.4, 86.0] home_defenders_score_(58.4, 61.5] home_defenders_score_(61.5, 64.6] home_defenders_score_(64.6, 67.7] home_defenders_score_(67.7, 70.8] home_defenders_score_(70.8, 73.9] home_defenders_score_(73.9, 77.0] home_midfielders_score_(58.9, 62.4] home_midfielders_score_(62.4, 65.9] home_midfielders_score_(65.9, 69.4] home_midfielders_score_(69.4, 73.0] home_midfielders_score_(73.0, 76.5] home_midfielders_score_(76.5, 80.0] home_forwarders_score_(48.9, 54.7] home_forwarders_score_(54.7, 60.6] home_forwarders_score_(60.6, 66.4] home_forwarders_score_(66.4, 72.3] home_forwarders_score_(72.3, 78.1] home_forwarders_score_(78.1, 84.0] away_defenders_score_(58.0, 61.2] away_defenders_score_(61.2, 64.4] away_defenders_score_(64.4, 67.6] away_defenders_score_(67.6, 70.8] away_defenders_score_(70.8, 74.0] away_defenders_score_(74.0, 77.2] away_midfielders_score_(59.5, 63.1] away_midfielders_score_(63.1, 66.6] away_midfielders_score_(66.6, 70.1] away_midfielders_score_(70.1, 73.7] away_midfielders_score_(73.7, 77.2] away_midfielders_score_(77.2, 80.8] away_forwarders_score_(53.4, 58.9] away_forwarders_score_(58.9, 64.3] away_forwarders_score_(64.3, 69.7] away_forwarders_score_(69.7, 75.1] away_forwarders_score_(75.1, 80.6] away_forwarders_score_(80.6, 86.0] Age_home_(19.0, 21.8] Age_home_(21.8, 24.5] Age_home_(24.5, 27.2] Age_home_(27.2, 29.9] Age_home_(29.9, 32.7] Age_home_(32.7, 35.4] Age_away_(18.6, 21.4] Age_away_(21.4, 24.2] Age_away_(24.2, 26.9] Age_away_(26.9, 29.7] Age_away_(29.7, 32.5] Age_away_(32.5, 35.3] home_formation_(1.0, 2.0] home_formation_(2.0, 3.0] home_formation_(3.0, 4.0] home_formation_(4.0, 5.0] home_formation_(5.0, 6.0] home_formation_(6.0, 7.0] away_formation_(1.0, 2.0] away_formation_(2.0, 3.0] away_formation_(3.0, 4.0] away_formation_(4.0, 5.0] away_formation_(5.0, 6.0] away_formation_(6.0, 7.0] elo_home_cat_(4.0, 7.0] elo_home_cat_(7.0, 10.0] elo_home_cat_(10.0, 13.0] elo_home_cat_(13.0, 16.0] elo_home_cat_(16.0, 19.0] elo_home_cat_(19.0, 22.0] elo_away_cat_(4.0, 7.0] elo_away_cat_(7.0, 10.0] elo_away_cat_(10.0, 13.0] elo_away_cat_(13.0, 16.0] elo_away_cat_(16.0, 19.0] elo_away_cat_(19.0, 22.0] Away_odds Draw_odds Home_odds NoBonus VSPointDiff entropy RESULT
9531 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1.38750 4.71750 8.01750 0.030483 -12 0.837057 1
9517 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1.22000 6.34750 12.28125 0.019234 -30 0.680009 -1
9508 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1.25875 5.96375 10.78125 0.073981 -15 0.720415 -1
9486 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1.31375 5.41125 8.97250 0.065056 -33 0.781728 -1
9467 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1.24750 6.13625 10.78250 0.025485 -33 0.713719 -1

Last changes - labelling and Scalling


In [174]:
#preprocessing libraries
from sklearn.preprocessing import LabelEncoder, StandardScaler, Imputer, OneHotEncoder
from imblearn.over_sampling import SMOTE

In [175]:
#labelling
results = {'WIN': 1, 'DRAW': 0, 'LOSE': -1, 1:1, 0:0, -1:-1}
ml_matches_df['RESULT']=ml_matches_df['RESULT'].map(results)

le = LabelEncoder()
for col in ml_matches_df.columns.values:
   # Encoding only categorical variables
    if ml_matches_df[col].dtypes=='object':
   # Using whole data to form an exhaustive list of levels
        data=ml_matches_df[col].append(ml_matches_df[col])
        le.fit(data.values)
        ml_matches_df[col]=le.transform(ml_matches_df[col])

In [177]:
NoScalling = ['entropy','RESULT']
#scale Features
scaled_features = StandardScaler(with_mean=True, with_std=True)\
                                .fit_transform(ml_matches_df.drop(NoScalling, axis=1).values)
scaled_features_df = pd.DataFrame(scaled_features, index=ml_matches_df.drop(NoScalling, axis=1).index, 
                                  columns=ml_matches_df.drop(NoScalling, axis=1).columns)

scaled_features_df[NoScalling] = ml_matches_df[NoScalling]

scaled_features_df.head()


Out[177]:
home_player_1_overall_rating away_player_1_overall_rating home_defenders_score home_midfielders_score home_forwarders_score away_defenders_score away_midfielders_score away_forwarders_score Age_home Age_away Away_odds Draw_odds Home_odds elo_home_cat elo_away_cat home_formation away_formation NoBonus VSPointDiff entropy RESULT
9531 -0.045861 0.224695 -1.221238 0.991310 0.085073 0.912986 0.308791 -1.179658 -0.029473 -0.502648 -0.968220 1.141530 3.736614 0.062927 3.930793 0.990026 0.951837 -1.900825 -1.050839 0.837057 1
9517 0.543923 -0.067073 -0.661090 1.258152 0.504282 1.100666 0.910630 -0.130791 -0.067774 -0.197757 -1.021143 3.011540 6.637625 -0.589265 3.930793 0.990026 0.951837 -1.947141 -2.623042 0.680009 -1
9508 -0.045861 0.224695 -0.100943 0.524335 0.713886 1.194506 1.178114 -0.130791 -0.106075 -0.464537 -1.008900 2.571285 5.617041 1.041216 3.604670 0.990026 0.951837 -1.721728 -1.312873 0.720415 -1
9486 -0.045861 0.370579 0.925995 0.124071 0.504282 0.819146 1.445598 -0.130791 -0.412482 -0.273980 -0.991522 1.937431 4.386386 0.715120 3.604670 0.990026 0.951837 -1.758476 -2.885076 0.781728 -1
9467 0.543923 -0.212956 -0.100943 0.190782 -0.229334 -0.588453 0.509404 -0.340564 -0.029473 -0.121534 -1.012454 2.769185 5.617891 -0.589265 3.604670 0.170994 0.951837 -1.921402 -2.885076 0.713719 -1

Feature pre-selection


In [165]:
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest

matches_data = ml_matches_df.drop('RESULT', 1)
matches_target = ml_matches_df[['RESULT']]
X_train, X_test, y_train, y_test = train_test_split(matches_data, np.ravel(matches_target), test_size = 0.20, 
                                                    random_state = 101)

#Tree
clf = RandomForestClassifier(n_estimators=500, criterion='gini', max_depth=15, min_samples_split=20, 
                                        min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', 
                                        max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True, oob_score=False,
                                        n_jobs=-1, random_state=None, verbose=0, warm_start=False, class_weight=None)
clf = clf.fit(X_train, y_train)
features_tree = pd.DataFrame()
features_tree['feature'] = matches_data.columns
features_tree['importance'] = clf.feature_importances_
features_tree.sort_values(by=['importance'], ascending=True, inplace=True)
features_tree.set_index('feature', inplace=True)

#Chi2
x = X_train.values #returns a numpy array
min_max_scaler = MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(X_train)
x_scaled_df = pd.DataFrame(x_scaled)
features_chi = pd.DataFrame()
features_chi['feature'] = matches_data.columns
features_chi2 = chi2(x_scaled_df, y_train)
features_chi['importance'] = features_chi2[0]
features_chi.sort_values(by=['importance'], ascending=True, inplace=True)
features_chi.set_index('feature', inplace=True)

features_chi.plot(kind='barh', figsize=(20, 20))
plt.show()

features_tree.plot(kind='barh', figsize=(20, 20))
plt.show()


MODEL LEARNING

IMPORTS AND FUNCTIONS

back


In [36]:
# machine learning models
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression 
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.multiclass import OneVsRestClassifier

import lightgbm as lgb

In [28]:
#Split data for train and test
def split_data(data, targ):
    #set target for training
    target = data[targ]

    # Import the train_test_split method
    from sklearn.model_selection import train_test_split
    # Split data into train (3/4th of data) and test (1/4th of data)
    return train_test_split(data.drop('RESULT', axis=1), target, train_size = 0.75, random_state=0);

In [29]:
def regr_equation(logreg, train, target):
    if type(model) is LogisticRegression:
        coef = logreg.coef_[0]
        intercept = "{:.2f}".format(logreg.intercept_[0])
    else:
        coef = logreg.coef_
        intercept = "{:.2f}".format(logreg.intercept_)
    try:    
        output = target.name + ' = ' + str(intercept) + ' + '
    except:
        output = 'TARGET' + ' = ' + str(intercept) + ' + '
    coeff_df = pd.DataFrame(train.columns.delete(0))
    coeff_df.columns = ['Feature']
    coeff_df["Correlation"] = pd.Series(logreg.coef_[0])
    features = coeff_df['Feature'].tolist()
    coefficients = coeff_df['Correlation'].tolist()
    
    for coeff, feature in zip(coefficients, features):
        coeff_str = "{:.2f}".format(coeff)
        output += coeff_str + "*" + str(feature) + " + "
    return output[:-3]

In [30]:
def plot_confusion_matrix(cm, classes,
                          normalize=False,
                          title='Confusion matrix',
                          cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """
    import itertools
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)

    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        print("Normalized confusion matrix")
    else:
        print('Confusion matrix, without normalization')

    print(cm)

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.show()

In [31]:
def conf_matrix_str (conf, normalize=True):
    if normalize:
            conf = conf.astype('float') / conf.sum(axis=1)[:, np.newaxis]

    conf_matrix = 'Pred \tLose\tDraw\tWin\n'+\
                  'True \n'+\
                  'Lose \t{:.2f}\t{:.2f}\t{:.2f}\n'.format(conf[0][0], conf[0][1], conf[0][2])+\
                  'Draw \t{:.2f}\t{:.2f}\t{:.2f}\n'.format(conf[1][0], conf[1][1], conf[1][2])+\
                  'Win \t{:.2f}\t{:.2f}\t{:.2f}'.format(conf[2][0], conf[2][1], conf[2][2])
    return conf_matrix

In [53]:
#gridSearch for the best params
def exhaustive_grid_search (data, methods, param_Grids):
    from sklearn.model_selection import GridSearchCV
    models = {}
    for method, prefix in methods.items():
        train, test, target_train, target_test = data
        model = method
        param_grid = param_Grids[prefix]
        grid = GridSearchCV(model, param_grid, refit=True, verbose = 3, n_jobs=-1)
        grid.fit(train, target_train)
        print(grid.best_estimator_)
        models[prefix] = grid.best_estimator_
    return dict((value, key) for key, value in models.items())

In [32]:
def test_model (model, data, target, submission_name = None, test=None, cross_valid=True):
   
    if test is None:
        from sklearn.metrics import accuracy_score, confusion_matrix, r2_score
        train, test, target_train, target_test = data
        model.fit(train, target_train)
        #Calc parameters
        if type(model) is LogisticRegression:
            function_str = regr_equation(model, train, target_train)
        elif type(model) is LinearRegression:
            function_str = regr_equation(model, train, target_train)
        else :
            function_str = "NA"    

        if type(model) is not LinearRegression:
            trainset_acc = round(accuracy_score(target_train, model.predict(train)) * 100, 2)
            testset_acc = round(accuracy_score(target_test, model.predict(test)) * 100, 2)
            confusion_matrix = confusion_matrix(target_test, model.predict(test))
            conf_matrix = conf_matrix_str(confusion_matrix)
                    
        else:
            trainset_acc = 'NA'
            testset_acc = 'NA'
            conf_matrix = "NA"

        r2_score = r2_score(target_train, model.predict(train))
        kaggle = "not_tested"
        
          #Perform k-fold cross-validation with 5 folds
        if cross_valid == True:
            from sklearn.cross_validation import KFold   #For K-fold cross validation
            X=pd.concat([train,test])
            Y=pd.concat([target_train, target_test])
            data_df = pd.concat([X,Y], axis=1)
            kf = KFold(data_df.shape[0], n_folds=5)
            error = []
            predictors = list(data_df.columns.values)
            del predictors[-1]
            for train, test in kf:
                # Filter training data
                train_predictors = (data_df[predictors].iloc[train,:])

                # The target we're using to train the algorithm.
                train_target = data_df[target].iloc[train]

                # Training the algorithm using the predictors and target.
                model.fit(train_predictors, train_target)

                #Record error from each cross-validation run
                error.append(model.score(data_df[predictors].iloc[test,:], data_df[target].iloc[test]))
        else:
            error=[0,0]
        #Fit the model again so that it can be refered
        #prints
        print("-"*40)
        print('Submission name:', submission_name )
        print('Regression function:\n', function_str)
        print('Accuracy on train set:', trainset_acc,"%")
        print('Accuracy on test set:', testset_acc,"%")
        print ("Cross-Validation Score : %s" % "{0:.3%}".format(np.mean(error)))
        print("R2 score:", r2_score)
        print("Confusion matrix:\n", conf_matrix)
        classes=['Lose','Draw','Win']
        plot_confusion_matrix(confusion_matrix, classes=classes,
                              normalize=True, title = 'Confusion matrix '+submission_name, cmap=plt.cm.Blues)
        return [submission_name, function_str, str(trainset_acc), str(testset_acc), r2_score, conf_matrix, np.mean(error)]

SETUP

back


In [71]:
#train, test, target_train, target_test = split_data(scaled_features_df, 'RESULT')
train, test, target_train, target_test = split_data(scaled_features_df, 'RESULT')
#Try to oversample?
#from imblearn.over_sampling import SMOTE
#oversampler=SMOTE(random_state=0)
#smote_train, smote_target = oversampler.fit_sample(train,target_train)
#data = (smote_train, test, smote_target, target_test)

data = (train, test, target_train, target_test)

In [30]:
methodMLP = MLPClassifier()
methodLogReg = LogisticRegression()
methodLinReg = LinearRegression()
methodSVC = SVC()
methodlinSVC = LinearSVC()
methodKN = KNeighborsClassifier()
methodGNB = GaussianNB()
methodPercp = Perceptron()
methodSGD = SGDClassifier()
methodTree = DecisionTreeClassifier()
methodRndForest = RandomForestClassifier()
methodXTree = ExtraTreesClassifier()
methodGBRT = GradientBoostingClassifier()
methods = {
          #methodRndForest: 'RandomForest',
          #methodLogReg : 'LogReg',
          #methodXTree : 'xTrees',
          #methodSVC : 'SVM',
          #methodKN  : 'KNC'
          methodGBRT : 'GBRT'
         }

param_Grids = {
   # 'RandomForest': {'n_estimators': [10, 500, 1000], 'criterion': ['gini'], 
   #                  'max_depth': [5, 10, 15, 20], 'min_samples_split': [2, 10, 20, 50], 
   #                  'min_samples_leaf': [1, 8], 'max_features':['sqrt', 'log2'], 
   #                 },
   # 'xTrees': {'n_estimators': [10, 500, 1000], 'criterion': ['gini'], 
   #                  'max_depth': [5, 10, 15, 20], 'min_samples_split': [2, 10, 20, 50], 
   #            'min_samples_leaf': [1, 8], 'max_features':['sqrt', 'log2'], 
   #           },
   # 'LogReg': {'C': [1, 10, 100, 250, 1000], 'solver' : ['newton-cg', 'liblinear']}
   # 'SVM': {'C': [0.1, 1, 10, 100, 1000], 'gamma': [1,0.1,0.01, 0.001, 0.0001], 
   #         'kernel': ['linear', 'rbf', 'poly'], 'degree': [2, 3]},
   # 'KNC': {'metrics': ['minkowski', 'euclidean', 'manhattan'], 'n_neighbors': [5,10,15], 
   #         'weights' : ['uniform','distance']}
    'GBRT': {'learning_rate': [0.1, 0.05, 0.02, 0.01],
             'max_depth': [3, 10, 15],
             'min_samples_leaf': [3, 5, 9, 17],
             'max_features': [1.0, 0.3, 0.1, 'sqrt'],
             'subsample': [1.0, 0.99, 0.9],
             'n_estimators': [10, 100, 1000]
            }
    }

In [ ]:
estimators = exhaustive_grid_search(data, methods, param_Grids)


Fitting 3 folds for each of 1728 candidates, totalling 5184 fits
[Parallel(n_jobs=-1)]: Done  24 tasks      | elapsed:   58.6s
[Parallel(n_jobs=-1)]: Done 120 tasks      | elapsed:  4.3min
[Parallel(n_jobs=-1)]: Done 280 tasks      | elapsed:  7.2min
[Parallel(n_jobs=-1)]: Done 504 tasks      | elapsed: 17.0min
[Parallel(n_jobs=-1)]: Done 792 tasks      | elapsed: 34.8min
[Parallel(n_jobs=-1)]: Done 1144 tasks      | elapsed: 61.4min
[Parallel(n_jobs=-1)]: Done 1560 tasks      | elapsed: 76.0min
[Parallel(n_jobs=-1)]: Done 2040 tasks      | elapsed: 114.8min
[Parallel(n_jobs=-1)]: Done 2584 tasks      | elapsed: 192.3min

In [166]:
train, test, target_train, target_test = split_data(scaled_features_df, 'RESULT')
#Try to oversample?
#from imblearn.over_sampling import SMOTE
#oversampler=SMOTE(random_state=0)
#smote_train, smote_target = oversampler.fit_sample(train,target_train)
#data = (smote_train, test, smote_target, target_test)

data = (train, test, target_train, target_test)

In [167]:
#Setup
suffix = '_shortECH_ELO{NoBonus}_SCALED{~entropy}_PROBS'
modelMLP = MLPClassifier(hidden_layer_sizes=(104, 104, 104), activation='logistic', solver='sgd', alpha=0.0001, 
                         batch_size='auto', learning_rate='adaptive', learning_rate_init=1, power_t=0.5, 
                         max_iter=2000, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, 
                         momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, 
                         beta_1=0.9, beta_2=0.999, epsilon=1e-08)

modelLogReg = LogisticRegression(n_jobs = -1, class_weight=None)
modelLinReg = LinearRegression()
modelSVC = SVC()
modellinSVC = LinearSVC()
modelKN = KNeighborsClassifier(n_neighbors = 3)
modelGNB = GaussianNB()
modelPercp = Perceptron()
modelSGD = SGDClassifier()
modelTree = DecisionTreeClassifier(criterion='gini', splitter='random', max_depth=None, 
                                   min_samples_split=16, min_samples_leaf=8, min_weight_fraction_leaf=0.0, 
                                   max_features='sqrt', random_state=None, max_leaf_nodes=None, 
                                   min_impurity_split=1e-07, class_weight=None, presort=False)
modelRndForest = RandomForestClassifier(n_estimators=800, criterion='gini', max_depth=15, min_samples_split=20, 
                                        min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', 
                                        max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True, oob_score=False,
                                        n_jobs=-1, random_state=None, verbose=0, warm_start=False, class_weight=None)
modelXTree = ExtraTreesClassifier(n_estimators=800, criterion='gini', max_depth=None, min_samples_split=16, 
                                  min_samples_leaf=5, min_weight_fraction_leaf=0.0, max_features='sqrt', 
                                  max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=False, oob_score=False, 
                                  n_jobs=-1, random_state=None, verbose=0, warm_start=False, class_weight=None)

modelGBRT = GradientBoostingClassifier()

lgbmmodel = lgb.LGBMClassifier(boosting_type='gbdt', colsample_bytree=1, learning_rate=0.1,
                             max_bin=200, max_depth=8, min_child_samples=10, min_child_weight=5,
                             min_split_gain=0, n_estimators=10, nthread=-1, num_leaves=20,
                             objective='multiclass', reg_alpha=0, reg_lambda=0.095, seed=77,
                             silent=False, subsample=0.8,
                             subsample_freq=1)
 

models = {
          modelRndForest: "RandomForest",
          modelLogReg : "logreg",
          modelXTree : 'xTrees',
          modelGBRT: "GradientBoosting",
          lgbmmodel: "LightGBM"
         }

In [168]:
outputs = []
for model, prefix in models.items():
    name=prefix+suffix
    outputs.append(test_model(model, data, target='RESULT', submission_name=name))
outputs.sort(key=lambda x: x[0])


----------------------------------------
Submission name: logreg_shortECH_ELO{NoBonus}_SCALED{~entropy}_PROBS
Regression function:
 RESULT = -0.64 + 0.03*away_player_1_overall_rating + -0.03*home_defenders_score + -0.03*home_midfielders_score + -0.01*home_forwarders_score + -0.01*away_defenders_score + 0.00*away_midfielders_score + -0.02*away_forwarders_score + 0.01*Age_home + 0.04*Age_away + -0.02*elo_home_cat + -0.19*elo_away_cat + 0.07*home_formation + 0.04*away_formation + 0.02*NoBonus + 0.24*VSPointDiff + -0.80*entropy + -0.08*home_probs + -1.47*draw_probs + -0.26*away_probs
Accuracy on train set: 56.06 %
Accuracy on test set: 55.73 %
Cross-Validation Score : 56.022%
R2 score: -0.381117330463
Confusion matrix:
 Pred 	Lose	Draw	Win
True 
Lose 	0.58	0.00	0.42
Draw 	0.31	0.00	0.68
Win 	0.15	0.00	0.85
Normalized confusion matrix
[[  5.83589744e-01   0.00000000e+00   4.16410256e-01]
 [  3.10690423e-01   4.45434298e-03   6.84855234e-01]
 [  1.46356784e-01   6.28140704e-04   8.53015075e-01]]
----------------------------------------
Submission name: xTrees_shortECH_ELO{NoBonus}_SCALED{~entropy}_PROBS
Regression function:
 NA
Accuracy on train set: 74.03 %
Accuracy on test set: 55.73 %
Cross-Validation Score : 55.943%
R2 score: 0.198130626601
Confusion matrix:
 Pred 	Lose	Draw	Win
True 
Lose 	0.59	0.01	0.40
Draw 	0.32	0.01	0.67
Win 	0.15	0.01	0.85
Normalized confusion matrix
[[ 0.58564103  0.01025641  0.40410256]
 [ 0.31625835  0.01002227  0.67371938]
 [ 0.14572864  0.00565327  0.84861809]]
----------------------------------------
Submission name: LightGBM_shortECH_ELO{NoBonus}_SCALED{~entropy}_PROBS
Regression function:
 NA
Accuracy on train set: 58.67 %
Accuracy on test set: 56.74 %
Cross-Validation Score : 56.397%
R2 score: -0.261431302021
Confusion matrix:
 Pred 	Lose	Draw	Win
True 
Lose 	0.67	0.02	0.31
Draw 	0.40	0.04	0.56
Win 	0.18	0.02	0.80
Normalized confusion matrix
[[ 0.66974359  0.02461538  0.30564103]
 [ 0.40089087  0.03786192  0.56124722]
 [ 0.18090452  0.01570352  0.80339196]]
----------------------------------------
Submission name: GradientBoosting_shortECH_ELO{NoBonus}_SCALED{~entropy}_PROBS
Regression function:
 NA
Accuracy on train set: 59.82 %
Accuracy on test set: 56.39 %
Cross-Validation Score : 56.253%
R2 score: -0.212124981049
Confusion matrix:
 Pred 	Lose	Draw	Win
True 
Lose 	0.62	0.07	0.32
Draw 	0.35	0.09	0.56
Win 	0.17	0.04	0.80
Normalized confusion matrix
[[ 0.61846154  0.06564103  0.31589744]
 [ 0.35077951  0.09242762  0.55679287]
 [ 0.16771357  0.03580402  0.79648241]]
----------------------------------------
Submission name: RandomForest_shortECH_ELO{NoBonus}_SCALED{~entropy}_PROBS
Regression function:
 NA
Accuracy on train set: 76.04 %
Accuracy on test set: 56.51 %
Cross-Validation Score : 56.145%
R2 score: 0.228389848239
Confusion matrix:
 Pred 	Lose	Draw	Win
True 
Lose 	0.63	0.05	0.33
Draw 	0.37	0.06	0.57
Win 	0.16	0.03	0.81
Normalized confusion matrix
[[ 0.62974359  0.04512821  0.32512821]
 [ 0.36636971  0.06347439  0.5701559 ]
 [ 0.16143216  0.03015075  0.80841709]]

In [169]:
for out in outputs:
    super_table.append(out)

In [157]:
new_tabl = [[row[0], row[-1], row[-2]] for row in super_table]

In [158]:
make_table(new_tabl[::-1])
apply_theme('basic')


Out[158]:
xTrees_shortECH_ELO{NoBonus}_SCALED{~entropy}0.560943351127Pred  Lose Draw Win True  Lose  0.59 0.01 0.40 Draw  0.33 0.01 0.66 Win  0.15 0.01 0.84
logreg_shortECH_ELO{NoBonus}_SCALED{~entropy}0.559500037234Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.15 0.00 0.85
RandomForest_shortECH_ELO{NoBonus}_SCALED{~entropy}0.562675838136Pred  Lose Draw Win True  Lose  0.63 0.04 0.32 Draw  0.38 0.06 0.57 Win  0.17 0.03 0.81
LightGBM_shortECH_ELO{NoBonus}_SCALED{~entropy}0.565562648186Pred  Lose Draw Win True  Lose  0.66 0.04 0.31 Draw  0.40 0.04 0.56 Win  0.18 0.02 0.80
GradientBoosting_shortECH_ELO{NoBonus}_SCALED{~entropy}0.563325266898Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_elodiffcat_ELO{NoBonus}_NotSCALED0.557407294578Pred  Lose Draw Win True  Lose  0.59 0.02 0.39 Draw  0.33 0.01 0.66 Win  0.15 0.01 0.84
logreg_shortECH_elodiffcat_ELO{NoBonus}_NotSCALED0.555963772384Pred  Lose Draw Win True  Lose  0.57 0.00 0.43 Draw  0.31 0.00 0.69 Win  0.14 0.00 0.86
RandomForest_shortECH_elodiffcat_ELO{NoBonus}_NotSCALED0.560005686603Pred  Lose Draw Win True  Lose  0.63 0.05 0.32 Draw  0.38 0.06 0.56 Win  0.17 0.03 0.80
LightGBM_shortECH_elodiffcat_ELO{NoBonus}_NotSCALED0.560438665148Pred  Lose Draw Win True  Lose  0.67 0.04 0.29 Draw  0.43 0.04 0.53 Win  0.20 0.02 0.78
GradientBoosting_shortECH_elodiffcat_ELO{NoBonus}_NotSCALED0.559283899468Pred  Lose Draw Win True  Lose  0.62 0.07 0.31 Draw  0.36 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_elodiffcat_ELO{NoBonus}_SCALED0.556180378826Pred  Lose Draw Win True  Lose  0.59 0.01 0.40 Draw  0.33 0.02 0.66 Win  0.15 0.01 0.84
logreg_shortECH_elodiffcat_ELO{NoBonus}_SCALED0.55574719198Pred  Lose Draw Win True  Lose  0.57 0.00 0.43 Draw  0.30 0.00 0.69 Win  0.14 0.00 0.86
RandomForest_shortECH_elodiffcat_ELO{NoBonus}_SCALED0.560510685033Pred  Lose Draw Win True  Lose  0.62 0.06 0.32 Draw  0.37 0.07 0.56 Win  0.17 0.03 0.80
LightGBM_shortECH_elodiffcat_ELO{NoBonus}_SCALED0.560799441546Pred  Lose Draw Win True  Lose  0.67 0.04 0.29 Draw  0.42 0.04 0.54 Win  0.20 0.02 0.78
GradientBoosting_shortECH_elodiffcat_ELO{NoBonus}_SCALED0.559283925506Pred  Lose Draw Win True  Lose  0.62 0.07 0.31 Draw  0.36 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_elodiff_ELO{NoBonus}_SCALED0.556396907155Pred  Lose Draw Win True  Lose  0.59 0.01 0.40 Draw  0.32 0.01 0.66 Win  0.15 0.01 0.84
logreg_shortECH_elodiff_ELO{NoBonus}_SCALED0.55574719198Pred  Lose Draw Win True  Lose  0.57 0.00 0.43 Draw  0.30 0.00 0.69 Win  0.14 0.00 0.86
RandomForest_shortECH_elodiff_ELO{NoBonus}_SCALED0.558634314481Pred  Lose Draw Win True  Lose  0.63 0.05 0.32 Draw  0.38 0.06 0.56 Win  0.17 0.03 0.80
LightGBM_shortECH_elodiff_ELO{NoBonus}_SCALED0.560799441546Pred  Lose Draw Win True  Lose  0.67 0.04 0.29 Draw  0.42 0.04 0.54 Win  0.20 0.02 0.78
GradientBoosting_shortECH_elodiff_ELO{NoBonus}_SCALED0.559283925506Pred  Lose Draw Win True  Lose  0.62 0.07 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_elodiff_ELO{NoBonus}_NOTSCALED0.555964032759Pred  Lose Draw Win True  Lose  0.58 0.01 0.40 Draw  0.32 0.02 0.66 Win  0.16 0.01 0.84
logreg_shortECH_elodiff_ELO{NoBonus}_NOTSCALED0.555891570237Pred  Lose Draw Win True  Lose  0.57 0.00 0.43 Draw  0.30 0.00 0.69 Win  0.14 0.00 0.85
RandomForest_shortECH_elodiff_ELO{NoBonus}_NOTSCALED0.558129237938Pred  Lose Draw Win True  Lose  0.63 0.05 0.32 Draw  0.37 0.06 0.57 Win  0.17 0.03 0.80
LightGBM_shortECH_elodiff_ELO{NoBonus}_NOTSCALED0.561881953004Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.41 0.05 0.54 Win  0.20 0.02 0.78
GradientBoosting_shortECH_elodiff_ELO{NoBonus}_NOTSCALED0.559500453835Pred  Lose Draw Win True  Lose  0.63 0.07 0.31 Draw  0.36 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_ELO{NoBonus}_SCALED_noFormation0.561159619081Pred  Lose Draw Win True  Lose  0.60 0.01 0.39 Draw  0.34 0.02 0.64 Win  0.15 0.01 0.84
logreg_shortECH_ELO{NoBonus}_SCALED_noFormation0.559932833516Pred  Lose Draw Win True  Lose  0.58 0.00 0.42 Draw  0.30 0.00 0.70 Win  0.14 0.00 0.86
RandomForest_shortECH_ELO{NoBonus}_SCALED_noFormation0.562098403221Pred  Lose Draw Win True  Lose  0.63 0.05 0.32 Draw  0.37 0.06 0.57 Win  0.17 0.03 0.80
LightGBM_shortECH_ELO{NoBonus}_SCALED_noFormation0.563902467475Pred  Lose Draw Win True  Lose  0.66 0.03 0.31 Draw  0.40 0.04 0.56 Win  0.18 0.02 0.80
GradientBoosting_shortECH_ELO{NoBonus}_SCALED_noFormation0.563036484346Pred  Lose Draw Win True  Lose  0.62 0.07 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.80
xTrees_shortECH_ELO{200Bonus}_NOTSCALED0.561736975883Pred  Lose Draw Win True  Lose  0.60 0.01 0.39 Draw  0.33 0.02 0.65 Win  0.15 0.01 0.84
logreg_shortECH_ELO{200Bonus}_NOTSCALED0.559572239381Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.14 0.00 0.85
RandomForest_shortECH_ELO{200Bonus}_NOTSCALED0.5610159178Pred  Lose Draw Win True  Lose  0.64 0.04 0.32 Draw  0.37 0.06 0.57 Win  0.16 0.03 0.81
LightGBM_shortECH_ELO{200Bonus}_NOTSCALED0.564624410835Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.39 0.05 0.56 Win  0.18 0.02 0.80
GradientBoosting_shortECH_ELO{200Bonus}_NOTSCALED0.563469567042Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_ELO{100Bonus}_NOTSCALED0.560510528807Pred  Lose Draw Win True  Lose  0.59 0.01 0.40 Draw  0.33 0.02 0.66 Win  0.15 0.00 0.85
logreg_shortECH_ELO{100Bonus}_NOTSCALED0.559067032651Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.14 0.00 0.85
RandomForest_shortECH_ELO{100Bonus}_NOTSCALED0.563108660456Pred  Lose Draw Win True  Lose  0.64 0.05 0.32 Draw  0.38 0.06 0.57 Win  0.16 0.03 0.81
LightGBM_shortECH_ELO{100Bonus}_NOTSCALED0.565201663487Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.39 0.05 0.56 Win  0.18 0.02 0.80
GradientBoosting_shortECH_ELO{100Bonus}_NOTSCALED0.563613893224Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_ELO{noBonus}_NOTSCALED0.560366124513Pred  Lose Draw Win True  Lose  0.59 0.01 0.39 Draw  0.33 0.02 0.66 Win  0.15 0.01 0.84
logreg_shortECH_ELO{noBonus}_NOTSCALED0.559211332795Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.15 0.00 0.85
RandomForest_shortECH_ELO{noBonus}_NOTSCALED0.56159309234Pred  Lose Draw Win True  Lose  0.63 0.04 0.32 Draw  0.37 0.06 0.57 Win  0.17 0.03 0.80
LightGBM_shortECH_ELO{noBonus}_NOTSCALED0.564985239309Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.40 0.04 0.56 Win  0.18 0.02 0.80
GradientBoosting_shortECH_ELO{noBonus}_NOTSCALED0.563613893224Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.79
xTrees_DUMMIES+ELO_NOTSCALED0.5404478876510634Pred  Lose Draw Win True  Lose  0.49 0.03 0.48 Draw  0.28 0.03 0.69 Win  0.13 0.02 0.85
logreg_DUMMIES+ELO_NOTSCALED0.5553138489082192Pred  Lose Draw Win True  Lose  0.56 0.02 0.42 Draw  0.31 0.02 0.67 Win  0.14 0.01 0.85
RandomForest_DUMMIES+ELO_NOTSCALED0.5595721352307422Pred  Lose Draw Win True  Lose  0.60 0.04 0.37 Draw  0.35 0.04 0.61 Win  0.16 0.02 0.82
LightGBM_DUMMIES+ELO_NOTSCALED0.5644077783558116Pred  Lose Draw Win True  Lose  0.64 0.04 0.31 Draw  0.38 0.06 0.56 Win  0.18 0.02 0.80
GradientBoosting_DUMMIES+ELO_NOTSCALED0.5586341061801183Pred  Lose Draw Win True  Lose  0.62 0.06 0.31 Draw  0.35 0.08 0.56 Win  0.17 0.04 0.79
LightGBM_shortECH_elo{No,100,200}_SCALED_ResCorr0.5657067921052042Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.40 0.04 0.56 Win  0.18 0.02 0.80
WvL_xTrees_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.7394205443371378[[&nbsp0.7544757  &nbsp0.2455243 ]  [&nbsp0.26791277 &nbsp0.73208723]]
WvL_logreg_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.7474978050921861[[&nbsp0.74936061 &nbsp0.25063939]  [&nbsp0.26323988 &nbsp0.73676012]]
WvL_RandomForest_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.7473222124670764[[&nbsp0.76214834 &nbsp0.23785166]  [&nbsp0.26323988 &nbsp0.73676012]]
WvD_xTrees_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.6212651786467942[[&nbsp0.66151685 &nbsp0.33848315]  [&nbsp0.40566038 &nbsp0.59433962]]
WvD_logreg_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.6342542588065866[[&nbsp0.66853933 &nbsp0.33146067]  [&nbsp0.37578616 &nbsp0.62421384]]
WvD_RandomForest_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.6296165566758483[[&nbsp0.66994382 &nbsp0.33005618]  [&nbsp0.38836478 &nbsp0.61163522]]
DvL_xTrees_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.6206839032527106[[&nbsp0.62081784 &nbsp0.37918216]  [&nbsp0.38872832 &nbsp0.61127168]]
DvL_logreg_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.62418682235196[[&nbsp0.63320942 &nbsp0.36679058]  [&nbsp0.35693642 &nbsp0.64306358]]
DvL_RandomForest_balanced_shortECH_elo{No,100,200}_SCALED_ResCorr0.6160133444537114[[&nbsp0.65055762 &nbsp0.34944238]  [&nbsp0.40751445 &nbsp0.59248555]]
WvL_xTrees_shortECH_elo{No,100,200}_SCALED_ResCorr0.7390693590869184[[&nbsp0.80179028 &nbsp0.19820972]  [&nbsp0.34267913 &nbsp0.65732087]]
WvL_logreg_shortECH_elo{No,100,200}_SCALED_ResCorr0.7476733977172958[[&nbsp0.80179028 &nbsp0.19820972]  [&nbsp0.3364486  &nbsp0.6635514 ]]
WvL_RandomForest_shortECH_elo{No,100,200}_SCALED_ResCorr0.7438103599648815[[&nbsp0.78644501 &nbsp0.21355499]  [&nbsp0.30373832 &nbsp0.69626168]]
WvL_GradientBoosting_shortECH_elo{No,100,200}_SCALED_ResCorr0.7508340649692713[[&nbsp0.79411765 &nbsp0.20588235]  [&nbsp0.28816199 &nbsp0.71183801]]
WvD_xTrees_shortECH_elo{No,100,200}_SCALED_ResCorr0.6182960294778839[[&nbsp0.71769663 &nbsp0.28230337]  [&nbsp0.47641509 &nbsp0.52358491]]
WvD_logreg_shortECH_elo{No,100,200}_SCALED_ResCorr0.6299883032473561[[&nbsp0.74578652 &nbsp0.25421348]  [&nbsp0.4418239  &nbsp0.5581761 ]]
WvD_RandomForest_shortECH_elo{No,100,200}_SCALED_ResCorr0.6259032253063291[[&nbsp0.69382022 &nbsp0.30617978]  [&nbsp0.42138365 &nbsp0.57861635]]
WvD_GradientBoosting_shortECH_elo{No,100,200}_SCALED_ResCorr0.6303591884968724[[&nbsp0.66853933 &nbsp0.33146067]  [&nbsp0.37893082 &nbsp0.62106918]]
DvL_xTrees_shortECH_elo{No,100,200}_SCALED_ResCorr0.6201834862385323[[&nbsp0.65923172 &nbsp0.34076828]  [&nbsp0.43063584 &nbsp0.56936416]]
DvL_logreg_shortECH_elo{No,100,200}_SCALED_ResCorr0.6221851542952461[[&nbsp0.6802974  &nbsp0.3197026 ]  [&nbsp0.42919075 &nbsp0.57080925]]
DvL_RandomForest_shortECH_elo{No,100,200}_SCALED_ResCorr0.6128440366972476[[&nbsp0.66542751 &nbsp0.33457249]  [&nbsp0.4349711  &nbsp0.5650289 ]]
DvL_GradientBoosting_shortECH_elo{No,100,200}_SCALED_ResCorr0.6191826522101752[[&nbsp0.68153656 &nbsp0.31846344]  [&nbsp0.45375723 &nbsp0.54624277]]
GradientBoosting_1000Est_0.01LR_shortECH_elo{No,100,200}_SCALED_ResCorr0.5621705272553341Pred  Lose Draw Win True  Lose  0.63 0.07 0.31 Draw  0.35 0.10 0.56 Win  0.17 0.04 0.79
GradientBoosting_10Est_0.9MF_shortECH_elo{No,100,200}_SCALED_ResCorr0.5625314078038726Pred  Lose Draw Win True  Lose  0.65 0.00 0.34 Draw  0.39 0.00 0.61 Win  0.18 0.00 0.82
GradientBoosting_10Est_0.9MF_shortECH_elo{No,100,200}_SCALED_ResCorr0.5635419774900107Pred  Lose Draw Win True  Lose  0.65 0.00 0.35 Draw  0.38 0.00 0.62 Win  0.18 0.00 0.82
GradientBoosting_10Est_shortECH_elo{No,100,200}_SCALED_ResCorr0.563036536421596Pred  Lose Draw Win True  Lose  0.64 0.00 0.36 Draw  0.37 0.00 0.63 Win  0.18 0.00 0.82
GradientBoosting_superbasic_shortECH_elo{No,100,200}_SCALED_ResCorr0.5636860693338499Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.79
xTrees_shortECH_elo{100}_SCALED_ResCorr_SMOTE0.0Pred  Lose Draw Win True  Lose  0.37 0.42 0.21 Draw  0.20 0.43 0.38 Win  0.08 0.25 0.67
logreg_shortECH_elo{100}_SCALED_ResCorr_SMOTE0.0Pred  Lose Draw Win True  Lose  0.28 0.55 0.17 Draw  0.12 0.54 0.34 Win  0.04 0.33 0.63
RandomForest_shortECH_elo{100}_SCALED_ResCorr_SMOTE0.0Pred  Lose Draw Win True  Lose  0.43 0.33 0.24 Draw  0.23 0.35 0.42 Win  0.09 0.20 0.71
xTrees_shortECH_elo{100}_SCALED_ResCorr0.5598613343831677Pred  Lose Draw Win True  Lose  0.60 0.01 0.39 Draw  0.36 0.02 0.63 Win  0.17 0.01 0.83
logreg_shortECH_elo{100}_SCALED_ResCorr0.5605106329574031Pred  Lose Draw Win True  Lose  0.60 0.00 0.40 Draw  0.34 0.00 0.65 Win  0.15 0.00 0.85
RandomForest_shortECH_elo{100}_SCALED_ResCorr0.5624596222575291Pred  Lose Draw Win True  Lose  0.64 0.04 0.33 Draw  0.38 0.07 0.55 Win  0.18 0.03 0.80
xTrees_manbalanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5566862104574122Pred  Lose Draw Win True  Lose  0.60 0.07 0.33 Draw  0.37 0.08 0.55 Win  0.17 0.05 0.78
logreg_manbalanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5618097248194686Pred  Lose Draw Win True  Lose  0.61 0.01 0.37 Draw  0.36 0.03 0.61 Win  0.16 0.01 0.82
RandomForest_manbalanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5593567265165966Pred  Lose Draw Win True  Lose  0.61 0.11 0.28 Draw  0.38 0.12 0.50 Win  0.16 0.07 0.77
xTrees_balanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5433366244806158Pred  Lose Draw Win True  Lose  0.62 0.19 0.19 Draw  0.40 0.24 0.36 Win  0.19 0.15 0.66
logreg_balanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.558851285448182Pred  Lose Draw Win True  Lose  0.65 0.08 0.26 Draw  0.41 0.13 0.46 Win  0.19 0.06 0.75
RandomForest_balanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5450679658366413Pred  Lose Draw Win True  Lose  0.64 0.16 0.21 Draw  0.39 0.21 0.40 Win  0.18 0.13 0.69
xTrees_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5592120618464899Pred  Lose Draw Win True  Lose  0.60 0.02 0.38 Draw  0.37 0.02 0.61 Win  0.17 0.01 0.82
logreg_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.5595005840224173Pred  Lose Draw Win True  Lose  0.60 0.00 0.39 Draw  0.34 0.00 0.65 Win  0.16 0.00 0.84
RandomForest_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorr0.561160504357906Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.38 0.07 0.55 Win  0.17 0.03 0.79
xTrees_shortECH_eloCat{nobonus,100,200}_NotSCALED_ResCorr0.5546651231602513Pred  Lose Draw Win True  Lose  0.58 0.01 0.41 Draw  0.32 0.02 0.67 Win  0.14 0.01 0.85
logreg_shortECH_eloCat{nobonus,100,200}_NotSCALED_ResCorr0.5589949346535417Pred  Lose Draw Win True  Lose  0.58 0.01 0.41 Draw  0.30 0.01 0.69 Win  0.14 0.00 0.85
RandomForest_shortECH_eloCat{nobonus,100,200}_NotSCALED_ResCorr0.5611601398320994Pred  Lose Draw Win True  Lose  0.63 0.05 0.32 Draw  0.37 0.05 0.58 Win  0.17 0.03 0.80
xTrees_shortECH_eloCat{nobonus,100,200}_SCALED_ResCorr0.554809527454782Pred  Lose Draw Win True  Lose  0.57 0.01 0.42 Draw  0.31 0.01 0.68 Win  0.15 0.01 0.85
logreg_shortECH_eloCat{nobonus,100,200}_SCALED_ResCorr0.5589228106189492Pred  Lose Draw Win True  Lose  0.58 0.01 0.42 Draw  0.30 0.01 0.69 Win  0.14 0.00 0.85
RandomForest_shortECH_eloCat{nobonus,100,200}_SCALED_ResCorr0.5607270831738533Pred  Lose Draw Win True  Lose  0.63 0.04 0.33 Draw  0.37 0.06 0.57 Win  0.17 0.03 0.81
xTrees_balanced_shortECH_elo{nobonus,100,200}_SCALED_ResCorr0.5395821909354929Pred  Lose Draw Win True  Lose  0.63 0.17 0.21 Draw  0.36 0.25 0.39 Win  0.18 0.15 0.67
logreg_balanced_shortECH_elo{nobonus,100,200}_SCALED_ResCorr0.5600050617012002Pred  Lose Draw Win True  Lose  0.63 0.09 0.28 Draw  0.37 0.12 0.52 Win  0.18 0.05 0.77
RandomForest_balanced_shortECH_elo{nobonus,100,200}_SCALED_ResCorr0.5476651861711407Pred  Lose Draw Win True  Lose  0.63 0.14 0.23 Draw  0.36 0.18 0.46 Win  0.17 0.11 0.72
xTrees_shortECH_elo{nobonus,100,200}_SCALED_ResCorr0.5570466223299135Pred  Lose Draw Win True  Lose  0.57 0.01 0.41 Draw  0.31 0.01 0.67 Win  0.14 0.01 0.85
logreg_shortECH_elo{nobonus,100,200}_SCALED_ResCorr0.5591392087602842Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.15 0.00 0.85
RandomForest_shortECH_elo{nobonus,100,200}_SCALED_ResCorr0.5621702929173156Pred  Lose Draw Win True  Lose  0.64 0.05 0.32 Draw  0.37 0.06 0.57 Win  0.16 0.03 0.81
xTrees_shortECH_elo{nobonus,100,200}_NOTSCALED0.5574794446501411Pred  Lose Draw Win True  Lose  0.01 0.32 0.67 Draw  0.01 0.58 0.41 Win  0.00 0.15 0.85
logreg_shortECH_elo{nobonus,100,200}_NOTSCALED0.5592113848699919Pred  Lose Draw Win True  Lose  0.00 0.30 0.70 Draw  0.00 0.58 0.41 Win  0.00 0.15 0.85
RandomForest_shortECH_elo{nobonus,100,200}_NOTSCALED0.5600776283742721Pred  Lose Draw Win True  Lose  0.05 0.37 0.57 Draw  0.04 0.63 0.33 Win  0.02 0.17 0.81
xTrees_shortECH_elo{nobonus,100,200}_SCALED0.5556752502079099Pred  Lose Draw Win True  Lose  0.01 0.32 0.67 Draw  0.01 0.58 0.41 Win  0.01 0.15 0.84
logreg_shortECH_elo{nobonus,100,200}_SCALED0.5591392087602842Pred  Lose Draw Win True  Lose  0.00 0.30 0.70 Draw  0.00 0.58 0.41 Win  0.00 0.15 0.85
RandomForest_shortECH_elo{nobonus,100,200}_SCALED0.5618100112326023Pred  Lose Draw Win True  Lose  0.05 0.37 0.57 Draw  0.05 0.63 0.32 Win  0.03 0.16 0.81
xTrees_shortECH_OVR0.5583470941825326Pred  Lose Draw Win True  Lose  0.03 0.34 0.63 Draw  0.04 0.60 0.37 Win  0.01 0.15 0.84
logreg_shortECH_OVR0.5553881861352089Pred  Lose Draw Win True  Lose  0.01 0.31 0.68 Draw  0.00 0.58 0.42 Win  0.00 0.14 0.86
RandomForest_shortECH_OVR0.558274709772364Pred  Lose Draw Win True  Lose  0.07 0.35 0.58 Draw  0.06 0.61 0.32 Win  0.03 0.16 0.82
xTreesshortECH_StandardScaler_gridParams_Formation_ResultLabelCorrected_VSPoints_Entropy_MeanOdds_MeanAge_GK_RolesOverallScore)0.5582749701479403Pred  Lose Draw Win True  Lose  0.03 0.33 0.63 Draw  0.04 0.60 0.36 Win  0.01 0.15 0.84
logregshortECH_StandardScaler_gridParams_Formation_ResultLabelCorrected_VSPoints_Entropy_MeanOdds_MeanAge_GK_RolesOverallScore)0.5553881861352089Pred  Lose Draw Win True  Lose  0.01 0.31 0.68 Draw  0.00 0.58 0.42 Win  0.00 0.14 0.86
RandomForestshortECH_StandardScaler_gridParams_Formation_ResultLabelCorrected_VSPoints_Entropy_MeanOdds_MeanAge_GK_RolesOverallScore)0.5582753086361892Pred  Lose Draw Win True  Lose  0.07 0.35 0.58 Draw  0.08 0.61 0.32 Win  0.04 0.15 0.81
xTrees_droppedMeaningless_StandardScaler_gridParams_Positions_ResultLabelCorrected_VSPoints_OverallScore_OverallScoreGrouped_Entropy0.5393670425969235Pred  Lose Draw Win True  Lose  0.03 0.28 0.69 Draw  0.02 0.49 0.49 Win  0.01 0.14 0.85
logreg_droppedMeaningless_StandardScaler_gridParams_Positions_ResultLabelCorrected_VSPoints_OverallScore_OverallScoreGrouped_Entropy0.5541609318946021Pred  Lose Draw Win True  Lose  0.06 0.28 0.66 Draw  0.06 0.55 0.38 Win  0.03 0.13 0.84
RandomForest_droppedMeaningless_StandardScaler_gridParams_Positions_ResultLabelCorrected_VSPoints_OverallScore_OverallScoreGrouped_Entropy0.553872383681117Pred  Lose Draw Win True  Lose  0.03 0.29 0.68 Draw  0.03 0.54 0.43 Win  0.01 0.14 0.85
xTrees_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel_VSPoints_OverallScore0.5406751640820203Pred  Lose Draw Win True  Lose  0.48 0.02 0.50 Draw  0.29 0.01 0.69 Win  0.14 0.01 0.86
logreg_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel_VSPoints_OverallScore0.5538859370731686Pred  Lose Draw Win True  Lose  0.54 0.03 0.43 Draw  0.31 0.03 0.66 Win  0.14 0.01 0.85
RandomForest_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel_VSPoints_OverallScore0.5508904408367933Pred  Lose Draw Win True  Lose  0.54 0.04 0.42 Draw  0.32 0.05 0.63 Win  0.15 0.03 0.82
logreg_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel0.5274214157935088Pred  Lose Draw Win True  Lose  0.43 0.01 0.56 Draw  0.23 0.01 0.76 Win  0.14 0.00 0.86
RandomForest_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel0.523843598262203Pred  Lose Draw Win True  Lose  0.46 0.03 0.51 Draw  0.27 0.04 0.69 Win  0.16 0.03 0.82
xTrees_droppedMeaningless_noScaler_addedParams_playerOverallRating0.530514956098139TN:&nbsp2412,&nbspFP:&nbsp298,&nbspFN:&nbsp2,&nbspTP:&nbsp3201
logreg_droppedMeaningless_noScaler_addedParams_playerOverallRating0.5185347625610509TN:&nbsp6,&nbspFP:&nbsp881,&nbspFN:&nbsp4,&nbspTP:&nbsp1789
RandomForest_droppedMeaningless_noScaler_addedParams_playerOverallRating0.5258748380967383TN:&nbsp3533,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp3997
logreg_balanced_firstTry_droppedMeaningless_StandardScaler_addedParams0.5049333353192677TN:&nbsp799,&nbspFP:&nbsp1161,&nbspFN:&nbsp677,&nbspTP:&nbsp2244
xTrees_firstTry_droppedMeaningless_StandardScaler_addedParams0.5280405830912323TN:&nbsp2409,&nbspFP:&nbsp350,&nbspFN:&nbsp3,&nbspTP:&nbsp3331
RandomForest_firstTry_droppedMeaningless_StandardScaler_addedParams0.5266602541891456TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
MLPerc_firstTry_droppedMeaningless_StandardScaler_addedParams0.4634243283230301TN:&nbsp3703,&nbspFP:&nbsp1,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
DTree_firstTry_droppedMeaningless_StandardScaler_addedParams0.4560088886240977TN:&nbsp1683,&nbspFP:&nbsp768,&nbspFN:&nbsp758,&nbspTP:&nbsp2404
logreg_firstTry_droppedMeaningless_StandardScaler_corr0.5259445469639505TN:&nbsp109,&nbspFP:&nbsp1008,&nbspFN:&nbsp72,&nbspTP:&nbsp2038
xTrees_firstTry_droppedMeaningless_StandardScaler0.4553448810190143TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
RandomForest_firstTry_droppedMeaningless_StandardScaler0.4734931592400561TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp4,&nbspTP:&nbsp4230
MLPerc_firstTry_droppedMeaningless_StandardScaler0.4587692589904033TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
LogReg_firstTry_droppedMeaningless_StandardScaler0.5259445469639505TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
DTree_firstTry_droppedMeaningless_StandardScaler0.4123000804303415TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
xTrees_firstTry_droppedMeaningless0.4639329496299106TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
RandomForest_firstTry_droppedMeaningless0.4630133052375883TN:&nbsp3703,&nbspFP:&nbsp1,&nbspFN:&nbsp3,&nbspTP:&nbsp4231
MLPerc_firstTry_droppedMeaningless0.4508442703441989TN:&nbsp3498,&nbspFP:&nbsp203,&nbspFN:&nbsp3483,&nbspTP:&nbsp725
LogReg_firstTry_droppedMeaningless0.5285518044042797TN:&nbsp3387,&nbspFP:&nbsp317,&nbspFN:&nbsp366,&nbspTP:&nbsp2231
DTree_firstTry_droppedMeaningless0.4133221310957079TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp4234
xTrees_firstTry_justdroppedAllThere0.6283109065155807TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp380
RandomForest_firstTry_justdroppedAllThere0.7560294875096576TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp379
MLPerc_firstTry_justdroppedAllThere0.4472685423641514TN:&nbsp212,&nbspFP:&nbsp71,&nbspFN:&nbsp48,&nbspTP:&nbsp290
LogReg_firstTry_justdroppedAllThere0.8656563868143188TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp380
DTree_firstTry_justdroppedAllThere0.9971639196497554TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp380
NameCross-Valid.conf_matrix

In [60]:
make_table(super_table)
apply_theme('basic')


Out[60]:
NameRegression&nbspfunctionTrain&nbspAccValidation&nbspAccr2_scoreconf_matrixCross-Valid.
DTree_firstTry_justdroppedAllTherenan100.0100.01.0TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp3800.9971639196497554
LogReg_firstTry_justdroppedAllThereRESULT =&nbsp0.00 +&nbsp0.00*country_id +&nbsp0.00*league_id +&nbsp0.00*season +&nbsp0.00*stage +&nbsp-0.05*date +&nbsp0.01*match_api_id +&nbsp-0.00*home_team_api_id +&nbsp0.00*away_team_api_id +&nbsp-0.00*home_team_goal +&nbsp0.42*away_team_goal +&nbsp-0.87*home_player_X1 +&nbsp0.00*home_player_X2 +&nbsp0.01*home_player_X3 +&nbsp-0.02*home_player_X4 +&nbsp-0.01*home_player_X5 +&nbsp-0.06*home_player_X6 +&nbsp-0.02*home_player_X7 +&nbsp0.05*home_player_X8 +&nbsp0.03*home_player_X9 +&nbsp0.01*home_player_X10 +&nbsp0.02*home_player_X11 +&nbsp0.07*away_player_X1 +&nbsp0.00*away_player_X2 +&nbsp-0.00*away_player_X3 +&nbsp0.02*away_player_X4 +&nbsp-0.03*away_player_X5 +&nbsp0.06*away_player_X6 +&nbsp0.01*away_player_X7 +&nbsp0.05*away_player_X8 +&nbsp0.11*away_player_X9 +&nbsp0.07*away_player_X10 +&nbsp-0.01*away_player_X11 +&nbsp-0.05*home_player_Y1 +&nbsp0.00*home_player_Y2 +&nbsp0.00*home_player_Y3 +&nbsp0.00*home_player_Y4 +&nbsp0.00*home_player_Y5 +&nbsp0.02*home_player_Y6 +&nbsp0.00*home_player_Y7 +&nbsp-0.08*home_player_Y8 +&nbsp-0.04*home_player_Y9 +&nbsp-0.01*home_player_Y10 +&nbsp-0.04*home_player_Y11 +&nbsp-0.03*away_player_Y1 +&nbsp0.00*away_player_Y2 +&nbsp0.00*away_player_Y3 +&nbsp0.00*away_player_Y4 +&nbsp0.00*away_player_Y5 +&nbsp-0.01*away_player_Y6 +&nbsp0.04*away_player_Y7 +&nbsp-0.05*away_player_Y8 +&nbsp0.00*away_player_Y9 +&nbsp0.02*away_player_Y10 +&nbsp0.02*away_player_Y11 +&nbsp0.07*home_player_1 +&nbsp0.00*home_player_2 +&nbsp0.00*home_player_3 +&nbsp-0.00*home_player_4 +&nbsp0.00*home_player_5 +&nbsp-0.00*home_player_6 +&nbsp-0.00*home_player_7 +&nbsp-0.00*home_player_8 +&nbsp0.00*home_player_9 +&nbsp-0.00*home_player_10 +&nbsp0.00*home_player_11 +&nbsp-0.00*away_player_1 +&nbsp-0.00*away_player_2 +&nbsp0.00*away_player_3 +&nbsp-0.00*away_player_4 +&nbsp-0.00*away_player_5 +&nbsp-0.00*away_player_6 +&nbsp-0.00*away_player_7 +&nbsp0.00*away_player_8 +&nbsp-0.00*away_player_9 +&nbsp0.00*away_player_10 +&nbsp0.00*away_player_11 +&nbsp-0.00*goal +&nbsp-0.00*shoton +&nbsp-0.00*shotoff +&nbsp-0.00*foulcommit +&nbsp0.00*card +&nbsp-0.00*cross +&nbsp-0.00*corner +&nbsp-0.00*possession +&nbsp-0.00*B365H +&nbsp0.11*B365D +&nbsp0.05*B365A +&nbsp0.09*BWH +&nbsp0.03*BWD +&nbsp-0.01*BWA +&nbsp-0.01*IWH +&nbsp-0.05*IWD +&nbsp-0.01*IWA +&nbsp-0.03*LBH +&nbsp0.01*LBD +&nbsp-0.02*LBA +&nbsp0.01*PSH +&nbsp0.00*PSD +&nbsp-0.00*PSA +&nbsp0.00*WHH +&nbsp0.01*WHD +&nbsp0.00*WHA +&nbsp0.03*SJH +&nbsp-0.02*SJD +&nbsp0.02*SJA +&nbsp0.01*VCH +&nbsp-0.05*VCD +&nbsp0.00*VCA +&nbsp-0.05*GBH +&nbsp0.03*GBD +&nbsp-0.01*GBA +&nbsp-0.01*BSH +&nbsp-0.05*BSD +&nbsp0.07*BSA +&nbsp0.00*RESULT100.0100.01.0TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp3800.8656563868143188
MLPerc_firstTry_justdroppedAllTherenan69.3448.530.06720900266300145TN:&nbsp212,&nbspFP:&nbsp71,&nbspFN:&nbsp48,&nbspTP:&nbsp2900.4472685423641514
RandomForest_firstTry_justdroppedAllTherenan99.9296.60.9988652177647968TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp3790.7560294875096576
xTrees_firstTry_justdroppedAllTherenan100.097.281.0TN:&nbsp330,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp3800.6283109065155807
DTree_firstTry_droppedMeaninglessnan100.0100.01.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.4133221310957079
LogReg_firstTry_droppedMeaninglessRESULT =&nbsp0.00 +&nbsp-0.00*league_id +&nbsp-0.00*season +&nbsp0.00*stage +&nbsp-0.00*date +&nbsp0.00*home_team_api_id +&nbsp0.00*away_team_api_id +&nbsp0.00*home_player_X1 +&nbsp0.00*home_player_X2 +&nbsp-0.01*home_player_X3 +&nbsp-0.01*home_player_X4 +&nbsp0.00*home_player_X5 +&nbsp-0.01*home_player_X6 +&nbsp0.01*home_player_X7 +&nbsp-0.00*home_player_X8 +&nbsp0.01*home_player_X9 +&nbsp-0.01*home_player_X10 +&nbsp0.01*home_player_X11 +&nbsp0.02*away_player_X1 +&nbsp0.00*away_player_X2 +&nbsp-0.00*away_player_X3 +&nbsp-0.00*away_player_X4 +&nbsp0.01*away_player_X5 +&nbsp0.00*away_player_X6 +&nbsp0.01*away_player_X7 +&nbsp-0.00*away_player_X8 +&nbsp0.00*away_player_X9 +&nbsp0.01*away_player_X10 +&nbsp0.00*away_player_X11 +&nbsp-0.01*home_player_Y1 +&nbsp0.00*home_player_Y2 +&nbsp0.00*home_player_Y3 +&nbsp-0.00*home_player_Y4 +&nbsp-0.00*home_player_Y5 +&nbsp0.00*home_player_Y6 +&nbsp0.00*home_player_Y7 +&nbsp0.01*home_player_Y8 +&nbsp-0.00*home_player_Y9 +&nbsp0.01*home_player_Y10 +&nbsp0.01*home_player_Y11 +&nbsp0.00*away_player_Y1 +&nbsp0.00*away_player_Y2 +&nbsp0.00*away_player_Y3 +&nbsp0.00*away_player_Y4 +&nbsp0.00*away_player_Y5 +&nbsp0.01*away_player_Y6 +&nbsp0.01*away_player_Y7 +&nbsp0.01*away_player_Y8 +&nbsp0.01*away_player_Y9 +&nbsp-0.00*away_player_Y10 +&nbsp0.01*away_player_Y11 +&nbsp0.02*home_player_1 +&nbsp0.00*home_player_2 +&nbsp0.00*home_player_3 +&nbsp-0.00*home_player_4 +&nbsp0.00*home_player_5 +&nbsp0.00*home_player_6 +&nbsp-0.00*home_player_7 +&nbsp-0.00*home_player_8 +&nbsp0.00*home_player_9 +&nbsp-0.00*home_player_10 +&nbsp0.00*home_player_11 +&nbsp0.00*away_player_1 +&nbsp-0.00*away_player_2 +&nbsp-0.00*away_player_3 +&nbsp-0.00*away_player_4 +&nbsp-0.00*away_player_5 +&nbsp-0.00*away_player_6 +&nbsp-0.00*away_player_7 +&nbsp-0.00*away_player_8 +&nbsp0.00*away_player_9 +&nbsp0.00*away_player_10 +&nbsp-0.00*away_player_11 +&nbsp-0.00*B365H +&nbsp0.01*B365D +&nbsp-0.01*B365A +&nbsp0.00*BWH +&nbsp-0.02*BWD +&nbsp-0.00*BWA +&nbsp0.03*IWH +&nbsp-0.01*IWD +&nbsp-0.00*IWA +&nbsp0.01*LBH +&nbsp0.01*LBD +&nbsp-0.00*LBA +&nbsp0.01*PSH +&nbsp0.00*PSD +&nbsp-0.00*PSA +&nbsp-0.00*WHH +&nbsp-0.01*WHD +&nbsp-0.01*WHA +&nbsp0.01*SJH +&nbsp-0.00*SJD +&nbsp0.00*SJA +&nbsp0.00*VCH +&nbsp0.00*VCD +&nbsp0.00*VCA +&nbsp0.01*GBH +&nbsp-0.00*GBD +&nbsp0.00*GBA +&nbsp-0.00*BSH +&nbsp-0.00*BSD +&nbsp0.00*BSA +&nbsp-0.00*RESULT82.481.560.7368259494499363TN:&nbsp3387,&nbspFP:&nbsp317,&nbspFN:&nbsp366,&nbspTP:&nbsp22310.5285518044042797
MLPerc_firstTry_droppedMeaninglessnan28.9828.34-2.028336257123525TN:&nbsp3498,&nbspFP:&nbsp203,&nbspFN:&nbsp3483,&nbspTP:&nbsp7250.4508442703441989
RandomForest_firstTry_droppedMeaninglessnan99.9798.220.9995922942671572TN:&nbsp3703,&nbspFP:&nbsp1,&nbspFN:&nbsp3,&nbspTP:&nbsp42310.4630133052375883
xTrees_firstTry_droppedMeaninglessnan100.099.751.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.4639329496299106
DTree_firstTry_droppedMeaningless_StandardScalernan100.0100.01.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.4123000804303415
LogReg_firstTry_droppedMeaningless_StandardScalerRESULT =&nbsp-5.38 +&nbsp-0.00*league_id +&nbsp-0.00*season +&nbsp-0.01*stage +&nbsp-0.02*date +&nbsp-0.02*home_team_api_id +&nbsp0.01*away_team_api_id +&nbsp0.00*home_player_X1 +&nbsp0.00*home_player_X2 +&nbsp-0.00*home_player_X3 +&nbsp-0.01*home_player_X4 +&nbsp-0.00*home_player_X5 +&nbsp-0.03*home_player_X6 +&nbsp0.02*home_player_X7 +&nbsp0.01*home_player_X8 +&nbsp-0.02*home_player_X9 +&nbsp0.03*home_player_X10 +&nbsp0.02*home_player_X11 +&nbsp0.03*away_player_X1 +&nbsp0.00*away_player_X2 +&nbsp-0.01*away_player_X3 +&nbsp0.02*away_player_X4 +&nbsp0.02*away_player_X5 +&nbsp0.02*away_player_X6 +&nbsp0.01*away_player_X7 +&nbsp-0.01*away_player_X8 +&nbsp-0.00*away_player_X9 +&nbsp-0.01*away_player_X10 +&nbsp-0.02*away_player_X11 +&nbsp0.02*home_player_Y1 +&nbsp0.00*home_player_Y2 +&nbsp0.00*home_player_Y3 +&nbsp0.02*home_player_Y4 +&nbsp0.07*home_player_Y5 +&nbsp-0.01*home_player_Y6 +&nbsp0.02*home_player_Y7 +&nbsp-0.00*home_player_Y8 +&nbsp-0.05*home_player_Y9 +&nbsp0.04*home_player_Y10 +&nbsp0.02*home_player_Y11 +&nbsp0.02*away_player_Y1 +&nbsp0.00*away_player_Y2 +&nbsp0.00*away_player_Y3 +&nbsp0.00*away_player_Y4 +&nbsp0.04*away_player_Y5 +&nbsp0.00*away_player_Y6 +&nbsp0.01*away_player_Y7 +&nbsp0.01*away_player_Y8 +&nbsp0.00*away_player_Y9 +&nbsp-0.03*away_player_Y10 +&nbsp0.02*away_player_Y11 +&nbsp0.06*home_player_1 +&nbsp0.01*home_player_2 +&nbsp0.00*home_player_3 +&nbsp-0.02*home_player_4 +&nbsp0.03*home_player_5 +&nbsp0.01*home_player_6 +&nbsp-0.01*home_player_7 +&nbsp-0.01*home_player_8 +&nbsp-0.00*home_player_9 +&nbsp0.00*home_player_10 +&nbsp0.00*home_player_11 +&nbsp-0.00*away_player_1 +&nbsp-0.00*away_player_2 +&nbsp0.01*away_player_3 +&nbsp-0.01*away_player_4 +&nbsp0.01*away_player_5 +&nbsp-0.01*away_player_6 +&nbsp0.02*away_player_7 +&nbsp0.01*away_player_8 +&nbsp-0.02*away_player_9 +&nbsp-0.00*away_player_10 +&nbsp-0.00*away_player_11 +&nbsp0.00*B365H +&nbsp-0.02*B365D +&nbsp0.04*B365A +&nbsp0.03*BWH +&nbsp-0.02*BWD +&nbsp0.08*BWA +&nbsp0.12*IWH +&nbsp-0.01*IWD +&nbsp0.00*IWA +&nbsp-0.01*LBH +&nbsp0.01*LBD +&nbsp-0.01*LBA +&nbsp-0.01*PSH +&nbsp-0.03*PSD +&nbsp-0.01*PSA +&nbsp0.04*WHH +&nbsp-0.02*WHD +&nbsp-0.01*WHA +&nbsp0.03*SJH +&nbsp-0.01*SJD +&nbsp-0.04*SJA +&nbsp0.01*VCH +&nbsp-0.04*VCD +&nbsp0.06*VCA +&nbsp0.03*GBH +&nbsp0.01*GBD +&nbsp-0.07*GBA +&nbsp-0.00*BSH +&nbsp0.01*BSD +&nbsp-0.03*BSA +&nbsp0.02*RESULT100.099.981.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.5259445469639505
MLPerc_firstTry_droppedMeaningless_StandardScalernan100.099.961.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.4587692589904033
RandomForest_firstTry_droppedMeaningless_StandardScalernan99.9798.00.9994903678339464TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp4,&nbspTP:&nbsp42300.4734931592400561
xTrees_firstTry_droppedMeaningless_StandardScalernan100.098.981.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.4553448810190143
logreg_firstTry_droppedMeaningless_StandardScaler_corrRESULT =&nbsp-1.12 +&nbsp-0.01*league_id +&nbsp-0.01*season +&nbsp0.49*stage +&nbsp0.01*date +&nbsp-0.47*home_team_api_id +&nbsp-0.00*away_team_api_id +&nbsp-0.00*home_player_X1 +&nbsp0.00*home_player_X2 +&nbsp-0.01*home_player_X3 +&nbsp0.00*home_player_X4 +&nbsp0.01*home_player_X5 +&nbsp0.03*home_player_X6 +&nbsp0.14*home_player_X7 +&nbsp0.12*home_player_X8 +&nbsp0.10*home_player_X9 +&nbsp0.17*home_player_X10 +&nbsp0.19*home_player_X11 +&nbsp0.21*away_player_X1 +&nbsp0.00*away_player_X2 +&nbsp0.01*away_player_X3 +&nbsp-0.00*away_player_X4 +&nbsp0.02*away_player_X5 +&nbsp0.09*away_player_X6 +&nbsp0.05*away_player_X7 +&nbsp-0.01*away_player_X8 +&nbsp-0.02*away_player_X9 +&nbsp-0.05*away_player_X10 +&nbsp0.01*away_player_X11 +&nbsp0.00*home_player_Y1 +&nbsp0.00*home_player_Y2 +&nbsp0.00*home_player_Y3 +&nbsp-0.01*home_player_Y4 +&nbsp-0.10*home_player_Y5 +&nbsp-0.03*home_player_Y6 +&nbsp0.04*home_player_Y7 +&nbsp0.03*home_player_Y8 +&nbsp-0.06*home_player_Y9 +&nbsp-0.03*home_player_Y10 +&nbsp0.04*home_player_Y11 +&nbsp0.09*away_player_Y1 +&nbsp0.00*away_player_Y2 +&nbsp0.00*away_player_Y3 +&nbsp0.00*away_player_Y4 +&nbsp0.01*away_player_Y5 +&nbsp0.06*away_player_Y6 +&nbsp0.07*away_player_Y7 +&nbsp0.00*away_player_Y8 +&nbsp-0.01*away_player_Y9 +&nbsp-0.09*away_player_Y10 +&nbsp0.10*away_player_Y11 +&nbsp0.10*home_player_1 +&nbsp-0.01*home_player_2 +&nbsp0.03*home_player_3 +&nbsp-0.03*home_player_4 +&nbsp0.02*home_player_5 +&nbsp0.03*home_player_6 +&nbsp-0.02*home_player_7 +&nbsp-0.04*home_player_8 +&nbsp0.04*home_player_9 +&nbsp-0.00*home_player_10 +&nbsp0.02*home_player_11 +&nbsp0.02*away_player_1 +&nbsp-0.01*away_player_2 +&nbsp-0.00*away_player_3 +&nbsp-0.05*away_player_4 +&nbsp0.00*away_player_5 +&nbsp-0.04*away_player_6 +&nbsp0.00*away_player_7 +&nbsp-0.01*away_player_8 +&nbsp-0.04*away_player_9 +&nbsp0.02*away_player_10 +&nbsp-0.01*away_player_11 +&nbsp0.02*B365H +&nbsp0.36*B365D +&nbsp-0.19*B365A +&nbsp-0.31*BWH +&nbsp0.03*BWD +&nbsp0.01*BWA +&nbsp0.17*IWH +&nbsp0.10*IWD +&nbsp-0.04*IWA +&nbsp-0.01*LBH +&nbsp0.27*LBD +&nbsp0.02*LBA +&nbsp0.03*PSH +&nbsp-0.53*PSD +&nbsp0.06*PSA +&nbsp0.09*WHH +&nbsp-0.32*WHD +&nbsp-0.10*WHA +&nbsp0.02*SJH +&nbsp-0.19*SJD +&nbsp0.02*SJA +&nbsp-0.16*VCH +&nbsp0.32*VCD +&nbsp-0.04*VCA +&nbsp0.01*GBH +&nbsp-0.10*GBD +&nbsp-0.07*GBA +&nbsp-0.27*BSH +&nbsp-0.12*BSD +&nbsp-0.01*BSA53.5751.89-0.5115690045148893TN:&nbsp109,&nbspFP:&nbsp1008,&nbspFN:&nbsp72,&nbspTP:&nbsp20380.5259445469639505
DTree_firstTry_droppedMeaningless_StandardScaler_addedParamsnan61.3845.68-0.2456429402681364TN:&nbsp1683,&nbspFP:&nbsp768,&nbspFN:&nbsp758,&nbspTP:&nbsp24040.4560088886240977
MLPerc_firstTry_droppedMeaningless_StandardScaler_addedParamsnan99.9941.570.9998980735667892TN:&nbsp3703,&nbspFP:&nbsp1,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.4634243283230301
RandomForest_firstTry_droppedMeaningless_StandardScaler_addedParamsnan100.051.811.0TN:&nbsp3704,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp42340.5266602541891456
xTrees_firstTry_droppedMeaningless_StandardScaler_addedParamsnan82.8352.340.454285876589837TN:&nbsp2409,&nbspFP:&nbsp350,&nbspFN:&nbsp3,&nbspTP:&nbsp33310.5280405830912323
logreg_balanced_firstTry_droppedMeaningless_StandardScaler_addedParamsRESULT =&nbsp-0.85 +&nbsp-0.01*league_id +&nbsp-0.01*season +&nbsp0.54*stage +&nbsp0.02*date +&nbsp-0.52*home_team_api_id +&nbsp-0.01*away_team_api_id +&nbsp-0.00*home_player_X1 +&nbsp0.00*home_player_X2 +&nbsp-0.01*home_player_X3 +&nbsp0.00*home_player_X4 +&nbsp0.02*home_player_X5 +&nbsp0.03*home_player_X6 +&nbsp0.14*home_player_X7 +&nbsp0.12*home_player_X8 +&nbsp0.10*home_player_X9 +&nbsp0.17*home_player_X10 +&nbsp0.19*home_player_X11 +&nbsp0.21*away_player_X1 +&nbsp0.00*away_player_X2 +&nbsp0.01*away_player_X3 +&nbsp-0.01*away_player_X4 +&nbsp0.02*away_player_X5 +&nbsp0.08*away_player_X6 +&nbsp0.05*away_player_X7 +&nbsp-0.01*away_player_X8 +&nbsp-0.03*away_player_X9 +&nbsp-0.05*away_player_X10 +&nbsp0.00*away_player_X11 +&nbsp0.00*home_player_Y1 +&nbsp0.00*home_player_Y2 +&nbsp0.00*home_player_Y3 +&nbsp-0.01*home_player_Y4 +&nbsp-0.11*home_player_Y5 +&nbsp-0.02*home_player_Y6 +&nbsp0.04*home_player_Y7 +&nbsp0.03*home_player_Y8 +&nbsp-0.06*home_player_Y9 +&nbsp-0.03*home_player_Y10 +&nbsp0.04*home_player_Y11 +&nbsp0.09*away_player_Y1 +&nbsp0.00*away_player_Y2 +&nbsp0.00*away_player_Y3 +&nbsp0.00*away_player_Y4 +&nbsp0.01*away_player_Y5 +&nbsp0.06*away_player_Y6 +&nbsp0.07*away_player_Y7 +&nbsp0.00*away_player_Y8 +&nbsp-0.01*away_player_Y9 +&nbsp-0.09*away_player_Y10 +&nbsp0.10*away_player_Y11 +&nbsp0.11*home_player_1 +&nbsp-0.01*home_player_2 +&nbsp0.03*home_player_3 +&nbsp-0.03*home_player_4 +&nbsp0.02*home_player_5 +&nbsp0.03*home_player_6 +&nbsp-0.01*home_player_7 +&nbsp-0.04*home_player_8 +&nbsp0.04*home_player_9 +&nbsp-0.00*home_player_10 +&nbsp0.02*home_player_11 +&nbsp0.02*away_player_1 +&nbsp-0.01*away_player_2 +&nbsp-0.00*away_player_3 +&nbsp-0.05*away_player_4 +&nbsp0.00*away_player_5 +&nbsp-0.04*away_player_6 +&nbsp0.00*away_player_7 +&nbsp-0.01*away_player_8 +&nbsp-0.04*away_player_9 +&nbsp0.02*away_player_10 +&nbsp-0.01*away_player_11 +&nbsp0.02*B365H +&nbsp0.37*B365D +&nbsp-0.19*B365A +&nbsp-0.32*BWH +&nbsp0.03*BWD +&nbsp0.01*BWA +&nbsp0.17*IWH +&nbsp0.10*IWD +&nbsp-0.04*IWA +&nbsp-0.01*LBH +&nbsp0.28*LBD +&nbsp0.02*LBA +&nbsp0.02*PSH +&nbsp-0.54*PSD +&nbsp0.06*PSA +&nbsp0.09*WHH +&nbsp-0.33*WHD +&nbsp-0.10*WHA +&nbsp0.02*SJH +&nbsp-0.19*SJD +&nbsp0.02*SJA +&nbsp-0.16*VCH +&nbsp0.32*VCD +&nbsp-0.04*VCA +&nbsp0.01*GBH +&nbsp-0.10*GBD +&nbsp-0.07*GBA +&nbsp-0.27*BSH +&nbsp-0.13*BSD +&nbsp-0.01*BSA51.6850.13-0.5593725016907143TN:&nbsp799,&nbspFP:&nbsp1161,&nbspFN:&nbsp677,&nbspTP:&nbsp22440.5049333353192677
RandomForest_droppedMeaningless_noScaler_addedParams_playerOverallRatingnan100.053.191.0TN:&nbsp3533,&nbspFP:&nbsp0,&nbspFN:&nbsp0,&nbspTP:&nbsp39970.5258748380967383
logreg_droppedMeaningless_noScaler_addedParams_playerOverallRatingRESULT =&nbsp-0.00 +&nbsp-0.00*league_id +&nbsp-0.00*season +&nbsp0.00*stage +&nbsp-0.00*date +&nbsp-0.00*home_team_api_id +&nbsp-0.00*away_team_api_id +&nbsp0.00*home_player_X1 +&nbsp-0.00*home_player_X2 +&nbsp-0.00*home_player_X3 +&nbsp-0.00*home_player_X4 +&nbsp-0.00*home_player_X5 +&nbsp-0.00*home_player_X6 +&nbsp-0.00*home_player_X7 +&nbsp-0.00*home_player_X8 +&nbsp-0.00*home_player_X9 +&nbsp-0.00*home_player_X10 +&nbsp-0.00*home_player_X11 +&nbsp-0.00*away_player_X1 +&nbsp-0.00*away_player_X2 +&nbsp-0.00*away_player_X3 +&nbsp-0.00*away_player_X4 +&nbsp-0.00*away_player_X5 +&nbsp-0.00*away_player_X6 +&nbsp-0.00*away_player_X7 +&nbsp-0.00*away_player_X8 +&nbsp-0.00*away_player_X9 +&nbsp-0.00*away_player_X10 +&nbsp-0.00*away_player_X11 +&nbsp-0.00*home_player_Y1 +&nbsp-0.00*home_player_Y2 +&nbsp-0.00*home_player_Y3 +&nbsp-0.00*home_player_Y4 +&nbsp-0.00*home_player_Y5 +&nbsp-0.00*home_player_Y6 +&nbsp-0.00*home_player_Y7 +&nbsp-0.00*home_player_Y8 +&nbsp-0.00*home_player_Y9 +&nbsp-0.00*home_player_Y10 +&nbsp-0.00*home_player_Y11 +&nbsp-0.00*away_player_Y1 +&nbsp-0.00*away_player_Y2 +&nbsp-0.00*away_player_Y3 +&nbsp-0.00*away_player_Y4 +&nbsp-0.00*away_player_Y5 +&nbsp-0.00*away_player_Y6 +&nbsp-0.00*away_player_Y7 +&nbsp-0.00*away_player_Y8 +&nbsp-0.00*away_player_Y9 +&nbsp-0.00*away_player_Y10 +&nbsp-0.00*away_player_Y11 +&nbsp-0.00*home_player_1 +&nbsp0.00*home_player_2 +&nbsp0.00*home_player_3 +&nbsp-0.00*home_player_4 +&nbsp-0.00*home_player_5 +&nbsp0.00*home_player_6 +&nbsp0.00*home_player_7 +&nbsp-0.00*home_player_8 +&nbsp0.00*home_player_9 +&nbsp0.00*home_player_10 +&nbsp0.00*home_player_11 +&nbsp0.00*away_player_1 +&nbsp-0.00*away_player_2 +&nbsp0.00*away_player_3 +&nbsp-0.00*away_player_4 +&nbsp0.00*away_player_5 +&nbsp-0.00*away_player_6 +&nbsp-0.00*away_player_7 +&nbsp-0.00*away_player_8 +&nbsp-0.00*away_player_9 +&nbsp-0.00*away_player_10 +&nbsp0.00*away_player_11 +&nbsp-0.00*B365H +&nbsp-0.00*B365D +&nbsp-0.00*B365A +&nbsp-0.00*BWH +&nbsp-0.00*BWD +&nbsp-0.00*BWA +&nbsp-0.00*IWH +&nbsp-0.00*IWD +&nbsp-0.00*IWA +&nbsp-0.00*LBH +&nbsp-0.00*LBD +&nbsp-0.00*LBA +&nbsp-0.00*PSH +&nbsp-0.00*PSD +&nbsp-0.00*PSA +&nbsp-0.00*WHH +&nbsp-0.00*WHD +&nbsp-0.00*WHA +&nbsp-0.00*SJH +&nbsp-0.00*SJD +&nbsp-0.00*SJA +&nbsp-0.00*VCH +&nbsp-0.00*VCD +&nbsp-0.00*VCA +&nbsp-0.00*GBH +&nbsp-0.00*GBD +&nbsp-0.00*GBA +&nbsp-0.00*BSH +&nbsp-0.00*BSD +&nbsp-0.00*BSA +&nbsp-0.00*home_player_1_overall_rating +&nbsp-0.00*home_player_2_overall_rating +&nbsp-0.00*home_player_3_overall_rating +&nbsp-0.00*home_player_4_overall_rating +&nbsp-0.00*home_player_5_overall_rating +&nbsp-0.00*home_player_6_overall_rating +&nbsp-0.00*home_player_7_overall_rating +&nbsp-0.00*home_player_8_overall_rating +&nbsp-0.00*home_player_9_overall_rating +&nbsp-0.00*home_player_10_overall_rating +&nbsp-0.00*home_player_11_overall_rating +&nbsp-0.00*away_player_1_overall_rating +&nbsp-0.00*away_player_2_overall_rating +&nbsp-0.00*away_player_3_overall_rating +&nbsp-0.00*away_player_4_overall_rating +&nbsp-0.00*away_player_5_overall_rating +&nbsp-0.00*away_player_6_overall_rating +&nbsp-0.00*away_player_7_overall_rating +&nbsp-0.00*away_player_8_overall_rating +&nbsp-0.00*away_player_9_overall_rating +&nbsp-0.00*away_player_10_overall_rating +&nbsp-0.00*away_player_11_overall_rating52.8354.4-0.5555596240990914TN:&nbsp6,&nbspFP:&nbsp881,&nbspFN:&nbsp4,&nbspTP:&nbsp17890.5185347625610509
xTrees_droppedMeaningless_noScaler_addedParams_playerOverallRatingnan84.2553.170.5003932476692017TN:&nbsp2412,&nbspFP:&nbsp298,&nbspFN:&nbsp2,&nbspTP:&nbsp32010.530514956098139
RandomForest_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabelnan100.051.611.0Pred  Lose Draw Win True  Lose  0.46 0.03 0.51 Draw  0.27 0.04 0.69 Win  0.16 0.03 0.820.523843598262203
logreg_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabelRESULT =&nbsp-1.11 +&nbsp0.00*league_id +&nbsp0.00*season +&nbsp-0.46*stage +&nbsp-0.05*date +&nbsp0.49*home_team_api_id +&nbsp-0.03*away_team_api_id +&nbsp-0.03*home_player_1_position +&nbsp0.04*home_player_2_position +&nbsp0.02*home_player_3_position +&nbsp0.00*home_player_4_position +&nbsp0.01*home_player_5_position +&nbsp-0.01*home_player_6_position +&nbsp0.00*home_player_7_position +&nbsp0.01*home_player_8_position +&nbsp-0.01*home_player_9_position +&nbsp-0.03*home_player_10_position +&nbsp0.02*home_player_11_position +&nbsp0.00*away_player_1_position +&nbsp0.03*away_player_2_position +&nbsp0.01*away_player_3_position +&nbsp0.00*away_player_4_position +&nbsp0.02*away_player_5_position +&nbsp-0.03*away_player_6_position +&nbsp0.02*away_player_7_position +&nbsp-0.02*away_player_8_position +&nbsp-0.00*away_player_9_position +&nbsp-0.03*away_player_10_position +&nbsp0.00*away_player_11_position +&nbsp0.04*home_player_1 +&nbsp-0.02*home_player_2 +&nbsp0.02*home_player_3 +&nbsp0.01*home_player_4 +&nbsp-0.01*home_player_5 +&nbsp0.00*home_player_6 +&nbsp0.02*home_player_7 +&nbsp-0.01*home_player_8 +&nbsp0.00*home_player_9 +&nbsp-0.01*home_player_10 +&nbsp-0.02*home_player_11 +&nbsp0.02*away_player_1 +&nbsp-0.01*away_player_2 +&nbsp-0.05*away_player_3 +&nbsp-0.01*away_player_4 +&nbsp-0.03*away_player_5 +&nbsp-0.01*away_player_6 +&nbsp0.01*away_player_7 +&nbsp0.03*away_player_8 +&nbsp0.01*away_player_9 +&nbsp0.03*away_player_10 +&nbsp0.02*away_player_11 +&nbsp0.02*B365H +&nbsp0.42*B365D +&nbsp-0.11*B365A +&nbsp-0.12*BWH +&nbsp0.14*BWD +&nbsp-0.11*BWA +&nbsp-0.18*IWH +&nbsp-0.12*IWD +&nbsp0.10*IWA +&nbsp0.07*LBH +&nbsp0.02*LBD +&nbsp0.16*LBA +&nbsp0.25*PSH +&nbsp-0.01*PSD +&nbsp0.39*PSA +&nbsp-0.13*WHH +&nbsp-0.22*WHD +&nbsp0.10*WHA +&nbsp0.20*SJH +&nbsp0.02*SJD +&nbsp0.24*SJA +&nbsp-0.17*VCH +&nbsp0.05*VCD +&nbsp-0.45*VCA +&nbsp-0.03*GBH +&nbsp0.13*GBD +&nbsp0.17*GBA +&nbsp-0.68*BSH +&nbsp-0.08*BSD +&nbsp-0.40*BSA53.4351.96-0.5359402567508378Pred  Lose Draw Win True  Lose  0.43 0.01 0.56 Draw  0.23 0.01 0.76 Win  0.14 0.00 0.860.5274214157935088
RandomForest_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel_VSPoints_OverallScorenan100.054.461.0Pred  Lose Draw Win True  Lose  0.54 0.04 0.42 Draw  0.32 0.05 0.63 Win  0.15 0.03 0.820.5508904408367933
logreg_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel_VSPoints_OverallScoreRESULT =&nbsp-1.14 +&nbsp-0.01*league_id +&nbsp-0.01*season +&nbsp-0.50*stage +&nbsp-0.04*date +&nbsp0.55*home_team_api_id +&nbsp0.03*away_team_api_id +&nbsp-0.00*home_player_1_position +&nbsp0.00*home_player_2_position +&nbsp0.03*home_player_3_position +&nbsp-0.01*home_player_4_position +&nbsp0.03*home_player_5_position +&nbsp-0.06*home_player_6_position +&nbsp-0.04*home_player_7_position +&nbsp0.02*home_player_8_position +&nbsp-0.03*home_player_9_position +&nbsp-0.02*home_player_10_position +&nbsp-0.02*home_player_11_position +&nbsp-0.01*away_player_1_position +&nbsp-0.05*away_player_2_position +&nbsp-0.03*away_player_3_position +&nbsp0.00*away_player_4_position +&nbsp-0.02*away_player_5_position +&nbsp-0.01*away_player_6_position +&nbsp0.01*away_player_7_position +&nbsp-0.01*away_player_8_position +&nbsp-0.01*away_player_9_position +&nbsp-0.00*away_player_10_position +&nbsp-0.01*away_player_11_position +&nbsp0.02*home_player_1 +&nbsp-0.01*home_player_2 +&nbsp0.05*home_player_3 +&nbsp0.05*home_player_4 +&nbsp-0.01*home_player_5 +&nbsp-0.01*home_player_6 +&nbsp0.02*home_player_7 +&nbsp0.03*home_player_8 +&nbsp0.01*home_player_9 +&nbsp-0.01*home_player_10 +&nbsp-0.03*home_player_11 +&nbsp0.03*away_player_1 +&nbsp-0.01*away_player_2 +&nbsp-0.04*away_player_3 +&nbsp-0.02*away_player_4 +&nbsp-0.06*away_player_5 +&nbsp-0.01*away_player_6 +&nbsp0.02*away_player_7 +&nbsp0.01*away_player_8 +&nbsp-0.01*away_player_9 +&nbsp0.00*away_player_10 +&nbsp0.01*home_player_1_overall_rating +&nbsp-0.03*home_player_2_overall_rating +&nbsp-0.01*home_player_3_overall_rating +&nbsp-0.01*home_player_4_overall_rating +&nbsp-0.01*home_player_5_overall_rating +&nbsp-0.01*home_player_6_overall_rating +&nbsp0.03*home_player_7_overall_rating +&nbsp-0.01*home_player_8_overall_rating +&nbsp0.02*home_player_9_overall_rating +&nbsp-0.01*home_player_10_overall_rating +&nbsp0.01*home_player_11_overall_rating +&nbsp-0.02*away_player_1_overall_rating +&nbsp-0.01*away_player_2_overall_rating +&nbsp0.04*away_player_3_overall_rating +&nbsp-0.01*away_player_4_overall_rating +&nbsp-0.02*away_player_5_overall_rating +&nbsp-0.03*away_player_6_overall_rating +&nbsp-0.02*away_player_7_overall_rating +&nbsp-0.03*away_player_8_overall_rating +&nbsp-0.01*away_player_9_overall_rating +&nbsp-0.01*away_player_10_overall_rating +&nbsp0.03*away_player_11_overall_rating +&nbsp-0.02*away_player_11 +&nbsp0.03*B365H +&nbsp0.28*B365D +&nbsp-0.02*B365A +&nbsp-0.08*BWH +&nbsp-0.03*BWD +&nbsp-0.00*BWA +&nbsp0.25*IWH +&nbsp-0.23*IWD +&nbsp0.07*IWA +&nbsp0.06*LBH +&nbsp-0.18*LBD +&nbsp0.17*LBA +&nbsp0.31*PSH +&nbsp0.18*PSD +&nbsp0.27*PSA +&nbsp-0.28*WHH +&nbsp0.02*WHD +&nbsp0.08*WHA +&nbsp0.19*SJH +&nbsp0.07*SJD +&nbsp0.02*SJA +&nbsp-0.35*VCH +&nbsp0.04*VCD +&nbsp-0.35*VCA +&nbsp0.30*GBH +&nbsp0.32*GBD +&nbsp0.15*GBA +&nbsp-0.66*BSH +&nbsp-0.23*BSD +&nbsp-0.40*BSA +&nbsp-0.11*VSPointDiff55.8255.4-0.3761755421366153Pred  Lose Draw Win True  Lose  0.54 0.03 0.43 Draw  0.31 0.03 0.66 Win  0.14 0.01 0.850.5538859370731686
xTrees_droppedMeaningless_StandardScaler_addedParams_Positions_ResultLabel_VSPoints_OverallScorenan85.053.630.4924065043106429Pred  Lose Draw Win True  Lose  0.48 0.02 0.50 Draw  0.29 0.01 0.69 Win  0.14 0.01 0.860.5406751640820203
RandomForest_droppedMeaningless_StandardScaler_gridParams_Positions_ResultLabelCorrected_VSPoints_OverallScore_OverallScoreGrouped_Entropynan83.455.410.4281480990120474Pred  Lose Draw Win True  Lose  0.03 0.29 0.68 Draw  0.03 0.54 0.43 Win  0.01 0.14 0.850.553872383681117
logreg_droppedMeaningless_StandardScaler_gridParams_Positions_ResultLabelCorrected_VSPoints_OverallScore_OverallScoreGrouped_EntropyRESULT =&nbsp-1.09 +&nbsp-0.02*league_id +&nbsp-0.02*season +&nbsp0.27*stage +&nbsp-0.02*date +&nbsp-0.26*home_team_api_id +&nbsp0.01*away_team_api_id +&nbsp0.01*home_player_1_position +&nbsp0.00*home_player_2_position +&nbsp0.05*home_player_3_position +&nbsp0.02*home_player_4_position +&nbsp-0.01*home_player_5_position +&nbsp0.09*home_player_6_position +&nbsp0.01*home_player_7_position +&nbsp0.03*home_player_8_position +&nbsp-0.01*home_player_9_position +&nbsp0.05*home_player_10_position +&nbsp-0.02*home_player_11_position +&nbsp0.05*away_player_1_position +&nbsp0.00*away_player_2_position +&nbsp0.01*away_player_3_position +&nbsp-0.00*away_player_4_position +&nbsp-0.04*away_player_5_position +&nbsp0.02*away_player_6_position +&nbsp-0.03*away_player_7_position +&nbsp0.03*away_player_8_position +&nbsp-0.02*away_player_9_position +&nbsp-0.02*away_player_10_position +&nbsp0.02*away_player_11_position +&nbsp-0.02*home_player_1 +&nbsp0.01*home_player_2 +&nbsp0.01*home_player_3 +&nbsp-0.00*home_player_4 +&nbsp-0.03*home_player_5 +&nbsp0.05*home_player_6 +&nbsp-0.03*home_player_7 +&nbsp-0.04*home_player_8 +&nbsp-0.01*home_player_9 +&nbsp0.03*home_player_10 +&nbsp0.05*home_player_11 +&nbsp0.02*away_player_1 +&nbsp-0.01*away_player_2 +&nbsp0.01*away_player_3 +&nbsp-0.04*away_player_4 +&nbsp0.03*away_player_5 +&nbsp0.01*away_player_6 +&nbsp-0.01*away_player_7 +&nbsp-0.06*away_player_8 +&nbsp-0.01*away_player_9 +&nbsp-0.02*away_player_10 +&nbsp0.01*home_player_1_overall_rating +&nbsp0.04*home_player_2_overall_rating +&nbsp0.06*home_player_3_overall_rating +&nbsp0.10*home_player_4_overall_rating +&nbsp0.15*home_player_5_overall_rating +&nbsp0.08*home_player_6_overall_rating +&nbsp-0.03*home_player_7_overall_rating +&nbsp-0.01*home_player_8_overall_rating +&nbsp-0.00*home_player_9_overall_rating +&nbsp-0.04*home_player_10_overall_rating +&nbsp-0.04*home_player_11_overall_rating +&nbsp-0.01*away_player_1_overall_rating +&nbsp-0.02*away_player_2_overall_rating +&nbsp-0.03*away_player_3_overall_rating +&nbsp-0.00*away_player_4_overall_rating +&nbsp0.00*away_player_5_overall_rating +&nbsp-0.01*away_player_6_overall_rating +&nbsp-0.06*away_player_7_overall_rating +&nbsp-0.02*away_player_8_overall_rating +&nbsp-0.09*away_player_9_overall_rating +&nbsp-0.13*away_player_10_overall_rating +&nbsp-0.09*away_player_11_overall_rating +&nbsp-0.09*away_player_11 +&nbsp0.02*B365H +&nbsp0.10*B365D +&nbsp-0.26*B365A +&nbsp-0.11*BWH +&nbsp0.03*BWD +&nbsp-0.17*BWA +&nbsp0.06*IWH +&nbsp0.05*IWD +&nbsp0.02*IWA +&nbsp0.11*LBH +&nbsp-0.07*LBD +&nbsp0.00*LBA +&nbsp-0.01*PSH +&nbsp-0.31*PSD +&nbsp-0.08*PSA +&nbsp0.33*WHH +&nbsp0.02*WHD +&nbsp0.01*WHA +&nbsp-0.22*SJH +&nbsp-0.34*SJD +&nbsp0.18*SJA +&nbsp-0.27*VCH +&nbsp0.33*VCD +&nbsp0.14*VCA +&nbsp-0.10*GBH +&nbsp0.25*GBD +&nbsp-0.10*GBA +&nbsp-0.00*BSH +&nbsp-0.20*BSD +&nbsp-0.09*BSA +&nbsp0.16*VSPointDiff +&nbsp-0.18*entropy +&nbsp-0.06*home_formation +&nbsp0.05*away_formation +&nbsp-0.08*home_defenders_score +&nbsp-0.21*home_midfielders_score +&nbsp0.05*home_forwarders_score +&nbsp0.05*away_defenders_score +&nbsp0.03*away_midfielders_score +&nbsp0.17*away_forwarders_score56.2656.13-0.4187879506295893Pred  Lose Draw Win True  Lose  0.06 0.28 0.66 Draw  0.06 0.55 0.38 Win  0.03 0.13 0.840.5541609318946021
xTrees_droppedMeaningless_StandardScaler_gridParams_Positions_ResultLabelCorrected_VSPoints_OverallScore_OverallScoreGrouped_Entropynan85.3454.080.5388336838129374Pred  Lose Draw Win True  Lose  0.03 0.28 0.69 Draw  0.02 0.49 0.49 Win  0.01 0.14 0.850.5393670425969235
RandomForestshortECH_StandardScaler_gridParams_Formation_ResultLabelCorrected_VSPoints_Entropy_MeanOdds_MeanAge_GK_RolesOverallScore)nan76.3556.540.2400818108804457Pred  Lose Draw Win True  Lose  0.07 0.35 0.58 Draw  0.08 0.61 0.32 Win  0.04 0.15 0.810.5582753086361892
logregshortECH_StandardScaler_gridParams_Formation_ResultLabelCorrected_VSPoints_Entropy_MeanOdds_MeanAge_GK_RolesOverallScore)RESULT =&nbsp-1.08 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.01*home_defenders_score +&nbsp0.00*home_midfielders_score +&nbsp0.02*home_forwarders_score +&nbsp0.01*away_defenders_score +&nbsp-0.00*away_midfielders_score +&nbsp0.01*away_forwarders_score +&nbsp-0.05*Age_home +&nbsp0.04*Age_away +&nbsp-0.00*Away_odds +&nbsp-0.00*Home_odds +&nbsp-0.12*Draw_odds +&nbsp-0.34*home_formation +&nbsp-0.02*away_formation +&nbsp-0.01*VSPointDiff +&nbsp-0.17*entropy55.2556.31-0.4379205421124577Pred  Lose Draw Win True  Lose  0.01 0.31 0.68 Draw  0.00 0.58 0.42 Win  0.00 0.14 0.860.5553881861352089
xTreesshortECH_StandardScaler_gridParams_Formation_ResultLabelCorrected_VSPoints_Entropy_MeanOdds_MeanAge_GK_RolesOverallScore)nan74.9756.650.17517272273856654Pred  Lose Draw Win True  Lose  0.03 0.33 0.63 Draw  0.04 0.60 0.36 Win  0.01 0.15 0.840.5582749701479403
RandomForest_shortECH_OVRnan78.656.910.2881258739374261Pred  Lose Draw Win True  Lose  0.07 0.35 0.58 Draw  0.06 0.61 0.32 Win  0.03 0.16 0.820.558274709772364
logreg_shortECH_OVRnan55.2556.31-0.4379205421124577Pred  Lose Draw Win True  Lose  0.01 0.31 0.68 Draw  0.00 0.58 0.42 Win  0.00 0.14 0.860.5553881861352089
xTrees_shortECH_OVRnan76.6956.620.2256260750933896Pred  Lose Draw Win True  Lose  0.03 0.34 0.63 Draw  0.04 0.60 0.37 Win  0.01 0.15 0.840.5583470941825326
RandomForest_shortECH_elo{nobonus,100,200}_SCALEDnan76.4256.310.2267857036829083Pred  Lose Draw Win True  Lose  0.05 0.37 0.57 Draw  0.05 0.63 0.32 Win  0.03 0.16 0.810.5618100112326023
logreg_shortECH_elo{nobonus,100,200}_SCALEDRESULT =&nbsp-1.09 +&nbsp0.01*away_player_1_overall_rating +&nbsp-0.01*home_defenders_score +&nbsp-0.01*home_midfielders_score +&nbsp0.01*home_forwarders_score +&nbsp0.01*away_defenders_score +&nbsp-0.01*away_midfielders_score +&nbsp0.01*away_forwarders_score +&nbsp-0.05*Age_home +&nbsp0.01*Age_away +&nbsp0.03*Away_odds +&nbsp0.12*Home_odds +&nbsp-0.02*Draw_odds +&nbsp-0.39*elo_home_cat +&nbsp0.05*elo_away_cat +&nbsp-0.06*home_formation +&nbsp-0.01*away_formation +&nbsp-0.01*NoBonus +&nbsp-0.10*100Bonus +&nbsp0.07*200Bonus +&nbsp-0.02*VSPointDiff +&nbsp-0.17*entropy55.9955.64-0.4191745626652996Pred  Lose Draw Win True  Lose  0.00 0.30 0.70 Draw  0.00 0.58 0.41 Win  0.00 0.15 0.850.5591392087602842
xTrees_shortECH_elo{nobonus,100,200}_SCALEDnan74.7455.470.1415696791348765Pred  Lose Draw Win True  Lose  0.01 0.32 0.67 Draw  0.01 0.58 0.41 Win  0.01 0.15 0.840.5556752502079099
RandomForest_shortECH_elo{nobonus,100,200}_NOTSCALEDnan76.0356.330.21153802036076885Pred  Lose Draw Win True  Lose  0.05 0.37 0.57 Draw  0.04 0.63 0.33 Win  0.02 0.17 0.810.5600776283742721
logreg_shortECH_elo{nobonus,100,200}_NOTSCALEDRESULT =&nbsp-0.91 +&nbsp0.01*away_player_1_overall_rating +&nbsp-0.01*home_defenders_score +&nbsp-0.01*home_midfielders_score +&nbsp0.01*home_forwarders_score +&nbsp0.01*away_defenders_score +&nbsp-0.01*away_midfielders_score +&nbsp0.01*away_forwarders_score +&nbsp-0.05*Age_home +&nbsp0.01*Age_away +&nbsp0.03*Away_odds +&nbsp0.12*Home_odds +&nbsp-0.03*Draw_odds +&nbsp-0.40*elo_home_cat +&nbsp0.07*elo_away_cat +&nbsp-0.07*home_formation +&nbsp-0.01*away_formation +&nbsp-0.01*VSPointDiff +&nbsp-0.17*entropy +&nbsp-0.04*NoBonus +&nbsp-0.22*100Bonus +&nbsp-0.06*200Bonus55.9755.67-0.42074208151150105Pred  Lose Draw Win True  Lose  0.00 0.30 0.70 Draw  0.00 0.58 0.41 Win  0.00 0.15 0.850.5592113848699919
xTrees_shortECH_elo{nobonus,100,200}_NOTSCALEDnan74.6155.640.13786463458930984Pred  Lose Draw Win True  Lose  0.01 0.32 0.67 Draw  0.01 0.58 0.41 Win  0.00 0.15 0.850.5574794446501411
RandomForest_shortECH_elo{nobonus,100,200}_SCALED_ResCorrnan76.2356.680.2375756833789299Pred  Lose Draw Win True  Lose  0.64 0.05 0.32 Draw  0.37 0.06 0.57 Win  0.16 0.03 0.810.5621702929173156
logreg_shortECH_elo{nobonus,100,200}_SCALED_ResCorrRESULT =&nbsp-1.15 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.01*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.50*Home_odds +&nbsp0.13*Draw_odds +&nbsp0.11*elo_home_cat +&nbsp-0.03*elo_away_cat +&nbsp-0.08*home_formation +&nbsp0.04*away_formation +&nbsp0.02*NoBonus +&nbsp0.17*100Bonus +&nbsp-0.13*200Bonus +&nbsp0.00*VSPointDiff +&nbsp-0.80*entropy55.9955.64-0.3793612149216421Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.15 0.00 0.850.5591392087602842
xTrees_shortECH_elo{nobonus,100,200}_SCALED_ResCorrnan74.4355.470.21434092390713247Pred  Lose Draw Win True  Lose  0.57 0.01 0.41 Draw  0.31 0.01 0.67 Win  0.14 0.01 0.850.5570466223299135
RandomForest_balanced_shortECH_elo{nobonus,100,200}_SCALED_ResCorrnan80.6755.350.2467615185189427Pred  Lose Draw Win True  Lose  0.63 0.14 0.23 Draw  0.36 0.18 0.46 Win  0.17 0.11 0.720.5476651861711407
logreg_balanced_shortECH_elo{nobonus,100,200}_SCALED_ResCorrRESULT =&nbsp-0.99 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.01*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.52*Home_odds +&nbsp0.12*Draw_odds +&nbsp0.11*elo_home_cat +&nbsp-0.03*elo_away_cat +&nbsp-0.08*home_formation +&nbsp0.04*away_formation +&nbsp0.01*NoBonus +&nbsp0.17*100Bonus +&nbsp-0.15*200Bonus +&nbsp0.02*VSPointDiff +&nbsp-0.80*entropy56.3556.05-0.2781819425706176Pred  Lose Draw Win True  Lose  0.63 0.09 0.28 Draw  0.37 0.12 0.52 Win  0.18 0.05 0.770.5600050617012002
xTrees_balanced_shortECH_elo{nobonus,100,200}_SCALED_ResCorrnan82.7555.010.3193025989628681Pred  Lose Draw Win True  Lose  0.63 0.17 0.21 Draw  0.36 0.25 0.39 Win  0.18 0.15 0.670.5395821909354929
RandomForest_shortECH_eloCat{nobonus,100,200}_SCALED_ResCorrnan76.4856.280.2406826570292283Pred  Lose Draw Win True  Lose  0.63 0.04 0.33 Draw  0.37 0.06 0.57 Win  0.17 0.03 0.810.5607270831738533
logreg_shortECH_eloCat{nobonus,100,200}_SCALED_ResCorrRESULT =&nbsp-1.15 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.01*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.50*Home_odds +&nbsp0.13*Draw_odds +&nbsp0.11*elo_home_cat +&nbsp-0.01*elo_away_cat +&nbsp-0.10*NoBonus_cat +&nbsp0.12*100Bonus_cat +&nbsp0.11*200Bonus_cat +&nbsp-0.21*home_formation +&nbsp0.04*away_formation +&nbsp0.02*VSPointDiff +&nbsp-0.80*entropy56.055.76-0.3839541324916485Pred  Lose Draw Win True  Lose  0.58 0.01 0.42 Draw  0.30 0.01 0.69 Win  0.14 0.00 0.850.5589228106189492
xTrees_shortECH_eloCat{nobonus,100,200}_SCALED_ResCorrnan73.9255.410.20029199957534805Pred  Lose Draw Win True  Lose  0.57 0.01 0.42 Draw  0.31 0.01 0.68 Win  0.15 0.01 0.850.554809527454782
RandomForest_shortECH_eloCat{nobonus,100,200}_NotSCALED_ResCorrnan75.9456.130.22339167323626288Pred  Lose Draw Win True  Lose  0.63 0.05 0.32 Draw  0.37 0.05 0.58 Win  0.17 0.03 0.800.5611601398320994
logreg_shortECH_eloCat{nobonus,100,200}_NotSCALED_ResCorrRESULT =&nbsp-0.91 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.01*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.51*Home_odds +&nbsp0.12*Draw_odds +&nbsp0.10*elo_home_cat +&nbsp0.01*elo_away_cat +&nbsp-0.13*home_formation +&nbsp0.04*away_formation +&nbsp0.02*VSPointDiff +&nbsp-0.80*entropy +&nbsp-0.05*NoBonus_cat +&nbsp0.04*100Bonus_cat +&nbsp0.05*200Bonus_cat56.0555.76-0.3812524162739976Pred  Lose Draw Win True  Lose  0.58 0.01 0.41 Draw  0.30 0.01 0.69 Win  0.14 0.00 0.850.5589949346535417
xTrees_shortECH_eloCat{nobonus,100,200}_NotSCALED_ResCorrnan74.0155.70.2011025144406433Pred  Lose Draw Win True  Lose  0.58 0.01 0.41 Draw  0.32 0.02 0.67 Win  0.14 0.01 0.850.5546651231602513
RandomForest_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrnan76.8756.190.25127957307969595Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.38 0.07 0.55 Win  0.17 0.03 0.790.561160504357906
logreg_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrRESULT =&nbsp-1.14 +&nbsp0.02*away_player_1_overall_rating +&nbsp-0.05*home_defenders_score +&nbsp-0.02*home_midfielders_score +&nbsp-0.00*home_forwarders_score +&nbsp0.02*away_defenders_score +&nbsp-0.00*away_midfielders_score +&nbsp-0.04*away_forwarders_score +&nbsp-0.01*Away_odds +&nbsp-0.38*Home_odds +&nbsp0.19*Draw_odds +&nbsp0.09*elo_home +&nbsp0.02*elo_away +&nbsp-0.18*NoBonus +&nbsp-0.04*100Bonus +&nbsp0.05*200Bonus +&nbsp-0.15*VSPointDiff56.1555.79-0.3734876797142461Pred  Lose Draw Win True  Lose  0.60 0.00 0.39 Draw  0.34 0.00 0.65 Win  0.16 0.00 0.840.5595005840224173
xTrees_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrnan74.2954.980.2032933388213988Pred  Lose Draw Win True  Lose  0.60 0.02 0.38 Draw  0.37 0.02 0.61 Win  0.17 0.01 0.820.5592120618464899
RandomForest_balanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrnan81.455.090.2857485582511489Pred  Lose Draw Win True  Lose  0.64 0.16 0.21 Draw  0.39 0.21 0.40 Win  0.18 0.13 0.690.5450679658366413
logreg_balanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrRESULT =&nbsp-0.98 +&nbsp0.02*away_player_1_overall_rating +&nbsp-0.05*home_defenders_score +&nbsp-0.02*home_midfielders_score +&nbsp-0.00*home_forwarders_score +&nbsp0.02*away_defenders_score +&nbsp-0.00*away_midfielders_score +&nbsp-0.04*away_forwarders_score +&nbsp-0.01*Away_odds +&nbsp-0.38*Home_odds +&nbsp0.19*Draw_odds +&nbsp0.09*elo_home +&nbsp0.03*elo_away +&nbsp-0.18*NoBonus +&nbsp-0.05*100Bonus +&nbsp0.06*200Bonus +&nbsp-0.15*VSPointDiff56.2156.28-0.2790021085972048Pred  Lose Draw Win True  Lose  0.65 0.08 0.26 Draw  0.41 0.13 0.46 Win  0.19 0.06 0.750.558851285448182
xTrees_balanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrnan81.2454.080.284261660851596Pred  Lose Draw Win True  Lose  0.62 0.19 0.19 Draw  0.40 0.24 0.36 Win  0.19 0.15 0.660.5433366244806158
RandomForest_manbalanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrnan79.2955.820.2691223418743304Pred  Lose Draw Win True  Lose  0.61 0.11 0.28 Draw  0.38 0.12 0.50 Win  0.16 0.07 0.770.5593567265165966
logreg_manbalanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrRESULT =&nbsp-1.14 +&nbsp0.02*away_player_1_overall_rating +&nbsp-0.05*home_defenders_score +&nbsp-0.02*home_midfielders_score +&nbsp-0.00*home_forwarders_score +&nbsp0.02*away_defenders_score +&nbsp-0.00*away_midfielders_score +&nbsp-0.04*away_forwarders_score +&nbsp-0.01*Away_odds +&nbsp-0.38*Home_odds +&nbsp0.19*Draw_odds +&nbsp0.09*elo_home +&nbsp0.02*elo_away +&nbsp-0.18*NoBonus +&nbsp-0.04*100Bonus +&nbsp0.05*200Bonus +&nbsp-0.15*VSPointDiff56.2556.08-0.35496904846526944Pred  Lose Draw Win True  Lose  0.61 0.01 0.37 Draw  0.36 0.03 0.61 Win  0.16 0.01 0.820.5618097248194686
xTrees_manbalanced_evenshorterECH_elo{nobonus,100,200}_SCALED_ResCorrnan78.4754.890.2551995753148808Pred  Lose Draw Win True  Lose  0.60 0.07 0.33 Draw  0.37 0.08 0.55 Win  0.17 0.05 0.780.5566862104574122
RandomForest_shortECH_elo{100}_SCALED_ResCorrnan76.856.390.25073888311622217Pred  Lose Draw Win True  Lose  0.64 0.04 0.33 Draw  0.38 0.07 0.55 Win  0.18 0.03 0.800.5624596222575291
logreg_shortECH_elo{100}_SCALED_ResCorrRESULT =&nbsp-1.14 +&nbsp0.02*away_player_1_overall_rating +&nbsp-0.04*home_defenders_score +&nbsp-0.02*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp0.01*away_defenders_score +&nbsp-0.00*away_midfielders_score +&nbsp-0.05*away_forwarders_score +&nbsp-0.01*Age_home +&nbsp-0.01*Age_away +&nbsp0.01*Away_odds +&nbsp-0.35*Home_odds +&nbsp0.20*Draw_odds +&nbsp0.08*elo_home_cat +&nbsp-0.07*elo_away_cat +&nbsp-0.08*home_formation +&nbsp0.07*away_formation +&nbsp-0.00*NoBonus +&nbsp-0.01*VSPointDiff +&nbsp-0.78*entropy56.0355.82-0.37754285444029945Pred  Lose Draw Win True  Lose  0.60 0.00 0.40 Draw  0.34 0.00 0.65 Win  0.15 0.00 0.850.5605106329574031
xTrees_shortECH_elo{100}_SCALED_ResCorrnan74.4155.270.20788920351092588Pred  Lose Draw Win True  Lose  0.60 0.01 0.39 Draw  0.36 0.02 0.63 Win  0.17 0.01 0.830.5598613343831677
RandomForest_shortECH_elo{100}_SCALED_ResCorr_SMOTEnan84.5653.560.3943281841566055Pred  Lose Draw Win True  Lose  0.43 0.33 0.24 Draw  0.23 0.35 0.42 Win  0.09 0.20 0.710.0
logreg_shortECH_elo{100}_SCALED_ResCorr_SMOTEnan51.650.91-0.08666622931175838Pred  Lose Draw Win True  Lose  0.28 0.55 0.17 Draw  0.12 0.54 0.34 Win  0.04 0.33 0.630.0
xTrees_shortECH_elo{100}_SCALED_ResCorr_SMOTEnan84.352.210.3919124756068202Pred  Lose Draw Win True  Lose  0.37 0.42 0.21 Draw  0.20 0.43 0.38 Win  0.08 0.25 0.670.0
GradientBoosting_superbasic_shortECH_elo{No,100,200}_SCALED_ResCorrnan60.0656.57-0.2002374296913907Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.790.5636860693338499
GradientBoosting_10Est_shortECH_elo{No,100,200}_SCALED_ResCorrnan56.5955.87-0.3546405115301368Pred  Lose Draw Win True  Lose  0.64 0.00 0.36 Draw  0.37 0.00 0.63 Win  0.18 0.00 0.820.563036536421596
GradientBoosting_10Est_0.9MF_shortECH_elo{No,100,200}_SCALED_ResCorrnan56.655.96-0.35085810882542545Pred  Lose Draw Win True  Lose  0.65 0.00 0.35 Draw  0.38 0.00 0.62 Win  0.18 0.00 0.820.5635419774900107
GradientBoosting_10Est_0.9MF_shortECH_elo{No,100,200}_SCALED_ResCorrnan56.7255.99-0.3476160493642446Pred  Lose Draw Win True  Lose  0.65 0.00 0.34 Draw  0.39 0.00 0.61 Win  0.18 0.00 0.820.5625314078038726
GradientBoosting_1000Est_0.01LR_shortECH_elo{No,100,200}_SCALED_ResCorrnan59.9556.51-0.2037496607743368Pred  Lose Draw Win True  Lose  0.63 0.07 0.31 Draw  0.35 0.10 0.56 Win  0.17 0.04 0.790.5621705272553341
DvL_GradientBoosting_shortECH_elo{No,100,200}_SCALED_ResCorrnan69.0861.91-0.2388672844113336[[&nbsp0.68153656 &nbsp0.31846344]  [&nbsp0.45375723 &nbsp0.54624277]]0.6191826522101752
DvL_RandomForest_shortECH_elo{No,100,200}_SCALED_ResCorrnan90.4661.910.6176445575449913[[&nbsp0.66542751 &nbsp0.33457249]  [&nbsp0.4349711  &nbsp0.5650289 ]]0.6128440366972476
DvL_logreg_shortECH_elo{No,100,200}_SCALED_ResCorrRESULT =&nbsp0.14 +&nbsp0.00*away_player_1_overall_rating +&nbsp0.02*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp0.00*home_forwarders_score +&nbsp0.00*away_defenders_score +&nbsp0.00*away_midfielders_score +&nbsp-0.02*away_forwarders_score +&nbsp-0.05*Age_home +&nbsp0.01*Age_away +&nbsp-0.01*Away_odds +&nbsp0.24*Home_odds +&nbsp-0.14*Draw_odds +&nbsp-0.23*elo_home_cat +&nbsp0.00*elo_away_cat +&nbsp0.14*home_formation +&nbsp-0.07*away_formation +&nbsp-0.00*NoBonus +&nbsp-0.10*100Bonus +&nbsp0.17*200Bonus +&nbsp0.04*VSPointDiff +&nbsp0.45*entropy62.1462.98-0.5169439698331582[[&nbsp0.6802974  &nbsp0.3197026 ]  [&nbsp0.42919075 &nbsp0.57080925]]0.6221851542952461
DvL_xTrees_shortECH_elo{No,100,200}_SCALED_ResCorrnan83.5461.770.3404591435508008[[&nbsp0.65923172 &nbsp0.34076828]  [&nbsp0.43063584 &nbsp0.56936416]]0.6201834862385323
WvD_GradientBoosting_shortECH_elo{No,100,200}_SCALED_ResCorrnan69.3964.61-0.2282572158975311[[&nbsp0.66853933 &nbsp0.33146067]  [&nbsp0.37893082 &nbsp0.62106918]]0.6303591884968724
WvD_RandomForest_shortECH_elo{No,100,200}_SCALED_ResCorrnan90.1563.950.6048129572132439[[&nbsp0.69382022 &nbsp0.30617978]  [&nbsp0.42138365 &nbsp0.57861635]]0.6259032253063291
WvD_logreg_shortECH_elo{No,100,200}_SCALED_ResCorrRESULT =&nbsp-0.22 +&nbsp-0.03*away_player_1_overall_rating +&nbsp0.02*home_defenders_score +&nbsp0.04*home_midfielders_score +&nbsp0.02*home_forwarders_score +&nbsp0.02*away_defenders_score +&nbsp-0.01*away_midfielders_score +&nbsp-0.02*away_forwarders_score +&nbsp0.06*Age_home +&nbsp-0.10*Age_away +&nbsp0.06*Away_odds +&nbsp0.07*Home_odds +&nbsp-0.15*Draw_odds +&nbsp0.21*elo_home_cat +&nbsp0.02*elo_away_cat +&nbsp-0.01*home_formation +&nbsp0.01*away_formation +&nbsp0.05*NoBonus +&nbsp-0.09*100Bonus +&nbsp-0.03*200Bonus +&nbsp0.04*VSPointDiff +&nbsp0.59*entropy63.5765.73-0.4615962989500129[[&nbsp0.74578652 &nbsp0.25421348]  [&nbsp0.4418239  &nbsp0.5581761 ]]0.6299883032473561
WvD_xTrees_shortECH_elo{No,100,200}_SCALED_ResCorrnan85.8262.610.43104981025926814[[&nbsp0.71769663 &nbsp0.28230337]  [&nbsp0.47641509 &nbsp0.52358491]]0.6182960294778839
WvL_GradientBoosting_shortECH_elo{No,100,200}_SCALED_ResCorrnan78.3975.70.12519594772123666[[&nbsp0.79411765 &nbsp0.20588235]  [&nbsp0.28816199 &nbsp0.71183801]]0.7508340649692713
WvL_RandomForest_shortECH_elo{No,100,200}_SCALED_ResCorrnan88.1174.580.5185260470665094[[&nbsp0.78644501 &nbsp0.21355499]  [&nbsp0.30373832 &nbsp0.69626168]]0.7438103599648815
WvL_logreg_shortECH_elo{No,100,200}_SCALED_ResCorrRESULT =&nbsp-0.10 +&nbsp-0.03*away_player_1_overall_rating +&nbsp0.01*home_defenders_score +&nbsp0.06*home_midfielders_score +&nbsp0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp0.02*away_forwarders_score +&nbsp0.07*Age_home +&nbsp0.01*Age_away +&nbsp-0.04*Away_odds +&nbsp0.23*Home_odds +&nbsp-0.28*Draw_odds +&nbsp0.21*elo_home_cat +&nbsp-0.16*elo_away_cat +&nbsp0.27*home_formation +&nbsp-0.14*away_formation +&nbsp0.07*NoBonus +&nbsp-0.11*100Bonus +&nbsp0.20*200Bonus +&nbsp0.15*VSPointDiff +&nbsp1.12*entropy75.1873.95-0.004650374231299326[[&nbsp0.80179028 &nbsp0.19820972]  [&nbsp0.3364486  &nbsp0.6635514 ]]0.7476733977172958
WvL_xTrees_shortECH_elo{No,100,200}_SCALED_ResCorrnan83.3173.670.32423045582366383[[&nbsp0.80179028 &nbsp0.19820972]  [&nbsp0.34267913 &nbsp0.65732087]]0.7390693590869184
DvL_RandomForest_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrnan90.3262.370.612296928979187[[&nbsp0.65055762 &nbsp0.34944238]  [&nbsp0.40751445 &nbsp0.59248555]]0.6160133444537114
DvL_logreg_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrRESULT =&nbsp0.22 +&nbsp0.00*away_player_1_overall_rating +&nbsp0.02*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp0.00*home_forwarders_score +&nbsp0.00*away_defenders_score +&nbsp0.00*away_midfielders_score +&nbsp-0.01*away_forwarders_score +&nbsp-0.05*Age_home +&nbsp0.01*Age_away +&nbsp-0.01*Away_odds +&nbsp0.24*Home_odds +&nbsp-0.14*Draw_odds +&nbsp-0.23*elo_home_cat +&nbsp0.01*elo_away_cat +&nbsp0.14*home_formation +&nbsp-0.07*away_formation +&nbsp-0.00*NoBonus +&nbsp-0.10*100Bonus +&nbsp0.16*200Bonus +&nbsp0.04*VSPointDiff +&nbsp0.45*entropy62.1963.78-0.5151614269778901[[&nbsp0.63320942 &nbsp0.36679058]  [&nbsp0.35693642 &nbsp0.64306358]]0.62418682235196
DvL_xTrees_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrnan83.361.640.3306551578468262[[&nbsp0.62081784 &nbsp0.37918216]  [&nbsp0.38872832 &nbsp0.61127168]]0.6206839032527106
WvD_RandomForest_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrnan90.1864.240.6058058894815523[[&nbsp0.66994382 &nbsp0.33005618]  [&nbsp0.38836478 &nbsp0.61163522]]0.6296165566758483
WvD_logreg_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrRESULT =&nbsp-0.11 +&nbsp-0.03*away_player_1_overall_rating +&nbsp0.02*home_defenders_score +&nbsp0.04*home_midfielders_score +&nbsp0.02*home_forwarders_score +&nbsp0.02*away_defenders_score +&nbsp-0.01*away_midfielders_score +&nbsp-0.02*away_forwarders_score +&nbsp0.06*Age_home +&nbsp-0.10*Age_away +&nbsp0.05*Away_odds +&nbsp0.07*Home_odds +&nbsp-0.15*Draw_odds +&nbsp0.20*elo_home_cat +&nbsp0.02*elo_away_cat +&nbsp-0.01*home_formation +&nbsp0.01*away_formation +&nbsp0.05*NoBonus +&nbsp-0.09*100Bonus +&nbsp-0.03*200Bonus +&nbsp0.05*VSPointDiff +&nbsp0.59*entropy63.7764.76-0.4536528408035454[[&nbsp0.66853933 &nbsp0.33146067]  [&nbsp0.37578616 &nbsp0.62421384]]0.6342542588065866
WvD_xTrees_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrnan85.6562.980.4240992843811091[[&nbsp0.66151685 &nbsp0.33848315]  [&nbsp0.40566038 &nbsp0.59433962]]0.6212651786467942
WvL_RandomForest_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrnan88.6475.070.5403250646205848[[&nbsp0.76214834 &nbsp0.23785166]  [&nbsp0.26323988 &nbsp0.73676012]]0.7473222124670764
WvL_logreg_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrRESULT =&nbsp0.11 +&nbsp-0.03*away_player_1_overall_rating +&nbsp0.01*home_defenders_score +&nbsp0.06*home_midfielders_score +&nbsp0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.02*away_midfielders_score +&nbsp0.02*away_forwarders_score +&nbsp0.07*Age_home +&nbsp0.02*Age_away +&nbsp-0.04*Away_odds +&nbsp0.20*Home_odds +&nbsp-0.29*Draw_odds +&nbsp0.21*elo_home_cat +&nbsp-0.14*elo_away_cat +&nbsp0.26*home_formation +&nbsp-0.14*away_formation +&nbsp0.07*NoBonus +&nbsp-0.14*100Bonus +&nbsp0.21*200Bonus +&nbsp0.15*VSPointDiff +&nbsp1.12*entropy75.1374.37-0.0065459409751318365[[&nbsp0.74936061 &nbsp0.25063939]  [&nbsp0.26323988 &nbsp0.73676012]]0.7474978050921861
WvL_xTrees_balanced_shortECH_elo{No,100,200}_SCALED_ResCorrnan83.9974.440.3517161736092371[[&nbsp0.7544757  &nbsp0.2455243 ]  [&nbsp0.26791277 &nbsp0.73208723]]0.7394205443371378
LightGBM_shortECH_elo{No,100,200}_SCALED_ResCorrnan58.5656.33-0.2588646716144141Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.40 0.04 0.56 Win  0.18 0.02 0.800.5657067921052042
GradientBoosting_DUMMIES+ELO_NOTSCALEDnan59.2255.93-0.22333710335230528Pred  Lose Draw Win True  Lose  0.62 0.06 0.31 Draw  0.35 0.08 0.56 Win  0.17 0.04 0.790.5586341061801183
LightGBM_DUMMIES+ELO_NOTSCALEDnan57.9456.22-0.2769661702726747Pred  Lose Draw Win True  Lose  0.64 0.04 0.31 Draw  0.38 0.06 0.56 Win  0.18 0.02 0.800.5644077783558116
RandomForest_DUMMIES+ELO_NOTSCALEDnan69.4255.70.06817807653222152Pred  Lose Draw Win True  Lose  0.60 0.04 0.37 Draw  0.35 0.04 0.61 Win  0.16 0.02 0.820.5595721352307422
logreg_DUMMIES+ELO_NOTSCALEDRESULT =&nbsp-0.60 +&nbsp0.13*Age_away_(21.4,&nbsp24.2] +&nbsp0.14*Age_away_(24.2,&nbsp26.9] +&nbsp0.14*Age_away_(26.9,&nbsp29.7] +&nbsp0.09*Age_away_(29.7,&nbsp32.5] +&nbsp0.16*Age_away_(32.5,&nbsp35.3] +&nbsp0.49*home_forwarders_score_(48.9,&nbsp54.7] +&nbsp-0.79*home_forwarders_score_(54.7,&nbsp60.6] +&nbsp0.12*home_forwarders_score_(60.6,&nbsp66.4] +&nbsp-0.21*home_forwarders_score_(66.4,&nbsp72.3] +&nbsp-0.04*home_forwarders_score_(72.3,&nbsp78.1] +&nbsp-0.02*home_forwarders_score_(78.1,&nbsp84.0] +&nbsp-0.15*home_defenders_score_(58.4,&nbsp61.5] +&nbsp-0.11*home_defenders_score_(61.5,&nbsp64.6] +&nbsp-0.26*home_defenders_score_(64.6,&nbsp67.7] +&nbsp-0.20*home_defenders_score_(67.7,&nbsp70.8] +&nbsp-0.28*home_defenders_score_(70.8,&nbsp73.9] +&nbsp-0.31*home_defenders_score_(73.9,&nbsp77.0] +&nbsp-0.22*home_midfielders_score_(58.9,&nbsp62.4] +&nbsp0.08*home_midfielders_score_(62.4,&nbsp65.9] +&nbsp0.27*home_midfielders_score_(65.9,&nbsp69.4] +&nbsp0.30*home_midfielders_score_(69.4,&nbsp73.0] +&nbsp0.30*home_midfielders_score_(73.0,&nbsp76.5] +&nbsp0.20*home_midfielders_score_(76.5,&nbsp80.0] +&nbsp-0.03*away_player_1_overall_rating_(52.6,&nbsp58.1] +&nbsp0.02*away_player_1_overall_rating_(58.1,&nbsp63.7] +&nbsp-0.09*away_player_1_overall_rating_(63.7,&nbsp69.3] +&nbsp-0.08*away_player_1_overall_rating_(69.3,&nbsp74.9] +&nbsp-0.12*away_player_1_overall_rating_(74.9,&nbsp80.4] +&nbsp-0.06*away_player_1_overall_rating_(80.4,&nbsp86.0] +&nbsp-0.18*away_defenders_score_(58.0,&nbsp61.2] +&nbsp0.20*away_defenders_score_(61.2,&nbsp64.4] +&nbsp-0.29*away_defenders_score_(64.4,&nbsp67.6] +&nbsp-0.20*away_defenders_score_(67.6,&nbsp70.8] +&nbsp-0.21*away_defenders_score_(70.8,&nbsp74.0] +&nbsp-0.19*away_defenders_score_(74.0,&nbsp77.2] +&nbsp-0.39*away_midfielders_score_(59.5,&nbsp63.1] +&nbsp0.34*away_midfielders_score_(63.1,&nbsp66.6] +&nbsp0.10*away_midfielders_score_(66.6,&nbsp70.1] +&nbsp0.17*away_midfielders_score_(70.1,&nbsp73.7] +&nbsp0.18*away_midfielders_score_(73.7,&nbsp77.2] +&nbsp0.13*away_midfielders_score_(77.2,&nbsp80.8] +&nbsp-0.60*away_forwarders_score_(53.4,&nbsp58.9] +&nbsp0.01*away_forwarders_score_(58.9,&nbsp64.3] +&nbsp-0.01*away_forwarders_score_(64.3,&nbsp69.7] +&nbsp-0.03*away_forwarders_score_(69.7,&nbsp75.1] +&nbsp0.00*away_forwarders_score_(75.1,&nbsp80.6] +&nbsp0.01*away_forwarders_score_(80.6,&nbsp86.0] +&nbsp-0.14*elo_diff_(-553.4,&nbsp-332.9] +&nbsp-0.45*elo_diff_(-332.9,&nbsp-112.3] +&nbsp-0.36*elo_diff_(-112.3,&nbsp108.3] +&nbsp-0.34*elo_diff_(108.3,&nbsp328.9] +&nbsp-0.17*elo_diff_(328.9,&nbsp549.4] +&nbsp-0.20*elo_diff_(549.4,&nbsp770.0] +&nbsp-1.25*home_player_1_overall_rating_(52.6,&nbsp58.1] +&nbsp0.05*home_player_1_overall_rating_(58.1,&nbsp63.7] +&nbsp0.13*home_player_1_overall_rating_(63.7,&nbsp69.3] +&nbsp0.06*home_player_1_overall_rating_(69.3,&nbsp74.9] +&nbsp0.07*home_player_1_overall_rating_(74.9,&nbsp80.4] +&nbsp0.10*home_player_1_overall_rating_(80.4,&nbsp86.0] +&nbsp0.24*Age_home_(19.0,&nbsp21.8] +&nbsp0.05*Age_home_(21.8,&nbsp24.5] +&nbsp0.03*Age_home_(24.5,&nbsp27.2] +&nbsp-0.02*Age_home_(27.2,&nbsp29.9] +&nbsp0.03*Age_home_(29.9,&nbsp32.7] +&nbsp-0.09*Age_home_(32.7,&nbsp35.4] +&nbsp-0.00*VSPointDiff +&nbsp-0.07*entropy +&nbsp0.15*home_probs +&nbsp-1.46*draw_probs +&nbsp-0.19*away_probs56.2555.41-0.35545102639543197Pred  Lose Draw Win True  Lose  0.56 0.02 0.42 Draw  0.31 0.02 0.67 Win  0.14 0.01 0.850.5553138489082192
xTrees_DUMMIES+ELO_NOTSCALEDnan75.6153.620.2397370563530505Pred  Lose Draw Win True  Lose  0.49 0.03 0.48 Draw  0.28 0.03 0.69 Win  0.13 0.02 0.850.5404478876510634
GradientBoosting_shortECH_ELO{noBonus}_NOTSCALEDNA60.0656.48-0.200237429691Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.790.563613893224
LightGBM_shortECH_ELO{noBonus}_NOTSCALEDNA58.5656.33-0.258864671614Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.40 0.04 0.56 Win  0.18 0.02 0.800.564985239309
RandomForest_shortECH_ELO{noBonus}_NOTSCALEDNA75.9556.220.222310986749Pred  Lose Draw Win True  Lose  0.63 0.04 0.32 Draw  0.37 0.06 0.57 Win  0.17 0.03 0.800.56159309234
logreg_shortECH_ELO{noBonus}_NOTSCALEDRESULT =&nbsp-1.15 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.02*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.50*Draw_odds +&nbsp0.11*Home_odds +&nbsp0.13*elo_home_cat +&nbsp-0.05*elo_away_cat +&nbsp-0.07*home_formation +&nbsp0.04*away_formation +&nbsp0.02*NoBonus +&nbsp0.06*VSPointDiff +&nbsp-0.80*entropy55.9655.73-0.383008531815Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.15 0.00 0.850.559211332795
xTrees_shortECH_ELO{noBonus}_NOTSCALEDNA74.0555.870.194348223897Pred  Lose Draw Win True  Lose  0.59 0.01 0.39 Draw  0.33 0.02 0.66 Win  0.15 0.01 0.840.560366124513
GradientBoosting_shortECH_ELO{100Bonus}_NOTSCALEDNA60.0656.54-0.200237429691Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.790.563613893224
LightGBM_shortECH_ELO{100Bonus}_NOTSCALEDNA58.5256.45-0.259945358101Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.39 0.05 0.56 Win  0.18 0.02 0.800.565201663487
RandomForest_shortECH_ELO{100Bonus}_NOTSCALEDNA76.1756.450.228660019861Pred  Lose Draw Win True  Lose  0.64 0.05 0.32 Draw  0.38 0.06 0.57 Win  0.16 0.03 0.810.563108660456
logreg_shortECH_ELO{100Bonus}_NOTSCALEDRESULT =&nbsp-1.15 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.02*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.51*Draw_odds +&nbsp0.11*Home_odds +&nbsp0.13*elo_home_cat +&nbsp-0.01*elo_away_cat +&nbsp-0.10*home_formation +&nbsp0.04*away_formation +&nbsp0.02*100Bonus +&nbsp0.00*VSPointDiff +&nbsp-0.80*entropy55.9755.73-0.382873446005Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.14 0.00 0.850.559067032651
xTrees_shortECH_ELO{100Bonus}_NOTSCALEDNA74.3355.930.211233950257Pred  Lose Draw Win True  Lose  0.59 0.01 0.40 Draw  0.33 0.02 0.66 Win  0.15 0.00 0.850.560510528807
GradientBoosting_shortECH_ELO{200Bonus}_NOTSCALEDNA60.0656.51-0.200237429691Pred  Lose Draw Win True  Lose  0.63 0.06 0.31 Draw  0.35 0.09 0.56 Win  0.17 0.04 0.790.563469567042
LightGBM_shortECH_ELO{200Bonus}_NOTSCALEDNA58.5256.45-0.259945358101Pred  Lose Draw Win True  Lose  0.66 0.04 0.30 Draw  0.39 0.05 0.56 Win  0.18 0.02 0.800.564624410835
RandomForest_shortECH_ELO{200Bonus}_NOTSCALEDNA75.8856.590.219609270532Pred  Lose Draw Win True  Lose  0.64 0.04 0.32 Draw  0.37 0.06 0.57 Win  0.16 0.03 0.810.5610159178
logreg_shortECH_ELO{200Bonus}_NOTSCALEDRESULT =&nbsp-1.15 +&nbsp0.03*away_player_1_overall_rating +&nbsp-0.03*home_defenders_score +&nbsp-0.03*home_midfielders_score +&nbsp-0.01*home_forwarders_score +&nbsp-0.00*away_defenders_score +&nbsp0.01*away_midfielders_score +&nbsp-0.02*away_forwarders_score +&nbsp0.02*Age_home +&nbsp0.04*Age_away +&nbsp-0.02*Away_odds +&nbsp-0.52*Draw_odds +&nbsp0.10*Home_odds +&nbsp0.13*elo_home_cat +&nbsp0.01*elo_away_cat +&nbsp-0.13*home_formation +&nbsp0.04*away_formation +&nbsp0.02*200Bonus +&nbsp-0.03*VSPointDiff +&nbsp-0.80*entropy55.9755.73-0.382468188572Pred  Lose Draw Win True  Lose  0.58 0.00 0.41 Draw  0.30 0.00 0.70 Win  0.14 0.00 0.850.559572239381
xTrees_shortECH_ELO{200Bonus}_NOTSCALEDNA74.0355.990.196104339438Pred  Lose Draw Win True  Lose  0.60 0.01 0.39 Draw  0.33 0.02 0.65 Win  0.15 0.01 0.840.561736975883

In [202]:
df = pd.DataFrame(super_table[1:], columns=super_table[0])
df.to_csv(r'C:/Users/ernest.chocholowski/Desktop/GIT/SoccerAnalysis/out/results_table.csv', 
                      index=False)

In [ ]:


In [ ]:


In [ ]:


In [ ]: