# Predicting Soccer: guessing which matches a model will predict correctly

I took on a project to predict the outcome of soccer matches but it turned out to be a very challenging task. I tried out different models but I only got 50-54% accuracy on my test dataset. Some of the models were created in such a way that a certain model would predict if a team will win, draw, or lose a match. That same model would also predict if the opponent of that team will win, draw, or lose the match. Each model predicting with an accuracy of about 50% on each team distinctively. The second set of models I tried, takes the combination of data from both teams and predicts which class the match belongs to (home win, away win, draw). In the system, only 10 matches are given everyday to be predicted. Meaning, if I predict the 10 matches using the second model, I have a chance of predicting 5 correctly. In this project, I only need to predict 3 matches correctly out of the 10 matches given in a day. Is there a system of knowing the 3 matches which my models have the best chance of predicting correctly? I only need to get 3 correct predictions, I usually get 5 correctly but I don't know how to select my 3 best matches.

Note: The first type of models uses about 50 features for prediction while the second uses 101. I've tried ensembles, they still give me ~50% accuracy. I'm still about to set up a system that selects matches where the prediction for the home team does not contradict the prediction for the away team using the first type of models.

This sounds like an interesting project. I recently worked on an almost case study. In order to get only 3 most accurate predictions, I think you may wanna sort those correctly predicted 5 matches by probability of event (win, draw or loose) and then select the first three matches.I hope your models are able to give you probabilities of events. I hope this helps :-)

Sounds like you could use a regression model to estimate the probabilities that a team wins/draws/loses vs. another team. Basically, for any outcome (win, draw and lose), you want this:

P(A|B) = ...
P(B|A) = ...


Which means: the probability of outcome for team A given that it is matched against team B (and vice versa).

Estimations could be represented like this:

P(A > B) = 0.75 % A wins
P(A = B) = 0.10 % A draws
P(A < B) = 0.15 % A loses

P(B > A) = 0.20 % B wins
P(B = A) = 0.10 % B draws
P(B > A) = 0.70 % B loses


I think a logical step is to measure the bias towards a certain outcome. That would represent the confidence ratio of your algorithm. The more the probabilities of any outcome looks alike (i.e. P(B >/=/< A) = 0.33), the less confidence it has.

Model is as a stochastic process . Markov chains is the way to go. Create a stochastic matrix where states could be A team T ...get all the combinations possible and use past data to get initial probabilities of winning ...and then use the beautiful property of Xn= XiP^n Where Xn is probability vector of nth stage from now and Xi is initial vector and P is probability transition matrix .