Forex Forecast

In our office, we regularly conduct several rounds of football / foosball after work. I put together a small java program that generates 2vs2 random lists from available players and then saves the matching results in a database.

The current score prediction uses the simple average of all previous match results from the 4 players involved. This gives a very rough estimate, but I would like to replace it with something more complex, taking into account such things as:

  • players can play well as attackers, but poorly as a defender (or vice versa)
  • players succeed against a specific opponent / bad against others.
  • some teams work well together, others don't
  • skills change over time

What will be the best algorithm for predicting the outcome of the game as accurately as possible?

Someone suggested using a neural network for this, which sounds pretty interesting ... but I don’t have enough knowledge on this topic to say if this can work, and I also suspect that too many games may be required for reasonable preparation.

EDIT:
Had to take a longer break in this due to some project deadlines. To clarify the question:

Given the following mysql table containing all the matches that have been played so far:

table match_result match_id int pk match_start datetime duration int (match length in seconds) blue_defense int fk to table player blue_attack int fk to table player red_defense int fk to table player red_attack int fk to table player score_blue int score_red int 

How would you write the predResult function (blueDef, blueAtk, redDef, redAtk) {...}
evaluate results as close as possible, execute any sql, do calculations or use external libraries?

+4
source share
5 answers

Use the TrueSkill algorithm, this is very good. I implemented it for fobball and chess, and it works very well. Colleagues told me it's almost too good.

For details on how this works, as well as a link to my implementation, see the "Calculate Your Skill " section of the blog.

+3
source

Why use a neural network? Use statistics, perhaps the correlation between each player will be a good measure.

+2
source

Just to start collecting some information: For this player, we need:

  • the position they played.
  • final result

A good attacker will score points. A good defender will prevent scoring.

The real information will be from a good attacker playing against a good defender.

+1
source

Try applying the Naive Bayes classifier.

Bayesian learning is a probabilistic approach based on the assumption that percentages are determined by the probability of distributions and that optimal decisions can be made by reasoning about these probabilities along with the observed data. [Mitchell, T. (1997), machine learning]

The exact distribution of players can lead to different results. If your data has a template in it, a template based on your variables, the Naive Bayes classifier can give good results.

The algorithm is not very complicated. I think one with some knowledge of probability can understand and apply it.

In intrusion detection systems, it is used to identify network anomalies by looking at various network parameters. The Bayesian approach can be very successful in specific data types and provide high levels of TP and low FP. But it can also lead to high FP rates, depending on your data. Your data will determine the best approach.

You can use Weka ( http://www.cs.waikato.ac.nz/~ml/weka/ ), a data mining software library and try different algorithms. It contains the Naive Bayes classifier. Just try and see.

0
source

One option is to try to guess the difference in points of some linear model . If you have more games than players, you can score the least squares of points for each player, creating a matrix of games (+1 for a player in one team, -1 for another, 0 for the viewer) for all games and the result is a vector for spreads.

0
source

All Articles