soccer matches results prediction using multi layer...
TRANSCRIPT
Soccer Matches Results Prediction Using Multi-Layer Perceptron
ECE 539 – Introduction to Artificial Neural Networks and Fuzzy Systems
University of Wisconsin – Madison
Author: Henrique Parreiras Couto
Introduction
Soccer is one of the most popular sports in the world. The modern soccer was
created in England on the 19th
century, and since then it has grown largely and spread
worldwide. Today, in some countries like Brazil, England, Spain, Germany and many
others, soccer is part of the culture and life of the people. Despite that, soccer popularity is
still growing and getting to countries that had no tradition in the sport like the United
States, China, Qatar (which will host the 2022 FIFA world cup), among others. Because of
that, in the last decades soccer has become a large industry, with teams that withhold
billions of dollars among trademarks, player passes and stadiums.
The popularity of soccer can be explained by a lot of different reasons, but one
factor that makes it so exciting to watch is the great unpredictability of the results. It is not
uncommon for a team that is considered less qualified than its opponent to win the match.
For the same reason, it is very difficult to anticipate the winner of a soccer game.
Although there are some works and websites that, using statistical methods, can predict the
winner of a match with good accuracy, I have not found any that tries to predict the actual
score of a game. Because of that, I came with the idea to this project.
The goal of this work is try to predict the scores of the 2013 Brazilian
Championship, also known as “Brasileirão” using a Multi-Layer Perceptron.
Motivation
In this project, I will attempt to develop a Multi-layer perceptron to predict the final
score of any match of the 1st division of the Brazilian soccer league. The goal of using a
neural network to do this prediction is to eliminate the human variable of the process,
making it impersonal and, thus, more accurate.
Data
History
The Brazilian soccer championship (Brasileirão) had its first official edition held in
1971. Since then, the competition has changed in many ways, including the number of
teams and format.
The most recent change occurred in 2003, when the competition format was
changed from a knockout system to the double robin-round system, in which each team
play against each other twice. After 2003, some adjustments were made to the
championship and the number of teams dropped from 24 to 20.
Because of that, the championships that occurred before 2003 were disregarded and
the data gathered relies only on the results of the past 10 championships.
Collecting the data
There isn’t any official record of the results for the Brazilian championship and,
because of that, the data had to be collected from different websites on the internet. To
do this, I used a Python program developed by Alberto Trindade Tavares. This program
generates a text file for each of the 20 teams that are currently on the first division on
the Brasileirão, containing all the games that the team has played since 2003, whether
the game was played at home or away, and the score.
Beyond that, a public study about the market value of all Brazilian teams was also
used. After this work was finished, another study was published, updating the market
value of the teams. Both of them are attached to this report, but for the final results that
are shown here, only the first one was used. However, I ran some tests with the new
data and no significant improvement was achieved.
Feature vectors
The features analyzed were:
1. The number of games played on the first division since 2003
2. Number of victories at home and away
3. Average number of goals scored at home and away
4. The market value of the team
These attributes were chosen because I considered them to be the most impartial
features that I could extract from the data that I had. Since there are some teams that have
played only two or three championships since 2003, it was hard to choose a feature that
could be compared between all teams. However, the number of games played in first
division is also a good feature to determine which team is better, since the strongest teams
usually aren’t relegated to the second division and, thus, have a greater number of games on
the first division.
The market value is also a useful feature to determine the quality of a team. Since
good players are highly valuable, teams with greater market values are usually better.
Although it is common for teams to have good players that don’t have great market value
either because they are near retirement or are still too young, a greater market value is
usually a sign that the team has more money and, thus, has better training facilities, better
preparation for the athletes, medical department and other important features that are
difficult to measure and put in a Multi-Layer perceptron.
Each feature vector contains 8 features and 5 labels, giving a total of 13 positions.
The first 4 features are about the home team and the next 4 about the visiting team. An
example of feature vector is as follows:
# Games Played on 1st
division
# Victories at home
Average number of goals
scored at home
Team value
(millions of euros)
# Games Played on
1st division
# Victories
away
Average number of goals scored away
Team value (millions of
euros) Labels
Home Team Away Team
Experiment
For this project, the model that I will use is a Multi-Layer Perceptron (MLP) with 8
inputs, 5 outputs and 2 hidden layers with 50 neurons each. In all neurons, a sigmoidal
activation function was used. The value of alpha used was 0.1 and the momentum was 0.9.
The training data for this project consists of the results of all the games of the
Brazilian championship of 2012 (total of 380 feature vectors) and the testing set used was
the 2013 championship.
The prediction of the result consists in two phases. In the first phase, the MLP is
applied to predict the difference between the number of goals scored by the teams. The
output labels correspond to this difference as follows:
[1 0 0 0 0] – The home team suffered a large loss. In other words, the home team
lost by a difference of 3 or more goals.
[0 1 0 0 0] – The home team suffered a small loss, which means a loss by a
difference of 1 or 2 goals.
[0 0 1 0 0] – There was a tie.
[0 0 0 1 0] – The home team had a small victory, which means a victory by a
difference of 1 or 2 goals.
[0 0 0 0 1] – The home team had a large victory, which means a victory by a
difference of 3 goals or more.
In the second phase, a MATLAB program is used to calculate the score, based on
the average number of goals scored by both teams. The calculation consists in finding
the result that will minimize the distance between the predicted score and the average
number of goals scored by each team. Thus:
Where Y0 corresponds to the average number of goals scored at home by the home
team, X0 correspond to the average number of goals scored away by the visiting team, z
is the difference predicted by the MLP, x and y are the predicted score.
X0 Y0 x y
z
The quadratic distance between x and X0 and between y and Y0 can be calculated
as:
( )
( )
The total quadratic distance is calculated as:
( ) ( )
Since :
( ) ( )
Deriving D as a function of y:
( ) ( )
By making the derivative equal to zero, we have the value of y that gives the
minimum quadratic distance between the predicted score and the average number of
goals of each team. Then:
The number of goals scored by the visiting team can then be calculated as:
Where if the predicted result is a victory of the home team, and if the
predicted result is a defeat of the home team.
Results
Based on the proposed model, I ran tests to predict all of the games from the 2013
championship. The results for the second round of the championship are as follows:
Home Team Away Team Actual Score Predicted Score
Botafogo Santos 2 1 2 1
Atletico-PR Cruzeiro 2 2 2 1
Flamengo Ponte Preta 0 2 2 1
Bahia Coritiba 0 0 3 2
Náutico Vitória 0 3 3 2
São Paulo Vasco 5 1 2 1
Goiás Corinthians 1 1 2 1
Internacional Criciúma 2 0 2 1
Atlético-MG Grêmio 2 0 2 1
Portuguesa Fluminense 2 1 2 1
As can be seen from the table, the accuracy is not very good. For the 10 matches, it
predicted correctly only 2. In fact, for all the 380 matches of the training set, only
11.32% were correct. This can be explained by the high unpredictability of a soccer
match. There are many more factors involved, and most of them cannot be put into a
MLP.
However, if we consider only the prediction for the difference of goals, we have
accuracy of 28.68%, which is a little better, but still far from the ideal. Considering only
the output from the MLP, and classifying the result according to large losses, small
losses, ties, small victories and large victories, the accuracy goes up to about 40%. And
finally, considering only the result (Victory/Tie/Loss), the classification rate is 48.16%.
The complete table with all the results is attached at the end of this report.
These results show that although the prediction about which team will win is
correct, the number of goals scored cannot be predicted accurately, because there are
many factors that can influence the result.
Other work
In all the researches that I have made, I was not able to find another work that tried
to predict the score of the games of the Brazilian soccer championship. Thus, I have no
references to compare to the results that I obtained in this work.
Conclusion
As can be seen from the results above, I could not achieve the expected results using
a Multi-Layer Perceptron. Although the classification rate was reasonable when we do not
consider the number of goals, the actual score could not be predicted.
This is caused by the random nature of a soccer match. There are many intangible
factors that can influence the final result like important players that are out of a match,
referee decisions, number of people present on the stadium (helps to motivate the home
team), and many others. Most of these factors cannot be measured and put into a MLP, and
because of that, the prediction using a Multi-Layer Perceptron is compromised and cannot
be very accurate.
References
Data extraction websites:
www.campeoesdofutebol.com.br
http://www.bolanaarea.com/gal_brasileirao.htm
Studies about team values:
2013/1:
http://www.pluriconsultoria.com.br/relatorio.php?segmento=sport&id=263
2013/2:
http://www.pluriconsultoria.com.br/relatorio.php?segmento=sport&id=350
Complete Results
Home Team Away Team Actual Score Predicted Score Right/Wrong Difference V/T/L
Vasco Portuguesa 1 0 2 1 0 1 1
Vitoria Internacional 2 2 1 0 0 0 0
Corinthians Botafogo 1 1 2 1 0 0 0
Gremio Nautico 2 0 2 1 0 0 1
Ponte_Preta Sao_Paulo 0 2 1 0 0 0 0
Criciuma Bahia 3 1 2 1 0 0 1
Fluminense Atletico-PR 2 1 2 1 1 1 1
Santos Flamengo 0 0 2 1 0 0 0
Cruzeiro Goias 5 0 2 1 0 0 1
Coritiba Atletico-MG 2 1 1 0 0 1 1
Botafogo Santos 2 1 2 1 1 1 1
Atletico-PR Cruzeiro 2 2 2 1 0 0 0
Flamengo Ponte_Preta 0 2 2 1 0 0 0
Bahia Coritiba 0 0 3 2 0 0 0
Nautico Vitoria 0 3 3 2 0 0 0
Sao_Paulo Vasco 5 1 2 1 0 0 1
Goias Corinthians 1 1 2 1 0 0 0
Internacional Criciuma 2 0 2 1 0 0 1
Atletico-MG Gremio 2 0 2 1 0 0 1
Portuguesa Fluminense 2 1 2 1 1 1 1
Botafogo Cruzeiro 2 1 2 1 1 1 1
Atletico-PR Flamengo 2 2 2 1 0 0 0
Corinthians Ponte_Preta 1 0 2 1 0 1 1
Vitoria Vasco 2 0 1 0 0 0 1
Goias Coritiba 1 1 2 1 0 0 0
Santos Gremio 1 1 2 1 0 0 0
Atletico-MG Sao_Paulo 0 0 2 1 0 0 0
Fluminense Criciuma 3 0 2 1 0 0 1
Internacional Bahia 1 2 2 1 0 0 0
Nautico Portuguesa 2 2 2 2 1 1 1
Criciuma Santos 3 1 2 1 0 0 1
Portuguesa Internacional 1 1 2 1 0 0 0
Vasco Atletico-MG 2 0 2 1 0 0 1
Bahia Botafogo 2 1 3 2 0 1 1
Ponte_Preta Atletico-PR 3 4 0 0 0 0 0
Flamengo Nautico 0 1 2 1 0 0 0
Cruzeiro Corinthians 1 0 2 1 0 1 1
Sao_Paulo Goias 0 1 2 1 0 0 0
Gremio Vitoria 1 0 2 1 0 1 1
Coritiba Fluminense 2 1 1 0 0 1 1
Criciuma Flamengo 0 3 2 1 0 0 0
Cruzeiro Internacional 2 2 2 1 0 0 0
Vasco Bahia 1 1 2 1 0 0 0
Corinthians Portuguesa 0 0 2 1 0 0 0
Ponte_Preta Botafogo 0 2 0 0 0 0 0
Fluminense Goias 2 1 2 1 1 1 1
Vitoria Atletico-PR 3 2 1 0 0 1 1
Coritiba Nautico 1 0 1 0 1 1 1
Santos Atletico-MG 1 0 2 1 0 1 1
Gremio Sao_Paulo 1 1 2 1 0 0 0
Nautico Ponte_Preta 1 3 3 2 0 0 0
Atletico-PR Gremio 1 1 2 1 0 0 0
Flamengo Coritiba 2 2 2 1 0 0 0
Portuguesa Cruzeiro 1 1 2 1 0 0 0
Atletico-MG Criciuma 3 2 2 1 0 1 1
Sao_Paulo Santos 0 2 2 1 0 0 0
Bahia Corinthians 0 2 3 2 0 0 0
Internacional Vasco 5 3 2 1 0 0 1
Goias Vitoria 1 0 2 1 0 1 1
Botafogo Fluminense 1 0 2 1 0 1 1
Fluminense Internacional 2 3 2 1 0 0 0
Santos Portuguesa 4 1 2 1 0 0 1
Ponte_Preta Bahia 0 0 1 0 0 0 0
Corinthians Atletico-MG 0 1 2 1 0 0 0
Vitoria Sao_Paulo 3 2 1 0 0 1 1
Gremio Botafogo 2 1 2 1 1 1 1
Coritiba Atletico-PR 1 0 1 0 1 1 1
Vasco Flamengo 0 1 2 1 0 0 0
Criciuma Goias 0 0 2 1 0 0 0
Cruzeiro Nautico 3 0 2 1 0 0 1
Sao_Paulo Cruzeiro 0 3 2 1 0 0 0
Criciuma Gremio 2 1 2 1 1 1 1
Botafogo Nautico 2 0 2 1 0 0 1
Vitoria Bahia 0 0 1 0 0 0 0
Internacional Flamengo 1 0 2 1 0 1 1
Atletico-PR Corinthians 1 1 2 1 0 0 0
Santos Coritiba 2 2 2 1 0 0 0
Fluminense Vasco 1 3 2 1 0 0 0
Goias Portuguesa 2 1 2 1 1 1 1
Atletico-MG Ponte_Preta 4 0 2 1 0 0 1
Vasco Criciuma 3 2 2 1 0 1 1
Ponte_Preta Santos 1 0 1 0 1 1 1
Portuguesa Atletico-PR 2 3 2 1 0 0 0
Corinthians Sao_Paulo 0 0 2 1 0 0 0
Gremio Fluminense 2 0 2 1 0 0 1
Nautico Internacional 3 0 3 2 0 0 1
Cruzeiro Atletico-MG 4 1 2 1 0 0 1
Flamengo Botafogo 1 1 2 1 0 0 0
Bahia Goias 2 1 3 2 0 1 1
Coritiba Vitoria 1 1 1 0 0 0 0
Fluminense Cruzeiro 1 0 2 1 0 1 1
Atletico-MG Atletico-PR 1 2 2 1 0 0 0
Corinthians Gremio 2 0 2 1 0 0 1
Coritiba Ponte_Preta 5 3 1 0 0 0 1
Portuguesa Criciuma 1 1 2 1 0 0 0
Bahia Flamengo 3 0 2 3 0 0 0
Botafogo Vitoria 2 0 2 1 0 0 1
Goias Vasco 1 1 2 1 0 0 0
Nautico Sao_Paulo 0 1 2 3 0 1 1
Internacional Santos 1 2 2 1 0 0 0
Sao_Paulo Bahia 1 2 2 1 0 0 0
Cruzeiro Coritiba 1 0 2 1 0 1 1
Vasco Botafogo 2 3 2 1 0 0 0
Flamengo Atletico-MG 3 0 2 1 0 0 1
Vitoria Portuguesa 2 1 1 0 0 1 1
Gremio Internacional 1 1 2 1 0 0 0
Ponte_Preta Fluminense 1 1 1 0 0 0 0
Criciuma Corinthians 0 2 2 1 0 0 0
Atletico-PR Goias 2 0 2 1 0 0 1
Santos Nautico 1 1 2 1 0 0 0
Sao_Paulo Internacional 0 1 2 1 0 0 0
Flamengo Portuguesa 1 1 2 1 0 0 0
Vitoria Fluminense 1 1 1 0 0 0 0
Goias Nautico 2 1 2 1 1 1 1
Criciuma Cruzeiro 1 2 2 1 0 0 0
Atletico-MG Botafogo 2 2 2 1 0 0 0
Atletico-PR Bahia 1 0 2 1 0 1 1
Santos Corinthians 1 1 2 1 0 0 0
Gremio Coritiba 0 1 2 1 0 0 0
Vasco Ponte_Preta 1 1 2 1 0 0 0
Botafogo Goias 1 1 2 1 0 0 0
Nautico Atletico-MG 0 0 3 2 0 0 0
Fluminense Flamengo 2 3 2 1 0 0 0
Corinthians Vitoria 2 0 2 1 0 0 1
Bahia Gremio 0 3 3 2 0 0 0
Internacional Atletico-PR 2 2 2 1 0 0 0
Ponte_Preta Criciuma 3 1 1 0 0 0 1
Cruzeiro Santos 0 0 2 1 0 0 0
Coritiba Vasco 0 1 1 0 0 0 0
Portuguesa Sao_Paulo 2 1 2 1 1 1 1
Fluminense Corinthians 0 0 2 1 0 0 0
Vitoria Ponte_Preta 3 1 1 0 0 0 1
Gremio Cruzeiro 3 1 2 1 0 0 1
Goias Flamengo 1 1 2 1 0 0 0
Criciuma Nautico 3 0 2 1 0 0 1
Atletico-MG Bahia 2 0 2 1 0 0 1
Coritiba Portuguesa 1 1 1 0 0 0 0
Santos Vasco 1 1 2 1 0 0 0
Sao_Paulo Atletico-PR 1 1 2 1 0 0 0
Botafogo Internacional 3 3 2 1 0 0 0
Vasco Gremio 2 3 2 1 0 0 0
Nautico Fluminense 0 1 3 2 0 0 0
Cruzeiro Vitoria 5 1 2 1 0 0 1
Flamengo Sao_Paulo 0 0 2 1 0 0 0
Corinthians Coritiba 1 0 2 1 0 1 1
Portuguesa Botafogo 1 3 2 1 0 0 0
Ponte_Preta Goias 0 1 0 0 0 0 0
Bahia Santos 0 0 3 2 0 0 0
Internacional Atletico-MG 0 0 2 1 0 0 0
Atletico-PR Criciuma 2 1 2 1 1 1 1
Ponte_Preta Cruzeiro 0 2 1 0 0 0 0
Criciuma Coritiba 2 1 2 1 1 1 1
Santos Vitoria 2 0 2 1 0 0 1
Flamengo Gremio 0 1 2 1 0 0 0
Sao_Paulo Fluminense 2 1 2 1 1 1 1
Bahia Nautico 2 0 3 2 0 0 1
Internacional Goias 3 3 2 1 0 0 0
Vasco Corinthians 1 1 2 1 0 0 0
Atletico-MG Portuguesa 2 1 2 1 1 1 1
Atletico-PR Botafogo 2 0 2 1 0 0 1
Gremio Ponte_Preta 1 0 2 1 0 1 1
Goias Atletico-MG 0 0 2 1 0 0 0
Nautico Atletico-PR 1 4 3 2 0 0 0
Portuguesa Bahia 4 2 2 1 0 0 1
Fluminense Santos 0 2 2 1 0 0 0
Botafogo Sao_Paulo 0 0 2 1 0 0 0
Corinthians Flamengo 4 0 2 1 0 0 1
Vitoria Criciuma 0 1 1 0 0 0 0
Cruzeiro Vasco 5 3 2 1 0 0 1
Coritiba Internacional 0 0 1 0 0 0 0
Goias Gremio 2 0 2 1 0 0 1
Flamengo Vitoria 2 1 2 1 1 1 1
Atletico-PR Santos 2 1 2 1 1 1 1
Portuguesa Ponte_Preta 2 1 2 1 1 1 1
Bahia Cruzeiro 1 3 2 3 0 0 1
Internacional Corinthians 1 0 2 1 0 1 1
Atletico-MG Fluminense 2 2 2 1 0 0 0
Botafogo Coritiba 3 1 2 1 0 0 1
Sao_Paulo Criciuma 1 2 2 1 0 0 0
Nautico Vasco 0 3 3 2 0 0 0
Ponte_Preta Internacional 1 3 1 0 0 0 0
Fluminense Bahia 1 0 2 1 0 1 1
Vitoria Atletico-MG 1 1 1 0 0 0 0
Santos Goias 1 0 2 1 0 1 1
Gremio Portuguesa 3 2 2 1 0 1 1
Corinthians Nautico 0 0 2 1 0 0 0
Cruzeiro Flamengo 1 0 2 1 0 1 1
Coritiba Sao_Paulo 2 0 1 0 0 0 1
Vasco Atletico-PR 0 0 2 1 0 0 0
Criciuma Botafogo 1 2 2 1 0 0 0
Portuguesa Vasco 2 0 2 1 0 0 1
Atletico-PR Fluminense 1 1 2 1 0 0 0
Botafogo Corinthians 1 0 2 1 0 1 1
Bahia Criciuma 2 2 2 2 1 1 1
Nautico Gremio 0 2 3 2 0 0 0
Goias Cruzeiro 1 2 2 1 0 0 0
Internacional Vitoria 2 2 2 1 0 0 0
Sao_Paulo Ponte_Preta 1 0 2 1 0 1 1
Atletico-MG Coritiba 3 0 2 1 0 0 1
Flamengo Santos 2 1 2 1 1 1 1
Cruzeiro Atletico-PR 1 0 2 1 0 1 1
Fluminense Portuguesa 2 1 2 1 1 1 1
Ponte_Preta Flamengo 1 1 1 0 0 0 0
Vasco Sao_Paulo 0 2 2 1 0 0 0
Coritiba Bahia 2 2 1 0 0 0 0
Criciuma Internacional 0 1 2 1 0 0 0
Corinthians Goias 1 2 2 1 0 0 0
Santos Botafogo 1 2 2 1 0 0 0
Vitoria Nautico 2 1 1 0 0 1 1
Gremio Atletico-MG 0 1 2 1 0 0 0
Vasco Vitoria 1 2 2 1 0 0 0
Gremio Santos 1 1 2 1 0 0 0
Criciuma Fluminense 1 2 2 1 0 0 0
Cruzeiro Botafogo 3 0 2 1 0 0 1
Coritiba Goias 2 2 1 0 0 0 0
Ponte_Preta Corinthians 2 0 0 0 0 0 0
Sao_Paulo Atletico-MG 1 0 2 1 0 1 1
Flamengo Atletico-PR 2 4 2 1 0 0 0
Bahia Internacional 2 0 2 3 0 0 0
Portuguesa Nautico 3 0 2 1 0 0 1
Fluminense Coritiba 1 1 2 1 0 0 0
Vitoria Gremio 0 0 0 0 1 1 1
Nautico Flamengo 0 0 3 2 0 0 0
Goias Sao_Paulo 1 0 2 1 0 1 1
Botafogo Bahia 1 2 2 1 0 0 0
Corinthians Cruzeiro 0 0 2 1 0 0 0
Internacional Portuguesa 0 1 2 1 0 0 0
Atletico-MG Vasco 2 1 2 1 1 1 1
Atletico-PR Ponte_Preta 1 0 2 1 0 1 1
Santos Criciuma 2 1 2 1 1 1 1
Goias Fluminense 1 2 2 1 0 0 0
Nautico Coritiba 3 0 3 2 0 0 1
Botafogo Ponte_Preta 0 1 2 1 0 0 0
Bahia Vasco 0 0 3 2 0 0 0
Portuguesa Corinthians 4 0 2 2 0 0 0
Flamengo Criciuma 4 1 2 1 0 0 1
Atletico-MG Santos 3 1 2 1 0 0 1
Atletico-PR Vitoria 3 5 2 1 0 0 0
Sao_Paulo Gremio 0 1 2 1 0 0 0
Internacional Cruzeiro 1 3 2 1 0 0 0
Criciuma Atletico-MG 1 1 2 1 0 0 0
Ponte_Preta Nautico 1 2 1 0 0 0 0
Gremio Atletico-PR 1 0 2 1 0 1 1
Cruzeiro Portuguesa 4 0 2 1 0 0 1
Fluminense Botafogo 1 1 2 1 0 0 0
Vitoria Goias 2 1 1 0 0 1 1
Coritiba Flamengo 0 2 1 0 0 0 0
Santos Sao_Paulo 3 0 1 1 0 0 0
Corinthians Bahia 2 0 2 1 0 0 1
Vasco Internacional 3 1 2 1 0 0 1
Botafogo Gremio 0 1 2 1 0 0 0
Sao_Paulo Vitoria 3 2 2 1 0 1 1
Internacional Fluminense 1 0 2 1 0 1 1
Atletico-MG Corinthians 0 0 2 1 0 0 0
Nautico Cruzeiro 1 4 3 2 0 0 0
Atletico-PR Coritiba 2 1 2 1 1 1 1
Flamengo Vasco 1 1 2 1 0 0 0
Bahia Ponte_Preta 1 1 3 2 0 0 0
Goias Criciuma 1 1 2 1 0 0 0
Portuguesa Santos 3 0 2 2 0 0 0
Gremio Criciuma 1 2 2 1 0 0 0
Coritiba Santos 1 0 1 0 1 1 1
Vasco Fluminense 1 0 2 1 0 1 1
Bahia Vitoria 2 0 3 2 0 0 1
Ponte_Preta Atletico-MG 2 0 0 0 0 0 0
Nautico Botafogo 1 3 3 2 0 0 0
Cruzeiro Sao_Paulo 0 2 2 1 0 0 0
Corinthians Atletico-PR 0 0 2 1 0 0 0
Portuguesa Goias 1 2 2 1 0 0 0
Flamengo Internacional 2 1 2 1 1 1 1
Fluminense Gremio 1 1 2 1 0 0 0
Vitoria Coritiba 2 1 0 0 0 0 0
Santos Ponte_Preta 2 1 2 1 1 1 1
Botafogo Flamengo 2 1 2 1 1 1 1
Sao_Paulo Corinthians 0 0 2 1 0 0 0
Internacional Nautico 4 1 2 1 0 0 1
Atletico-MG Cruzeiro 1 0 2 1 0 1 1
Criciuma Vasco 3 2 2 1 0 1 1
Goias Bahia 3 1 2 1 0 0 1
Atletico-PR Portuguesa 1 0 2 1 0 1 1
Santos Internacional 0 0 2 1 0 0 0
Atletico-PR Atletico-MG 1 0 2 1 0 1 1
Sao_Paulo Nautico 3 0 2 1 0 0 1
Ponte_Preta Coritiba 1 0 0 0 0 0 0
Criciuma Portuguesa 1 3 2 1 0 0 0
Cruzeiro Fluminense 1 0 2 1 0 1 1
Gremio Corinthians 1 0 2 1 0 1 1
Flamengo Bahia 2 1 2 1 1 1 1
Vasco Goias 0 2 2 1 0 0 0
Vitoria Botafogo 1 0 1 0 1 1 1
Fluminense Ponte_Preta 1 1 2 1 0 0 0
Nautico Santos 1 5 2 3 0 0 1
Corinthians Criciuma 1 0 2 1 0 1 1
Atletico-MG Flamengo 1 0 2 1 0 1 1
Bahia Sao_Paulo 0 1 2 3 0 1 1
Internacional Gremio 2 2 2 1 0 0 0
Goias Atletico-PR 3 0 2 1 0 0 1
Botafogo Vasco 2 2 2 1 0 0 0
Portuguesa Vitoria 1 1 2 1 0 0 0
Coritiba Cruzeiro 2 1 1 0 0 1 1
Cruzeiro Criciuma 5 3 2 1 0 0 1
Botafogo Atletico-MG 1 0 2 1 0 1 1
Ponte_Preta Vasco 2 1 1 0 0 1 1
Internacional Sao_Paulo 2 3 2 1 0 0 0
Corinthians Santos 1 1 2 1 0 0 0
Bahia Atletico-PR 1 1 3 2 0 0 0
Portuguesa Flamengo 0 0 2 1 0 0 0
Coritiba Gremio 4 0 1 0 0 0 1
Nautico Goias 0 2 3 2 0 0 0
Fluminense Vitoria 2 3 2 1 0 0 0
Vasco Coritiba 2 1 2 1 1 1 1
Sao_Paulo Portuguesa 2 1 2 1 1 1 1
Atletico-MG Nautico 5 0 2 1 0 0 1
Goias Botafogo 1 0 2 1 0 1 1
Vitoria Corinthians 1 1 1 0 0 0 0
Gremio Bahia 0 0 2 1 0 0 0
Santos Cruzeiro 0 1 2 1 0 0 0
Criciuma Ponte_Preta 1 1 2 1 0 0 0
Atletico-PR Internacional 1 0 2 1 0 1 1
Flamengo Fluminense 1 0 2 1 0 1 1
Portuguesa Coritiba 0 0 2 1 0 0 0
Bahia Atletico-MG 0 0 3 2 0 0 0
Flamengo Goias 1 1 2 1 0 0 0
Cruzeiro Gremio 3 0 2 1 0 0 1
Atletico-PR Sao_Paulo 3 0 2 1 0 0 1
Internacional Botafogo 2 1 2 1 1 1 1
Ponte_Preta Vitoria 0 3 1 0 0 0 0
Vasco Santos 2 2 2 1 0 0 0
Nautico Criciuma 0 1 2 2 0 0 0
Corinthians Fluminense 1 0 2 1 0 1 1
Goias Ponte_Preta 2 0 2 1 0 0 1
Gremio Vasco 1 0 2 1 0 1 1
Criciuma Atletico-PR 2 1 2 1 1 1 1
Botafogo Portuguesa 0 0 2 1 0 0 0
Vitoria Cruzeiro 1 3 1 0 0 0 0
Sao_Paulo Flamengo 2 0 2 1 0 0 1
Coritiba Corinthians 0 1 1 0 0 0 0
Santos Bahia 3 0 2 1 0 0 1
Fluminense Nautico 2 0 2 1 0 0 1
Atletico-MG Internacional 2 1 2 1 1 1 1
Botafogo Atletico-PR 4 0 2 1 0 0 1
Coritiba Criciuma 1 2 1 0 0 0 0
Fluminense Sao_Paulo 2 1 2 1 1 1 1
Vitoria Santos 2 0 1 0 0 0 1
Cruzeiro Ponte_Preta 2 2 2 1 0 0 0
Corinthians Vasco 0 0 2 1 0 0 0
Nautico Bahia 0 1 2 2 0 0 0
Gremio Flamengo 2 1 2 1 1 1 1
Goias Internacional 3 1 2 1 0 0 1
Portuguesa Atletico-MG 2 0 2 2 0 0 0
Criciuma Vitoria 1 1 2 1 0 0 0
Vasco Cruzeiro 2 1 2 1 1 1 1
Atletico-MG Goias 4 1 2 1 0 0 1
Flamengo Corinthians 1 0 2 1 0 1 1
Ponte_Preta Gremio 1 1 0 0 0 1 1
Santos Fluminense 1 0 2 1 0 1 1
Internacional Coritiba 0 0 2 1 0 0 0
Atletico-PR Nautico 6 1 2 1 0 0 1
Bahia Portuguesa 1 0 2 2 0 0 0
Sao_Paulo Botafogo 1 1 2 1 0 0 0
Fluminense Atletico-MG 2 2 2 1 0 0 0
Corinthians Internacional 0 0 2 1 0 0 0
Gremio Goias 1 0 2 1 0 1 1
Coritiba Botafogo 2 1 1 0 0 1 1
Santos Atletico-PR 2 1 2 1 1 1 1
Cruzeiro Bahia 1 2 2 1 0 0 0
Criciuma Sao_Paulo 1 0 2 1 0 1 1
Vasco Nautico 2 0 2 1 0 0 1
Ponte_Preta Portuguesa 0 2 1 0 0 0 0
Vitoria Flamengo 4 2 1 0 0 0 1
Nautico Corinthians 1 0 3 2 0 1 1
Flamengo Cruzeiro 1 1 2 1 0 0 0
Goias Santos 0 3 2 1 0 0 0
Bahia Fluminense 1 2 2 3 0 1 1
Portuguesa Gremio 0 0 2 2 0 1 1
Atletico-MG Vitoria 2 2 2 1 0 0 0
Atletico-PR Vasco 5 1 2 1 0 0 1
Sao_Paulo Coritiba 0 1 2 1 0 0 0
Botafogo Criciuma 3 0 2 1 0 0 1
Internacional Ponte_Preta 0 0 2 1 0 0 0
Accuracy 11,32% 28,68% 48,16%