Suppose you have the following problem:
There are 100 basketball players : Player 1 is a pro, Player 100 has never played basketball before - and the rest follow some sort of Normal Distribution. However, let's assume we don't know this.
We have a lot of data (only the final game score) about games played between these players. For example, (Player 6 ,Player 51) beat (Player 8, Player 82, Player 75) with a score of 15-2. (Player 5) beat (Player 91, Player 92, Player 93, Player 94) with a score of 15-5. (Player 2, Player 3, Player 4) beat (Player 1) with a score of 15-11. Etc.
For simplicity sake, we can summarize games as : (Player 5) beat (Player 91, Player 92, Player 93, Player 94) = + 10 (i.e. 15 - 5 = 10)
The general goal of this problem is to find out:
- Rank the players based on individual ability in order from best to worst
I think this could be a difficult problem, because we don't always know if a player is good overall or only good because he is playing alongside good players. For example, suppose (Player 1, Player 100) often play on the same team - we have no way of knowing if Player 100 is equally contributing to the victories or if he just happens to be on the court and passively contributes.
Find out which "pairs of players" are better: For example, (Player 71 and Player 43) are the best pair
Find out which "triplets of players" are better: For example, (Player 63 and Player 45, Player 9) are the best triplets
This problem seems very difficult because there is no clear-cut way of isolating the skill of individual basketball players.
My Question: Is there some optimization algorithm that can be used to "reverse engineer" and "untangle" the individual skills of basketball players - perhaps this problem could be framed as some sort of "Knapsack Optimization Problem"?
Could some algorithm try to scan through different combinations of the data and try to identify the "weakest links"? Something like
- Player 1 and Player 100 always do well together
- Player 1 always does well no matter who he is playing with or who is he playing against
- Player 100 does really bad when he plays with lower tier players
- Lower tier players generally perform poorly unless they are playing with upper tier players
- Therefore, Player 100 isn't likely a good player
Is there some algorithm that can solve a problem like this?