Loading...

Football

In this example, we use the football dataset to predict the outcomes of games between various teams. You can download the dataset here.

  • date: Date of the game.

  • home_team: Home Team.

  • home_score: Home Team number of goals.

  • away_team: Away Team.

  • away_score: Away Team number of goals.

  • tournament: Game Type (World Cup, Friendly…).

  • city: City where the game took place.

  • country: Country where the game took place.

  • neutral: If the event took place to a neutral location.

We will follow the data science cycle (Data Exploration - Data Preparation - Data Modeling - Model Evaluation - Model Deployment) to solve this problem.

Initialization

This example uses the following version of vastorbit:

import vastorbit as vo

vo.__version__

Connect to VAST. This example uses an existing connection called VASTDSN. For details on how to create a connection, see the Connection tutorial. You can skip the below cell if you already have an established connection.

vo.connect("VASTDSN")

Let’s create a VastFrame of the dataset.

football = vo.read_csv("games.csv")
football
📅
date
Date
100%
Abc
home_team
Varchar(50)
100%
Abc
away_team
Varchar(50)
100%
123
home_score
Integer
100%
123
away_score
Integer
100%
Abc
tournament
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
country
Varchar(50)
100%
0|1
neutral
Boolean
100%
11872-11-30ScotlandEngland00FriendlyGlasgowScotland
21873-03-08EnglandScotland42FriendlyLondonEngland
31874-03-07ScotlandEngland21FriendlyGlasgowScotland
41875-03-06EnglandScotland22FriendlyLondonEngland
51876-03-04ScotlandEngland30FriendlyGlasgowScotland
61876-03-25ScotlandWales40FriendlyGlasgowScotland
71877-03-03EnglandScotland13FriendlyLondonEngland
81877-03-05WalesScotland02FriendlyWrexhamWales
91878-03-02ScotlandEngland72FriendlyGlasgowScotland
101878-03-23ScotlandWales90FriendlyGlasgowScotland
111879-01-18EnglandWales21FriendlyLondonEngland
121879-04-05EnglandScotland54FriendlyLondonEngland
131879-04-07WalesScotland03FriendlyWrexhamWales
141880-03-13ScotlandEngland54FriendlyGlasgowScotland
151880-03-15WalesEngland23FriendlyWrexhamWales
161880-03-27ScotlandWales51FriendlyGlasgowScotland
171881-02-26EnglandWales01FriendlyBlackburnEngland
181881-03-12EnglandScotland16FriendlyLondonEngland
191881-03-14WalesScotland15FriendlyWrexhamWales
201882-02-18Northern IrelandEngland013FriendlyBelfastRepublic of Ireland

Data Exploration and Preparation

Let’s explore the data by displaying descriptive statistics of all the columns.

football["date"].describe()
value
name"date"
dtypedate
count41586
min1872-11-30
max2020-02-01

The dataset includes a total of 41,586 games, which take place between 1872 and 2020. Let’s look at our game types and teams.

football["tournament"].describe()
value
name"tournament"
dtypevarchar(50)
unique112.0
count41586.0
Friendly17029
Others10630
FIFA World Cup qualification7236
UEFA Euro qualification2582
African Cup of Nations qualification1672
FIFA World Cup900
Copa América813

Different types of tournaments took place (FIFA World Cup, UEFA Euro, etc.) aand most of the games in our data are friendlies or qualifiers for international tournaments.

football.describe()
countmeanstdminapprox_25%approx_50%approx_75%max
"home_score"41586.01.7457557831962681.7537803404769940.01.01.02.031.0
"away_score"41586.01.1875871687587171.40532346833588530.00.01.02.021.0
"neutral"41586.00.247246669552253160.431416538275649740.00.00.00.01.0
football.describe(method = "categorical")
dtypecounttoptop_percent
"date"date415862012-02-290.159
"home_team"varchar(50)41586Brazil1.366
"away_team"varchar(50)41586Uruguay1.301
"home_score"integer41586129.57
"away_score"integer41586037.135
"tournament"varchar(50)41586Friendly40.949
"city"varchar(50)41586Kuala Lumpur1.416
"country"varchar(50)41586United States2.787
"neutral"boolean4158675.275

The dataset includes 308 national teams. For most of the games, the home team scores better than the away team. Since some games take place in a neutral location, we can ensure this hypothesis using the variable neutral. Notice also that the number of goals per match is pretty low (median of 1 for both away and home teams).

Goal

Our goal for the study will be to predict the outcomes of games after 2015. Before doing the study, we can notice that some teams names have changed over time. We need to change the old names by the new names otherwise it will add too much bias in the data.

for team in ["home_team", "away_team"]:
    football[team].decode(
        'German DR', 'Germany',
        'Czechoslovakia', 'Czech Republic',
        'Yugoslavia', 'Serbia',
        'Yemen DPR', 'Yemen',
        football[team],
    )

Let’s just consider teams that have played more than five home and away games.

football["cnt_games_1"] = "COUNT(*) OVER (PARTITION BY home_team)"
football["cnt_games_2"] = "COUNT(*) OVER (PARTITION BY away_team)"
football.filter((football["cnt_games_2"] > 5) & (football["cnt_games_1"] > 5))
vo.drop("football_clean", method = "table")
football.to_db(
    name = "football_clean",
    usecols = [
        "date",
        "home_score",
        "home_team",
        "tournament",
        "away_team",
        "away_score",
        "neutral",
        "country",
        "city",
    ],
    relation_type = "table",
    inplace = True,
)
📅
date
Date
100%
123
home_score
Integer
100%
Abc
home_team
Varchar(50)
100%
Abc
tournament
Varchar(50)
100%
Abc
away_team
Varchar(50)
100%
123
away_score
Integer
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
11993-12-160MexicoFriendlyBrazil1MexicoGuadalajara
22009-06-210ItalyConfederations CupBrazil3South AfricaPretoria
32011-11-100GabonFriendlyBrazil2GabonLibreville
42017-10-050BoliviaFIFA World Cup qualificationBrazil0BoliviaLa Paz
51979-08-232ArgentinaCopa AméricaBrazil2ArgentinaBuenos Aires
62005-10-091BoliviaFIFA World Cup qualificationBrazil1BoliviaLa Paz
71959-03-212BoliviaCopa AméricaBrazil4ArgentinaBuenos Aires
81988-07-170AustraliaFriendlyBrazil2AustraliaSydney
91997-12-140AustraliaConfederations CupBrazil0Saudi ArabiaRiyadh
102017-06-130AustraliaFriendlyBrazil4AustraliaMelbourne
111987-07-034ChileCopa AméricaBrazil0ArgentinaCórdoba
121988-07-070AustraliaFriendlyBrazil1AustraliaMelbourne
131985-05-212ChileFriendlyBrazil1ChileSantiago
141957-09-151ChileCopa Bernardo O'HigginsBrazil0ChileSantiago
152001-06-091AustraliaConfederations CupBrazil0South KoreaUlsan
161957-09-181ChileCopa Bernardo O'HigginsBrazil1ChileSantiago
171999-07-140MexicoCopa AméricaBrazil2ParaguayCiudad del Este
182000-08-153ChileFIFA World Cup qualificationBrazil0ChileSantiago
192013-10-120South KoreaFriendlyBrazil2South KoreaSeoul
202006-08-161NorwayFriendlyBrazil1NorwayOslo

A lot of things could influence the outcome of a game. Since we only have access to the score, teams, and type of game, we can’t consider external factors like, weather or temperature, which would otherwise help our prediction.

To create a good model using this dataset, we could compute each team’s key performance indicator (KPI), ranking (clusters computed using the number of games in important tournaments like the World Cup, the percentage of victory…), shape (moving windows using the last games information), and other factors.

Here’s our plan: - Identify cup winners - Rank the teams with clustering - Compute teams’ KPIs - Create a machine learning model

Data Preparation for Clustering

To create clusters, we need to find which teams are the winners of main tournaments (mainly the World Cups and Continental Cups). Since all tournaments took place the same year, we could partition by tournament and year to identify the last game of the tournament.

We’ll ignore ties for our analysis since there’s no way to determine a winner.

Cup Winner

Let’s start by creating the feature winner to indicate the winner of a game.

import vastorbit.sql.functions as fun

football.filter(fun.year(football["date"]) <= 2015)
football.case_when(
    "winner",
    football["home_score"] > football["away_score"], football["home_team"],
    football["home_score"] < football["away_score"], football["away_team"],
    None,
)
📅
date
Date
100%
123
home_score
Integer
100%
Abc
home_team
Varchar(50)
100%
Abc
tournament
Varchar(50)
100%
Abc
away_team
Varchar(50)
100%
123
away_score
Integer
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
winner
Varchar(50)
77%
11993-12-160MexicoFriendlyBrazil1MexicoGuadalajaraBrazil
22009-06-210ItalyConfederations CupBrazil3South AfricaPretoriaBrazil
32011-11-100GabonFriendlyBrazil2GabonLibrevilleBrazil
41979-08-232ArgentinaCopa AméricaBrazil2ArgentinaBuenos Aires[null]
52005-10-091BoliviaFIFA World Cup qualificationBrazil1BoliviaLa Paz[null]
61959-03-212BoliviaCopa AméricaBrazil4ArgentinaBuenos AiresBrazil
71988-07-170AustraliaFriendlyBrazil2AustraliaSydneyBrazil
81997-12-140AustraliaConfederations CupBrazil0Saudi ArabiaRiyadh[null]
91987-07-034ChileCopa AméricaBrazil0ArgentinaCórdobaChile
101988-07-070AustraliaFriendlyBrazil1AustraliaMelbourneBrazil
111985-05-212ChileFriendlyBrazil1ChileSantiagoChile
121957-09-151ChileCopa Bernardo O'HigginsBrazil0ChileSantiagoChile
132001-06-091AustraliaConfederations CupBrazil0South KoreaUlsanAustralia
141957-09-181ChileCopa Bernardo O'HigginsBrazil1ChileSantiago[null]
151999-07-140MexicoCopa AméricaBrazil2ParaguayCiudad del EsteBrazil
162000-08-153ChileFIFA World Cup qualificationBrazil0ChileSantiagoChile
172013-10-120South KoreaFriendlyBrazil2South KoreaSeoulBrazil
182006-08-161NorwayFriendlyBrazil1NorwayOslo[null]
191988-07-281NorwayFriendlyBrazil1NorwayOslo[null]
201995-08-120South KoreaFriendlyBrazil1South KoreaSuwonBrazil

Let’s analyze the last game of each tournament.

football["year"] = fun.year(football["date"])
football.analytic(
    "row_number",
    order_by = {"date": "desc"},
    by = ["tournament", "year"] ,
    name = "order_tournament",
)
📅
date
Date
100%
123
home_score
Integer
100%
Abc
home_team
Varchar(50)
100%
Abc
tournament
Varchar(50)
100%
Abc
away_team
Varchar(50)
100%
123
away_score
Integer
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
winner
Varchar(50)
77%
123
year
Bigint
100%
123
order_tournament
Bigint
100%
11998-12-271KuwaitFriendlyEgypt1KuwaitKuwait City[null]19981
21998-12-232IsraelFriendlySerbia0IsraelRamat-GanIsrael19982
31998-12-225Basque CountryFriendlyUruguay1SpainSan SebastiánBasque Country19983
41998-12-225CataloniaFriendlyNigeria0SpainBarcelonaCatalonia19984
51998-12-162South AfricaFriendlyEgypt1South AfricaJohannesburgSouth Africa19985
61998-12-060British Virgin IslandsFriendlySaint Vincent and the Grenadines5British Virgin IslandsRoad TownSaint Vincent and the Grenadines19986
71998-12-030MaliFriendlyGhana2MaliBamakoGhana19987
81998-12-023United Arab EmiratesFriendlyNorth Korea3ThailandSongkhla[null]19988
91998-11-282AzerbaijanFriendlyEstonia1AzerbaijanGəncəAzerbaijan19989
101998-11-272ThailandFriendlyNepal0ThailandBangkokThailand199810
111998-11-250SingaporeFriendlyUnited Arab Emirates4SingaporeSingaporeUnited Arab Emirates199811
121998-11-220China PRFriendlySouth Korea0China PRShanghai[null]199812
131998-11-212ArmeniaFriendlyEstonia1ArmeniaAbovyanArmenia199813
141998-11-213ThailandFriendlyTurkmenistan3ThailandBangkok[null]199814
151998-11-190IndiaFriendlyUzbekistan4IndiaCalcuttaUzbekistan199815
161998-11-191Hong KongFriendlyVietnam1Hong KongVictoria[null]199816
171998-11-182HungaryFriendlySwitzerland0HungaryBudapestHungary199817
181998-11-181El SalvadorFriendlyHonduras2United StatesLos AngelesHonduras199818
191998-11-185BrazilFriendlyRussia1BrazilFortalezaBrazil199819
201998-11-182EnglandFriendlyCzech Republic0EnglandLondonEngland199820

We can filter the data by only considering the last games and top tournaments.

football.filter(
    conditions = [
        football["order_tournament"] == 1,
        football["winner"] != None,
        football["tournament"]._in(
            [
                "FIFA World Cup",
                "UEFA Euro",
                "Copa América",
                "African Cup of Nations",
                "AFC Asian Cup",
                "Gold Cup",
            ]
        )
    ]
)
📅
date
Date
101%
123
home_score
Integer
101%
Abc
home_team
Varchar(50)
101%
Abc
tournament
Varchar(50)
101%
Abc
away_team
Varchar(50)
101%
123
away_score
Integer
101%
0|1
neutral
Boolean
101%
Abc
country
Varchar(50)
101%
Abc
city
Varchar(50)
101%
Abc
winner
Varchar(50)
101%
123
year
Bigint
101%
123
order_tournament
Bigint
101%
11988-06-250RussiaUEFA EuroNetherlands2GermanyMunichNetherlands19881
22009-07-260United StatesGold CupMexico5United StatesEast RutherfordMexico20091
31996-02-032South AfricaAfrican Cup of NationsTunisia0South AfricaJohannesburgSouth Africa19961
41962-01-214EthiopiaAfrican Cup of NationsEgypt2EthiopiaAddis AbebaEthiopia19621
51941-03-040ChileCopa AméricaArgentina1ChileSantiagoArgentina19411
62007-07-153BrazilCopa AméricaArgentina0VenezuelaMaracaiboBrazil20071
71970-02-163EgyptAfrican Cup of NationsIvory Coast1SudanKhartoumEgypt19701
81947-12-313BoliviaCopa AméricaChile4EcuadorGuayaquilChile19471
91959-12-253EcuadorCopa AméricaParaguay1EcuadorGuayaquilEcuador19591
101980-09-303KuwaitAFC Asian CupSouth Korea0KuwaitKuwait CityKuwait19801
111958-06-292SwedenFIFA World CupBrazil5SwedenSolnaBrazil19581
121978-03-162NigeriaAfrican Cup of NationsTunisia0GhanaAccraNigeria19781
131942-02-071UruguayCopa AméricaArgentina0UruguayMontevideoUruguay19421
142002-02-022CanadaGold CupSouth Korea1United StatesPasadenaCanada20021
151939-02-122PeruCopa AméricaUruguay1PeruLimaPeru19391
162001-07-291ColombiaCopa AméricaMexico0ColombiaBogotáColombia20011
171990-07-081GermanyFIFA World CupArgentina0ItalyRomeGermany19901
182013-02-101NigeriaAfrican Cup of NationsBurkina Faso0South AfricaJohannesburgNigeria20131
191982-07-113ItalyFIFA World CupGermany1SpainMadridItaly19821
201965-11-211Ivory CoastAfrican Cup of NationsSenegal0TunisiaTunisIvory Coast19651

Let’s consider the World Cup as a special tournament. It is the only one where the confrontations between the top teams is possible.

football["Word_Cup"] = fun.decode(
    football["tournament"], "FIFA World Cup",
    1, 0,
)
football["Word_Cup"]
123
Word_Cup
Integer
10
20
30
40
50
60
70
80
90
100
111
120
130
141
150
160
171
180
190
200

We can compute all the number of cup-wins by team. As expected, Brazil and Germany are the top football teams.

agg = [
    fun.sum(football["Word_Cup"])._as("nb_World_Cup"),
    fun.sum(1 - football["Word_Cup"])._as("nb_Continental_Cup"),
]
football_cup_winners = football.groupby(["winner"], agg)
football_cup_winners.sort(
    {
        "nb_World_Cup": "desc",
        "nb_Continental_Cup": "desc",
    }
).head(10)
Abc
winner
Varchar(50)
92%
123
nb_World_Cup
Bigint
92%
123
nb_Continental_Cup
Bigint
92%
1Brazil49
2Germany43
3Italy31
4Uruguay28
5Argentina28
6Spain13
7France12
8England10
9Mexico06
10Egypt06

Let’s export the result to our VAST DataBase.

vo.drop(
    "football_cup_winners",
    method = "table",
)
football_cup_winners.to_db(
    "football_cup_winners",
    relation_type = "table",
)
Abc
winner
Varchar(50)
92%
123
nb_World_Cup
Bigint
92%
123
nb_Continental_Cup
Bigint
92%
1Brazil410
2Germany43
3Italy31
4Uruguay28
5Argentina28
6Spain13
7France12
8England10
9Mexico06
10Egypt06
11Ivory Coast03
12Peru03
13United States03
14Japan03
15Nigeria03
16Paraguay02
17South Korea02
18Ghana02
19Iran02
20Cameroon02

Team Confederations

Looking into team confederations could help our analysis. For example, this might help us quantify skill differences between different continents. A team that had played a qualification of a specific location can only belong to that tournament confederation.

First let’s encode the different continents so we can compute the correct aggregations.

football = vo.read_csv("games.csv")
football.case_when(
    'confederation',
    football["tournament"] == 'UEFA Euro qualification', 5,
    football["tournament"] == 'African Cup of Nations qualification', 4,
    football["tournament"] == 'AFC Asian Cup qualification', 3,
    football["tournament"] == 'Copa América', 2,
    football["tournament"] == 'Gold Cup', 1, 0,
)
📅
date
Date
100%
Abc
home_team
Varchar(50)
100%
Abc
away_team
Varchar(50)
100%
123
home_score
Integer
100%
123
away_score
Integer
100%
Abc
tournament
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
country
Varchar(50)
100%
0|1
neutral
Boolean
100%
123
confederation
Integer
100%
11872-11-30ScotlandEngland00FriendlyGlasgowScotland0
21873-03-08EnglandScotland42FriendlyLondonEngland0
31874-03-07ScotlandEngland21FriendlyGlasgowScotland0
41875-03-06EnglandScotland22FriendlyLondonEngland0
51876-03-04ScotlandEngland30FriendlyGlasgowScotland0
61876-03-25ScotlandWales40FriendlyGlasgowScotland0
71877-03-03EnglandScotland13FriendlyLondonEngland0
81877-03-05WalesScotland02FriendlyWrexhamWales0
91878-03-02ScotlandEngland72FriendlyGlasgowScotland0
101878-03-23ScotlandWales90FriendlyGlasgowScotland0
111879-01-18EnglandWales21FriendlyLondonEngland0
121879-04-05EnglandScotland54FriendlyLondonEngland0
131879-04-07WalesScotland03FriendlyWrexhamWales0
141880-03-13ScotlandEngland54FriendlyGlasgowScotland0
151880-03-15WalesEngland23FriendlyWrexhamWales0
161880-03-27ScotlandWales51FriendlyGlasgowScotland0
171881-02-26EnglandWales01FriendlyBlackburnEngland0
181881-03-12EnglandScotland16FriendlyLondonEngland0
191881-03-14WalesScotland15FriendlyWrexhamWales0
201882-02-18Northern IrelandEngland013FriendlyBelfastRepublic of Ireland0

We can aggregate the data and get each team’s continent.

confederation = football.groupby(
    ["home_team"],
    [fun.max(football["confederation"])._as("confederation")],
)
confederation.head(100)
Abc
home_team
Varchar(50)
100%
123
confederation
Integer
100%
1Niger4
2Iceland5
3Honduras2
4South Korea3
5New Zealand0
6Sudan4
7Saint Lucia0
8Ecuador2
9Catalonia0
10Gambia4
11Nepal3
12Manchukuo0
13Isle of Man0
14Eritrea4
15Saint Pierre and Miquelon0
16Felvidék0
17Namibia4
18Japan3
19Corsica0
20Moldova5
21Iraqi Kurdistan0
22Albania5
23Luxembourg5
24Bosnia and Herzegovina5
25Senegal4
26Thailand3
27Guatemala1
28Liberia4
29United Arab Emirates3
30Syria3
31Montserrat0
32Comoros4
33Hong Kong3
34Samoa0
35Shetland0
36Falkland Islands0
37South Sudan4
38United Koreans in Japan0
39Tamil Eelam0
40Kabylia0
41Madrid0
42Sark0
43Paraguay2
44Croatia5
45England5
46Portugal5
47Greece5
48Ukraine5
49Belarus5
50Saudi Arabia3
51Bahrain3
52North Macedonia5
53Palestine3
54East Timor0
55Pakistan3
56Bangladesh3
57Solomon Islands0
58Menorca0
59Wallis Islands and Futuna0
60Romani people0
61Palau0
62Yemen3
63Turkey5
64Netherlands5
65Uruguay2
66Serbia5
67Madagascar4
68New Caledonia0
69Rwanda4
70Philippines3
71Curaçao1
72Macau3
73Maldives3
74Sápmi0
75Northern Cyprus0
76Mexico2
77Germany5
78Gabon4
79Armenia5
80Republic of Ireland5
81Montenegro5
82Poland5
83Togo4
84Malawi4
85India3
86French Guiana1
87Iraq3
88Kosovo5
89County of Nice0
90Republic of St. Pauli0
91Găgăuzia0
92Chile2
93Argentina2
94Brittany0
95Switzerland5
96Chad4
97Uganda4
98Scotland5
99Vietnam3
100Sierra Leone4

We can decode the previous label encoding.

confederation["confederation"].decode(
    5, "UEFA",
    4, "CAF",
    3, "AFC",
    2, "CONMEBOL",
    1, "CONCACAF",
    "OFC",
)
Abc
home_team
Varchar(50)
100%
Abc
confederation
Varchar(8)
100%
1LithuaniaUEFA
2KuwaitAFC
3Saint MartinOFC
4BrazilCONMEBOL
5CameroonCAF
6NigeriaCAF
7SloveniaUEFA
8IranAFC
9CanadaCONCACAF
10Cayman IslandsOFC
11GotlandOFC
12GozoOFC
13Chinese TaipeiAFC
14KyrgyzstanAFC
15San MarinoUEFA
16ColombiaCONMEBOL
17IsraelUEFA
18Basque CountryOFC
19BeninCAF
20SeychellesCAF

Let’s export the result to our VAST DataBase.

vo.drop("confederation")
confederation["home_team"].rename("team")
confederation.to_db(
    name = "confederation",
    relation_type = "table",
)
Abc
confederation
Varchar(8)
100%
Abc
team
Varchar(50)
100%
1CAFKenya
2CAFBurkina Faso
3CAFMali
4UEFAHungary
5UEFARomania
6UEFAFinland
7CONMEBOLBolivia
8AFCAustralia
9UEFAFrance
10OFCAntigua and Barbuda
11CAFCentral African Republic
12AFCOman
13UEFAAndorra
14AFCAfghanistan
15AFCBhutan
16OFCAnguilla
17OFCPanjab
18OFCProvence
19OFCNiue
20OFCSomaliland

Team KPIs

We use just two variables to track teams: away_team and home_team. This makes it a bit difficult to compute new features. We need to duplicate the dataset and intervert the two teams. This way, we can compute KPIs using a partition by the first team to avoid double-counting any games.

football = vo.VastFrame("football_clean")
football.filter(fun.year(football["date"]) <= 2015)
football["home_team"].rename("team1")
football["home_score"].rename("team1_score")
football["away_team"].rename("team2")
football["away_score"].rename("team2_score")
football["neutral"].decode(True, 0, 1)

football2 = vo.VastFrame("football_clean")
football2.filter(fun.year(football["date"]) <= 2015)
football2["home_team"].rename("team2")
football2["home_score"].rename("team2_score")
football2["away_team"].rename("team1")
football2["away_score"].rename("team1_score")
football2["neutral"].decode(True, 0, 2)

# Merging the 2 interverted datasets
all_matchs = football.append(football2)
all_matchs["neutral"].rename("home_team_id")
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
home_team_id
Integer
100%
11912-02-10FriendlyFranceParisFrance7Catalonia01
21915-01-03FriendlySpainBilbaoBasque Country6Catalonia11
31931-01-01FriendlySpainBilbaoBasque Country3Catalonia21
41926-07-07FriendlyCzech RepublicPragueCzech Republic2Catalonia11
51915-05-13FriendlySpainMadridBasque Country1Catalonia01
61971-02-21FriendlySpainBilbaoBasque Country1Catalonia21
72007-12-29FriendlySpainBilbaoBasque Country1Catalonia11
82014-12-28FriendlySpainBilbaoBasque Country1Catalonia11
91916-06-04FriendlySpainBilbaoBasque Country5Catalonia01
102005-02-16FriendlyCosta RicaHerediaCosta Rica1Ecuador21
112009-05-27FriendlyUnited StatesLos AngelesEl Salvador3Ecuador10
121997-05-28FriendlyEl SalvadorSan SalvadorEl Salvador0Ecuador21
131984-12-12FriendlyEl SalvadorSan SalvadorEl Salvador0Ecuador01
141945-02-21Copa AméricaChileSantiagoBrazil9Ecuador20
152001-07-02FriendlyUnited StatesEast RutherfordEl Salvador0Ecuador10
161949-04-03Copa AméricaBrazilRio de JaneiroBrazil9Ecuador11
171942-01-31Copa AméricaUruguayMontevideoBrazil5Ecuador10
181996-02-11FriendlyLebanonBourj HammoudLebanon1Ecuador01
192011-06-01FriendlyCanadaTorontoCanada2Ecuador21
201973-05-15FriendlyHaitiPort-au-PrinceHaiti1Ecuador01

To compute the different aggregations, we need to add dummies which indicate the type of game and winner.

all_matchs["World_Tournament"] = fun.case_when(all_matchs["tournament"]._in(
    [
        "FIFA World Cup",
        "Confederations Cup"
    ],
), 1, 0)
all_matchs["Continental_Tournament"] = fun.case_when(
    all_matchs["tournament"]._in(
        [
            "UEFA Euro",
            "Copa América",
            "African Cup of Nations",
            "AFC Asian Cup",
            "Gold Cup",
            "FIFA World Cup qualification",
        ]
    ), 1, 0)
all_matchs["Victory_team1"] = (all_matchs["team1_score"] > all_matchs["team2_score"])
all_matchs["Victory_team1"].astype("int")
all_matchs["Draw"] = (all_matchs["team1_score"] == all_matchs["team2_score"])
all_matchs["Draw"].astype("int")
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
home_team_id
Integer
100%
123
World_Tournament
Integer
100%
123
Continental_Tournament
Integer
100%
123
Victory_team1
Int
100%
123
Draw
Int
100%
11999-11-17UEFA Euro qualificationUkraineKyïvUkraine1Slovenia110001
22015-11-14UEFA Euro qualificationUkraineL'vivUkraine2Slovenia010010
31994-10-12UEFA Euro qualificationUkraineKyïvUkraine0Slovenia010001
42005-10-08FIFA World Cup qualificationItalyPalermoItaly1Slovenia010110
52002-08-21FriendlyItalyTriesteItaly0Slovenia110000
61997-03-18FriendlyAustriaLinzAustria0Slovenia210000
72008-10-15FIFA World Cup qualificationCzech RepublicTepliceCzech Republic1Slovenia010110
81995-09-06UEFA Euro qualificationItalyUdineItaly1Slovenia010010
92000-08-16FriendlyCzech RepublicOstravaCzech Republic0Slovenia110000
102011-09-06UEFA Euro qualificationItalyFlorenceItaly1Slovenia010010
111999-06-05UEFA Euro qualificationLatviaRigaLatvia1Slovenia210000
122014-06-07FriendlyArgentinaLa PlataArgentina2Slovenia010010
132008-09-06FIFA World Cup qualificationPolandWrocławPoland1Slovenia110101
142004-02-18FriendlySpainSan FernandoPoland2Slovenia000010
151998-03-25FriendlyPolandWarsawPoland2Slovenia010010
162010-06-13FIFA World CupSouth AfricaPolokwaneAlgeria0Slovenia101000
172002-06-08FIFA World CupSouth KoreaDaeguSouth Africa1Slovenia001010
182014-03-05FriendlyAlgeriaBlidaAlgeria2Slovenia010010
192014-09-08UEFA Euro qualificationEstoniaTallinnEstonia1Slovenia010010
201995-06-11UEFA Euro qualificationEstoniaTallinnEstonia1Slovenia310000

Now we can compute each team’s KPI.

teams_kpi = all_matchs.groupby(
    ["team1"],
    [
        fun.sum(all_matchs["World_Tournament"])._as("Number_Games_World_Tournament"),
        fun.sum(all_matchs["Continental_Tournament"])._as("Number_Games_Continental_Tournament"),
        fun.avg(fun.decode(all_matchs["World_Tournament"], 1, all_matchs["Victory_team1"]))._as("Percent_Victory_World_Tournament"),
        fun.avg(fun.decode(all_matchs["Continental_Tournament"], 1, all_matchs["Victory_team1"]))._as("Percent_Victory_Continental_Tournament"),
        fun.avg(fun.case_when((all_matchs["home_team_id"] == 1) & (all_matchs["World_Tournament"] == 0) & (all_matchs["Continental_Tournament"] == 0), all_matchs["Victory_team1"], None))._as("Percent_Victory_Home"),
        fun.avg(fun.case_when((all_matchs["home_team_id"] != 1) & (all_matchs["World_Tournament"] == 0) & (all_matchs["Continental_Tournament"] == 0), all_matchs["Victory_team1"], None))._as("Percent_Victory_Away"),
        fun.avg(all_matchs["Victory_team1"])._as("Percent_Victory"),
        fun.avg(all_matchs["Draw"])._as("Percent_Draw"),
        fun.avg(all_matchs["team1_score"])._as("Avg_goals"),
        fun.avg(all_matchs["team2_score"])._as("Avg_goals_conceded"),
    ],
).sort({"Number_Games_World_Tournament": "desc"})
teams_kpi.head(100)
Abc
team1
Varchar(50)
100%
123
Number_Games_World_Tournament
Bigint
100%
123
Number_Games_Continental_Tournament
Bigint
100%
123
Percent_Victory_World_Tournament
Double
28%
123
Percent_Victory_Continental_Tournament
Double
78%
123
Percent_Victory_Home
Double
89%
123
Percent_Victory_Away
Double
96%
123
Percent_Victory
Double
100%
123
Percent_Draw
Double
100%
123
Avg_goals
Double
100%
123
Avg_goals_conceded
Double
100%
1Brazil1372790.67883211678832110.57706093189964160.73333333333333330.593750.6350914962325080.200215285252960172.1937567276641550.93756727664155
2Germany1201730.60.62427745664739890.60839160839160840.47021276595744680.55536912751677850.20805369127516782.09983221476510051.179530201342282
3Italy911300.52747252747252750.61538461538461540.64388489208633090.34645669291338580.52456839309428950.282868525896414371.69588313413014610.9827357237715804
4Argentina873020.54022988505747130.60596026490066220.6380952380952380.406060606060606070.53606027987082880.248654467168998921.86544671689989231.0505920344456405
5Mexico752580.306666666666666640.60852713178294570.54248366013071890.423566878980891740.4950.23751.74751.07625
6Spain691430.52173913043478260.62237762237762240.67685589519650660.465686274509803930.58139534883720930.22480620155038761.96744186046511630.9085271317829458
7France691330.53623188405797110.54887218045112780.53211009174311930.363636363636363650.480818414322250640.214833759590792841.7583120204603581.3427109974424551
8England621290.419354838709677440.59689922480620150.61878453038674030.53086419753086420.56576200417536540.241127348643006252.199373695198330.9926931106471816
9Uruguay613320.40983606557377050.50602409638554210.50.30072463768115940.43027413587604290.245530393325387371.57568533969010741.264600715137068
10Netherlands501500.540.620.54225352112676060.38521400778210120.50337381916329280.228070175438596482.06207827260458831.2496626180836707
11United States482150.29166666666666670.56744186046511620.406542056074766340.26206896551724140.419614147909967870.212218649517684881.41961414790996781.3713826366559485
12Sweden461360.347826086956521730.57352941176470580.58055555555555560.410926365795724450.494288681204569040.217030114226375912.0051921079958461.3063343717549325
13Serbia431320.39534883720930230.54545454545454540.54450261780104710.38150289017341040.456460674157303350.219101123595505631.81601123595505621.3792134831460674
14Belgium411350.341463414634146370.53333333333333330.47857142857142860.28461538461538460.41061452513966480.219273743016759781.68435754189944141.606145251396648
15Russia401440.4250.59027777777777780.59322033898305080.456140350877192960.5216718266253870.26470588235294121.71981424148606820.93343653250774
16Czech Republic381550.36842105263157890.52903225806451610.6543209876543210.341853035143769970.48331108144192260.221628838451268351.8437917222963951.2349799732977302
17South Korea341920.205882352941176460.56250.57894736842105270.51226158038147140.52867830423940150.2568578553615961.78304239401496270.8977556109725686
18Chile333010.33333333333333330.37541528239202660.5582822085889570.25714285714285710.380480905233380460.20650636492220651.42149929278642141.4653465346534653
19Japan331520.27272727272727270.55263157894736850.52631578947368420.40094339622641510.471830985915492940.234154929577464781.72007042253521131.1602112676056338
20Switzerland331290.33333333333333330.41860465116279070.413333333333333330.227586206896551730.33909574468085110.216755319148936171.44148936170212761.7313829787234043
21Hungary321150.468750.469565217391304360.58092485549132940.38227848101265820.47409909909909910.21959459459459462.07207207207207221.4954954954954955
22Poland311120.48387096774193550.46428571428571430.50.3521126760563380.425974025974025950.25194805194805191.68441558441558441.37012987012987
23Cameroon311540.258064516129032250.5649350649350650.58823529411764710.320574162679425840.442588726513569950.300626304801670131.42171189979123171.0542797494780793
24Austria291160.413793103448275860.474137931034482760.48376623376623380.306338028169014060.411126187245590250.21981004070556311.79782903663500671.5929443690637721
25Paraguay273040.259259259259259240.404605263157894750.44230769230769230.290983606557377040.36377025036818850.26215022091310751.33578792341678931.438880706921944
26Portugal261570.50.52229299363057320.54450261780104710.346153846153846150.47122302158273380.23021582733812951.6312949640287771.2014388489208634
27Australia261370.26923076923076920.5839416058394160.43939393939393940.51123595505617980.49894291754756870.211416490486257942.0317124735729391.1120507399577166
28Bulgaria261240.115384615384615390.45967741935483870.48108108108108110.292763157894736840.372456964006259770.25195618153364631.4319248826291081.4710485133020343
29Saudi Arabia251490.20.53020134228187920.56043956043956040.417061611374407560.483245149911816550.22751322751322751.59611992945326291.0458553791887126
30Nigeria241820.29166666666666670.54395604395604390.62037037037037030.3190476190476190.45801526717557250.29580152671755731.49618320610687031.0038167938931297
31Colombia232590.3913043478260870.36679536679536680.468750.357142857142857150.3780.2721.2061.21
32Scotland231210.173913043478260860.487603305785123950.58477508650519030.39423076923076920.476510067114093940.21744966442953021.75033557046979871.225503355704698
33Romania211300.380952380952380930.50.59223300970873780.311864406779661040.44018404907975460.25613496932515341.64570552147239261.2883435582822085
34Denmark191370.52631578947368420.42335766423357660.55254237288135590.34666666666666670.446071904127829540.203728362183754981.777629826897471.4287616511318242
35South Africa17850.176470588235294130.48235294117647060.52755905511811020.37096774193548390.44475920679886690.27478753541076491.3399433427762041.0084985835694051
36Croatia16640.43750.5468750.67058823529411760.425742574257425730.53383458646616540.27067669172932331.75187969924812030.981203007518797
37New Zealand15720.00.54166666666666660.48684210526315790.34682080924855490.404761904761904770.181547619047619041.74702380952380951.6130952380952381
38Costa Rica152170.33333333333333330.433179723502304160.62385321100917430.33173076923076920.429872495446265930.25683060109289621.67030965391621121.1675774134790529
39Tunisia151610.133333333333333330.44720496894409940.5315789473684210.27777777777777780.41666666666666670.29166666666666671.4337121212121211.0643939393939394
40Turkey151300.46666666666666670.353846153846153870.45398773006134970.33802816901408450.3819577735124760.23800383877159311.33205374280230321.4280230326295584
41Peru152770.266666666666666660.31768953068592060.428571428571428550.22360248447204970.31293706293706290.2430069930069931.2290209790209791.4685314685314685
42Northern Ireland131220.230769230769230780.303278688524590170.290178571428571450.17213114754098360.243781094527363180.232172470978441131.0431177446102821.9535655058043118
43Republic of Ireland131350.153846153846153850.377777777777777770.487562189054726370.31034482758620690.39196940726577440.277246653919694051.4015296367112811.2466539196940727
44Algeria131460.230769230769230780.4109589041095890.58064516129032260.31638418079096050.41521739130434780.280434782608695641.35434782608695661.0304347826086957
45Greece131320.153846153846153850.40909090909090910.459016393442622960.262626262626262650.36501901140684410.252851711026615971.23954372623574141.420152091254753
46Morocco131610.153846153846153850.4223602484472050.61224489795918370.35483870967741940.451680672268907570.30042016806722691.3886554621848740.8739495798319328
47Ghana121640.33333333333333330.53048780487804880.67272727272727270.384057971014492740.48220640569395020.256227758007117451.64234875444839861.0409252669039146
48Iran121750.083333333333333330.59428571428571430.64150943396226410.430379746835443060.53436807095343690.26164079822616411.84035476718403550.835920177383592
49Ivory Coast111600.27272727272727270.493750.69172932330827060.40.50294695481335950.249508840864440081.63457760314341851.0530451866404715
50Ecuador102440.40.24590163934426230.593750.240259740259740260.29449152542372880.24576271186440681.1949152542372881.6504237288135593
51Egypt101740.10.56321839080459770.58235294117647060.37391304347826090.48630136986301370.251.6438356164383561.0359589041095891
52Honduras91750.00.440.54838709677419350.33160621761658030.40851063829787230.261702127659574461.49148936170212761.2234042553191489
53Bolivia92430.00.22222222222222220.37878787878787880.138613861386138630.221957040572792360.248210023866348441.03818615751789971.9427207637231503
54Norway81180.250.34745762711864410.39482200647249190.33434650455927050.35994764397905760.227748691099476431.50130890052356031.6845549738219896
55North Korea7970.142857142857142850.43298969072164950.73333333333333330.40883977900552490.42666666666666670.271.611.0366666666666666
56Iraq61240.00.45967741935483870.66666666666666660.4362416107382550.46761133603238870.27732793522267211.62145748987854250.9453441295546559
57El Salvador61560.00.41666666666666670.48192771084337350.20091324200913240.321120689655172430.226293103448275861.22629310344827581.4870689655172413
58United Arab Emirates61230.166666666666666660.39837398373983740.47682119205298010.33684210526315790.395744680851063850.248936170212765961.41489361702127671.2851063829787235
59Slovenia6550.166666666666666660.381818181818181830.42647058823529410.28571428571428570.3521126760563380.23474178403755871.23943661971830981.272300469483568
60Canada61440.00.38888888888888890.33870967741935480.28148148148148150.33141210374639770.239193083573487041.04899135446685881.3976945244956773
61Ukraine5630.40.492063492063492040.52857142857142860.337078651685393250.440528634361233460.29074889867841411.396475770925110.973568281938326
62Wales51100.20.30.36708860759493670.265151515151515140.310064935064935040.212662337662337661.25324675324675331.6931818181818181
63Senegal51060.40.35849056603773580.6480.33606557377049180.422916666666666660.268751.28751.0020833333333334
64Slovakia4540.250.481481481481481450.450.33333333333333330.401606425702811240.236947791164658641.44176706827309231.3012048192771084
65DR Congo31350.00.3629629629629630.61538461538461540.30810810810810810.3913043478260870.268115942028985531.5024154589371981.2536231884057971
66Jamaica31280.33333333333333330.343750.53048780487804880.309734513274336270.38771593090211130.228406909788867571.31861804222648751.3378119001919386
67China PR31470.00.55102040816326530.57961783439490440.39583333333333330.488117001828153540.2266910420475321.83729433272394881.0877513711151736
68Cuba3920.33333333333333330.250.450.37288135593220340.346153846153846150.251.32051282051282051.439102564102564
69Bosnia and Herzegovina3480.33333333333333330.47916666666666670.428571428571428550.30487804878048780.384615384615384640.214285714285714271.42857142857142861.39010989010989
70Tahiti3270.00.29629629629629630.48387096774193550.58461538461538460.5183246073298430.12565445026178012.5183246073298431.7015706806282722
71Trinidad and Tobago31450.00.37931034482758620.62244897959183680.37634408602150540.452648475120385250.21027287319422151.7399678972712681.274478330658106
72Togo3850.00.28235294117647060.48453608247422680.236363636363636360.31428571428571430.245714285714285721.0828571428571431.3914285714285715
73Kuwait31330.00.473684210526315760.45731707317073170.379166666666666650.424074074074074050.27222222222222221.55555555555555561.0796296296296297
74Angola3840.00.33333333333333330.56250.25352112676056340.352750809061488650.352750809061488651.1747572815533981.0420711974110033
75Israel31240.00.35483870967741940.389261744966442950.303278688524590170.34924623115577890.251256281407035151.45477386934673361.4522613065326633
76Haiti31020.00.40196078431372550.53043478260869570.358585858585858560.41387559808612440.232057416267942571.5622009569377991.3181818181818181
77Indonesia1820.00.256097560975609760.492647058823529440.359060402684563740.37717601547388780.187620889748549321.67311411992263051.6750483558994198
78Lithuania063[null]0.253968253968253950.40909090909090910.242937853107344640.28963414634146340.189024390243902441.09756097560975621.7835365853658536
79Palestine025[null]0.280.00.250.251655629139072860.264900662251655651.28476821192052971.6026490066225165
80Estonia066[null]0.196969696969696960.36184210526315790.186868686868686880.252403846153846150.213942307692307681.02403846153846151.78125
81Saint Martin00[null][null]0.750.160.303030303030303040.090909090909090911.1212121212121212.909090909090909
82North Macedonia049[null]0.204081632653061230.397058823529411740.20.267326732673267340.26237623762376241.08415841584158421.381188118811881
83Cayman Islands014[null]0.00.33333333333333330.135135135135135140.185185185185185170.160493827160493821.0370370370370372.54320987654321
84Catalonia00[null][null]0.45945945945945950.11111111111111110.3913043478260870.23913043478260871.52173913043478271.7391304347826086
85Mayotte00[null][null]0.00.18750.166666666666666660.27777777777777781.61111111111111122.0555555555555554
86Curaçao060[null]0.216666666666666670.66666666666666660.294444444444444450.35643564356435640.267326732673267341.54785478547854781.6765676567656767
87Gambia024[null]0.250.343283582089552230.160.23560209424083770.28795811518324610.937172774869111.450261780104712
88New Caledonia016[null]0.50.6250.49180327868852460.53465346534653470.099009900990099012.6336633663366341.4752475247524752
89Rwanda040[null]0.20.446428571428571450.32478632478632480.33333333333333330.25352112676056341.0516431924882631.2253521126760563
90Saint Kitts and Nevis026[null]0.346153846153846150.50769230769230770.30645161290322580.398692810457516370.18954248366013071.79738562091503271.5947712418300655
91Philippines019[null]0.157894736842105250.476190476190476160.227272727272727270.274611398963730550.145077720207253871.165803108808292.2797927461139897
92Macau034[null]0.088235294117647060.217391304347826080.142857142857142850.141509433962264150.094339622641509440.76415094339622653.2641509433962264
93Yemen053[null]0.226415094339622650.428571428571428550.134328358208955220.202702702702702710.175675675675675691.00450450450450452.3468468468468466
94Guyana032[null]0.218750.38709677419354840.25641025641025640.301652892561983470.20661157024793391.19834710743801651.7479338842975207
95Madagascar037[null]0.324324324324324340.46428571428571430.32183908045977010.366666666666666640.194444444444444451.33333333333333331.6333333333333333
96Burundi020[null]0.350.370370370370370350.29729729729729730.316455696202531670.240506329113924061.03797468354430381.2974683544303798
97Sápmi00[null][null]0.3750.50.428571428571428550.142857142857142854.3571428571428571.7142857142857142
98Maldives030[null]0.20.366666666666666640.27777777777777780.28030303030303030.181818181818181821.34090909090909082.234848484848485
99Sudan087[null]0.252873563218390830.59210526315789470.27830188679245280.3360.2481.14133333333333331.368
100Northern Cyprus00[null][null]0.80.40.53333333333333330.066666666666666672.26666666666666661.2

We can join the different information about the cup winners to enrich our dataset. We’ll be using this later, so let’s export it to our VAST DataBase.

vo.drop("teams_kpi", method = "table")
teams_kpi = teams_kpi.join(
    football_cup_winners,
    on = {"team1": "winner"},
    how = "left",
    expr2 = [
        "nb_World_Cup",
        "nb_Continental_Cup",
    ],
).to_db("teams_kpi", relation_type = "table")
teams_kpi.head(100)
Abc
team1
Varchar(50)
100%
123
Number_Games_World_Tournament
Bigint
100%
123
Number_Games_Continental_Tournament
Bigint
100%
123
Percent_Victory_World_Tournament
Double
28%
123
Percent_Victory_Continental_Tournament
Double
78%
123
Percent_Victory_Home
Double
89%
123
Percent_Victory_Away
Double
96%
123
Percent_Victory
Double
100%
123
Percent_Draw
Double
100%
123
Avg_goals
Double
100%
123
Avg_goals_conceded
Double
100%
123
nb_World_Cup
Bigint
15%
123
nb_Continental_Cup
Bigint
15%
1Honduras91750.00.440.54838709677419350.33160621761658030.40851063829787230.261702127659574461.49148936170212761.2234042553191489[null][null]
2South Korea341920.205882352941176460.56250.57894736842105270.51226158038147140.52867830423940150.2568578553615961.78304239401496270.897755610972568603
3New Zealand15720.00.54166666666666660.48684210526315790.34682080924855490.404761904761904770.181547619047619041.74702380952380951.6130952380952381[null][null]
4Nepal030[null]0.133333333333333330.394736842105263160.146341463414634140.206666666666666670.140.81333333333333342.5866666666666664[null][null]
5Ecuador102440.40.24590163934426230.593750.240259740259740260.29449152542372880.24576271186440681.1949152542372881.650423728813559301
6Eritrea08[null]0.00.41666666666666670.120.157142857142857140.228571428571428560.67142857142857141.7428571428571429[null][null]
7Isle of Man00[null][null]0.250.55555555555555560.5250.12.81.625[null][null]
8Niger036[null]0.250.44827586206896550.08988764044943820.234972677595628430.25683060109289620.93442622950819681.644808743169399[null][null]
9Gambia024[null]0.250.343283582089552230.160.23560209424083770.28795811518324610.937172774869111.450261780104712[null][null]
10Sudan087[null]0.252873563218390830.59210526315789470.27830188679245280.3360.2481.14133333333333331.368[null][null]
11Catalonia00[null][null]0.45945945945945950.11111111111111110.3913043478260870.23913043478260871.52173913043478271.7391304347826086[null][null]
12Iceland096[null]0.218750.43076923076923080.237804878048780480.297435897435897430.189743589743589741.16410256410256421.7[null][null]
13Saint Lucia022[null]0.27272727272727270.403508771929824540.3084112149532710.33333333333333330.139784946236559131.47311827956989251.9623655913978495[null][null]
14Saint Pierre and Miquelon00[null][null][null]0.00.00.00.1666666666666666610.333333333333334[null][null]
15Felvidék00[null][null][null]0.33333333333333330.33333333333333330.33333333333333331.33333333333333332.3333333333333335[null][null]
16Brazil1372790.67883211678832110.57706093189964160.73333333333333330.593750.6350914962325080.200215285252960172.1937567276641550.9375672766415548
17Canada61440.00.38888888888888890.33870967741935480.28148148148148150.33141210374639770.239193083573487041.04899135446685881.397694524495677302
18Iran121750.083333333333333330.59428571428571430.64150943396226410.430379746835443060.53436807095343690.26164079822616411.84035476718403550.83592017738359201
19Kuwait31330.00.473684210526315760.45731707317073170.379166666666666650.424074074074074050.27222222222222221.55555555555555561.079629629629629701
20Slovenia6550.166666666666666660.381818181818181830.42647058823529410.28571428571428570.3521126760563380.23474178403755871.23943661971830981.272300469483568[null][null]
21Nigeria241820.29166666666666670.54395604395604390.62037037037037030.3190476190476190.45801526717557250.29580152671755731.49618320610687031.003816793893129703
22Cameroon311540.258064516129032250.5649350649350650.58823529411764710.320574162679425840.442588726513569950.300626304801670131.42171189979123171.054279749478079302
23Lithuania063[null]0.253968253968253950.40909090909090910.242937853107344640.28963414634146340.189024390243902441.09756097560975621.7835365853658536[null][null]
24Cayman Islands014[null]0.00.33333333333333330.135135135135135140.185185185185185170.160493827160493821.0370370370370372.54320987654321[null][null]
25Gotland00[null][null]0.60.28571428571428570.346153846153846150.153846153846153852.46153846153846172.0[null][null]
26Saint Martin00[null][null]0.750.160.303030303030303040.090909090909090911.1212121212121212.909090909090909[null][null]
27Japan331520.27272727272727270.55263157894736850.52631578947368420.40094339622641510.471830985915492940.234154929577464781.72007042253521131.160211267605633802
28Thailand097[null]0.247422680412371140.56422018348623850.2599277978339350.369932432432432460.229729729729729741.54560810810810811.5945945945945945[null][null]
29United Arab Emirates61230.166666666666666660.39837398373983740.47682119205298010.33684210526315790.395744680851063850.248936170212765961.41489361702127671.2851063829787235[null][null]
30Senegal51060.40.35849056603773580.6480.33606557377049180.422916666666666660.268751.28751.0020833333333334[null][null]
31Liberia064[null]0.250.45679012345679010.10.271111111111111140.235555555555555550.88888888888888881.4088888888888889[null][null]
32Guatemala0139[null]0.330935251798561150.468085106382978730.28571428571428570.34123222748815170.258293838862559241.32938388625592421.3696682464454977[null][null]
33Syria085[null]0.44705882352941180.431372549019607860.331818181818181850.373595505617977550.233146067415730321.48033707865168541.3314606741573034[null][null]
34Hong Kong082[null]0.28048780487804880.433333333333333350.30054644808743170.32957746478873240.219718309859154941.52957746478873241.684507042253521[null][null]
35South Sudan02[null]0.00.50.142857142857142850.166666666666666660.27777777777777780.55555555555555561.5555555555555556[null][null]
36Bosnia and Herzegovina3480.33333333333333330.47916666666666670.428571428571428550.30487804878048780.384615384615384640.214285714285714271.42857142857142861.39010989010989[null][null]
37Albania094[null]0.148936170212765950.404255319148936140.173076923076923070.239726027397260260.22260273972602740.90068493150684941.595890410958904[null][null]
38Luxembourg0124[null]0.032258064516129030.110294117647058820.0588235294117647050.069060773480662990.118784530386740330.56629834254143652.8121546961325965[null][null]
39Moldova048[null]0.104166666666666670.266666666666666660.230.207253886010362680.238341968911917080.88082901554404151.6269430051813472[null][null]
40Namibia049[null]0.18367346938775510.351851851851851860.195402298850574720.236842105263157880.284210526315789471.01578947368421061.5315789473684212[null][null]
41Iraqi Kurdistan00[null][null]1.00.352941176470588260.450.252.11.15[null][null]
42Tamil Eelam00[null][null][null]0.166666666666666660.166666666666666660.01.04.166666666666667[null][null]
43Comoros08[null]0.00.00.142857142857142850.071428571428571420.28571428571428570.51.7142857142857142[null][null]
44Samoa010[null]0.30.470588235294117640.235294117647058820.34090909090909090.090909090909090911.54545454545454542.9545454545454546[null][null]
45Shetland00[null][null]0.60.342105263157894750.372093023255813950.162790697674418621.6279069767441861.8604651162790697[null][null]
46Falkland Islands00[null][null][null]0.240.240.01.03.8[null][null]
47Montserrat09[null]0.01.00.105263157894736840.133333333333333330.066666666666666671.03333333333333344.4[null][null]
48Corsica00[null][null]0.4[null]0.40.40.80.6[null][null]
49Costa Rica152170.33333333333333330.433179723502304160.62385321100917430.33173076923076920.429872495446265930.25683060109289621.67030965391621121.1675774134790529[null][null]
50Indonesia1820.00.256097560975609760.492647058823529440.359060402684563740.37717601547388780.187620889748549321.67311411992263051.6750483558994198[null][null]
51Italy911300.52747252747252750.61538461538461540.64388489208633090.34645669291338580.52456839309428950.282868525896414371.69588313413014610.982735723771580431
52Morocco131610.153846153846153850.4223602484472050.61224489795918370.35483870967741940.451680672268907570.30042016806722691.3886554621848740.8739495798319328[null][null]
53Somalia011[null]0.00.33333333333333330.083333333333333330.08910891089108910.11881188118811880.5049504950495052.801980198019802[null][null]
54Algeria131460.230769230769230780.4109589041095890.58064516129032260.31638418079096050.41521739130434780.280434782608695641.35434782608695661.030434782608695701
55Belize022[null]0.227272727272727270.50.0370370370370370350.18644067796610170.16949152542372881.03389830508474572.23728813559322[null][null]
56Djibouti012[null]0.083333333333333330.076923076923076930.00.02739726027397260.05479452054794520.6849315068493154.027397260273973[null][null]
57Nicaragua019[null]0.210526315789473670.60.09890109890109890.158333333333333330.066666666666666670.8253.191666666666667[null][null]
58Cook Islands010[null]0.00.50.24137931034482760.209302325581395360.093023255813953490.88372093023255825.372093023255814[null][null]
59Jersey00[null][null]0.80.63461538461538460.68055555555555560.13888888888888892.1250.9166666666666666[null][null]
60Hitra00[null][null][null]0.166666666666666660.166666666666666660.01.16666666666666674.833333333333333[null][null]
61Saarland02[null]0.00.0[null]0.00.33333333333333330.83333333333333343.0[null][null]
62Artsakh00[null][null]1.0[null]1.00.03.00.0[null][null]
63Oman076[null]0.38157894736842110.462585034013605460.25966850828729280.35643564356435640.247524752475247521.26485148514851491.2896039603960396[null][null]
64Australia261370.26923076923076920.5839416058394160.43939393939393940.51123595505617980.49894291754756870.211416490486257942.0317124735729391.112050739957716601
65France691330.53623188405797110.54887218045112780.53211009174311930.363636363636363650.480818414322250640.214833759590792841.7583120204603581.342710997442455112
66Hungary321150.468750.469565217391304360.58092485549132940.38227848101265820.47409909909909910.21959459459459462.07207207207207221.4954954954954955[null][null]
67Burkina Faso090[null]0.31111111111111110.50537634408602150.197530864197530850.31014492753623190.2637681159420291.15942028985507251.4202898550724639[null][null]
68Mali075[null]0.373333333333333350.5680.325581395348837230.399563318777292560.246724890829694321.27292576419213971.1768558951965065[null][null]
69Antigua and Barbuda036[null]0.27777777777777780.470588235294117640.233333333333333340.31073446327683620.209039548022598861.39548022598870051.7005649717514124[null][null]
70Finland0119[null]0.252100840336134450.307359307359307330.202857142857142850.245714285714285720.211.182.162857142857143[null][null]
71Kenya080[null]0.30.5215053763440860.323353293413173650.381666666666666650.236666666666666661.43166666666666661.3966666666666667[null][null]
72Andorra042[null]0.0238095238095238080.057142857142857140.00.0229007633587786260.076335877862595420.28244274809160312.8244274809160306[null][null]
73Romania211300.380952380952380930.50.59223300970873780.311864406779661040.44018404907975460.25613496932515341.64570552147239261.2883435582822085[null][null]
74Central African Republic010[null]0.10.352941176470588260.120.168831168831168830.20779220779220781.0259740259740262.064935064935065[null][null]
75Anguilla09[null]0.00.00.093750.06250.06250.66666666666666664.041666666666667[null][null]
76Bolivia92430.00.22222222222222220.37878787878787880.138613861386138630.221957040572792360.248210023866348441.03818615751789971.942720763723150301
77Bhutan09[null]0.22222222222222220.66666666666666660.03921568627450980.095238095238095230.063492063492063490.61904761904761913.9523809523809526[null][null]
78Afghanistan012[null]0.166666666666666660.40.295774647887323940.28409090909090910.204545454545454561.07954545454545462.0568181818181817[null][null]
79Provence00[null][null][null]0.166666666666666660.166666666666666660.083333333333333331.33333333333333333.5[null][null]
80Colombia232590.3913043478260870.36679536679536680.468750.357142857142857150.3780.2721.2061.2101
81Israel31240.00.35483870967741940.389261744966442950.303278688524590170.34924623115577890.251256281407035151.45477386934673361.452261306532663301
82Papua New Guinea010[null]0.40.33333333333333330.240.268041237113402050.175257731958762871.9072164948453612.2268041237113403[null][null]
83Vietnam Republic09[null]0.11111111111111110.61538461538461540.39047619047619050.431372549019607860.176470588235294131.83660130718954241.7320261437908497[null][null]
84Benin050[null]0.240.276315789473684240.137254901960784330.206140350877192980.228070175438596481.00438596491228061.9517543859649122[null][null]
85Tunisia151610.133333333333333330.44720496894409940.5315789473684210.27777777777777780.41666666666666670.29166666666666671.4337121212121211.064393939393939401
86Eswatini019[null]0.210526315789473670.240963855421686750.177083333333333340.207070707070707070.27272727272727270.82828282828282831.7424242424242424[null][null]
87Mauritius021[null]0.0476190476190476160.352941176470588260.29032258064516130.28638497652582160.21126760563380281.32863849765258221.699530516431925[null][null]
88Seychelles014[null]0.00.41666666666666670.04255319148936170.14117647058823530.14117647058823530.72941176470588232.0588235294117645[null][null]
89San Marino056[null]0.00.0243902439024390250.00.0074626865671641790.0298507462686567160.156716417910447774.268656716417911[null][null]
90Saare County00[null][null][null]0.129032258064516130.129032258064516130.09677419354838711.0322580645161292.6129032258064515[null][null]
91Greenland00[null][null]0.00.31250.303030303030303040.106060606060606061.74242424242424242.090909090909091[null][null]
92Basque Country00[null][null]0.63333333333333330.69565217391304350.6603773584905660.169811320754716972.75471698113207531.3396226415094339[null][null]
93Kyrgyzstan030[null]0.366666666666666640.44444444444444440.159420289855072450.240740740740740730.15740740740740740.91666666666666661.8611111111111112[null][null]
94Orkney00[null][null][null]0.153846153846153850.153846153846153850.01.04.3076923076923075[null][null]
95Chinese Taipei035[null]0.114285714285714280.50.253164556962025330.215517241379310330.155172413793103451.31896551724137922.853448275862069[null][null]
96Székely Land00[null][null]0.0[null]0.00.01.03.0[null][null]
97Chile333010.33333333333333330.37541528239202660.5582822085889570.25714285714285710.380480905233380460.20650636492220651.42149929278642141.465346534653465302
98Scotland231210.173913043478260860.487603305785123950.58477508650519030.39423076923076920.476510067114093940.21744966442953021.75033557046979871.225503355704698[null][null]
99Sierra Leone050[null]0.240.54166666666666660.194915254237288140.308333333333333350.241666666666666670.95833333333333341.3625[null][null]
100Uganda052[null]0.30769230769230770.59195402298850570.38278931750741840.44049733570159860.25399644760213141.61811722912966261.211367673179396[null][null]

Let’s add each team’s confederation to our dataset.

teams_kpi = teams_kpi.join(
    confederation,
    how = "left",
    on = {"team1": "team"},
    expr2 = ["confederation"],
)
teams_kpi.head(100)
Abc
team1
Varchar(50)
100%
123
Number_Games_World_Tournament
Bigint
100%
123
Number_Games_Continental_Tournament
Bigint
100%
123
Percent_Victory_World_Tournament
Double
28%
123
Percent_Victory_Continental_Tournament
Double
78%
123
Percent_Victory_Home
Double
89%
123
Percent_Victory_Away
Double
96%
123
Percent_Victory
Double
100%
123
Percent_Draw
Double
100%
123
Avg_goals
Double
100%
123
Avg_goals_conceded
Double
100%
123
nb_World_Cup
Bigint
14%
123
nb_Continental_Cup
Bigint
14%
Abc
confederation
Varchar(8)
99%
1Liberia064[null]0.250.45679012345679010.10.271111111111111140.235555555555555550.88888888888888881.4088888888888889[null][null]CAF
2Moldova048[null]0.104166666666666670.266666666666666660.230.207253886010362680.238341968911917080.88082901554404151.6269430051813472[null][null]UEFA
3Senegal51060.40.35849056603773580.6480.33606557377049180.422916666666666660.268751.28751.0020833333333334[null][null]CAF
4Guatemala0139[null]0.330935251798561150.468085106382978730.28571428571428570.34123222748815170.258293838862559241.32938388625592421.3696682464454977[null][null]CONCACAF
5Hong Kong082[null]0.28048780487804880.433333333333333350.30054644808743170.32957746478873240.219718309859154941.52957746478873241.684507042253521[null][null]AFC
6Japan331520.27272727272727270.55263157894736850.52631578947368420.40094339622641510.471830985915492940.234154929577464781.72007042253521131.160211267605633804AFC
7Thailand097[null]0.247422680412371140.56422018348623850.2599277978339350.369932432432432460.229729729729729741.54560810810810811.5945945945945945[null][null]AFC
8United Arab Emirates61230.166666666666666660.39837398373983740.47682119205298010.33684210526315790.395744680851063850.248936170212765961.41489361702127671.2851063829787235[null][null]AFC
9Namibia049[null]0.18367346938775510.351851851851851860.195402298850574720.236842105263157880.284210526315789471.01578947368421061.5315789473684212[null][null]CAF
10South Sudan02[null]0.00.50.142857142857142850.166666666666666660.27777777777777780.55555555555555561.5555555555555556[null][null]CAF
11Shetland00[null][null]0.60.342105263157894750.372093023255813950.162790697674418621.6279069767441861.8604651162790697[null][null]OFC
12Falkland Islands00[null][null][null]0.240.240.01.03.8[null][null]OFC
13Bosnia and Herzegovina3480.33333333333333330.47916666666666670.428571428571428550.30487804878048780.384615384615384640.214285714285714271.42857142857142861.39010989010989[null][null]UEFA
14Syria085[null]0.44705882352941180.431372549019607860.331818181818181850.373595505617977550.233146067415730321.48033707865168541.3314606741573034[null][null]AFC
15Luxembourg0124[null]0.032258064516129030.110294117647058820.0588235294117647050.069060773480662990.118784530386740330.56629834254143652.8121546961325965[null][null]UEFA
16Albania094[null]0.148936170212765950.404255319148936140.173076923076923070.239726027397260260.22260273972602740.90068493150684941.595890410958904[null][null]UEFA
17Tamil Eelam00[null][null][null]0.166666666666666660.166666666666666660.01.04.166666666666667[null][null]OFC
18Samoa010[null]0.30.470588235294117640.235294117647058820.34090909090909090.090909090909090911.54545454545454542.9545454545454546[null][null]OFC
19Comoros08[null]0.00.00.142857142857142850.071428571428571420.28571428571428570.51.7142857142857142[null][null]CAF
20Montserrat09[null]0.01.00.105263157894736840.133333333333333330.066666666666666671.03333333333333344.4[null][null]OFC
21Iraqi Kurdistan00[null][null]1.00.352941176470588260.450.252.11.15[null][null]OFC
22Corsica00[null][null]0.4[null]0.40.40.80.6[null][null]OFC
23Zanzibar00[null][null]0.17241379310344830.190476190476190470.187817258883248740.192893401015228420.88832487309644672.1624365482233503[null][null]OFC
24Ivory Coast111600.27272727272727270.493750.69172932330827060.40.50294695481335950.249508840864440081.63457760314341851.053045186640471502CAF
25Lesotho024[null]0.083333333333333330.216867469879518080.15094339622641510.169014084507042250.309859154929577440.77934272300469491.619718309859155[null][null]CAF
26Silesia00[null][null]0.375[null]0.3750.253.02.125[null][null]OFC
27Bermuda033[null]0.424242424242424250.403846153846153850.244444444444444440.353846153846153870.184615384615384631.6769230769230771.5615384615384615[null][null]CONCACAF
28Grenada027[null]0.259259259259259240.40.353982300884955750.35263157894736840.221052631578947361.78947368421052631.763157894736842[null][null]CONCACAF
29Jamaica31280.33333333333333330.343750.53048780487804880.309734513274336270.38771593090211130.228406909788867571.31861804222648751.3378119001919386[null][null]CONMEBOL
30Dominica017[null]0.117647058823529410.4750.15740740740740740.230303030303030310.206060606060606061.13939393939393942.090909090909091[null][null]OFC
31Malaysia065[null]0.276923076923076940.427027027027027050.30232558139534880.34119782214156080.252268602540834831.49727767695099811.5698729582577133[null][null]AFC
32Cambodia030[null]0.10.3913043478260870.184615384615384630.196721311475409830.153005464480874321.10928961748633872.6557377049180326[null][null]AFC
33Abkhazia00[null][null][null]0.166666666666666660.166666666666666660.51.01.5[null][null]OFC
34Bonaire00[null][null][null]0.30769230769230770.30769230769230770.153846153846153851.61538461538461543.3846153846153846[null][null]OFC
35Nigeria241820.29166666666666670.54395604395604390.62037037037037030.3190476190476190.45801526717557250.29580152671755731.49618320610687031.003816793893129705CAF
36Kuwait31330.00.473684210526315760.45731707317073170.379166666666666650.424074074074074050.27222222222222221.55555555555555561.079629629629629701AFC
37Cayman Islands014[null]0.00.33333333333333330.135135135135135140.185185185185185170.160493827160493821.0370370370370372.54320987654321[null][null]OFC
38Slovenia6550.166666666666666660.381818181818181830.42647058823529410.28571428571428570.3521126760563380.23474178403755871.23943661971830981.272300469483568[null][null]UEFA
39Brazil1372790.67883211678832110.57706093189964160.73333333333333330.593750.6350914962325080.200215285252960172.1937567276641550.9375672766415549CONMEBOL
40Canada61440.00.38888888888888890.33870967741935480.28148148148148150.33141210374639770.239193083573487041.04899135446685881.397694524495677301CONCACAF
41Iran121750.083333333333333330.59428571428571430.64150943396226410.430379746835443060.53436807095343690.26164079822616411.84035476718403550.83592017738359202AFC
42Cameroon311540.258064516129032250.5649350649350650.58823529411764710.320574162679425840.442588726513569950.300626304801670131.42171189979123171.054279749478079302CAF
43Gotland00[null][null]0.60.28571428571428570.346153846153846150.153846153846153852.46153846153846172.0[null][null]OFC
44Lithuania063[null]0.253968253968253950.40909090909090910.242937853107344640.28963414634146340.189024390243902441.09756097560975621.7835365853658536[null][null]UEFA
45Saint Martin00[null][null]0.750.160.303030303030303040.090909090909090911.1212121212121212.909090909090909[null][null]OFC
46Trinidad and Tobago31450.00.37931034482758620.62244897959183680.37634408602150540.452648475120385250.21027287319422151.7399678972712681.274478330658106[null][null]CONCACAF
47United States482150.29166666666666670.56744186046511620.406542056074766340.26206896551724140.419614147909967870.212218649517684881.41961414790996781.371382636655948504CONMEBOL
48Western Australia00[null][null][null]0.31034482758620690.31034482758620690.103448275862068961.8965517241379312.3793103448275863[null][null][null]
49Western Isles00[null][null][null]0.450.450.11.752.2[null][null]OFC
50Ynys Môn00[null][null][null]0.470588235294117640.470588235294117640.215686274509803931.70588235294117641.4901960784313726[null][null]OFC
51British Virgin Islands09[null]0.00.363636363636363650.160.197530864197530850.160493827160493820.87654320987654323.111111111111111[null][null]OFC
52Equatorial Guinea029[null]0.275862068965517240.44827586206896550.066666666666666670.233009708737864090.223300970873786420.79611650485436891.6504854368932038[null][null]CAF
53Estonia066[null]0.196969696969696960.36184210526315790.186868686868686880.252403846153846150.213942307692307681.02403846153846151.78125[null][null]UEFA
54Guinea0110[null]0.418181818181818150.650.25423728813559320.370892018779342750.291079812206572751.3638497652582161.2206572769953052[null][null]CAF
55Northern Ireland131220.230769230769230780.303278688524590170.290178571428571450.17213114754098360.243781094527363180.232172470978441131.0431177446102821.9535655058043118[null][null]UEFA
56Northern Mariana Islands00[null][null]0.00.133333333333333330.11111111111111110.055555555555555550.88888888888888884.166666666666667[null][null]OFC
57Slovakia4540.250.481481481481481450.450.33333333333333330.401606425702811240.236947791164658641.44176706827309231.3012048192771084[null][null]UEFA
58Tahiti3270.00.29629629629629630.48387096774193550.58461538461538460.5183246073298430.12565445026178012.5183246073298431.7015706806282722[null][null]OFC
59Tanzania040[null]0.20.38607594936708860.230240549828178680.2781186094069530.280163599182004061.15132924335378321.5501022494887526[null][null]CAF
60Spain691430.52173913043478260.62237762237762240.67685589519650660.465686274509803930.58139534883720930.22480620155038761.96744186046511630.908527131782945813UEFA
61Kernow00[null][null]0.2857142857142857[null]0.28571428571428570.28571428571428571.71428571428571422.2857142857142856[null][null]OFC
62Scotland231210.173913043478260860.487603305785123950.58477508650519030.39423076923076920.476510067114093940.21744966442953021.75033557046979871.225503355704698[null][null]UEFA
63Argentina873020.54022988505747130.60596026490066220.6380952380952380.406060606060606070.53606027987082880.248654467168998921.86544671689989231.050592034445640528CONMEBOL
64Chile333010.33333333333333330.37541528239202660.5582822085889570.25714285714285710.380480905233380460.20650636492220651.42149929278642141.465346534653465302CONMEBOL
65Switzerland331290.33333333333333330.41860465116279070.413333333333333330.227586206896551730.33909574468085110.216755319148936171.44148936170212761.7313829787234043[null][null]UEFA
66Uganda052[null]0.30769230769230770.59195402298850570.38278931750741840.44049733570159860.25399644760213141.61811722912966261.211367673179396[null][null]CAF
67Isle of Wight00[null][null]0.77777777777777780.44117647058823530.51162790697674420.162790697674418622.01.302325581395349[null][null]OFC
68Cuba3920.33333333333333330.250.450.37288135593220340.346153846153846150.251.32051282051282051.439102564102564[null][null]CONCACAF
69Vietnam039[null]0.230769230769230780.465517241379310330.384615384615384640.37654320987654320.20370370370370371.66666666666666671.5925925925925926[null][null]AFC
70Suriname061[null]0.31147540983606560.63207547169811320.351851851851851860.434650455927051650.237082066869300921.93313069908814581.452887537993921[null][null]OFC
71Sierra Leone050[null]0.240.54166666666666660.194915254237288140.308333333333333350.241666666666666670.95833333333333341.3625[null][null]CAF
72Chad016[null]0.3750.31818181818181820.161764705882352950.226415094339622650.245283018867924530.93396226415094341.7358490566037736[null][null]CAF
73Bahamas013[null]0.30769230769230770.33333333333333330.181818181818181820.259259259259259240.148148148148148141.14814814814814813.3333333333333335[null][null]OFC
74Monaco00[null][null][null]0.166666666666666660.166666666666666660.166666666666666661.16666666666666678.333333333333334[null][null]OFC
75Galicia00[null][null]0.5[null]0.50.52.01.5[null][null]OFC
76Brittany00[null][null]0.5555555555555556[null]0.55555555555555560.22222222222222221.44444444444444441.2222222222222223[null][null]OFC
77Burundi020[null]0.350.370370370370370350.29729729729729730.316455696202531670.240506329113924061.03797468354430381.2974683544303798[null][null]CAF
78Angola3840.00.33333333333333330.56250.25352112676056340.352750809061488650.352750809061488651.1747572815533981.0420711974110033[null][null]CAF
79Saint Kitts and Nevis026[null]0.346153846153846150.50769230769230770.30645161290322580.398692810457516370.18954248366013071.79738562091503271.5947712418300655[null][null]OFC
80Guyana032[null]0.218750.38709677419354840.25641025641025640.301652892561983470.20661157024793391.19834710743801651.7479338842975207[null][null]CONCACAF
81China PR31470.00.55102040816326530.57961783439490440.39583333333333330.488117001828153540.2266910420475321.83729433272394881.0877513711151736[null][null]AFC
82Jordan078[null]0.384615384615384640.4112149532710280.286624203821656040.3479532163742690.286549707602339171.18421052631578941.1140350877192982[null][null]AFC
83Turkmenistan041[null]0.365853658536585360.53846153846153840.365079365079365060.384615384615384640.170940170940170941.63247863247863251.4786324786324787[null][null]AFC
84Cyprus0104[null]0.115384615384615390.30147058823529410.090909090909090910.185975609756097560.16768292682926830.86890243902439022.2469512195121952[null][null]UEFA
85Faroe Islands060[null]0.083333333333333330.259259259259259240.18750.175257731958762870.087628865979381440.83505154639175262.5257731958762886[null][null]UEFA
86Russia401440.4250.59027777777777780.59322033898305080.456140350877192960.5216718266253870.26470588235294121.71981424148606820.9334365325077401UEFA
87Norway81180.250.34745762711864410.39482200647249190.33434650455927050.35994764397905760.227748691099476431.50130890052356031.6845549738219896[null][null]UEFA
88Mayotte00[null][null]0.00.18750.166666666666666660.27777777777777781.61111111111111122.0555555555555554[null][null]OFC
89Réunion00[null][null]0.212121212121212130.41666666666666670.33333333333333330.160493827160493821.66666666666666672.3580246913580245[null][null]OFC
90Mongolia014[null]0.214285714285714271.00.24137931034482760.266666666666666660.088888888888888891.08888888888888883.2222222222222223[null][null]OFC
91Malta092[null]0.0217391304347826080.206666666666666670.10169491525423730.1250.166666666666666660.62777777777777782.3055555555555554[null][null]UEFA
92Peru152770.266666666666666660.31768953068592060.428571428571428550.22360248447204970.31293706293706290.2430069930069931.2290209790209791.468531468531468502CONMEBOL
93Cape Verde035[null]0.342857142857142860.58064516129032260.278481012658227830.35862068965517240.234482758620689651.06206896551724131.1586206896551725[null][null]CAF
94Libya062[null]0.37096774193548390.58762886597938150.233576642335766420.37837837837837840.246621621621621631.29054054054054061.2162162162162162[null][null]CAF
95Rhodes00[null][null]0.66666666666666660.60.61111111111111120.11111111111111111.61111111111111121.0555555555555556[null][null]OFC
96Dominican Republic028[null]0.357142857142857150.428571428571428550.33333333333333330.36263736263736260.142857142857142851.57142857142857141.8571428571428572[null][null]OFC
97Ellan Vannin00[null][null][null]0.00.00.66666666666666660.66666666666666661.0[null][null]OFC
98Kiribati00[null][null][null]0.00.00.00.33333333333333339.666666666666666[null][null]OFC
99Mauritania018[null]0.11111111111111110.30.085714285714285720.150289017341040470.260115606936416170.73410404624277461.6416184971098267[null][null]CAF
100São Tomé and Príncipe08[null]0.250.22222222222222220.06250.151515151515151520.151515151515151520.75757575757575762.5757575757575757[null][null]CAF

Since clustering will use different statistics, we need to normalize the data. We’ll also create a dummy that will equal 1 if the team won at least one World Cup.

teams_kpi.normalize(
    columns = [
        "Number_Games_Continental_Tournament",
        "Number_Games_World_Tournament",
        "nb_Continental_Cup",
    ],
    method = "minmax",
)
teams_kpi["Word_Cup_Victory"] = teams_kpi["nb_World_Cup"] > 0
teams_kpi["Word_Cup_Victory"].astype("int")
Abc
team1
Varchar(50)
100%
123
Number_Games_World_Tournament
Real
100%
123
Number_Games_Continental_Tournament
Real
100%
123
Percent_Victory_World_Tournament
Double
28%
123
Percent_Victory_Continental_Tournament
Double
78%
123
Percent_Victory_Home
Double
89%
123
Percent_Victory_Away
Double
96%
123
Percent_Victory
Double
100%
123
Percent_Draw
Double
100%
123
Avg_goals
Double
100%
123
Avg_goals_conceded
Double
100%
123
nb_World_Cup
Bigint
14%
123
nb_Continental_Cup
Real
14%
Abc
confederation
Varchar(8)
99%
123
Word_Cup_Victory
Int
15%
1Brazil1.00.84036140.67883211678832110.57706093189964160.73333333333333330.593750.6350914962325080.200215285252960172.1937567276641550.9375672766415540.8CONMEBOL1
2Nigeria0.17518250.54819280.29166666666666670.54395604395604390.62037037037037030.3190476190476190.45801526717557250.29580152671755731.49618320610687031.003816793893129700.3CAF0
3Cameroon0.22627740.46385540.258064516129032250.5649350649350650.58823529411764710.320574162679425840.442588726513569950.300626304801670131.42171189979123171.054279749478079300.2CAF0
4Kuwait0.02189780.40060240.00.473684210526315760.45731707317073170.379166666666666650.424074074074074050.27222222222222221.55555555555555561.079629629629629700.1AFC0
5Iran0.08759120.52710840.083333333333333330.59428571428571430.64150943396226410.430379746835443060.53436807095343690.26164079822616411.84035476718403550.83592017738359200.2AFC0
6Slovenia0.04379560.16566270.166666666666666660.381818181818181830.42647058823529410.28571428571428570.3521126760563380.23474178403755871.23943661971830981.272300469483568[null][null]UEFA[null]
7Canada0.04379560.43373490.00.38888888888888890.33870967741935480.28148148148148150.33141210374639770.239193083573487041.04899135446685881.397694524495677300.2CONCACAF0
8Lithuania0.00.189759[null]0.253968253968253950.40909090909090910.242937853107344640.28963414634146340.189024390243902441.09756097560975621.7835365853658536[null][null]UEFA[null]
9Cayman Islands0.00.0421687[null]0.00.33333333333333330.135135135135135140.185185185185185170.160493827160493821.0370370370370372.54320987654321[null][null]OFC[null]
10Saint Martin0.00.0[null][null]0.750.160.303030303030303040.090909090909090911.1212121212121212.909090909090909[null][null]OFC[null]
11Gotland0.00.0[null][null]0.60.28571428571428570.346153846153846150.153846153846153852.46153846153846172.0[null][null]OFC[null]
12Sudan0.00.2620482[null]0.252873563218390830.59210526315789470.27830188679245280.3360.2481.14133333333333331.368[null][null]CAF[null]
13Niger0.00.1084337[null]0.250.44827586206896550.08988764044943820.234972677595628430.25683060109289620.93442622950819681.644808743169399[null][null]CAF[null]
14New Zealand0.10948910.21686750.00.54166666666666660.48684210526315790.34682080924855490.404761904761904770.181547619047619041.74702380952380951.6130952380952381[null][null]OFC[null]
15Catalonia0.00.0[null][null]0.45945945945945950.11111111111111110.3913043478260870.23913043478260871.52173913043478271.7391304347826086[null][null]OFC[null]
16Ecuador0.07299270.73493980.40.24590163934426230.593750.240259740259740260.29449152542372880.24576271186440681.1949152542372881.650423728813559300.1CONMEBOL0
17South Korea0.24817520.57831330.205882352941176460.56250.57894736842105270.51226158038147140.52867830423940150.2568578553615961.78304239401496270.897755610972568600.3AFC0
18Nepal0.00.0903614[null]0.133333333333333330.394736842105263160.146341463414634140.206666666666666670.140.81333333333333342.5866666666666664[null][null]AFC[null]
19Iceland0.00.2891566[null]0.218750.43076923076923080.237804878048780480.297435897435897430.189743589743589741.16410256410256421.7[null][null]UEFA[null]
20Eritrea0.00.0240964[null]0.00.41666666666666670.120.157142857142857140.228571428571428560.67142857142857141.7428571428571429[null][null]CAF[null]

Some data is missing; this is because only top teams won major tournaments. Besides, some non-professional teams may not have a stadium.

teams_kpi.count()
count
"team1"272.0
"Number_Games_World_Tournament"272.0
"Number_Games_Continental_Tournament"272.0
"Percent_Victory_World_Tournament"77.0
"Percent_Victory_Continental_Tournament"213.0
"Percent_Victory_Home"243.0
"Percent_Victory_Away"263.0
"Percent_Victory"272.0
"Percent_Draw"272.0
"Avg_goals"272.0
"Avg_goals_conceded"272.0
"nb_World_Cup"40.0
"nb_Continental_Cup"40.0
"confederation"271.0
"Word_Cup_Victory"40.0

Let’s impute the missing values by 0.

teams_kpi.fillna(
    {
        "Percent_Victory_Away": 0,
        "Percent_Victory_Home": 0,
        "Percent_Victory_Continental_Tournament": 0,
        "Percent_Victory_World_Tournament": 0,
        "nb_World_Cup": 0,
        "Word_Cup_Victory": 0,
        "nb_Continental_Cup": 0,
        "confederation": "OFC",
    },
)
Abc
team1
Varchar(50)
100%
123
Number_Games_World_Tournament
Real
100%
123
Number_Games_Continental_Tournament
Real
100%
123
Percent_Victory_World_Tournament
Real
100%
123
Percent_Victory_Continental_Tournament
Real
100%
123
Percent_Victory_Home
Real
100%
123
Percent_Victory_Away
Real
100%
123
Percent_Victory
Double
100%
123
Percent_Draw
Double
100%
123
Avg_goals
Double
100%
123
Avg_goals_conceded
Double
100%
123
nb_World_Cup
Bigint
100%
123
nb_Continental_Cup
Real
100%
Abc
confederation
Varchar(8)
100%
123
Word_Cup_Victory
Int
100%
1El Salvador0.04379560.46987950.00.41666666666666670.48192771084337350.20091324200913240.321120689655172430.226293103448275861.22629310344827581.487068965517241300.0CONCACAF0
2Czech Republic0.27737230.46686750.36842105263157890.52903225806451610.6543209876543210.341853035143769970.48331108144192260.221628838451268351.8437917222963951.234979973297730200.0UEFA0
3Wales0.03649640.33132530.20.30.36708860759493670.265151515151515140.310064935064935040.212662337662337661.25324675324675331.693181818181818100.0UEFA0
4South Africa0.12408760.25602410.176470588235294130.48235294117647060.52755905511811020.37096774193548390.44475920679886690.27478753541076491.3399433427762041.008498583569405100.0CAF0
5Austria0.21167880.34939760.413793103448275860.474137931034482760.48376623376623380.306338028169014060.411126187245590250.21981004070556311.79782903663500671.592944369063772100.0UEFA0
6Argentina0.63503650.90963860.54022988505747130.60596026490066220.6380952380952380.406060606060606070.53606027987082880.248654467168998921.86544671689989231.050592034445640520.8CONMEBOL1
7Chile0.24087590.90662650.33333333333333330.37541528239202660.5582822085889570.25714285714285710.380480905233380460.20650636492220651.42149929278642141.465346534653465300.2CONMEBOL0
8Scotland0.16788320.36445780.173913043478260860.487603305785123950.58477508650519030.39423076923076920.476510067114093940.21744966442953021.75033557046979871.22550335570469800.0UEFA0
9Switzerland0.24087590.38855420.33333333333333330.41860465116279070.413333333333333330.227586206896551730.33909574468085110.216755319148936171.44148936170212761.731382978723404300.0UEFA0
10Uganda0.00.15662650.00.30769230769230770.59195402298850570.38278931750741840.44049733570159860.25399644760213141.61811722912966261.21136767317939600.0CAF0
11Sierra Leone0.00.15060240.00.240.54166666666666660.194915254237288140.308333333333333350.241666666666666670.95833333333333341.362500.0CAF0
12Galicia0.00.00.00.00.50.00.50.52.01.500.0OFC0
13Cuba0.02189780.27710840.33333333333333330.250.450.37288135593220340.346153846153846150.251.32051282051282051.43910256410256400.0CONCACAF0
14Chad0.00.04819280.00.3750.31818181818181820.161764705882352950.226415094339622650.245283018867924530.93396226415094341.735849056603773600.0CAF0
15Brittany0.00.00.00.00.55555555555555560.00.55555555555555560.22222222222222221.44444444444444441.222222222222222300.0OFC0
16Bahamas0.00.03915660.00.30769230769230770.33333333333333330.181818181818181820.259259259259259240.148148148148148141.14814814814814813.333333333333333500.0OFC0
17Suriname0.00.18373490.00.31147540983606560.63207547169811320.351851851851851860.434650455927051650.237082066869300921.93313069908814581.45288753799392100.0OFC0
18Vietnam0.00.11746990.00.230769230769230780.465517241379310330.384615384615384640.37654320987654320.20370370370370371.66666666666666671.592592592592592600.0AFC0
19Isle of Wight0.00.00.00.00.77777777777777780.44117647058823530.51162790697674420.162790697674418622.01.30232558139534900.0OFC0
20Monaco0.00.00.00.00.00.166666666666666660.166666666666666660.166666666666666661.16666666666666678.33333333333333400.0OFC0

Let’s export the result to our VAST DataBase.

vo.drop("football_clustering", method = "table")
teams_kpi.to_db(
    "football_clustering",
    relation_type = "table",
    inplace = True,
)
Abc
team1
Varchar(50)
100%
123
number_games_world_tournament
Decimal(28,7)
100%
123
number_games_continental_tournament
Decimal(28,7)
100%
123
percent_victory_world_tournament
Double
100%
123
percent_victory_continental_tournament
Double
100%
123
percent_victory_home
Double
100%
123
percent_victory_away
Double
100%
123
percent_victory
Double
100%
123
percent_draw
Double
100%
123
avg_goals
Double
100%
123
avg_goals_conceded
Double
100%
123
nb_world_cup
Bigint
100%
123
nb_continental_cup
Decimal(27,6)
100%
Abc
confederation
Varchar(8)
100%
123
word_cup_victory
Integer
100%
1Brazil1.00.84036140.67883211678832110.57706093189964160.73333333333333330.593750.6350914962325080.200215285252960172.1937567276641550.9375672766415540.9CONMEBOL1
2Slovenia0.04379560.16566270.166666666666666660.381818181818181830.42647058823529410.28571428571428570.3521126760563380.23474178403755871.23943661971830981.27230046948356800.0UEFA0
3Canada0.04379560.43373490.00.38888888888888890.33870967741935480.28148148148148150.33141210374639770.239193083573487041.04899135446685881.397694524495677300.1CONCACAF0
4Gotland0.00.00.00.00.60.28571428571428570.346153846153846150.153846153846153852.46153846153846172.000.0OFC0
5Saint Martin0.00.00.00.00.750.160.303030303030303040.090909090909090911.1212121212121212.90909090909090900.0OFC0
6Cayman Islands0.00.04216870.00.00.33333333333333330.135135135135135140.185185185185185170.160493827160493821.0370370370370372.5432098765432100.0OFC0
7Iran0.08759120.52710840.083333333333333330.59428571428571430.64150943396226410.430379746835443060.53436807095343690.26164079822616411.84035476718403550.83592017738359200.3AFC0
8Kuwait0.02189780.40060240.00.473684210526315760.45731707317073170.379166666666666650.424074074074074050.27222222222222221.55555555555555561.079629629629629700.1AFC0
9Lithuania0.00.1897590.00.253968253968253950.40909090909090910.242937853107344640.28963414634146340.189024390243902441.09756097560975621.783536585365853600.0UEFA0
10Nigeria0.17518250.54819280.29166666666666670.54395604395604390.62037037037037030.3190476190476190.45801526717557250.29580152671755731.49618320610687031.003816793893129700.3CAF0
11Cameroon0.22627740.46385540.258064516129032250.5649350649350650.58823529411764710.320574162679425840.442588726513569950.300626304801670131.42171189979123171.054279749478079300.2CAF0
12South Korea0.24817520.57831330.205882352941176460.56250.57894736842105270.51226158038147140.52867830423940150.2568578553615961.78304239401496270.897755610972568600.3AFC0
13New Zealand0.10948910.21686750.00.54166666666666660.48684210526315790.34682080924855490.404761904761904770.181547619047619041.74702380952380951.613095238095238100.0OFC0
14Iceland0.00.28915660.00.218750.43076923076923080.237804878048780480.297435897435897430.189743589743589741.16410256410256421.700.0UEFA0
15Honduras0.06569340.52710840.00.440.54838709677419350.33160621761658030.40851063829787230.261702127659574461.49148936170212761.223404255319148900.0CONMEBOL0
16Ecuador0.07299270.73493980.40.24590163934426230.593750.240259740259740260.29449152542372880.24576271186440681.1949152542372881.650423728813559300.2CONMEBOL0
17Isle of Man0.00.00.00.00.250.55555555555555560.5250.12.81.62500.0OFC0
18Saint Lucia0.00.06626510.00.27272727272727270.403508771929824540.3084112149532710.33333333333333330.139784946236559131.47311827956989251.962365591397849500.0OFC0
19Catalonia0.00.00.00.00.45945945945945950.11111111111111110.3913043478260870.23913043478260871.52173913043478271.739130434782608600.0OFC0
20Sudan0.00.26204820.00.252873563218390830.59210526315789470.27830188679245280.3360.2481.14133333333333331.36800.0CAF0

Team Rankings with k-means

To compute a KMeans model, we need to find a value for k. Let’s draw an elbow() curve to find a suitable number of clusters.

from vastorbit.machine_learning.model_selection import elbow

predictors = [
    'Word_Cup_Victory',
    'nb_Continental_Cup',
    'Number_Games_World_Tournament',
    'Number_Games_Continental_Tournament',
    'Percent_Victory_World_Tournament',
    'Percent_Victory_Continental_Tournament',
    'Percent_Victory_Home',
    'Percent_Victory_Away',
]
elbow(
    "football_clustering",
    predictors,
    n_clusters = (1, 11),
)

6 seems to be a good number of clusters. To help the algorithm to converge to meaningful clusters, we can initialize the clusters with different types of centroid levels. For example, we can associate very good teams (champions) to World Cups Winners, good teams to continental Cup Winners, etc. This will let us to properly weigh the performance of each team relatve to the strength of their region.

from vastorbit.machine_learning.vast import KMeans

    # w_cup c_cup w_games c_games w_vict c_vict h_vict a_vict
init =  [
    (0,    0,       0,  0.05,      0,    0,      0, 0.05), # very bad
    (0,    0,       0,  0.30,      0, 0.25,   0.30, 0.10), # bad
    (0,    0,    0.05,  0.40,   0.15, 0.35,   0.40, 0.20), # outsiders
    (0, 0.10,    0.15,  0.50,   0.20, 0.45,   0.50, 0.30), # good
    (0, 0.20,    0.30,  0.40,   0.40, 0.55,   0.60, 0.40), # strong
    (1,  0.5,       1,  0.80,   0.70, 0.65,   0.75, 0.55), # champions
]
model_kmeans = KMeans(
    n_clusters = 6,
    init = init,
)
model_kmeans.fit("football_clustering", predictors)
model_kmeans.clusters_

Let’s add the prediction to the VastFrame.

model_kmeans.predict(
    teams_kpi,
    name = "fifa_rank",
)
Abc
team1
Varchar(50)
100%
123
number_games_world_tournament
Decimal(28,7)
100%
123
number_games_continental_tournament
Decimal(28,7)
100%
123
percent_victory_world_tournament
Double
100%
123
percent_victory_continental_tournament
Double
100%
123
percent_victory_home
Double
100%
123
percent_victory_away
Double
100%
123
percent_victory
Double
100%
123
percent_draw
Double
100%
123
avg_goals
Double
100%
123
avg_goals_conceded
Double
100%
123
nb_world_cup
Bigint
100%
123
nb_continental_cup
Decimal(27,6)
100%
Abc
confederation
Varchar(8)
100%
123
word_cup_victory
Integer
100%
123
fifa_rank
Integer
100%
1Brazil1.00.84036140.67883211678832110.57706093189964160.73333333333333330.593750.6350914962325080.200215285252960172.1937567276641550.9375672766415540.9CONMEBOL15
2Slovenia0.04379560.16566270.166666666666666660.381818181818181830.42647058823529410.28571428571428570.3521126760563380.23474178403755871.23943661971830981.27230046948356800.0UEFA02
3Canada0.04379560.43373490.00.38888888888888890.33870967741935480.28148148148148150.33141210374639770.239193083573487041.04899135446685881.397694524495677300.1CONCACAF03
4Gotland0.00.00.00.00.60.28571428571428570.346153846153846150.153846153846153852.46153846153846172.000.0OFC01
5Saint Martin0.00.00.00.00.750.160.303030303030303040.090909090909090911.1212121212121212.90909090909090900.0OFC01
6Cayman Islands0.00.04216870.00.00.33333333333333330.135135135135135140.185185185185185170.160493827160493821.0370370370370372.5432098765432100.0OFC00
7Iran0.08759120.52710840.083333333333333330.59428571428571430.64150943396226410.430379746835443060.53436807095343690.26164079822616411.84035476718403550.83592017738359200.3AFC04
8Kuwait0.02189780.40060240.00.473684210526315760.45731707317073170.379166666666666650.424074074074074050.27222222222222221.55555555555555561.079629629629629700.1AFC03
9Lithuania0.00.1897590.00.253968253968253950.40909090909090910.242937853107344640.28963414634146340.189024390243902441.09756097560975621.783536585365853600.0UEFA02
10Nigeria0.17518250.54819280.29166666666666670.54395604395604390.62037037037037030.3190476190476190.45801526717557250.29580152671755731.49618320610687031.003816793893129700.3CAF04
11Cameroon0.22627740.46385540.258064516129032250.5649350649350650.58823529411764710.320574162679425840.442588726513569950.300626304801670131.42171189979123171.054279749478079300.2CAF04
12South Korea0.24817520.57831330.205882352941176460.56250.57894736842105270.51226158038147140.52867830423940150.2568578553615961.78304239401496270.897755610972568600.3AFC04
13New Zealand0.10948910.21686750.00.54166666666666660.48684210526315790.34682080924855490.404761904761904770.181547619047619041.74702380952380951.613095238095238100.0OFC03
14Iceland0.00.28915660.00.218750.43076923076923080.237804878048780480.297435897435897430.189743589743589741.16410256410256421.700.0UEFA02
15Honduras0.06569340.52710840.00.440.54838709677419350.33160621761658030.40851063829787230.261702127659574461.49148936170212761.223404255319148900.0CONMEBOL03
16Ecuador0.07299270.73493980.40.24590163934426230.593750.240259740259740260.29449152542372880.24576271186440681.1949152542372881.650423728813559300.2CONMEBOL04
17Isle of Man0.00.00.00.00.250.55555555555555560.5250.12.81.62500.0OFC00
18Saint Lucia0.00.06626510.00.27272727272727270.403508771929824540.3084112149532710.33333333333333330.139784946236559131.47311827956989251.962365591397849500.0OFC02
19Catalonia0.00.00.00.00.45945945945945950.11111111111111110.3913043478260870.23913043478260871.52173913043478271.739130434782608600.0OFC01
20Sudan0.00.26204820.00.252873563218390830.59210526315789470.27830188679245280.3360.2481.14133333333333331.36800.0CAF02

Let’s look at the strongest group, which includes well-known teams like Argentina, Brazil, and France.

teams_kpi.search(
    conditions = [teams_kpi["fifa_rank"] == 5],
    usecols = ["team1", "fifa_rank"],
    order_by = ["fifa_rank"],
).head(10)
Abc
team1
Varchar(50)
100%
123
fifa_rank
Integer
100%
1Uruguay5
2Sweden5
3Italy5
4Argentina5
5Germany5
6England5
7Brazil5
8Spain5
9France5

The weakest group includes less well-known teams.

teams_kpi.search(
    conditions = [teams_kpi["fifa_rank"] == 0],
    usecols = ["team1", "fifa_rank"],
    order_by = ["fifa_rank"],
).head(10)
Abc
team1
Varchar(50)
100%
123
fifa_rank
Integer
100%
1Western Australia0
2Andorra0
3Provence0
4Anguilla0
5Ynys Môn0
6Faroe Islands0
7Malta0
8Kernow0
9Western Isles0
10Northern Mariana Islands0

A bubble plot will let us visualize the differences in strength between each confederation.

We can see the strongest group at the top right of the graphic and weakest teams at the bottom left. Some teams may be very good in their location but very bad in World Tournaments. They are mainly at the bottom right of the graph.

teams_kpi.scatter(
    [
        "Percent_Victory_Continental_Tournament",
        "Percent_Victory_World_Tournament",
    ],
    size = "fifa_rank",
    by = "confederation",
)

We can also look at the Percent of Victory by rank to confirm our hypothesis.

teams_kpi.scatter(
    [
        "Percent_Victory_Continental_Tournament",
        "Percent_Victory_World_Tournament",
    ],
    size = "Percent_Victory",
    by = "fifa_rank",
)

A box plot can also show us the differences in skill between teams. We can look at rank 1, where the percent of victory is high because of the confederation.

Note that the best team in a weaker confederation might not be particularly strong, but still have a high Percent of Victory.

teams_kpi["Percent_Victory"].boxplot(by = "fifa_rank")

Let’s export the KPIs to our VAST DataBase.

vo.drop(
    "team_kpi",
    method = "table",
)
teams_kpi.to_db(
    name = "team_kpi",
    relation_type = "table",
    inplace = True,
)
Abc
team1
Varchar(50)
100%
123
number_games_world_tournament
Decimal(28,7)
100%
123
number_games_continental_tournament
Decimal(28,7)
100%
123
percent_victory_world_tournament
Double
100%
123
percent_victory_continental_tournament
Double
100%
123
percent_victory_home
Double
100%
123
percent_victory_away
Double
100%
123
percent_victory
Double
100%
123
percent_draw
Double
100%
123
avg_goals
Double
100%
123
avg_goals_conceded
Double
100%
123
nb_world_cup
Bigint
100%
123
nb_continental_cup
Decimal(27,6)
100%
Abc
confederation
Varchar(8)
100%
123
word_cup_victory
Integer
100%
123
fifa_rank
Integer
100%
1Israel0.02189780.3734940.00.35483870967741940.389261744966442950.303278688524590170.34924623115577890.251256281407035151.45477386934673361.452261306532663300.1UEFA03
2Colombia0.16788320.78012050.3913043478260870.36679536679536680.468750.357142857142857150.3780.2721.2061.2100.1CONMEBOL04
3Vietnam Republic0.00.02710840.00.11111111111111110.61538461538461540.39047619047619050.431372549019607860.176470588235294131.83660130718954241.732026143790849700.0AFC01
4Saare County0.00.00.00.00.00.129032258064516130.129032258064516130.09677419354838711.0322580645161292.612903225806451500.0OFC00
5Greenland0.00.00.00.00.00.31250.303030303030303040.106060606060606061.74242424242424242.09090909090909100.0OFC00
6Orkney0.00.00.00.00.00.153846153846153850.153846153846153850.01.04.307692307692307500.0OFC00
7Kyrgyzstan0.00.09036140.00.366666666666666640.44444444444444440.159420289855072450.240740740740740730.15740740740740740.91666666666666661.861111111111111200.0AFC02
8Papua New Guinea0.00.03012050.00.40.33333333333333330.240.268041237113402050.175257731958762871.9072164948453612.226804123711340300.0OFC02
9Tunisia0.10948910.48493980.133333333333333330.44720496894409940.5315789473684210.27777777777777780.41666666666666670.29166666666666671.4337121212121211.064393939393939400.1CAF03
10San Marino0.00.16867470.00.00.0243902439024390250.00.0074626865671641790.0298507462686567160.156716417910447774.26865671641791100.0UEFA00
11Benin0.00.15060240.00.240.276315789473684240.137254901960784330.206140350877192980.228070175438596481.00438596491228061.951754385964912200.0CAF02
12Eswatini0.00.05722890.00.210526315789473670.240963855421686750.177083333333333340.207070707070707070.27272727272727270.82828282828282831.742424242424242400.0CAF00
13Mauritius0.00.0632530.00.0476190476190476160.352941176470588260.29032258064516130.28638497652582160.21126760563380281.32863849765258221.69953051643192500.0CAF01
14Seychelles0.00.04216870.00.00.41666666666666670.04255319148936170.14117647058823530.14117647058823530.72941176470588232.058823529411764500.0CAF01
15Basque Country0.00.00.00.00.63333333333333330.69565217391304350.6603773584905660.169811320754716972.75471698113207531.339622641509433900.0OFC01
16Székely Land0.00.00.00.00.00.00.00.01.03.000.0OFC00
17Chinese Taipei0.00.10542170.00.114285714285714280.50.253164556962025330.215517241379310330.155172413793103451.31896551724137922.85344827586206900.0AFC01
18South Korea0.24817520.57831330.205882352941176460.56250.57894736842105270.51226158038147140.52867830423940150.2568578553615961.78304239401496270.897755610972568600.3AFC04
19New Zealand0.10948910.21686750.00.54166666666666660.48684210526315790.34682080924855490.404761904761904770.181547619047619041.74702380952380951.613095238095238100.0OFC03
20Iceland0.00.28915660.00.218750.43076923076923080.237804878048780480.297435897435897430.189743589743589741.16410256410256421.700.0UEFA02

Features Engineering

Many very interesting features can be to use to evaluate each team. Moving windows of the previous games can drastically improve our model.

Since a team can by a home or away team, we’ll intervert the away and home teams. By using this technique, we will never get twice the same game and we will get the proper moving windows.

football = vo.VastFrame("football_clean")
football["home_team"].rename("team1");
football["home_score"].rename("team1_score");
football["away_team"].rename("team2");
football["away_score"].rename("team2_score");
# will be to use to filter the data after the features engineering
football["match_sample"] = "1";

football2 = vo.VastFrame("football_clean");
football2["home_team"].rename("team2");
football2["home_score"].rename("team2_score");
football2["away_team"].rename("team1");
football2["away_score"].rename("team1_score");
# will be to use to filter the data after the features engineering
football2["match_sample"] = "2";

# Merging the 2 interverted datasets
all_matchs = football.append(football2);

Let’s add the different KPIs to our dataset.

all_matchs = all_matchs.join(
    teams_kpi,
    on = {"team1": "team1"},
    how = "left",
    expr2 = [
        "nb_World_Cup AS nb_World_Cup_1",
        "fifa_rank AS fifa_rank_1",
        "Avg_goals AS Avg_goals_1",
        "Percent_Draw AS Percent_Draw_1",
        "Number_Games_World_Tournament AS Number_Games_World_Tournament_1",
        "Percent_Victory_World_Tournament AS Percent_Victory_World_Tournament_1",
        "Percent_Victory_Away AS Percent_Victory_Away_1",
        "Percent_Victory_Continental_Tournament AS Percent_Victory_Continental_Tournament_1",
        "confederation AS confederation_1",
        "Percent_Victory_Home AS Percent_Victory_Home_1",
        "Avg_goals_conceded AS Avg_goals_conceded_1",
        "Number_Games_Continental_Tournament AS Number_Games_Continental_Tournament_1",
        "nb_Continental_Cup AS nb_Continental_Cup_1",
        "Percent_Victory AS Percent_Victory_1",
    ],
)
all_matchs = all_matchs.join(
    teams_kpi,
    on = {"team2": "team1"},
    how = "left",
    expr2 = [
        "nb_World_Cup AS nb_World_Cup_2",
        "fifa_rank AS fifa_rank_2",
        "Avg_goals AS Avg_goals_2",
        "Percent_Draw AS Percent_Draw_2",
        "Number_Games_World_Tournament AS Number_Games_World_Tournament_2",
        "Percent_Victory_World_Tournament AS Percent_Victory_World_Tournament_2",
        "Percent_Victory_Away AS Percent_Victory_Away_2",
        "Percent_Victory_Continental_Tournament AS Percent_Victory_Continental_Tournament_2",
        "confederation AS confederation_2",
        "Percent_Victory_Home AS Percent_Victory_Home_2",
        "Avg_goals_conceded AS Avg_goals_conceded_2",
        "Number_Games_Continental_Tournament AS Number_Games_Continental_Tournament_2",
        "nb_Continental_Cup AS nb_Continental_Cup_2",
        "Percent_Victory AS Percent_Victory_2",
    ],
)

We can add dumies to do aggregations on the different games.

all_matchs["victory_team1"] = all_matchs["team1_score"] > all_matchs["team2_score"]
all_matchs["victory_team1"].astype("int")
all_matchs["draw"] = all_matchs["team1_score"] == all_matchs["team2_score"]
all_matchs["draw"].astype("int")
all_matchs["victory_team2"] = all_matchs["team1_score"] < all_matchs["team2_score"]
all_matchs["victory_team2"].astype("int")
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
123
fifa_rank_2
Integer
99%
123
Avg_goals_2
Double
99%
123
Percent_Draw_2
Double
99%
123
Number_Games_World_Tournament_2
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_2
Double
99%
123
Percent_Victory_Away_2
Double
99%
123
Percent_Victory_Continental_Tournament_2
Double
99%
Abc
confederation_2
Varchar(8)
99%
123
Percent_Victory_Home_2
Double
99%
123
Avg_goals_conceded_2
Double
99%
123
Number_Games_Continental_Tournament_2
Decimal(28,7)
99%
123
nb_Continental_Cup_2
Decimal(27,6)
99%
123
Percent_Victory_2
Double
99%
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
11993-12-16FriendlyMexicoGuadalajaraMexico0Brazil11041.74750.23750.54744530.306666666666666640.423566878980891740.6085271317829457CONMEBOL0.54248366013071891.076250.77710840.50.495452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
22009-06-21Confederations CupSouth AfricaPretoriaItaly0Brazil31351.69588313413014610.282868525896414370.66423360.52747252747252750.34645669291338580.6153846153846154UEFA0.64388489208633090.98273572377158040.39156630.10.5245683930942895452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
32011-11-10FriendlyGabonLibrevilleGabon0Brazil21021.19266055045871560.27828746177370030.00.00.27027027027027030.37681159420289856CAF0.47272727272727271.13149847094801230.20783130.00.36085626911314983452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
42017-10-05FIFA World Cup qualificationBoliviaLa PazBolivia0Brazil01031.03818615751789970.248210023866348440.06569340.00.138613861386138630.2222222222222222CONMEBOL0.37878787878787881.94272076372315030.73192770.00.22195704057279236452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508010
51979-08-23Copa AméricaArgentinaBuenos AiresArgentina2Brazil21251.86544671689989230.248654467168998920.63503650.54022988505747130.406060606060606070.6059602649006622CONMEBOL0.6380952380952381.05059203444564050.90963860.80.5360602798708288452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508010
62005-10-09FIFA World Cup qualificationBoliviaLa PazBolivia1Brazil11031.03818615751789970.248210023866348440.06569340.00.138613861386138630.2222222222222222CONMEBOL0.37878787878787881.94272076372315030.73192770.00.22195704057279236452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508010
71959-03-21Copa AméricaArgentinaBuenos AiresBolivia2Brazil41031.03818615751789970.248210023866348440.06569340.00.138613861386138630.2222222222222222CONMEBOL0.37878787878787881.94272076372315030.73192770.00.22195704057279236452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
81988-07-17FriendlyAustraliaSydneyAustralia0Brazil21042.0317124735729390.211416490486257940.1897810.26923076923076920.51123595505617980.583941605839416AFC0.43939393939393941.11205073995771660.41265060.10.4989429175475687452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
91997-12-14Confederations CupSaudi ArabiaRiyadhAustralia0Brazil01042.0317124735729390.211416490486257940.1897810.26923076923076920.51123595505617980.583941605839416AFC0.43939393939393941.11205073995771660.41265060.10.4989429175475687452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508010
102017-06-13FriendlyAustraliaMelbourneAustralia0Brazil41042.0317124735729390.211416490486257940.1897810.26923076923076920.51123595505617980.583941605839416AFC0.43939393939393941.11205073995771660.41265060.10.4989429175475687452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
111987-07-03Copa AméricaArgentinaCórdobaChile4Brazil01041.42149929278642140.20650636492220650.24087590.33333333333333330.25714285714285710.3754152823920266CONMEBOL0.5582822085889571.46534653465346530.90662650.20.38048090523338046452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508100
121988-07-07FriendlyAustraliaMelbourneAustralia0Brazil11042.0317124735729390.211416490486257940.1897810.26923076923076920.51123595505617980.583941605839416AFC0.43939393939393941.11205073995771660.41265060.10.4989429175475687452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
131985-05-21FriendlyChileSantiagoChile2Brazil11041.42149929278642140.20650636492220650.24087590.33333333333333330.25714285714285710.3754152823920266CONMEBOL0.5582822085889571.46534653465346530.90662650.20.38048090523338046452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508100
141957-09-15Copa Bernardo O'HigginsChileSantiagoChile1Brazil01041.42149929278642140.20650636492220650.24087590.33333333333333330.25714285714285710.3754152823920266CONMEBOL0.5582822085889571.46534653465346530.90662650.20.38048090523338046452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508100
152001-06-09Confederations CupSouth KoreaUlsanAustralia1Brazil01042.0317124735729390.211416490486257940.1897810.26923076923076920.51123595505617980.583941605839416AFC0.43939393939393941.11205073995771660.41265060.10.4989429175475687452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508100
161957-09-18Copa Bernardo O'HigginsChileSantiagoChile1Brazil11041.42149929278642140.20650636492220650.24087590.33333333333333330.25714285714285710.3754152823920266CONMEBOL0.5582822085889571.46534653465346530.90662650.20.38048090523338046452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508010
171999-07-14Copa AméricaParaguayCiudad del EsteMexico0Brazil21041.74750.23750.54744530.306666666666666640.423566878980891740.6085271317829457CONMEBOL0.54248366013071891.076250.77710840.50.495452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
182000-08-15FIFA World Cup qualificationChileSantiagoChile3Brazil01041.42149929278642140.20650636492220650.24087590.33333333333333330.25714285714285710.3754152823920266CONMEBOL0.5582822085889571.46534653465346530.90662650.20.38048090523338046452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508100
192013-10-12FriendlySouth KoreaSeoulSouth Korea0Brazil21041.78304239401496270.2568578553615960.24817520.205882352941176460.51226158038147140.5625AFC0.57894736842105270.89775561097256860.57831330.30.5286783042394015452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508001
202006-08-16FriendlyNorwayOsloNorway1Brazil11031.50130890052356030.227748691099476430.05839420.250.33434650455927050.3474576271186441UEFA0.39482200647249191.68455497382198960.35542170.00.3599476439790576452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.635091496232508010

Let’s use moving windows to compute some additional features.

The teams’ performance in their recent games

# TEAM 1

# Victory 10 previous games
all_matchs.rolling(
    func = "avg",
    window = (-10, -1),
    columns = "victory_team1",
    by = ["team1"],
    order_by = ["date"],
    name = "avg_victory_team1_1_10",
)
# Victory 3 previous games
all_matchs.rolling(
    func = "avg",
    window = (-3, -1),
    columns = "victory_team1",
    by = ["team1"],
    order_by = ["date"],
    name = "avg_victory_team1_1_3",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team1"],
    order_by = ["date"],
    name = "avg_draw_team1_1_5",
)

# TEAM 2

# Victory 10 previous games
all_matchs.rolling(
    func = "avg",
    window = (-10, -1),
    columns = "victory_team2",
    by = ["team2"],
    order_by = ["date"],
    name = "avg_victory_team2_1_10",
)
# Victory 3 previous games
all_matchs.rolling(
    func = "avg",
    window = (-3, -1),
    columns = "victory_team2",
    by = ["team2"],
    order_by = ["date"],
    name = "avg_victory_team2_1_3",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team2"],
    order_by = ["date"],
    name = "avg_draw_team2_1_5",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
123
fifa_rank_2
Integer
99%
123
Avg_goals_2
Double
99%
123
Percent_Draw_2
Double
99%
123
Number_Games_World_Tournament_2
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_2
Double
99%
123
Percent_Victory_Away_2
Double
99%
123
Percent_Victory_Continental_Tournament_2
Double
99%
Abc
confederation_2
Varchar(8)
99%
123
Percent_Victory_Home_2
Double
99%
123
Avg_goals_conceded_2
Double
99%
123
Number_Games_Continental_Tournament_2
Decimal(28,7)
99%
123
nb_Continental_Cup_2
Decimal(27,6)
99%
123
Percent_Victory_2
Double
99%
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
12012-10-21FriendlyAzerbaijanStepanakertArtsakh3Abkhazia01013.00.00.00.00.00.0OFC1.00.00.00.01.0001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.16666666666666666100[null][null][null][null][null][null]
22014-06-01CONIFA World Football CupSwedenÖstersundOccitania1Abkhazia12001.250.166666666666666660.00.00.30.0OFC0.01.83333333333333330.00.00.25001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660100.1250.33333333333333330.00.00.00.0
32014-06-02CONIFA World Football CupSwedenÖstersundSápmi1Abkhazia21014.3571428571428570.142857142857142850.00.00.50.0OFC0.3751.71428571428571420.00.00.42857142857142855001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.40.00.20.00.00.5
42014-06-04CONIFA World Football CupSwedenÖstersundSouth Ossetia0Abkhazia02000.66666666666666660.33333333333333330.00.00.00.0OFC0.02.33333333333333350.00.00.0001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660100.00.00.00.33333333333333330.33333333333333330.3333333333333333
52014-06-05CONIFA World Football CupSwedenÖstersundPadania3Abkhazia31012.50.1250.00.00.83333333333333340.0OFC1.00.56250.00.00.875001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660101.01.00.00.250.33333333333333330.5
62014-06-07CONIFA World Football CupSwedenÖstersundOccitania1Abkhazia02001.250.166666666666666660.00.00.30.0OFC0.01.83333333333333330.00.00.25001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666661000.20.33333333333333330.40.20.33333333333333330.6
72016-05-29CONIFA World Football CupGeorgiaSuhkumiChagos Islands0Abkhazia92[null][null][null][null][null][null][null][null][null][null][null][null][null][null]001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.16666666666666666001[null][null][null]0.166666666666666660.00.6
82016-05-31CONIFA World Football CupGeorgiaSuhkumiWestern Armenia0Abkhazia12[null][null][null][null][null][null][null][null][null][null][null][null][null][null]001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.16666666666666666001[null][null][null]0.28571428571428570.33333333333333330.4
92016-06-01CONIFA World Football CupGeorgiaSuhkumiSápmi0Abkhazia22014.3571428571428570.142857142857142850.00.00.50.0OFC0.3751.71428571428571420.00.00.42857142857142855001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.30.33333333333333330.20.3750.66666666666666660.4
102016-06-04CONIFA World Football CupGeorgiaSuhkumiNorthern Cyprus0Abkhazia22012.26666666666666660.066666666666666670.00.00.40.0OFC0.81.20.00.00.5333333333333333001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.60.66666666666666660.20.44444444444444441.00.2
112016-06-05CONIFA World Football CupGeorgiaSuhkumiPanjab1Abkhazia12[null][null][null][null][null][null][null][null][null][null][null][null][null][null]001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660100.50.50.00.51.00.0
122017-06-05CONIFA European Football CupNorthern CyprusKyreniaSouth Ossetia1Abkhazia22000.66666666666666660.33333333333333330.00.00.00.0OFC0.02.33333333333333350.00.00.0001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.00.00.33333333333333330.50.66666666666666660.2
132017-06-07CONIFA European Football CupNorthern CyprusMorphouNorthern Cyprus0Abkhazia01012.26666666666666660.066666666666666670.00.00.40.0OFC0.81.20.00.00.5333333333333333001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660100.50.66666666666666660.20.60.66666666666666660.2
142017-06-09CONIFA European Football CupNorthern CyprusKyreniaPadania0Abkhazia01012.50.1250.00.00.83333333333333340.0OFC1.00.56250.00.00.875001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660100.50.66666666666666660.20.50.33333333333333330.4
152017-06-10CONIFA European Football CupNorthern CyprusKyreniaSzékely Land3Abkhazia11001.00.00.00.00.00.0OFC0.03.00.00.00.0001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666661000.28571428571428570.33333333333333330.20.50.33333333333333330.6
162018-05-31CONIFA World Football CupEnglandEnfieldTibet0Abkhazia32000.250.00.00.00.00.0OFC0.05.50.00.00.0001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.00.00.00.50.00.6
172018-06-03CONIFA World Football CupEnglandEnfieldNorthern Cyprus2Abkhazia22012.26666666666666660.066666666666666670.00.00.40.0OFC0.81.20.00.00.5333333333333333001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660100.60.66666666666666660.40.60.33333333333333330.4
182018-06-05CONIFA World Football CupEnglandAveleyTamil Eelam0Abkhazia62001.00.00.00.00.166666666666666660.0OFC0.04.1666666666666670.00.00.16666666666666666001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.22222222222222220.33333333333333330.00.50.33333333333333330.6
192019-06-03CONIFA European Football CupAzerbaijanMartakertSápmi0Abkhazia11014.3571428571428570.142857142857142850.00.00.50.0OFC0.3751.71428571428571420.00.00.42857142857142855001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660010.30.66666666666666660.00.50.66666666666666660.4
202019-06-04CONIFA European Football CupAzerbaijanMartuniArtsakh1Abkhazia11013.00.00.00.00.00.0OFC1.00.00.00.01.0001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660101.01.00.00.50.66666666666666660.2

The teams’ performance in the last same tournament

# TEAM 1

# Victory 10 previous games
all_matchs.rolling(
    func = "avg",
    window = (-10, -1),
    columns = "victory_team1",
    by = ["team1", "tournament"],
    order_by = ["date"],
    name = "avg_victory_same_tournament_team1_1_10",
)
# Victory 3 previous games
all_matchs.rolling(
    func = "avg",
    window = (-3, -1),
    columns = "victory_team1",
    by = ["team1", "tournament"],
    order_by = ["date"],
    name = "avg_victory_same_tournament_team1_1_3",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team1", "tournament"],
    order_by = ["date"],
    name = "avg_draw_same_tournament_team1_1_5",
)

# TEAM 2

# Victory 10 previous games
all_matchs.rolling(
    func = "avg",
    window = (-10, -1),
    columns = "victory_team2",
    by = ["team2", "tournament"],
    order_by = ["date"],
    name = "avg_victory_same_tournament_team2_1_10",
)
# Victory 3 previous games
all_matchs.rolling(
    func = "avg",
    window = (-3, -1),
    columns = "victory_team2",
    by = ["team2", "tournament"],
    order_by = ["date"],
    name = "avg_victory_same_tournament_team2_1_3",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team2", "tournament"],
    order_by = ["date"],
    name = "avg_draw_same_tournament_team2_1_5",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
Number_Games_World_Tournament_2
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_2
Double
99%
123
Percent_Victory_Away_2
Double
99%
123
Percent_Victory_Continental_Tournament_2
Double
99%
Abc
confederation_2
Varchar(8)
99%
123
Percent_Victory_Home_2
Double
99%
123
Avg_goals_conceded_2
Double
99%
123
Number_Games_Continental_Tournament_2
Decimal(28,7)
99%
123
nb_Continental_Cup_2
Decimal(27,6)
99%
123
Percent_Victory_2
Double
99%
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Double
97%
123
avg_victory_same_tournament_team1_1_3
Double
97%
123
avg_draw_same_tournament_team1_1_5
Double
97%
123
avg_victory_same_tournament_team2_1_10
Double
97%
123
avg_victory_same_tournament_team2_1_3
Double
97%
123
avg_draw_same_tournament_team2_1_5
Double
97%
11963-06-29UEFA Euro qualificationDenmarkCopenhagenDenmark4Albania01041.777629826897470.203728362183754980.13868610.52631578947368420.34666666666666670.4233576642335766UEFA0.55254237288135591.42876165113182420.41265060.10.446071904127829540...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.60.00.40.30.33333333333333330.20.50.66666666666666660.25[null][null][null]
21963-10-30UEFA Euro qualificationAlbaniaTiranaDenmark0Albania12041.777629826897470.203728362183754980.13868610.52631578947368420.34666666666666670.4233576642335766UEFA0.55254237288135591.42876165113182420.41265060.10.446071904127829540...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260260010.50.66666666666666660.40.30.00.20.61.00.20.00.00.0
31967-04-08UEFA Euro qualificationGermanyDortmundGermany6Albania01452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.71.00.20.10.00.20.28571428571428570.33333333333333330.40.50.50.0
41967-05-14UEFA Euro qualificationAlbaniaTiranaSerbia2Albania02041.81601123595505620.219101123595505630.31386860.39534883720930230.38150289017341040.5454545454545454UEFA0.54450261780104711.37921348314606740.39759040.00.456460674157303350...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.40.33333333333333330.00.10.00.20.55555555555555560.33333333333333330.20.33333333333333330.33333333333333330.0
51967-11-12UEFA Euro qualificationYugoslaviaBelgradeSerbia4Albania01041.81601123595505620.219101123595505630.31386860.39534883720930230.38150289017341040.5454545454545454UEFA0.54450261780104711.37921348314606740.39759040.00.456460674157303350...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.50.66666666666666660.00.10.00.20.50.66666666666666660.20.250.33333333333333330.0
61967-12-17UEFA Euro qualificationAlbaniaTiranaGermany0Albania02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260260100.50.66666666666666660.00.10.00.20.51.00.00.20.00.0
71970-10-14UEFA Euro qualificationPolandChorzówPoland3Albania01041.68441558441558440.25194805194805190.22627740.48387096774193550.3521126760563380.4642857142857143UEFA0.51.370129870129870.33734940.00.425974025974025950...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.60.66666666666666660.00.00.00.40.30.66666666666666660.20.166666666666666660.00.2
81970-12-13UEFA Euro qualificationTurkeyIstanbulTurkey2Albania11041.33205374280230320.23800383877159310.10948910.46666666666666670.33802816901408450.35384615384615387UEFA0.45398773006134971.42802303262955840.39156630.00.3819577735124760...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.50.33333333333333330.40.00.00.20.20.00.40.142857142857142850.00.2
91971-02-17UEFA Euro qualificationAlbaniaTiranaGermany1Albania02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.60.66666666666666660.20.00.00.20.50.66666666666666660.40.1250.00.2
101971-05-12UEFA Euro qualificationAlbaniaTiranaPoland1Albania12041.68441558441558440.25194805194805190.22627740.48387096774193550.3521126760563380.4642857142857143UEFA0.51.370129870129870.33734940.00.425974025974025950...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260260100.70.66666666666666660.20.00.00.20.40.66666666666666660.20.11111111111111110.00.2
111971-06-12UEFA Euro qualificationGermanyKarlsruheGermany2Albania01452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.60.66666666666666660.20.00.00.40.70.66666666666666660.00.10.00.4
121971-11-14UEFA Euro qualificationAlbaniaTiranaTurkey0Albania32041.33205374280230320.23800383877159310.10948910.46666666666666670.33802816901408450.35384615384615387UEFA0.45398773006134971.42802303262955840.39156630.00.3819577735124760...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260260010.30.00.20.00.00.20.20.33333333333333330.40.10.00.2
131982-09-22UEFA Euro qualificationAustriaViennaAustria5Albania01041.79782903663500670.21981004070556310.21167880.413793103448275860.306338028169014060.47413793103448276UEFA0.48376623376623381.59294436906377210.34939760.00.411126187245590250...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.50.00.20.20.00.00.50.66666666666666660.60.10.33333333333333330.2
141982-10-27UEFA Euro qualificationTurkeyIzmirTurkey1Albania01041.33205374280230320.23800383877159310.10948910.46666666666666670.33802816901408450.35384615384615387UEFA0.45398773006134971.42802303262955840.39156630.00.3819577735124760...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.10.00.00.20.00.00.40.66666666666666660.20.10.33333333333333330.2
151982-12-15UEFA Euro qualificationAlbaniaTiranaNorthern Ireland0Albania02031.0431177446102820.232172470978441130.09489050.230769230769230780.17213114754098360.30327868852459017UEFA0.290178571428571451.95356550580431180.36746990.00.243781094527363180...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260260100.20.33333333333333330.20.10.00.00.50.66666666666666660.00.10.33333333333333330.2
161983-03-30UEFA Euro qualificationAlbaniaTiranaGermany2Albania12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.50.66666666666666660.00.00.00.20.50.00.00.10.00.2
171983-04-27UEFA Euro qualificationNorthern IrelandBelfastNorthern Ireland1Albania01031.0431177446102820.232172470978441130.09489050.230769230769230780.17213114754098360.30327868852459017UEFA0.290178571428571451.95356550580431180.36746990.00.243781094527363180...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.30.66666666666666660.20.00.00.20.50.66666666666666660.20.10.00.2
181983-05-11UEFA Euro qualificationAlbaniaTiranaTurkey1Albania12041.33205374280230320.23800383877159310.10948910.46666666666666670.33802816901408450.35384615384615387UEFA0.45398773006134971.42802303262955840.39156630.00.3819577735124760...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260260100.10.00.20.00.00.20.40.00.00.10.00.2
191983-06-08UEFA Euro qualificationAlbaniaTiranaAustria2Albania12041.79782903663500670.21981004070556310.21167880.413793103448275860.306338028169014060.47413793103448276UEFA0.48376623376623381.59294436906377210.34939760.00.411126187245590250...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.50.33333333333333330.40.00.00.40.50.66666666666666660.20.10.00.4
201983-11-20UEFA Euro qualificationGermanySaarbrückenGermany2Albania11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.00.00.173076923076923070.14893617021276595UEFA0.404255319148936141.5958904109589040.28313250.00.239726027397260261000.50.66666666666666660.00.00.00.40.60.66666666666666660.00.10.00.4

Direct Confrontation

# Victory 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "victory_team1",
    by = ["team1", "team2"],
    order_by = ["date"],
    name = "avg_victory_direct_team1_1_5",
)
# Victory 3 previous games
all_matchs.rolling(
    func = "avg",
    window = (-3, -1),
    columns = "victory_team1",
    by = ["team1", "team2"],
    order_by = ["date"],
    name = "avg_victory_direct_team1_1_3",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team1", "team2"],
    order_by = ["date"],
    name = "avg_draw_direct_team1_1_5",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
Percent_Victory_Continental_Tournament_2
Double
99%
Abc
confederation_2
Varchar(8)
99%
123
Percent_Victory_Home_2
Double
99%
123
Avg_goals_conceded_2
Double
99%
123
Number_Games_Continental_Tournament_2
Decimal(28,7)
99%
123
nb_Continental_Cup_2
Decimal(27,6)
99%
123
Percent_Victory_2
Double
99%
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Double
97%
123
avg_victory_same_tournament_team1_1_3
Double
97%
123
avg_draw_same_tournament_team1_1_5
Double
97%
123
avg_victory_same_tournament_team2_1_10
Double
97%
123
avg_victory_same_tournament_team2_1_3
Double
97%
123
avg_draw_same_tournament_team2_1_5
Double
97%
123
avg_victory_direct_team1_1_5
Double
84%
123
avg_victory_direct_team1_1_3
Double
84%
123
avg_draw_direct_team1_1_5
Double
84%
12014-06-01CONIFA World Football CupSwedenÖstersundAbkhazia1Occitania11001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660...0.0OFC0.01.83333333333333330.00.00.250100.00.00.00.1250.33333333333333330.0[null][null][null][null][null][null][null][null][null]
22014-06-07CONIFA World Football CupSwedenÖstersundAbkhazia0Occitania11001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660...0.0OFC0.01.83333333333333330.00.00.250010.20.33333333333333330.60.20.33333333333333330.40.250.33333333333333330.750.33333333333333330.33333333333333330.66666666666666660.00.01.0
32018-05-31CONIFA World Football CupEnglandEnfieldAbkhazia3Tibet01001.00.50.00.00.166666666666666660.0OFC0.01.50.00.00.166666666666666660...0.0OFC0.05.50.00.00.01000.50.00.60.00.00.00.50.66666666666666660.2[null][null][null][null][null][null]
42015-06-16FIFA World Cup qualificationCambodiaPhnom PenhAfghanistan1Cambodia02021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.1AFC0.3913043478260872.65573770491803260.09036140.00.196721311475409831000.20.33333333333333330.40.40.33333333333333330.40.00.00.20.20.33333333333333330.2[null][null][null]
52015-11-12FIFA World Cup qualificationIranTeheranAfghanistan3Cambodia01021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.1AFC0.3913043478260872.65573770491803260.09036140.00.196721311475409831000.20.00.00.30.33333333333333330.00.10.00.00.20.00.01.01.00.0
62017-06-13AFC Asian Cup qualificationCambodiaPhnom PenhAfghanistan0Cambodia12021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.1AFC0.3913043478260872.65573770491803260.09036140.00.196721311475409830010.40.66666666666666660.40.20.00.00.10.33333333333333330.40.30.33333333333333330.01.01.00.0
72018-03-27AFC Asian Cup qualificationTajikistanDushanbeAfghanistan2Cambodia11021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.1AFC0.3913043478260872.65573770491803260.09036140.00.196721311475409831000.20.00.40.20.33333333333333330.00.10.00.60.20.00.00.66666666666666660.66666666666666660.0
81984-09-12AFC Asian Cup qualificationChina PRGuangzhouAfghanistan0China PR62021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.5510204081632653AFC0.57961783439490441.08775137111517360.44277110.00.488117001828153540010.10.00.20.40.33333333333333330.00.00.00.20.750.66666666666666660.0[null][null][null]
92013-03-06AFC Challenge Cup qualificationLaosVientianeAfghanistan1Laos12021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.08AFC0.428571428571428553.35877862595419830.07530120.00.1832061068702290100.50.66666666666666660.00.20.33333333333333330.20.66666666666666660.66666666666666660.00.33333333333333330.33333333333333330.6666666666666666[null][null][null]
102014-05-24AFC Challenge CupMaldivesAddu CityAfghanistan0Laos01021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.08AFC0.428571428571428553.35877862595419830.07530120.00.1832061068702290100.60.33333333333333330.40.10.00.20.142857142857142850.33333333333333330.20.00.00.00.00.01.0
112015-05-29FriendlyLaosVientianeAfghanistan2Laos02021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.08AFC0.428571428571428553.35877862595419830.07530120.00.1832061068702291000.30.00.40.30.00.00.20.33333333333333330.20.11111111111111110.00.00.00.01.0
122005-12-07SAFF CupPakistanKarachiAfghanistan1Maldives92021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.2AFC0.366666666666666642.2348484848484850.09036140.00.28030303030303030010.10.00.00.10.33333333333333330.20.00.00.00.50.66666666666666660.2[null][null][null]
132009-12-07SAFF CupBangladeshDhakaAfghanistan1Maldives32021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.2AFC0.366666666666666642.2348484848484850.09036140.00.28030303030303030010.10.00.20.60.66666666666666660.40.11111111111111110.00.40.60.66666666666666660.20.00.00.0
142013-09-06SAFF CupNepalKathmanduAfghanistan0Maldives01021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.2AFC0.366666666666666642.2348484848484850.09036140.00.28030303030303030100.71.00.20.61.00.20.50.66666666666666660.00.60.66666666666666660.20.00.00.0
152014-05-29AFC Challenge CupMaldivesMaléAfghanistan1Maldives12021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.2AFC0.366666666666666642.2348484848484850.09036140.00.28030303030303030100.40.33333333333333330.40.30.33333333333333330.20.11111111111111110.33333333333333330.40.28571428571428570.33333333333333330.20.00.00.3333333333333333
162015-12-28SAFF CupIndiaThiruvananthapuramAfghanistan4Maldives11021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.2AFC0.366666666666666642.2348484848484850.09036140.00.28030303030303031000.41.00.00.30.66666666666666660.00.81.00.20.50.66666666666666660.20.00.00.5
172017-06-06FriendlyUnited Arab EmiratesDubaiAfghanistan2Maldives11021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.2AFC0.366666666666666642.2348484848484850.09036140.00.28030303030303031000.40.33333333333333330.40.40.33333333333333330.20.30.33333333333333330.20.30.66666666666666660.00.20.33333333333333330.4
182013-03-04AFC Challenge Cup qualificationLaosVientianeAfghanistan1Mongolia02021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.21428571428571427OFC1.03.22222222222222230.04216870.00.266666666666666661000.50.66666666666666660.00.50.33333333333333330.20.6250.66666666666666660.00.40.33333333333333330.2[null][null][null]
191975-04-06AFC Asian Cup qualificationIraqBaghdadAfghanistan1Qatar22021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.41044776119402987AFC0.49367088607594941.18297872340425530.40361450.00.40212765957446810010.00.00.00.10.00.20.00.00.00.00.00.0[null][null][null]
201975-04-12AFC Asian Cup qualificationIraqBaghdadAfghanistan1Qatar12021.07954545454545460.204545454545454560.00.00.295774647887323940.16666666666666666AFC0.42.05681818181818170.03614460.00.28409090909090910...0.41044776119402987AFC0.49367088607594941.18297872340425530.40361450.00.40212765957446810100.00.00.00.20.33333333333333330.20.00.00.00.250.33333333333333330.00.00.00.0

Games against an opponents with the same rank

# TEAM 1

# Victory 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "victory_team1",
    by = ["team1", "fifa_rank_2"],
    order_by = ["date"],
    name = "avg_victory_rank2_team1_1_5",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team1", "fifa_rank_2"],
    order_by = ["date"],
    name = "avg_draw_rank2_team1_1_5",
)

# TEAM 2

# Victory 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "victory_team2",
    by = ["team2", "fifa_rank_1"],
    order_by = ["date"],
    name = "avg_victory_rank1_team2_1_5",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["team2", "fifa_rank_1"],
    order_by = ["date"],
    name = "avg_draw_rank1_team2_1_5",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
Number_Games_Continental_Tournament_2
Decimal(28,7)
99%
123
nb_Continental_Cup_2
Decimal(27,6)
99%
123
Percent_Victory_2
Double
99%
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Double
97%
123
avg_victory_same_tournament_team1_1_3
Double
97%
123
avg_draw_same_tournament_team1_1_5
Double
97%
123
avg_victory_same_tournament_team2_1_10
Double
97%
123
avg_victory_same_tournament_team2_1_3
Double
97%
123
avg_draw_same_tournament_team2_1_5
Double
97%
123
avg_victory_direct_team1_1_5
Double
84%
123
avg_victory_direct_team1_1_3
Double
84%
123
avg_draw_direct_team1_1_5
Double
84%
123
avg_victory_rank2_team1_1_5
Double
98%
123
avg_draw_rank2_team1_1_5
Double
98%
123
avg_victory_rank1_team2_1_5
Double
98%
123
avg_draw_rank1_team2_1_5
Double
98%
11998-06-03FriendlyFranceSaint-OuenBrazil3Andorra02452.1937567276641550.200215285252960171.00.67883211678832110.593750.5770609318996416CONMEBOL0.73333333333333330.937567276641550.84036140.90.6350914962325080...0.1265060.00.0229007633587786261000.60.66666666666666660.00.00.00.00.80.66666666666666660.00.00.00.0[null][null][null][null][null][null][null]
21998-10-14UEFA Euro qualificationFranceSaint-DenisFrance2Andorra01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.1265060.00.0229007633587786261000.70.33333333333333330.40.00.00.20.50.66666666666666660.20.00.00.0[null][null][null]1.00.00.00.0
31999-06-09UEFA Euro qualificationSpainBarcelonaFrance1Andorra02151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.1265060.00.0229007633587786261000.60.33333333333333330.20.00.00.00.60.33333333333333330.20.00.00.01.01.00.01.00.00.00.0
42004-05-28FriendlyFranceMontpellierFrance4Andorra01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.1265060.00.0229007633587786261000.80.33333333333333330.40.00.00.20.60.33333333333333330.40.20.00.21.01.00.01.00.00.00.0
52004-06-05FriendlySpainGetafeSpain4Andorra01151.96744186046511630.22480620155038760.50364960.52173913043478260.465686274509803930.6223776223776224UEFA0.67685589519650660.90852713178294580.43072290.30.58139534883720930...0.1265060.00.0229007633587786261000.70.66666666666666660.20.00.00.20.70.66666666666666660.20.20.00.2[null][null][null]1.00.00.00.0
62006-09-02UEFA Euro qualificationEnglandManchesterEngland5Andorra01152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.1265060.00.0229007633587786261000.80.66666666666666660.40.00.00.20.70.66666666666666660.20.00.00.0[null][null][null]1.00.00.00.0
72007-03-28UEFA Euro qualificationSpainBarcelonaEngland3Andorra02152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.1265060.00.0229007633587786261000.40.00.60.00.00.20.60.00.40.00.00.01.01.00.01.00.00.00.0
82008-09-06FIFA World Cup qualificationSpainBarcelonaEngland2Andorra02152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.1265060.00.0229007633587786261000.60.66666666666666660.20.00.00.00.80.66666666666666660.00.00.00.21.01.00.01.00.00.00.0
92009-06-10FIFA World Cup qualificationEnglandLondonEngland6Andorra01152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.1265060.00.0229007633587786261000.81.00.00.00.00.00.91.00.00.00.00.01.01.00.01.00.00.00.0
102019-06-11UEFA Euro qualificationAndorraAndorra la VellaFrance4Andorra02151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.1265060.00.0229007633587786261000.60.66666666666666660.00.00.00.40.60.66666666666666660.20.00.00.01.01.00.00.80.20.00.0
112019-09-10UEFA Euro qualificationFranceParisFrance3Andorra01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.1265060.00.0229007633587786261000.70.66666666666666660.00.00.00.00.60.66666666666666660.00.00.00.01.01.00.00.80.20.00.0
121991-05-16CFU Caribbean Cup qualificationSaint LuciaCastriesSaint Lucia6Anguilla01021.47311827956989250.139784946236559130.00.00.3084112149532710.2727272727272727OFC0.403508771929824541.96236559139784950.06626510.00.33333333333333330...0.02710840.00.06251000.30.66666666666666660.20.00.00.50.33333333333333330.66666666666666660.20.00.01.0[null][null][null][null][null][null][null]
131993-04-04CFU Caribbean Cup qualificationAnguillaThe ValleyAntigua and Barbuda4Anguilla02021.39548022598870050.209039548022598860.00.00.233333333333333340.2777777777777778OFC0.470588235294117641.70056497175141240.10843370.00.31073446327683620...0.02710840.00.06251000.30.00.20.00.00.20.50.66666666666666660.20.00.00.25[null][null][null]0.00.00.00.0
141994-03-04CFU Caribbean Cup qualificationSaint Vincent and the GrenadinesKingstownGuadeloupe9Anguilla01021.67123287671232880.1826484018264840.00.00.380281690140845060.3333333333333333CONCACAF0.50769230769230771.48401826484018270.03614460.00.41552511415525110...0.02710840.00.06251000.10.00.00.00.00.00.20.00.20.00.00.0[null][null][null]0.60.00.00.0
151994-03-06CFU Caribbean Cup qualificationSaint Vincent and the GrenadinesKingstownSaint Vincent and the Grenadines2Anguilla01021.76190476190476190.26984126984126980.00.00.40506329113924050.5384615384615384OFC0.52941176470588241.31746031746031740.03915660.00.45238095238095240...0.02710840.00.06251000.40.66666666666666660.20.00.00.00.40.33333333333333330.40.00.00.0[null][null][null]0.50.50.00.0
161996-03-27CFU Caribbean Cup qualificationSaint Kitts and NevisBasseterreSaint Kitts and Nevis8Anguilla01021.79738562091503270.18954248366013070.00.00.30645161290322580.34615384615384615OFC0.50769230769230771.59477124183006550.07831330.00.398692810457516370...0.02710840.00.06251000.30.00.40.00.00.00.50.00.40.00.00.0[null][null][null]0.40.40.00.0
171998-04-15CFU Caribbean Cup qualificationAntigua and BarbudaSt. John'sGrenada14Anguilla11021.78947368421052630.221052631578947360.00.00.353982300884955750.25925925925925924CONCACAF0.41.7631578947368420.08132530.00.35263157894736840...0.02710840.00.06251000.40.33333333333333330.20.00.00.00.40.66666666666666660.20.00.00.0[null][null][null]0.50.50.00.0
181998-04-19CFU Caribbean Cup qualificationAntigua and BarbudaSt. John'sGuyana14Anguilla01021.19834710743801650.20661157024793390.00.00.25641025641025640.21875CONCACAF0.38709677419354841.74793388429752070.09638550.00.301652892561983470...0.02710840.00.06251000.20.00.20.00.00.00.20.00.20.00.00.0[null][null][null]0.40.40.00.0
192000-03-05FIFA World Cup qualificationAnguillaThe ValleyBahamas3Anguilla12021.14814814814814810.148148148148148140.00.00.181818181818181820.3076923076923077OFC0.33333333333333333.33333333333333350.03915660.00.259259259259259240...0.02710840.00.06251000.142857142857142850.00.20.10.33333333333333330.0[null][null][null][null][null][null][null][null][null]0.250.250.00.0
202000-03-19FIFA World Cup qualificationBahamasNassauBahamas2Anguilla11021.14814814814814810.148148148148148140.00.00.181818181818181820.3076923076923077OFC0.33333333333333333.33333333333333350.03915660.00.259259259259259240...0.02710840.00.06251000.250.33333333333333330.00.10.33333333333333330.01.01.00.00.00.00.01.01.00.00.40.20.00.0

Games between teams with rank 1 and rank 2

# Victory 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "victory_team1",
    by = ["fifa_rank_1", "fifa_rank_2"],
    order_by = ["date"],
    name = "avg_victory_rank1_rank2_team1_1_5",
)
# Draw 5 previous games
all_matchs.rolling(
    func = "avg",
    window = (-5, -1),
    columns = "draw",
    by = ["fifa_rank_1", "fifa_rank_2"],
    order_by = ["date"],
    name = "avg_draw_rank1_rank2_team1_1_5",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
0|1
neutral
Boolean
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
Percent_Victory_2
Double
99%
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Double
97%
123
avg_victory_same_tournament_team1_1_3
Double
97%
123
avg_draw_same_tournament_team1_1_5
Double
97%
123
avg_victory_same_tournament_team2_1_10
Double
97%
123
avg_victory_same_tournament_team2_1_3
Double
97%
123
avg_draw_same_tournament_team2_1_5
Double
97%
123
avg_victory_direct_team1_1_5
Double
84%
123
avg_victory_direct_team1_1_3
Double
84%
123
avg_draw_direct_team1_1_5
Double
84%
123
avg_victory_rank2_team1_1_5
Double
98%
123
avg_draw_rank2_team1_1_5
Double
98%
123
avg_victory_rank1_team2_1_5
Double
98%
123
avg_draw_rank1_team2_1_5
Double
98%
123
avg_victory_rank1_rank2_team1_1_5
Double
99%
123
avg_draw_rank1_rank2_team1_1_5
Double
99%
11911-10-29FriendlyLuxembourgLuxembourgFrance4Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.069060773480662991000.10.00.2[null][null][null]0.10.00.2[null][null][null][null][null][null][null][null][null][null][null][null]
21913-04-20FriendlyFranceSaint-OuenFrance8Luxembourg01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.069060773480662991000.60.66666666666666660.00.00.00.00.60.66666666666666660.00.00.00.01.01.00.01.00.00.00.01.00.0
31914-02-08FriendlyLuxembourgLuxembourgFrance4Luxembourg52151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.069060773480662990010.71.00.00.00.00.00.71.00.00.00.00.01.01.00.01.00.00.00.01.00.0
41927-05-21FriendlyLuxembourgEsch-sur-AlzetteEngland5Luxembourg22152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.069060773480662991000.40.66666666666666660.40.20.33333333333333330.20.91.00.00.20.33333333333333330.2[null][null][null][null][null]0.33333333333333330.00.66666666666666660.0
51934-03-11FIFA World Cup qualificationLuxembourgLuxembourgGermany9Luxembourg12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.51.00.20.142857142857142850.00.4[null][null][null][null][null][null][null][null][null][null][null]0.250.00.750.0
61934-04-15FIFA World Cup qualificationLuxembourgLuxembourgFrance6Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.069060773480662991000.30.33333333333333330.00.1250.00.4[null][null][null]0.00.00.00.66666666666666660.66666666666666660.00.66666666666666660.00.20.00.80.0
71935-08-18FriendlyLuxembourgLuxembourgGermany1Luxembourg02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.70.33333333333333330.20.11111111111111110.00.40.70.33333333333333330.20.142857142857142850.00.41.01.00.01.00.00.20.00.80.0
81936-09-27FriendlyGermanyKrefeldGermany7Luxembourg21452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.70.33333333333333330.20.10.00.20.70.33333333333333330.20.11111111111111110.00.41.01.00.01.00.00.20.00.80.0
91937-03-21FriendlyLuxembourgLuxembourgGermany3Luxembourg22452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.40.33333333333333330.40.10.00.00.40.33333333333333330.40.10.00.21.01.00.01.00.00.00.01.00.0
101938-03-20FriendlyGermanyWuppertalGermany2Luxembourg11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.90.66666666666666660.20.00.00.00.70.33333333333333330.40.10.00.01.01.00.01.00.00.00.01.00.0
111939-03-26FriendlyLuxembourgDifferdangeGermany1Luxembourg22452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662990010.51.00.00.00.00.00.61.00.00.00.00.01.01.00.01.00.00.00.01.00.0
121951-12-23FriendlyGermanyEssenGermany4Luxembourg11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.70.66666666666666660.00.20.33333333333333330.40.70.66666666666666660.00.40.33333333333333330.40.80.66666666666666660.00.80.00.20.00.80.0
131952-04-20FriendlyLuxembourgLuxembourgGermany3Luxembourg02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.80.66666666666666660.00.20.33333333333333330.20.80.66666666666666660.00.30.33333333333333330.40.80.66666666666666660.00.80.00.20.00.80.0
141953-09-20FIFA World Cup qualificationLuxembourgLuxembourgFrance6Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.069060773480662991000.60.33333333333333330.20.20.33333333333333330.20.250.00.50.00.00.00.750.66666666666666660.00.750.00.20.00.80.0
151953-12-17FIFA World Cup qualificationFranceParisFrance8Luxembourg01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0.069060773480662991000.50.33333333333333330.00.10.00.00.57142857142857141.00.20.00.00.00.80.66666666666666660.00.80.00.20.00.80.0
161954-03-28FIFA World Cup qualificationSaarlandSaarbrückenGermany3Saarland12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.01000.30.33333333333333330.80.00.01.00.83333333333333340.66666666666666660.20.00.01.0[null][null][null]0.80.0[null][null]0.80.0
171954-06-05FriendlySaarlandSaarbrückenUruguay7Saarland12151.57568533969010740.245530393325387370.44525550.40983606557377050.30072463768115940.5060240963855421CONMEBOL0.51.2646007151370681.00.80.43027413587604290...0.01000.40.00.40.00.00.50.20.00.4[null][null][null][null][null][null][null][null]0.00.01.00.0
181957-03-10FriendlyGerman DRBerlinGermany3Luxembourg01452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0.069060773480662991000.50.66666666666666660.00.10.00.00.40.33333333333333330.00.20.33333333333333330.40.80.66666666666666660.00.80.00.20.01.00.0
191960-10-19FIFA World Cup qualificationLuxembourgLuxembourgEngland9Luxembourg02152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.069060773480662991000.30.33333333333333330.40.00.00.00.90.66666666666666660.20.00.00.01.01.00.01.00.00.00.01.00.0
201961-09-28FIFA World Cup qualificationEnglandLondonEngland4Luxembourg11152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...0.069060773480662991000.70.33333333333333330.20.00.00.00.80.33333333333333330.40.00.00.01.01.00.01.00.00.00.01.00.0

Before we use the neutral variable with our model, we should convert it to an integer.

We need also to create our response column: the outcome of the game.

all_matchs["neutral"].astype("int")
all_matchs.case_when(
    "result",
    all_matchs["team1_score"] > all_matchs["team2_score"], "1",
    all_matchs["team1_score"] < all_matchs["team2_score"], "2",
    "X",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
123
neutral
Int
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Double
97%
123
avg_victory_same_tournament_team1_1_3
Double
97%
123
avg_draw_same_tournament_team1_1_5
Double
97%
123
avg_victory_same_tournament_team2_1_10
Double
97%
123
avg_victory_same_tournament_team2_1_3
Double
97%
123
avg_draw_same_tournament_team2_1_5
Double
97%
123
avg_victory_direct_team1_1_5
Double
84%
123
avg_victory_direct_team1_1_3
Double
84%
123
avg_draw_direct_team1_1_5
Double
84%
123
avg_victory_rank2_team1_1_5
Double
98%
123
avg_draw_rank2_team1_1_5
Double
98%
123
avg_victory_rank1_team2_1_5
Double
98%
123
avg_draw_rank1_team2_1_5
Double
98%
123
avg_victory_rank1_rank2_team1_1_5
Double
99%
123
avg_draw_rank1_rank2_team1_1_5
Double
99%
Abc
result
Varchar(1)
100%
11923-11-01Friendly0FranceRennesNorway5Brittany12031.50130890052356030.227748691099476430.05839420.250.33434650455927050.3474576271186441UEFA0.39482200647249191.68455497382198960.35542170.00.35994764397905760...1000.40.33333333333333330.21.01.00.00.40.33333333333333330.21.01.00.0[null][null][null][null][null][null][null][null][null]1
21929-05-01Friendly0El SalvadorSan SalvadorEl Salvador9Nicaragua01031.22629310344827580.226293103448275860.04379560.00.20091324200913240.4166666666666667CONCACAF0.48192771084337351.48706896551724130.46987950.00.321120689655172430...1000.250.33333333333333330.25[null][null][null]0.250.33333333333333330.25[null][null][null][null][null][null][null][null][null][null]1.00.01
31937-08-22Friendly0NorwayOsloNorway1Basque Country31031.50130890052356030.227748691099476430.05839420.250.33434650455927050.3474576271186441UEFA0.39482200647249191.68455497382198960.35542170.00.35994764397905760...0010.10.00.40.70.33333333333333330.00.20.00.20.70.33333333333333330.0[null][null][null]1.00.0[null][null]1.00.02
41938-05-29Friendly0CubaHavanaCuba0Basque Country41031.32051282051282050.250.02189780.33333333333333330.37288135593220340.25CONCACAF0.451.4391025641025640.27710840.00.346153846153846150...0010.33333333333333330.00.20.70.66666666666666660.0[null][null][null]0.70.66666666666666660.0[null][null][null][null][null]1.00.00.66666666666666660.02
51938-06-20Friendly0CubaHavanaCuba3Basque Country41031.32051282051282050.250.02189780.33333333333333330.37288135593220340.25CONCACAF0.451.4391025641025640.27710840.00.346153846153846150...0010.30.33333333333333330.20.70.66666666666666660.00.00.00.00.70.66666666666666660.00.00.00.00.00.01.00.00.50.02
61941-05-13CCCF Championship1Costa RicaSan JoséEl Salvador8Nicaragua01031.22629310344827580.226293103448275860.04379560.00.20091324200913240.4166666666666667CONCACAF0.48192771084337351.48706896551724130.46987950.00.321120689655172430...1000.428571428571428550.66666666666666660.40.00.00.00.00.01.00.00.00.01.01.00.01.00.00.00.00.40.01
71943-12-07CCCF Championship0El SalvadorSan SalvadorEl Salvador8Nicaragua11031.22629310344827580.226293103448275860.04379560.00.20091324200913240.4166666666666667CONCACAF0.48192771084337351.48706896551724130.46987950.00.321120689655172430...1000.50.33333333333333330.40.00.00.00.40.33333333333333330.40.00.00.01.01.00.01.00.00.00.00.40.01
81943-12-09CCCF Championship1El SalvadorSan SalvadorGuatemala6Nicaragua21031.32938388625592420.258293838862559240.00.00.28571428571428570.33093525179856115CONCACAF0.468085106382978731.36966824644549770.41867470.00.34123222748815170...1000.22222222222222220.33333333333333330.40.00.00.00.50.50.50.00.00.0[null][null][null][null][null]0.00.00.40.01
91943-12-16CCCF Championship0El SalvadorSan SalvadorEl Salvador10Nicaragua11031.22629310344827580.226293103448275860.04379560.00.20091324200913240.4166666666666667CONCACAF0.48192771084337351.48706896551724130.46987950.00.321120689655172430...1000.71.00.20.00.00.00.6251.00.20.00.00.01.01.00.01.00.00.00.00.60.01
101943-12-19CCCF Championship1El SalvadorSan SalvadorGuatemala5Nicaragua12031.32938388625592420.258293838862559240.00.00.28571428571428570.33093525179856115CONCACAF0.468085106382978731.36966824644549770.41867470.00.34123222748815170...1000.40.66666666666666660.20.00.00.00.60.66666666666666660.20.00.00.01.01.00.01.00.00.00.00.80.01
111946-02-28CCCF Championship1Costa RicaSan JoséEl Salvador7Nicaragua21031.22629310344827580.226293103448275860.04379560.00.20091324200913240.4166666666666667CONCACAF0.48192771084337351.48706896551724130.46987950.00.321120689655172430...1000.60.33333333333333330.00.00.00.00.60.33333333333333330.00.00.00.01.01.00.01.00.00.00.01.00.01
121946-03-07CCCF Championship1Costa RicaSan JoséGuatemala7Nicaragua01031.32938388625592420.258293838862559240.00.00.28571428571428570.33093525179856115CONCACAF0.468085106382978731.36966824644549770.41867470.00.34123222748815170...1000.50.66666666666666660.00.00.00.00.6250.66666666666666660.00.00.00.01.01.00.01.00.00.00.01.00.01
131946-03-13CCCF Championship1Costa RicaSan JoséHonduras10Nicaragua01031.49148936170212760.261702127659574460.06569340.00.33160621761658030.44CONMEBOL0.54838709677419351.22340425531914890.52710840.00.40851063829787230...1000.250.33333333333333330.00.10.33333333333333330.00.250.33333333333333330.00.10.33333333333333330.0[null][null][null][null][null]0.00.01.00.01
141949-05-09Friendly1SurinameParmariboCuba0Martinique01031.32051282051282050.250.02189780.33333333333333330.37288135593220340.25CONCACAF0.451.4391025641025640.27710840.00.346153846153846150...0100.50.00.40.70.66666666666666660.00.40.00.40.70.66666666666666660.0[null][null][null]0.00.0[null][null]1.00.0X
151949-07-01Friendly0MartiniqueFort-de-FranceTrinidad and Tobago0Martinique22031.7399678972712680.21027287319422150.02189780.00.37634408602150540.3793103448275862CONCACAF0.62244897959183681.2744783306581060.4367470.00.452648475120385250...0010.61.00.00.60.33333333333333330.20.61.00.00.60.33333333333333330.2[null][null][null][null][null]0.01.00.80.22
161952-08-24Friendly0PolandChorzówChina PR1Silesia52031.83729433272394880.2266910420475320.02189780.00.39583333333333330.5510204081632653AFC0.57961783439490441.08775137111517360.44277110.00.488117001828153540...0010.50.33333333333333330.00.33333333333333330.33333333333333330.00.50.33333333333333330.00.33333333333333330.33333333333333330.0[null][null][null][null][null][null][null]0.60.22
171953-03-08CCCF Championship1Costa RicaSan JoséHonduras2Nicaragua11031.49148936170212760.261702127659574460.06569340.00.33160621761658030.44CONMEBOL0.54838709677419351.22340425531914890.52710840.00.40851063829787230...1000.33333333333333330.33333333333333330.00.10.00.00.40.33333333333333330.00.10.00.01.01.00.01.00.00.00.00.40.21
181953-03-10CCCF Championship1Costa RicaSan JoséEl Salvador4Nicaragua11031.22629310344827580.226293103448275860.04379560.00.20091324200913240.4166666666666667CONCACAF0.48192771084337351.48706896551724130.46987950.00.321120689655172430...1000.50.66666666666666660.00.10.00.00.20.00.20.10.00.01.01.00.01.00.00.00.00.40.21
191953-03-19CCCF Championship1Costa RicaSan JoséGuatemala1Nicaragua01031.32938388625592420.258293838862559240.00.00.28571428571428570.33093525179856115CONCACAF0.468085106382978731.36966824644549770.41867470.00.34123222748815170...1000.30.66666666666666660.40.10.33333333333333330.00.40.66666666666666660.40.10.33333333333333330.01.01.00.01.00.00.00.00.40.21
201956-09-12AFC Asian Cup1Hong KongSo Kon PoIsrael2Vietnam Republic11031.45477386934673360.251256281407035150.02189780.00.303278688524590170.3548387096774194UEFA0.389261744966442951.45226130653266330.3734940.10.34924623115577890...1000.20.66666666666666660.20.33333333333333330.33333333333333330.66666666666666660.50.50.00.00.01.0[null][null][null][null][null][null][null]0.60.01

We have some missing values here. This might be because the two teams never played together, the competition was one or both teams’ first, etc.

all_matchs.count()
count
"date"82818.0
"tournament"82818.0
"neutral"82818.0
"country"82818.0
"city"82818.0
"team1"82818.0
"team1_score"82818.0
"team2"82818.0
"team2_score"82818.0
"match_sample"82818.0
"nb_World_Cup_1"82765.0
"fifa_rank_1"82765.0
"Avg_goals_1"82765.0
"Percent_Draw_1"82765.0
"Number_Games_World_Tournament_1"82765.0
"Percent_Victory_World_Tournament_1"82765.0
"Percent_Victory_Away_1"82765.0
"Percent_Victory_Continental_Tournament_1"82765.0
"confederation_1"82765.0
"Percent_Victory_Home_1"82765.0
"Avg_goals_conceded_1"82765.0
"Number_Games_Continental_Tournament_1"82765.0
"nb_Continental_Cup_1"82765.0
"Percent_Victory_1"82765.0
"nb_World_Cup_2"82765.0
"fifa_rank_2"82765.0
"Avg_goals_2"82765.0
"Percent_Draw_2"82765.0
"Number_Games_World_Tournament_2"82765.0
"Percent_Victory_World_Tournament_2"82765.0
"Percent_Victory_Away_2"82765.0
"Percent_Victory_Continental_Tournament_2"82765.0
"confederation_2"82765.0
"Percent_Victory_Home_2"82765.0
"Avg_goals_conceded_2"82765.0
"Number_Games_Continental_Tournament_2"82765.0
"nb_Continental_Cup_2"82765.0
"Percent_Victory_2"82765.0
"victory_team1"82818.0
"draw"82818.0
"victory_team2"82818.0
"avg_victory_team1_1_10"82539.0
"avg_victory_team1_1_3"82539.0
"avg_draw_team1_1_5"82539.0
"avg_victory_team2_1_10"82539.0
"avg_victory_team2_1_3"82539.0
"avg_draw_team2_1_5"82539.0
"avg_victory_same_tournament_team1_1_10"80706.0
"avg_victory_same_tournament_team1_1_3"80706.0
"avg_draw_same_tournament_team1_1_5"80706.0
"avg_victory_same_tournament_team2_1_10"80706.0
"avg_victory_same_tournament_team2_1_3"80706.0
"avg_draw_same_tournament_team2_1_5"80706.0
"avg_victory_direct_team1_1_5"69759.0
"avg_victory_direct_team1_1_3"69759.0
"avg_draw_direct_team1_1_5"69759.0
"avg_victory_rank2_team1_1_5"81440.0
"avg_draw_rank2_team1_1_5"81440.0
"avg_victory_rank1_team2_1_5"81440.0
"avg_draw_rank1_team2_1_5"81440.0
"avg_victory_rank1_rank2_team1_1_5"82771.0
"avg_draw_rank1_rank2_team1_1_5"82771.0
"result"82818.0

We need to impute these missing values.

all_matchs["avg_victory_direct_team1_1_5"] = fun.coalesce(
    all_matchs["avg_victory_direct_team1_1_5"],
    all_matchs["avg_victory_rank2_team1_1_5"],
    all_matchs["avg_victory_rank1_rank2_team1_1_5"],
)
all_matchs["avg_victory_direct_team1_1_3"] = fun.coalesce(
    all_matchs["avg_victory_direct_team1_1_3"],
    all_matchs["avg_victory_rank2_team1_1_5"],
    all_matchs["avg_victory_rank1_rank2_team1_1_5"],
)
all_matchs["avg_draw_direct_team1_1_5"] = fun.coalesce(
    all_matchs["avg_draw_direct_team1_1_5"],
    all_matchs["avg_draw_rank2_team1_1_5"],
    all_matchs["avg_draw_rank1_rank2_team1_1_5"],
)
all_matchs["avg_victory_same_tournament_team1_1_10"].fillna(expr = "avg_victory_team1_1_10")
all_matchs["avg_victory_same_tournament_team1_1_3"].fillna(expr = "avg_victory_team1_1_3")
all_matchs["avg_draw_same_tournament_team1_1_5"].fillna(expr = "avg_draw_team1_1_5")
all_matchs["avg_victory_same_tournament_team2_1_10"].fillna(expr = "avg_victory_team2_1_10")
all_matchs["avg_victory_same_tournament_team2_1_3"].fillna(expr = "avg_victory_team2_1_3")
all_matchs["avg_draw_same_tournament_team2_1_5"].fillna(expr = "avg_draw_team2_1_5")
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
123
neutral
Int
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Real
99%
123
avg_victory_same_tournament_team1_1_3
Real
100%
123
avg_draw_same_tournament_team1_1_5
Real
99%
123
avg_victory_same_tournament_team2_1_10
Real
99%
123
avg_victory_same_tournament_team2_1_3
Real
100%
123
avg_draw_same_tournament_team2_1_5
Real
99%
123
avg_victory_direct_team1_1_5
Double
99%
123
avg_victory_direct_team1_1_3
Double
99%
123
avg_draw_direct_team1_1_5
Double
99%
123
avg_victory_rank2_team1_1_5
Double
98%
123
avg_draw_rank2_team1_1_5
Double
98%
123
avg_victory_rank1_team2_1_5
Double
98%
123
avg_draw_rank1_team2_1_5
Double
98%
123
avg_victory_rank1_rank2_team1_1_5
Double
99%
123
avg_draw_rank1_rank2_team1_1_5
Double
99%
Abc
result
Varchar(1)
100%
11911-10-29Friendly0LuxembourgLuxembourgFrance4Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.10.00.2[null][null][null]0.10.00.2[null]0.3333333333333333[null][null][null][null][null][null][null][null][null][null]1
21913-04-20Friendly0FranceSaint-OuenFrance8Luxembourg01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.60.66666666666666660.00.00.00.00.60.66666666666666660.00.00.00.01.01.00.01.00.00.00.01.00.01
31914-02-08Friendly0LuxembourgLuxembourgFrance4Luxembourg52151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0010.71.00.00.00.00.00.71.00.00.00.00.01.01.00.01.00.00.00.01.00.02
41927-05-21Friendly0LuxembourgEsch-sur-AlzetteEngland5Luxembourg22152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...1000.40.66666666666666660.40.20.33333333333333330.20.91.00.00.20.33333333333333330.20.66666666666666660.66666666666666660.0[null][null]0.33333333333333330.00.66666666666666660.01
51934-03-11FIFA World Cup qualification0LuxembourgLuxembourgGermany9Luxembourg12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.51.00.20.142857142857142850.00.40.50.33333333333333330.20.142857142857142850.33333333333333330.40.750.750.0[null][null]0.250.00.750.01
61934-04-15FIFA World Cup qualification0LuxembourgLuxembourgFrance6Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.30.33333333333333330.00.1250.00.40.30.33333333333333330.00.00.00.00.66666666666666660.66666666666666660.00.66666666666666660.00.20.00.80.01
71935-08-18Friendly0LuxembourgLuxembourgGermany1Luxembourg02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.70.33333333333333330.20.11111111111111110.00.40.70.33333333333333330.20.142857142857142850.00.41.01.00.01.00.00.20.00.80.01
81936-09-27Friendly0GermanyKrefeldGermany7Luxembourg21452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.70.33333333333333330.20.10.00.20.70.33333333333333330.20.11111111111111110.00.41.01.00.01.00.00.20.00.80.01
91937-03-21Friendly0LuxembourgLuxembourgGermany3Luxembourg22452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.40.00.40.10.00.00.40.33333333333333330.40.10.00.21.01.00.01.00.00.00.01.00.01
101938-03-20Friendly0GermanyWuppertalGermany2Luxembourg11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.90.66666666666666660.20.00.00.00.70.33333333333333330.40.10.00.01.01.00.01.00.00.00.01.00.01
111939-03-26Friendly0LuxembourgDifferdangeGermany1Luxembourg22452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0010.51.00.00.00.00.00.50.66666666666666660.00.00.00.01.01.00.01.00.00.00.01.00.02
121951-12-23Friendly0GermanyEssenGermany4Luxembourg11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.70.66666666666666660.00.20.33333333333333330.40.70.66666666666666660.00.40.33333333333333330.40.80.66666666666666660.00.80.00.20.00.80.01
131952-04-20Friendly0LuxembourgLuxembourgGermany3Luxembourg02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.80.66666666666666660.00.20.33333333333333330.20.80.66666666666666660.00.30.33333333333333330.40.80.66666666666666660.00.80.00.20.00.80.01
141953-09-20FIFA World Cup qualification0LuxembourgLuxembourgFrance6Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.60.33333333333333330.20.20.33333333333333330.20.250.00.50.00.00.00.750.66666666666666660.00.750.00.20.00.80.01
151953-12-17FIFA World Cup qualification0FranceParisFrance8Luxembourg01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.50.33333333333333330.00.10.00.00.57142857142857141.00.20.00.00.00.80.66666666666666660.00.80.00.20.00.80.01
161954-03-28FIFA World Cup qualification0SaarlandSaarbrückenGermany3Saarland12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.30.33333333333333330.80.00.01.00.83333333333333340.66666666666666660.20.00.01.00.80.80.00.80.0[null][null]0.80.01
171954-06-05Friendly0SaarlandSaarbrückenUruguay7Saarland12151.57568533969010740.245530393325387370.44525550.40983606557377050.30072463768115940.5060240963855421CONMEBOL0.51.2646007151370681.00.80.43027413587604290...1000.40.00.40.00.00.50.20.00.40.00.33333333333333330.51.01.00.0[null][null]0.00.01.00.01
181957-03-10Friendly0German DRBerlinGermany3Luxembourg01452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.50.66666666666666660.00.10.00.00.50.66666666666666660.00.20.33333333333333330.40.80.66666666666666660.00.80.00.20.01.00.01
191960-10-19FIFA World Cup qualification0LuxembourgLuxembourgEngland9Luxembourg02152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...1000.30.33333333333333330.40.00.00.00.90.66666666666666660.20.00.00.01.01.00.01.00.00.00.01.00.01
201961-09-28FIFA World Cup qualification0EnglandLondonEngland4Luxembourg11152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...1000.70.33333333333333330.20.00.00.00.80.33333333333333330.40.00.00.01.01.00.01.00.00.00.01.00.01

Let’s export the result to our VAST DataBase using the variable match_sample to avoid counting the same game twice.

vo.drop("football_train", method = "view")
all_matchs.to_db(
    name = "football_train",
    relation_type = "view",
    db_filter = (fun.year(all_matchs["date"]) <= 2015) & (fun.year(all_matchs["date"]) > 1980) & (all_matchs["match_sample"] == 1),
)

vo.drop("football_test", method = "view")
all_matchs.to_db(
    name = "football_test",
    relation_type = "view",
    db_filter = (fun.year(all_matchs["date"]) > 2015) & (all_matchs["match_sample"] == 1),
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
123
neutral
Int
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_World_Cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
Avg_goals_1
Double
99%
123
Percent_Draw_1
Double
99%
123
Number_Games_World_Tournament_1
Decimal(28,7)
99%
123
Percent_Victory_World_Tournament_1
Double
99%
123
Percent_Victory_Away_1
Double
99%
123
Percent_Victory_Continental_Tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
Percent_Victory_Home_1
Double
99%
123
Avg_goals_conceded_1
Double
99%
123
Number_Games_Continental_Tournament_1
Decimal(28,7)
99%
123
nb_Continental_Cup_1
Decimal(27,6)
99%
123
Percent_Victory_1
Double
99%
123
nb_World_Cup_2
Bigint
99%
...
123
victory_team1
Int
100%
123
draw
Int
100%
123
victory_team2
Int
100%
123
avg_victory_team1_1_10
Double
99%
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Real
99%
123
avg_victory_same_tournament_team1_1_3
Real
100%
123
avg_draw_same_tournament_team1_1_5
Real
99%
123
avg_victory_same_tournament_team2_1_10
Real
99%
123
avg_victory_same_tournament_team2_1_3
Real
100%
123
avg_draw_same_tournament_team2_1_5
Real
99%
123
avg_victory_direct_team1_1_5
Double
99%
123
avg_victory_direct_team1_1_3
Double
99%
123
avg_draw_direct_team1_1_5
Double
99%
123
avg_victory_rank2_team1_1_5
Double
98%
123
avg_draw_rank2_team1_1_5
Double
98%
123
avg_victory_rank1_team2_1_5
Double
98%
123
avg_draw_rank1_team2_1_5
Double
98%
123
avg_victory_rank1_rank2_team1_1_5
Double
99%
123
avg_draw_rank1_rank2_team1_1_5
Double
99%
Abc
result
Varchar(1)
100%
11911-10-29Friendly0LuxembourgLuxembourgFrance4Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.10.00.2[null][null][null]0.10.00.2[null]0.3333333333333333[null][null][null][null][null][null][null][null][null][null]1
21913-04-20Friendly0FranceSaint-OuenFrance8Luxembourg01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.60.66666666666666660.00.00.00.00.60.66666666666666660.00.00.00.01.01.00.01.00.00.00.01.00.01
31914-02-08Friendly0LuxembourgLuxembourgFrance4Luxembourg52151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...0010.71.00.00.00.00.00.71.00.00.00.00.01.01.00.01.00.00.00.01.00.02
41927-05-21Friendly0LuxembourgEsch-sur-AlzetteEngland5Luxembourg22152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...1000.40.66666666666666660.40.20.33333333333333330.20.91.00.00.20.33333333333333330.20.66666666666666660.66666666666666660.0[null][null]0.33333333333333330.00.66666666666666660.01
51934-03-11FIFA World Cup qualification0LuxembourgLuxembourgGermany9Luxembourg12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.51.00.20.142857142857142850.00.40.50.33333333333333330.20.142857142857142850.33333333333333330.40.750.750.0[null][null]0.250.00.750.01
61934-04-15FIFA World Cup qualification0LuxembourgLuxembourgFrance6Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.30.33333333333333330.00.1250.00.40.30.33333333333333330.00.00.00.00.66666666666666660.66666666666666660.00.66666666666666660.00.20.00.80.01
71935-08-18Friendly0LuxembourgLuxembourgGermany1Luxembourg02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.70.33333333333333330.20.11111111111111110.00.40.70.33333333333333330.20.142857142857142850.00.41.01.00.01.00.00.20.00.80.01
81936-09-27Friendly0GermanyKrefeldGermany7Luxembourg21452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.70.33333333333333330.20.10.00.20.70.33333333333333330.20.11111111111111110.00.41.01.00.01.00.00.20.00.80.01
91937-03-21Friendly0LuxembourgLuxembourgGermany3Luxembourg22452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.40.00.40.10.00.00.40.33333333333333330.40.10.00.21.01.00.01.00.00.00.01.00.01
101938-03-20Friendly0GermanyWuppertalGermany2Luxembourg11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.90.66666666666666660.20.00.00.00.70.33333333333333330.40.10.00.01.01.00.01.00.00.00.01.00.01
111939-03-26Friendly0LuxembourgDifferdangeGermany1Luxembourg22452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...0010.51.00.00.00.00.00.61.00.00.00.00.01.01.00.01.00.00.00.01.00.02
121951-12-23Friendly0GermanyEssenGermany4Luxembourg11452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.70.66666666666666660.00.20.33333333333333330.40.70.66666666666666660.00.40.33333333333333330.40.80.66666666666666660.00.80.00.20.00.80.01
131952-04-20Friendly0LuxembourgLuxembourgGermany3Luxembourg02452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.80.66666666666666660.00.20.33333333333333330.20.80.66666666666666660.00.30.33333333333333330.40.80.66666666666666660.00.80.00.20.00.80.01
141953-09-20FIFA World Cup qualification0LuxembourgLuxembourgFrance6Luxembourg12151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.60.33333333333333330.20.20.33333333333333330.20.250.00.50.00.00.00.750.66666666666666660.00.750.00.20.00.80.01
151953-12-17FIFA World Cup qualification0FranceParisFrance8Luxembourg01151.7583120204603580.214833759590792840.50364960.53623188405797110.363636363636363650.5488721804511278UEFA0.53211009174311931.34271099744245510.40060240.20.480818414322250640...1000.50.33333333333333330.00.10.00.00.57142857142857141.00.20.00.00.00.80.66666666666666660.00.80.00.20.00.80.01
161954-03-28FIFA World Cup qualification0SaarlandSaarbrückenGermany3Saarland12452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.30.33333333333333330.80.00.01.00.83333333333333340.66666666666666660.20.00.01.00.80.80.00.80.0[null][null]0.80.01
171954-06-05Friendly0SaarlandSaarbrückenUruguay7Saarland12151.57568533969010740.245530393325387370.44525550.40983606557377050.30072463768115940.5060240963855421CONMEBOL0.51.2646007151370681.00.80.43027413587604290...1000.40.00.40.00.00.50.20.00.40.00.33333333333333330.51.01.00.0[null][null]0.00.01.00.01
181957-03-10Friendly0German DRBerlinGermany3Luxembourg01452.09983221476510050.20805369127516780.87591240.60.47021276595744680.6242774566473989UEFA0.60839160839160841.1795302013422820.52108430.30.55536912751677850...1000.40.33333333333333330.00.10.00.00.50.66666666666666660.00.20.33333333333333330.40.80.66666666666666660.00.80.00.20.01.00.01
191960-10-19FIFA World Cup qualification0LuxembourgLuxembourgEngland9Luxembourg02152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...1000.30.33333333333333330.40.00.00.00.90.66666666666666660.20.00.00.01.01.00.01.00.00.00.01.00.01
201961-09-28FIFA World Cup qualification0EnglandLondonEngland4Luxembourg11152.199373695198330.241127348643006250.45255470.419354838709677440.53086419753086420.5968992248062015UEFA0.61878453038674030.99269311064718160.38855420.00.56576200417536540...1000.70.33333333333333330.20.00.00.00.80.33333333333333330.40.00.00.01.01.00.01.00.00.00.01.00.01

Machine Learning

It’s time to make predictions about the outcomes of games. We have a lot of variables, so we need trees deep enough to pick up the most important features. We also need to consider a minimum number of games in each leaf to avoid over-fitting.

predictors = all_matchs.get_columns(
    exclude_columns = [
        "match_sample",
        "team2_score",
        "team1_score",
        "date",
        "city",
        "country",
        "result",
        "victory_team1",
        "victory_team2",
        "draw",
        "tournament",
        "team1",
        "team2",
        "confederation_1",
        "confederation_2",
    ],
)

from vastorbit.machine_learning.vast import RandomForestClassifier

model = RandomForestClassifier(
    n_estimators = 4,
    max_depth = 3,
)
model.fit(
    "football_train",
    predictors,
    "result",
    "football_test",
)
model.classification_report()
12Xavg_macroavg_weightedavg_micro
auc0.62714993754816770.714227097543144400.44712567836377070.5013063070834367[null]
prc_auc0.62931872322807890.53433076628584130.61959320288362510.59441423079918180.5999759085176515[null]
accuracy0.65149921094160970.71173066806943720.7598632298790110.70769770296335250.69464664767097030.7076977029633527
log_loss33.15807442222375620.94748670679806749.56723471298463634.5575986140021533.62675354507739[null]
precision0.59710494571773220.494296577946768070.00.363800507888166760.42448720216152450.5615465544450289
recall0.82134955752212390.60129509713228490.00.474214884884802960.56154655444502890.5615465544450289
f1_score0.69150174621653080.54257095158597670.00.41135756593416920.48310214514043360.5615465544450289
mcc0.33476233873280220.33847178837640170.00.2244113757030680.25542827766012530.3423198316675434
informedness0.318842034954420760.356899654280392160.00.225247229744937630.253097034580404170.3423198316675433
markedness0.35147756929187680.32099541188323766-0.2401367701209890.144112070351375160.200742402526309840.3423198316675433
csi0.52846975088967970.37227949599083620.00.3002497489601720.357156087526205870.39038215395867615

Our model is excellent! 57% of accuracy on 3 categories - it’s almost twice as good as a random model.

model.score(metric = "accuracy")

Looking at the importance of each feature, it seems like direct confrontations and victories against teams of another rank seem to be the strongest indicators of a team’s success.

model.features_importance()

Let’s add the predictions to the VastFrame.

Draws are pretty rare, so we’ll only consider them if a tie was very likely to occur.

test = vo.VastFrame("football_test")
model.predict_proba(test, name = "prob_1", pos_label = "1")
model.predict_proba(test, name = "prob_X", pos_label = "X")
model.predict_proba(test, name = "prob_2", pos_label = "2")
# Materialize the probabilities so the decision rule below compares stored
# columns instead of re-deriving the forest SQL for every reference.
vo.drop("football_pred", method = "table")
test.to_db(name = "football_pred", relation_type = "table")
test = vo.VastFrame("football_pred")
test.case_when(
    "prediction",
    test["prob_1"] > test["prob_2"] + 0.05, "1",
    test["prob_2"] > test["prob_1"] + 0.05, "2",
    (test["prob_X"] > test["prob_1"]) & (test["prob_X"] > test["prob_2"]), "X",
    fun.abs(test["prob_1"] - test["prob_2"]) < 0.03, "X",
    test["prob_1"] > test["prob_2"], "1",
    test["prob_1"] < test["prob_2"], "2",
)
📅
date
Date
100%
Abc
tournament
Varchar(50)
100%
123
neutral
Integer
100%
Abc
country
Varchar(50)
100%
Abc
city
Varchar(50)
100%
Abc
team1
Varchar(50)
100%
123
team1_score
Integer
100%
Abc
team2
Varchar(50)
100%
123
team2_score
Integer
100%
123
match_sample
Integer
100%
123
nb_world_cup_1
Bigint
99%
123
fifa_rank_1
Integer
99%
123
avg_goals_1
Double
99%
123
percent_draw_1
Double
99%
123
number_games_world_tournament_1
Decimal(28,7)
99%
123
percent_victory_world_tournament_1
Double
99%
123
percent_victory_away_1
Double
99%
123
percent_victory_continental_tournament_1
Double
99%
Abc
confederation_1
Varchar(8)
99%
123
percent_victory_home_1
Double
99%
123
avg_goals_conceded_1
Double
99%
123
number_games_continental_tournament_1
Decimal(28,7)
99%
123
nb_continental_cup_1
Decimal(27,6)
99%
123
percent_victory_1
Double
99%
123
nb_world_cup_2
Bigint
99%
...
123
avg_victory_team1_1_3
Double
99%
123
avg_draw_team1_1_5
Double
99%
123
avg_victory_team2_1_10
Double
99%
123
avg_victory_team2_1_3
Double
99%
123
avg_draw_team2_1_5
Double
99%
123
avg_victory_same_tournament_team1_1_10
Double
99%
123
avg_victory_same_tournament_team1_1_3
Double
100%
123
avg_draw_same_tournament_team1_1_5
Double
99%
123
avg_victory_same_tournament_team2_1_10
Double
99%
123
avg_victory_same_tournament_team2_1_3
Double
100%
123
avg_draw_same_tournament_team2_1_5
Double
99%
123
avg_victory_direct_team1_1_5
Double
99%
123
avg_victory_direct_team1_1_3
Double
99%
123
avg_draw_direct_team1_1_5
Double
99%
123
avg_victory_rank2_team1_1_5
Double
98%
123
avg_draw_rank2_team1_1_5
Double
98%
123
avg_victory_rank1_team2_1_5
Double
99%
123
avg_draw_rank1_team2_1_5
Double
99%
123
avg_victory_rank1_rank2_team1_1_5
Double
99%
123
avg_draw_rank1_rank2_team1_1_5
Double
99%
Abc
result
Varchar(1)
100%
123
prob_1
Decimal(16,12)
100%
123
prob_x
Decimal(16,12)
100%
123
prob_2
Decimal(16,12)
100%
Abc
prediction
Varchar(1)
100%
12016-03-23CFU Caribbean Cup qualification0MartiniqueFort-de-FranceMartinique3British Virgin Islands01011.86642599277978350.2599277978339350.00.00.42603550295857990.18181818181818182CONCACAF0.54639175257731951.27436823104693130.03313250.00.45848375451263540...0.66666666666666660.40.10.00.20.40.00.80.00.00.00.66666666666666660.66666666666666660.33333333333333331.00.00.00.20.20.411.01.01.0X
22016-03-26CFU Caribbean Cup qualification0British Virgin IslandsRoad TownBritish Virgin Islands0Dominica71010.87654320987654320.160493827160493820.00.00.160.0OFC0.363636363636363653.1111111111111110.02710840.00.197530864197530850...0.00.20.20.33333333333333330.20.00.00.00.20.00.20.00.00.20.00.20.40.20.40.220.00.00.0X
32016-03-29CFU Caribbean Cup qualification0DominicaRoseauDominica1Martinique41011.13939393939393940.206060606060606060.00.00.15740740740740740.11764705882352941OFC0.4752.0909090909090910.05120480.00.230303030303030310...0.66666666666666660.20.50.66666666666666660.20.20.33333333333333330.20.50.33333333333333330.60.00.00.00.40.21.00.00.60.020.250.250.25X
42016-05-27Friendly0FranceAjaccioCorsica1Basque Country11010.80.40.00.00.00.0OFC0.40.60.00.00.40...0.66666666666666660.40.70.66666666666666660.20.40.66666666666666660.40.70.66666666666666660.20.60.60.0[null][null]0.20.60.60.0X0.750.750.75X
52016-05-29CONIFA World Football Cup1GeorgiaGagraPadania1Northern Cyprus21012.50.1250.00.00.83333333333333340.0OFC1.00.56250.00.00.8750...0.66666666666666660.40.60.33333333333333330.00.33333333333333330.33333333333333330.66666666666666660.60.33333333333333330.00.80.80.20.80.20.50.00.40.420.750.750.75X
62016-06-02CONIFA World Football Cup1GeorgiaSuhkumiIraqi Kurdistan2Padania21012.10.250.00.00.352941176470588260.0OFC1.01.150.00.00.450...0.66666666666666660.60.70.66666666666666660.40.428571428571428550.66666666666666660.60.250.00.50.00.00.20.20.20.60.20.20.6X0.00.00.0X
72016-06-05CONIFA World Football Cup1GeorgiaSuhkumiPadania0Northern Cyprus21012.50.1250.00.00.83333333333333340.0OFC1.00.56250.00.00.8750...0.33333333333333330.20.50.33333333333333330.20.33333333333333330.33333333333333330.60.50.33333333333333330.250.00.00.00.40.40.66666666666666660.00.40.420.250.250.25X
82016-07-02EAFF Championship1GuamDededoMongolia0Chinese Taipei21011.08888888888888880.088888888888888890.00.00.24137931034482760.21428571428571427OFC1.03.22222222222222230.04216870.00.266666666666666660...0.66666666666666660.20.20.00.00.40.00.20.428571428571428550.00.20.40.40.20.40.20.60.40.20.420.750.750.75X
92016-10-21AFF Championship1CambodiaPhnom PenhLaos4Brunei31011.02290076335877860.152671755725190840.00.00.173913043478260860.08AFC0.428571428571428553.35877862595419830.07530120.00.1832061068702290...0.33333333333333330.20.20.33333333333333330.00.40.33333333333333330.00.30.33333333333333330.01.01.00.00.60.40.00.00.40.011.01.01.0X
102016-11-09AFC Challenge Cup1MalaysiaKuchingMongolia0Laos31011.08888888888888880.088888888888888890.00.00.24137931034482760.21428571428571427OFC1.03.22222222222222230.04216870.00.266666666666666660...0.66666666666666660.20.30.66666666666666660.00.50.50.00.20.33333333333333330.20.00.00.50.20.20.60.40.60.020.50.50.5X
112016-11-14AFC Challenge Cup1MalaysiaKuchingLaos3Brunei21011.02290076335877860.152671755725190840.00.00.173913043478260860.08AFC0.428571428571428553.35877862595419830.07530120.00.1832061068702290...0.33333333333333330.20.20.33333333333333330.20.28571428571428570.33333333333333330.40.33333333333333330.33333333333333330.41.01.00.00.80.20.00.00.40.011.01.01.0X
122017-04-22African Nations Championship0MauritiusBelle Vue MaurelMauritius2Seychelles11011.32863849765258220.21126760563380280.00.00.29032258064516130.047619047619047616CAF0.352941176470588261.6995305164319250.0632530.00.28638497652582160...0.00.20.10.00.00.20.00.20.00.00.00.40.66666666666666660.20.40.20.40.20.40.010.750.750.75X
132017-04-29African Nations Championship0SeychellesVictoriaSeychelles1Mauritius11010.72941176470588230.14117647058823530.00.00.04255319148936170.0CAF0.41666666666666672.05882352941176450.04216870.00.14117647058823530...0.00.00.30.33333333333333330.20.00.00.00.33333333333333330.33333333333333330.20.20.00.20.20.20.60.20.40.2X0.00.00.0X
142017-06-10CONIFA European Football Cup0Northern CyprusNicosiaNorthern Cyprus1Padania11012.26666666666666660.066666666666666670.00.00.40.0OFC0.81.20.00.00.53333333333333330...0.66666666666666660.20.50.33333333333333330.40.66666666666666660.66666666666666660.33333333333333330.66666666666666660.33333333333333330.41.01.00.00.750.00.20.40.20.6X0.750.750.75X
152017-06-25Island Games1SwedenDalhemGuernsey1Åland Islands11012.14925373134328360.223880597014925380.00.00.47169811320754720.0OFC0.51.26865671641791060.00.00.477611940298507450...1.00.00.30.00.20.91.00.00.30.00.20.33333333333333330.33333333333333330.33333333333333330.80.00.20.20.20.8X0.750.750.75X
162017-06-26Island Games1SwedenStenkyrkaShetland0Guernsey31011.6279069767441860.162790697674418620.00.00.342105263157894750.0OFC0.61.86046511627906970.00.00.372093023255813950...0.33333333333333330.00.80.66666666666666660.20.40.33333333333333330.00.80.66666666666666660.20.66666666666666660.66666666666666660.00.40.20.60.20.01.020.750.750.75X
172017-06-27Island Games1SwedenVisbyÅland Islands2Shetland11011.6190476190476190.095238095238095230.00.00.424242424242424250.0OFC0.55555555555555561.73809523809523810.00.00.45238095238095240...0.00.60.40.33333333333333330.00.20.00.60.40.33333333333333330.00.750.66666666666666660.00.00.40.40.20.20.610.50.50.5X
182017-06-29Island Games0SwedenVisbyGotland2Jersey31012.46153846153846170.153846153846153850.00.00.28571428571428570.0OFC0.62.00.00.00.346153846153846150...0.66666666666666660.00.70.66666666666666660.20.30.66666666666666660.00.70.66666666666666660.20.00.00.50.00.20.80.00.60.020.00.00.0X
192017-07-08Gold Cup1United StatesNashvilleMartinique2Nicaragua01011.86642599277978350.2599277978339350.00.00.42603550295857990.18181818181818182CONCACAF0.54639175257731951.27436823104693130.03313250.00.45848375451263540...0.33333333333333330.20.20.00.20.20.33333333333333330.00.00.00.01.01.00.01.00.01.00.00.60.011.01.01.0X
202017-10-05Friendly0Chinese TaipeiTaipeiChinese Taipei4Mongolia21011.31896551724137920.155172413793103450.00.00.253164556962025330.11428571428571428AFC0.52.8534482758620690.10542170.00.215517241379310330...0.33333333333333330.20.40.33333333333333330.00.10.00.20.00.00.01.01.00.00.60.40.00.20.40.011.01.01.0X

Let’s look at our predictions for the 2018 World Cup.

test.search(
    conditions = [test["tournament"] == 'FIFA World Cup'],
    usecols = [
        "date",
        "team1",
        "result",
        "prediction",
        "team2",
        "prob_1",
        "prob_X",
        "prob_2",
    ],
    order_by = ["date"],
).head(128)
📅
date
Date
100%
Abc
team1
Varchar(50)
100%
Abc
result
Varchar(1)
100%
Abc
prediction
Varchar(1)
100%
Abc
team2
Varchar(50)
100%
123
prob_1
Decimal(16,12)
100%
123
prob_x
Decimal(16,12)
100%
123
prob_2
Decimal(16,12)
100%
12018-06-14Russia1XSaudi Arabia0.750.750.75
22018-06-15Morocco2XIran0.50.50.5
32018-06-15PortugalXXSpain0.750.750.75
42018-06-15Egypt2XUruguay0.750.750.75
52018-06-16Croatia1XNigeria1.01.01.0
62018-06-16Peru2XDenmark1.01.01.0
72018-06-16ArgentinaXXIceland1.01.01.0
82018-06-16France1XAustralia1.01.01.0
92018-06-17BrazilXXSwitzerland1.01.01.0
102018-06-17Costa Rica2XSerbia0.750.750.75
112018-06-17Germany2XMexico1.01.01.0
122018-06-18Sweden1XSouth Korea0.50.50.5
132018-06-18Tunisia2XEngland0.250.250.25
142018-06-18Belgium1XPanama1.01.01.0
152018-06-19Poland2XSenegal1.01.01.0
162018-06-19Russia1XEgypt1.01.01.0
172018-06-19Colombia2XJapan0.750.750.75
182018-06-20Iran2XSpain0.50.50.5
192018-06-20Portugal1XMorocco0.750.750.75
202018-06-20Uruguay1XSaudi Arabia1.01.01.0
212018-06-21France1XPeru1.01.01.0
222018-06-21DenmarkXXAustralia1.01.01.0
232018-06-21Argentina2XCroatia0.750.750.75
242018-06-22Serbia2XSwitzerland1.01.01.0
252018-06-22Brazil1XCosta Rica1.01.01.0
262018-06-22Nigeria1XIceland1.01.01.0
272018-06-23Belgium1XTunisia1.01.01.0
282018-06-23Germany1XSweden0.750.750.75
292018-06-23South Korea2XMexico1.01.01.0
302018-06-24Poland2XColombia0.750.750.75
312018-06-24JapanXXSenegal1.01.01.0
322018-06-24England1XPanama1.01.01.0
332018-06-25Russia2XUruguay0.750.750.75
342018-06-25Saudi Arabia1XEgypt0.750.750.75
352018-06-25IranXXPortugal0.750.750.75
362018-06-25SpainXXMorocco1.01.01.0
372018-06-26Iceland2XCroatia0.250.250.25
382018-06-26Australia2XPeru1.01.01.0
392018-06-26DenmarkXXFrance0.50.50.5
402018-06-26Nigeria2XArgentina0.50.50.5
412018-06-27Serbia2XBrazil0.250.250.25
422018-06-27South Korea1XGermany0.50.50.5
432018-06-27SwitzerlandXXCosta Rica1.01.01.0
442018-06-27Mexico2XSweden1.01.01.0
452018-06-28Japan2XPoland1.01.01.0
462018-06-28Senegal2XColombia0.50.50.5
472018-06-28Panama2XTunisia0.750.750.75
482018-06-28England2XBelgium1.01.01.0
492018-06-30France1XArgentina0.750.750.75
502018-06-30Uruguay1XPortugal1.01.01.0
512018-07-01RussiaXXSpain0.50.50.5
522018-07-01CroatiaXXDenmark1.01.01.0
532018-07-02Belgium1XJapan1.01.01.0
542018-07-02Brazil1XMexico1.01.01.0
552018-07-03Sweden1XSwitzerland1.01.01.0
562018-07-03ColombiaXXEngland0.250.250.25
572018-07-06Uruguay2XFrance0.50.50.5
582018-07-06Brazil2XBelgium1.01.01.0
592018-07-07Sweden2XEngland0.750.750.75
602018-07-07RussiaXXCroatia0.750.750.75
612018-07-10France1XBelgium0.750.750.75
622018-07-11Croatia1XEngland0.750.750.75
632018-07-14Belgium1XEngland0.750.750.75
642018-07-15France1XCroatia0.750.750.75

Fantastic: we built a very efficient model which predicted that France will win almost all of its games (except the game against Argentina which is really hard to predict). In reality, France did indeed win the 2018 World Cup!

test.search(
    conditions = [
        test["tournament"] == 'FIFA World Cup',
        (test["team1"] == 'France') | (test["team2"] == 'France'),
    ],
    usecols = [
        "date",
        "team1",
        "result",
        "prediction",
        "team2",
        "prob_1",
        "prob_X",
        "prob_2",
    ],
    order_by = ["date"],
).head(128)
📅
date
Date
100%
Abc
team1
Varchar(50)
100%
Abc
result
Varchar(1)
100%
Abc
prediction
Varchar(1)
100%
Abc
team2
Varchar(50)
100%
123
prob_1
Decimal(16,12)
100%
123
prob_x
Decimal(16,12)
100%
123
prob_2
Decimal(16,12)
100%
12018-06-16France1XAustralia1.01.01.0
22018-06-21France1XPeru1.01.01.0
32018-06-26DenmarkXXFrance0.50.50.5
42018-06-30France1XArgentina0.750.750.75
52018-07-06Uruguay2XFrance0.50.50.5
62018-07-10France1XBelgium0.750.750.75
72018-07-15France1XCroatia0.750.750.75

Conclusion

We’ve solved our problem in a pandas-like way, all without ever loading data into memory!