I'm a huge football (soccer) fan and interested in machine learning too. As a project for my ML course I'm trying to build a model that would predict the chance of winning for the home team, given the names of the home and away team. (I query my dataset and accordingly create datapoints based on previous matches between those 2 teams)

I have data for several seasons for all teams however I have the following issues that I would like some advice with. The EPL (English Premier League) has 20 teams which play each other at home and away (380 total games in a season). Thus, each season, any two teams play each other only twice.

I have data for the past 10+ years, resulting in 2*10=20 datapoints for the two teams. However I do not want to go past 3 years since I believe teams change quite considerably over time (ManCity, Liverpool) and this would only introduce more error into the system.

So this results in just around 6-8 data points for each pair of team. However, I do have several features (up to 20+) for each data point like full-time goals, half time goals, passes, shots, yellows, reds, etc. for both teams so I can include features like recent form, recent home form, recent away form etc.

However the idea of just having only 6-8 datapoints to train with seems incorrect to me. Any thoughts on how I could counter this problem? (if this is a problem in the first place)

  • $\begingroup$ The home field advantage seems pretty important to me based on the studies I have read (I'm an engineer/economist and a BVB fan). You might also consider PKs; they don't change the long-term match outcomes on average (read Soccernomics ), but may heavily influence an individual match. $\endgroup$ Commented Apr 18, 2013 at 12:37
  • $\begingroup$ If you really only want to use the names of the teams, you could use the kind of rating system which is used for chess or other two-player games, for example [Elo][1] or [Trueskill][2]. There was also a [Kaggle contest][3] about this. You could perhaps start with one of these systems and then enhance it using the other covariates. [1]: en.wikipedia.org/wiki/Elo_rating_system [2]: en.wikipedia.org/wiki/TrueSkill [3]: kaggle.com/c/chess $\endgroup$
    – Flounderer
    Commented May 18, 2013 at 22:42
  • $\begingroup$ The only think that you will know prior to a match is the previous results and the ranking. You wont have info about shoots, corners ets, hence you need to create features that are plausible and given. $\endgroup$
    – Fierce82
    Commented Mar 8, 2019 at 14:15

1 Answer 1


What about improving your dataset by means of taking into consideration also some data about the matches vs the same opponent?


TeamA vs TeamC: 1-0
TeamB vs TeamC: 2-0
=> "infer" the fake outcome: TeamA vs TeamB: 1-2

Furthermore, in my opinion this kind of date are better than the data that you proposed, because the last year teams are often very different teams.

  • $\begingroup$ Excellent suggestion! Thanks Aslan986.. However, I believe this would contribute to the features list. I don't see how we could use this data as a 'datapoint'. Nevertheless, thanks, I will definitely try this out. $\endgroup$
    – keithxm23
    Commented Mar 18, 2013 at 22:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.