Table of Contents
|
Late updates (2021)
I relied on the gladiabots forum to stay online for long and now (2021.12) is gone, lots of somewhat useful discussions about the elo there are now gone, at least for my level of access. What a pity and it is a reminder of "don't wait too long to make a backup, even just a screenshot of a page" (a screenshot is not better than the source, but it is something).
Overview
Arpad Elo's formula (from now on "elo") was defined in the seventies to predict the performance of chess players in direct matches. This can be applied to predict the performance of whatever two objects directly compared, when those object "value" is variating.
It is likely that there are a lot of studies about systems using the elo formula, but I try to search some every now and them and I do not find what I am interested in1 . Therefore the usual question arise: do I spend more resources to search possible existing solutions or I create them on my own? After a bit of search I always go for the second option, also for personal experience. Nothing is better than do things in person to understand the better. When one reads them, he may miss the importance of some properties, for this practice helps. Indeed sometimes, even when I find an already existing solution, I continue with my own solution for the sake of personal experience.
The context
One game that I strongly recommend you to play is gladiabots. The dev kindly let me access to part of the database of online matches and so I started to analyze how good was the elo to give an approximation of the real strength of a player. Note that the real strength of a player is always relative to the strength of the other players playing, this is when ratings are important and the elo may help a lot, especially if only duels are done and no team competition.
The explorations
The explorations done so far are, for the moment (2017.06) indexed in the gladiabots wiki on reddit, here: https://www.reddit.com/r/pireThoughts/wiki/pier4r_oc/2017/10/gladiabots_pier4r_nvidia_k1 and I will report here the ones that I think are useful to gain insights on how a rating system based on elo may work. It is important to observe that the rating system is affected by how the pairings for a match are done, therefore in general one should consider the model made by (at least) the following components: rating system, matchmaking procedure, playerbase.
One can see the code employed here (awk) and here (php).
Correct predictions ?
The first analysis I made ( here and successive posts ) checked what was the percentage, in general and for group of players, that the correct result was determined. Like player A vs player B, player A wins. Was the elo predicting a win for playerA ? Since considering draws is a bit tricky, the percentage of prediction is around 62% . at least better than a random choice, 50%. But further analysis improved that.
In this post I started to refine the checks in terms of prediction of the result. I simply stated: how is the percentage that the player with higher elo will win the match? Considering this winning percentage for score differences of 25 points at time.
Therefore: "How is the percentage that a player with 1 to 25 points more than the opponent wins?" "How is when the difference is between 25 and 50 points?" and so on. Consider that the difference of points is more meaningful according to the K factor in the elo formula and this can change in gladiabots due to the league system.
The variant of the elo formula in Gladiabots is the following:
The exact formula is:
player 1 expected result = 1 / (1 + 10^( (player 2 score - player 1 score) / 400) )
# player 1 result = 1 for victory, 0 for defeat, 0.5 for draw
player 1 score delta = round( K_factor * (player 1 result - player 1 expected result))
player 2 score delta = - player 1 score delta
# actual draws mean that the player 1 score is halved
One can observe that the points exchanged after a match makes the sum zero. So player1 score delta + player 2 score delta = 0.
This is important to realize that if there are 5 players starting with a certain reference score (in Gladiabots this is 1000), there will be 5000 points in the system, not more not less. Players may become inactive and be hidden, but if they would be not hidden, there sum of all scores would be equal to the number of players times 1000.
The league system in gladiabots groups the playerbase in leagues according to their score and every league has its k_factor value. The higher the league, the smaller the k_factor , the smaller the change in score when points are exchanged.
Goinf back to the prediction of the result given difference of score, when the difference is up to 25 points but a single match may exchange 30 points, means that the difference is less meaningful than in the case that a single match may exchange 10 points.
I decide to plot here the results that I computed at that time for the league 4, where the K_factor was 25 and therefore all the score difference where more meaningful.
One can see that the winning prediction (actually I did not compute the 'not losing' prediction) improves a lot when the score difference is large and it makes sense. If two players have reasonably similar scores (according to K_factor values and the divisor in the Elo formula, in this case I mean the 400 value) they likely draw or win/lose the same amount of times, but once a clearly stronger player is there, there are no chances left.
But then why the inning percentage is only 80%? Well when I computed this, the data was related to a moment in which gladiabots was hevaily rock paper scissor based (alpha 5.2). This means that a player with "nothing to lose" may found a way to break the tactics of more successful players. After that, with alpha 5.3.1 , 6.1.3, 7.8, 7.11 and alpha 8.x the game kept the possibility that low players finds winning strategies against stronger players, but it is more unlikely. Moreover when stronger players are testing, they likely lose due to mistakes and last but not least, there are always new stronger players raising that for a while have lower scores.
This in general can well explain why the prediction is not 100% accurate, but having a 70% or higher accuracy is already great.
Practice helps
For long time I thought "One improves with a sort of square-root-looking curve on a skill. The more difficult the achievement, the more practice plus theory is needed" well I tried in this post to apply it to gladiabots checking how the score distribution improved over time.
At that time I was still using data from gladiabots alpha 5.2 and the analysis was a bit lacking since scores slowly inflate (due to a mechanism that I hope to explain later, but it is like the rich gets richer collecting money from newcomers ), instead an analysis comparing the score one has versus the opponents score is a bit better, but nevertheless this analysis shows a clear trend considering that the "score inflation" is not fast enough to perturb the data that I was analyzing at that time.
Quoting me from my post (here, with data):
So in league 4 one can clearly see that the more the players play, the higher is their median elo. It means that the more they play the higher is their score on regular basis. Higher compared to the score that they had before. Like someone that was used to have 1200 now has often 1300+.
One can see this with 3 lines. 20th percentile, median and 80th percentile.
median score (or elo) means: given the collection of all the player scores during time (after each game), we sort those from lower score to high score and we pick the element in the middle (without doing the average). For example the median of the collection "-2000 1 3 5 1000" is 3 because it is in the middle.
median: given all the median scores (see above) of players that were in the 4th league when they played their 100th game (or 50, 150, 200, 250 and so on), sort them from lower to higher. Then pick the median (so the median of the median score), in other words the value in the middle of this collection.
The 20th percentile means: pick the first element that is bigger than 20% of the elements of the collection but smaller than the rest. The 80th percentile is "bigger than 80% of the elements, but smaller than the 20%".
In this way one can see that players with high median elo (the 80th percentile) improve steady with games played (but eventually reaching a plateau). The same happens for players in the middle (median) and even for players that hold lower scores for long time, their score slowly increases.
Then the graph jumps almost to one point because the number of people having passed the 1350 is a little (now there are more of them, but not 3 days ago).
Anyway this graph respond to my question "do players improve over time given a fixed metric in the top league?", the answer is YES. (the graphs of league1,2,3 answer "not sure")
This is also obvious. The more games one play, unless he is very detached from the game, the more one fixes the Ais that gets slowly better.
Another point is the median elo by date of the top20 players in Nov/Dec 2016.
here: https://forum.gladiabots.com/viewtopic.php?f=5&t=9&start=60#p971 Although some players may have played not much in certain days.
Another point about practice.
https://forum.gladiabots.com/viewtopic.php?f=5&t=9&start=100#p5171
So I have an idea since high school that improvements (in skills or whatever) follows more or less a logarithmic curve. It means, at the start the improvement is significant for relatively little effort, then the effort needed for every significant improvement is a lot. Of course, every individual has his curve.
Translated in gladiabots this should mean the following: the more one plays, the stronger one gets over the others. There are a lot of obstacles to this though.
First if there are two players with very similar development, they will end up (thanks to the glorious elo formula) with similar scores and a winning ratio against each (direct fights) other of 50% more or less.
What if there are more players like the first player? What if a player does not play continously so the player's tactics gets obsolete and has to catch up again? What if one is testing losing points in the process? And many other obstacles.
In those cases, before building a complicated analysis, one could do one with assumptions.
The following analysis compares the median score of a player between a range of games (say, between the game no 200 and the game no 300) against the median score of the opponent. This should also help to minimize the effects of elo inflation (see FAQ thread) and caps due to league max score limits and therefore limited population. One has always a reference against the actual, active, playerbase that define the opponent median score.
If the score formula is well done (and it is) and the matchmaking is well done as well (and it is, but was less good in the past), a player that is improving his score will increasingly match against players with higher score too. If this does not happen, it is because the player is able to retain points most of the time, so having a median score higher than the opponents. That is, aside from few matches against players with similar high score, the bulk of the matches are done against players with lower score. Of course this can be also due a poor matchmaking (and it was the case in the early stages of alpha 7.8, but only for few days).
One can see three type of examples.
When a player reaches a plateau compared to most of the other players, and so the score difference against the average opponents is stable.
When a player dominates but reaches a plateau as well, and so the score difference against the average opponent is big (but stable). Or even the others may catch up, shrinking the score difference.
When a player improves (not yet stable), so the score difference changes towards more positive values.
Being on the top hurts, when losing to lower players. Also A zero sum game.
https://forum.gladiabots.com/viewtopic.php?f=5&t=9&start=60#p1226 (ELO compt. changes)
https://wiki.gladiabots.com/index.php?title=Leagues_and_league_score
https://imgur.com/a/GVyI595
https://forum.gladiabots.com/viewtopic.php?f=7&t=126&p=1253#p1253 (FAQ gladiabots)
In short the elo works pretty cool. It says "if the distance in score between two player is a lot. I expect that the higher player will win. If he wins, he receives little reward, as the victory was expected. If he loses, he receives a large punishment, as he was not expected to lose". In other words, the elo punish what is not expected.
One could say "this is not fair", but one would be wrong. Statistics shows that the percentage of wins for high score players versus low score players is large. Over 75% (and a lot of draws, See below). So the elo is right. High score players either honor the gap, winning, or they don't deserve that big gap.
Conversely, since the points lost by a player are gained by the other, who wins high score players gets a huge reward. As the gap has to shrink, since the high score player is not that strong, if he loses, and the large gaps is unjustified, and it has to shrink.
This is a bit different when scores are closer. Then there is more uncertainity and the rewards/punishment are smaller.
Quoting one of the references above.
Observations:
- If a player loses against someone that has 100 points less in league4, then he needs 2 wins against someone with 100 point less to compensate the loss and get some profit.
- If a player loses against a player with 200 point less in league4, then he needs 4 wins against players with 200 points less to compensate the loss and get some profit.
- If a player is at the top with large margin over other players in the league, and the activity in the league is variable, so sometimes top players are active sometimes players with 200 or 300 points less than the player are active, to keep the top either one is very good, or plays a little (still not losing too much though).
In other words the current Elo formula (that can be tweaked a lot creating variants. For example one variant is applied to ass. football) is crafted to model the following: "The score is a prediction of the player strength, so If you are good compared to your opponent, I expect you to win, so you get little reward, if you are not good, it is a surprise, so you get a lot of reward. Conversely, if you lose from someone that is good, it is expected, so I do not change your rating so much, if you lose someone that is rated way less than you, maybe my prediction was very off the track, so I take away a lot of points from you"
To compare scores in different periods. It is all about the difference. Also with inflation.
Now scores cannot be really be compared, as two players playing in different moments may play against two different playerbases. But if one assumes that the "population" has a similar distribution of skills, then one can resort to score differences to see what player did better compared to the active playerbase during his activity.
This puts off possible arguments about inflation. Inflation is different to compute as the ELO is a zero sum exchange (one player gets X points, the other -X). To see if there is inflation one should check if the amount of points that the active players holds is bigger than the formula: number_of_active_players * starting_score.
For example with 10 players and a starting score of 1000, the points in the system should be 10000. Can they get more? Sure. If the current players were able to "capture" points from players not playing anymore. Therefore one has 10 players and more than 10000 points.
Another point of apparent inflation is if the points in the system gets accumulated on the top, like a ladder. Players that have 1200 points picks points from those having 1000 points. Players that have 1400 points picks points from players having 1200 points and so on. Until the top. The top is able to hold the points with scores like 2000 (or 2300 or what not). They cannot go much higher, as the points lost grow when they lose, but they hold the points. Therefore if the system of active players hold a lot of points, the top can get slowly higher and higher, since it attracts the points there.
A point is here: https://forum.gladiabots.com/viewtopic.php?f=7&t=493&start=40#p12007 (Elo score boom)
Note, thanks to the introduction of the global stats page (nice touch GFX!) we have also the score average.
Now, since the score formula is a zero sum exchange of points, if in the system there would be as many points as every active player had at the start of his multiplayer career, the average would be around 1000.
Instead the average in this moment is 1158. This means that there are a lot of points (actually (1158-1000)*(318 players) ) that comes from now inactive players.
Here is a strong clue where the score inflation comes from.
(a) the active players keeps available points taken from now inactive players
(b) some players are able to accumulate more points than the others. reaching higher and higher scores (this also needs that the other players reach higher scores as well)
I'd say if the average for the global stats stays the same or also go down, it may (may because, it is complicated) be a sign that there is not enough inflation anymore.
[[/quote]]
Anyway even with inflation, due to the elo formula, one can have score distances as reference.
Therefore a top1 at 2100 with the top5 at 1900 is comparable to a top1 at 1600 with the top5 at 1400 for the argument above.
A quote from https://forum.gladiabots.com/viewtopic.php?f=22&t=126&start=20#p3880 (FAQ)
One could say "ok, so how can I compare players according to historical scores?".
Well if we want to be pedantic, one cannot compare scores because those were achieved in certain conditions that are not repeated. One should provide the same opponents, the same level of skill for every opponent, the same type of AI controls, and so on. Too complicated.
But then could we approximate and say that a 1600 score now is equal to a 1600 score in 3 week in the future or 3 weeks in the past? No. It depends, accepting approximation, to the rest of the scores assuming that the score formula does not change [1]. If a 1600 score was in the past (3 weeks ago) a score held for a couple of games in the top league by the top player, while in the future (3 weeks from now) a 1600 score is the score normally held by players between the position 10 and 15, surely a score of 1600 was way more prestigious in the past than in the future. So relatively to the opponents active at that time, a 1600 in the past is way more stronger than a 1600 in the future.
But then we cannot compare at all? No we can still compare, but not at glance. Thanks to the score formula (see [1]) one could compute what a player could get with a certain score against his opponents at that time.
For example if in november 2016 a 1600 score player in the top league, winning the other players in the top20 could have get on average between 8 and 5 points, it means that the distance between the players was quite large and so the player was dominating. Instead if in january 2017 a player with 1600 score in the top league would get between 10 and 25 points from the top20, it means that the player is not weak but neither dominating. Actually he has often many over than him.
The problem is to get a "snapshot" of the ranking at a certain time (I'm doing this on telegram with screenshots), since mostly one can see the historical elo of one players, but not how strong was this score compared to the other players at that time.
Example from the telegram chat
###
Pier A:
TCT around 2200 is outstanding
NullPointer:
you're right that the ELO is fine now that I stopped to think about it.
He's ~8% ahead of the 2nd and is not losing many points with a loss, which is correct if look at the past.
Not that his score is not outstanding, but I was twice as higher than the 2nd (14%) back when I was playing hours in a row, which would be the equivalent of 2500 today and each loss would take between 20-30 (more than 1% of all my points) points from me, while today he loses 0.5%-0.8%.
So yes, I think the ELO is working fine
Pier A:
Hmm two flaws of your argument if I'm not mistaken. First you talk about percentages, that are wrong because the score is limited by matchmaking and elo formula. So you should account in terms of 'percentage of predicted success by the score formula' if you want to compare apples to apples. Percentages makes sense in other context. Again a confusion with the score model.
If you have 200 points and the second has 100,you have 100% more points, but the predicted winning percentage with the score formula is lower compared to someone that has 2200 and the second is 2000. Because what matters is the delta not the percentage. This is a confusion in using percentages. If I have 0 euro and I get 1, my improvement is outstanding in percentage terms, even compared to the one that had 1000 euro and ended with 5 gazillion.
As a reminder: smaller numbers, same delta, bigger percentage. Higher numbers, same delta, smaller percentage. Due to the score model, what counts is the delta.
Said that, tct has an outstanding score.
See also:
https://forum.gladiabots.com/viewtopic.php?f=7&t=472 (On comparing historical scores)
The top players harvest all. Or not?
Explorations that I did here:
https://forum.gladiabots.com/viewtopic.php?f=7&t=493&start=20#p8887 (elo score boom)
[[span style="color:gray; font-style:italic;"]]
I am interested in the "elo economy" and slowly I formulate useful questions that help me to gain insights over it. See more here.
One of those question is "is there really an inflation that will let the scores to explode?" , although the best score so far , 2285, broke the previous record only after months. I was thinking that 2300 would have happened sooner - In February - but instead it is quite difficult to get there. So if there is an inflation it is not so big.
Therefore I started to see the elo as a currency exchanged with dynamic exchange rates.
So I thought if there is inflation, or better "the rich ones get richer", it is true that since the score (or elo) is not created out of thin air in an exchange then the group of people with higher scores are harvesting the group of people with lower scores to get "richer", or higher.
So, focusing on GM, I collected a quite large sample of stats..
89396 Games completed between the dates: 2017-05-02 07:05:25 and 2017-06-17 09:08:56 , Paris time.
The I asked the database. How much is the difference of points exchanged between people with 1400 or higher score and people with 1300 or lower score?
An example to clarify what I mean.
PlayerA 1380 vs playerB 1420 : playerB wins gaining 8 points
playerA 1380 vs playerC 1410 : playerA wins gaining 12 points
playerD 1350 vs playerE 1400: playerE wins gaining 8 points.
The net trade, or difference, is "the group with 1400 or more points" gained 4 points (8+8 - 12 ).
Now it is true that a player can sometimes appear in the group of "lower than 1400" and sometimes in the group "higher than 1400" but it does not matter much because the flow of points will show nevertheless a trend. The same can be said for players that go inactive therefore holding their points outside the flow because no other player can gain or lose points against inactive players.
So in the sample checked there were 7906 games between player under 1400 and players with 1400+ points and the trade of points is in favor of those with 1400+ points. This group gained 4742 net points.
Then I asked the same for the 1500+ group (therefore players up to 1499 points counted as "poor" in this case). Still the net trade is positive. The group 1500+ extracted from the group 1499- , 794 points in 13464 games. One can see that while the flow is positive, it shrank a lot. It is not that a lot of points flow from 1499- to players above their score.
Then I asked, how is the flow between players 1600+ and players 1599- ? Still positive (so, points "flow" upwards). 917 points gained in 15491 games.
Then the surprise started. I know that the elo is awesome and it is not forgiving. If one has a score way higher than another player, he needs to win really a lot and to keep the score, not even increasing it, one has to lose a little. But I did not expect what I found.
The players of the group 1700+ actually lose points to the players below them. There is no harvesting! They have lost 757 points in 15920 games.
The negative trend continues. (so, no harvesting)
1800+ vs 1799- : 1082 points lost in 14259 games
1900+ vs 1899- : 1388 points lost in 11534 games
2000+ vs 1999- : 1524 points lost in 7202 games
2100+ vs 2099-: 1192 points lost in 2703 games
2200+ vs 2199-: 180 points lost in 373 games (indeed at this time there is no 2200+ in the leaderboard, not even inactive)
So what one can derive from this and the rest of the observations in many other threads? Surely that if there is a player with a very high score compared to all the others, that player has outstanding tactics compared to the active playerbase (not compared to the inactive or the future playerbase) but it does not mean that when there are more players with "high" scores (like many 2000+) the quality is lower.
This also means that to keep high scores is very difficult, since there is a negative trade of points from the high score regions (the sweet spot is around 1700 points. "Easy" to take juicy points from the top and from the bottom), and I would say that to keep an high score one has to "harvest" other high score players rather than low score players, otherwise, one can see, the trade will end up being negative and the score level will be quickly lost.
So if before I thought the process was like:
1400 gets farmed by 1500, 1500 gets farmed by 1600, 1600 gets farmed by 1700, 1700 gets famed by 1800, 1800 gets farmed by 1900, 1900 gets farmed by 2000, 2000 gets farmed by 2100.
Now it is more likely that 1800, 1900, 2000+ gets farmed by 1700, 1600 and 1500 while high scores are reached because 1800, 1900, 2000 exchange points between each other.
So the last bits.
2000+ vs 1800-2000: 552 points LOST in 1692 games (inverted harvsting, so 2000+ survive over other almost 2000+ that likely are sent back in the lower ranges)
1900-2000 vs 1700-1900: 281 points gained in 1618 games (there is some harvesting)
1800-1900 vs 1600-1800: 221 points gained in 1717 games
1700-1800 vs 1500-1700: 258 points gained in 2444 games
1600-1700 vs 1400-1600: 665 points gained in 3019 games
1600-1700 vs 2000-2300: 586 points gained in 1141 games.
So the real sweet range where the majority of the points seems to accumulate seems to be 1600-1700 . (considering also the previous post) Then some points flow upwards captured by few players able to hold 2000+ , while all the others may go up and then fall down again due to how the elo formula works.
In other words. The one at the top surely accumulate a lot of points in their hands, but not more than a certain point. After that is difficult to not have a negative balance. With more points lost than gained. That is: the top players hold the score, not going up up anymore as it is hard to do it.
Todo
- mentioning more analysis that I made, although not on single players or activity but on the elo properties.
- 2018-04-08. I am almost sure I checked all the major threads talking about elo and score system on the gladiabots forum and wiki (something may be in telegram, but it should be small). I should remember that new observations should be ported also here. Or even better, first here and then in the forum. There is a lot to do. Like an automated "median elo vs opponent median elo".
Data
median elo by date top20 Nov/Dec 2016
playerID:474
date:2016-11-04, median_elo:1108
date:2016-11-05, median_elo:1480
date:2016-11-06, median_elo:1592
date:2016-11-10, median_elo:1612
date:2016-11-15, median_elo:1601
date:2016-11-16, median_elo:1607
date:2016-11-17, median_elo:1641
date:2016-11-18, median_elo:1658
date:2016-11-19, median_elo:1616
date:2016-11-20, median_elo:1642
date:2016-11-21, median_elo:1652
date:2016-11-23, median_elo:1640
date:2016-11-24, median_elo:1646
date:2016-11-25, median_elo:1656
date:2016-11-26, median_elo:1675
date:2016-11-28, median_elo:1705
date:2016-11-29, median_elo:1682
playerID:77
date:2016-11-04, median_elo:1415
date:2016-11-05, median_elo:1401
date:2016-11-07, median_elo:1429
date:2016-11-08, median_elo:1320
date:2016-11-09, median_elo:1249
date:2016-11-10, median_elo:1210
date:2016-11-11, median_elo:1359
date:2016-11-12, median_elo:1337
date:2016-11-13, median_elo:1460
date:2016-11-14, median_elo:1510
playerID:269
date:2016-11-04, median_elo:1107
date:2016-11-05, median_elo:1156
date:2016-11-06, median_elo:1319
date:2016-11-07, median_elo:1475
date:2016-11-08, median_elo:1423
date:2016-11-09, median_elo:1389
date:2016-11-10, median_elo:1351
date:2016-11-11, median_elo:1457
date:2016-11-12, median_elo:1340
date:2016-11-13, median_elo:1483
date:2016-11-14, median_elo:1390
date:2016-11-15, median_elo:1482
date:2016-11-16, median_elo:1363
date:2016-11-17, median_elo:1380
date:2016-11-18, median_elo:1517
date:2016-11-19, median_elo:1555
date:2016-11-20, median_elo:1570
date:2016-11-21, median_elo:1627
date:2016-11-22, median_elo:1581
date:2016-11-23, median_elo:1628
date:2016-11-25, median_elo:1610
date:2016-11-26, median_elo:1660
date:2016-11-27, median_elo:1516
date:2016-11-28, median_elo:1516
date:2016-11-29, median_elo:1507
date:2016-11-30, median_elo:1522
playerID:2735
date:2016-11-05, median_elo:1051
date:2016-11-06, median_elo:1166
date:2016-11-07, median_elo:1143
date:2016-11-08, median_elo:1188
date:2016-11-09, median_elo:1215
date:2016-11-10, median_elo:1263
date:2016-11-11, median_elo:1317
date:2016-11-12, median_elo:1337
date:2016-11-13, median_elo:1381
date:2016-11-14, median_elo:1439
date:2016-11-15, median_elo:1489
date:2016-11-16, median_elo:1470
date:2016-11-18, median_elo:1420
date:2016-11-20, median_elo:1412
date:2016-11-22, median_elo:1408
date:2016-11-23, median_elo:1465
date:2016-11-24, median_elo:1427
date:2016-11-25, median_elo:1447
date:2016-11-26, median_elo:1423
date:2016-11-27, median_elo:1421
date:2016-11-28, median_elo:1473
date:2016-11-29, median_elo:1492
date:2016-11-30, median_elo:1487
date:2016-12-01, median_elo:1503
playerID:21222
date:2016-11-16, median_elo:1061
date:2016-11-17, median_elo:1190
date:2016-11-18, median_elo:1358
date:2016-11-19, median_elo:1353
date:2016-11-20, median_elo:1342
date:2016-11-21, median_elo:1454
date:2016-11-22, median_elo:1415
date:2016-11-23, median_elo:1430
date:2016-11-24, median_elo:1501
date:2016-11-25, median_elo:1597
date:2016-11-26, median_elo:1594
date:2016-11-27, median_elo:1549
date:2016-11-28, median_elo:1525
date:2016-11-29, median_elo:1563
date:2016-11-30, median_elo:1527
playerID:353
date:2016-11-04, median_elo:1047
date:2016-11-05, median_elo:1210
date:2016-11-06, median_elo:1400
date:2016-11-07, median_elo:1452
date:2016-11-08, median_elo:1527
date:2016-11-09, median_elo:1365
date:2016-11-10, median_elo:1400
date:2016-11-11, median_elo:1425
date:2016-11-12, median_elo:1422
date:2016-11-13, median_elo:1425
date:2016-11-14, median_elo:1468
date:2016-11-15, median_elo:1455
date:2016-11-16, median_elo:1516
date:2016-11-17, median_elo:1543
date:2016-11-18, median_elo:1503
date:2016-11-19, median_elo:1460
date:2016-11-20, median_elo:1484
date:2016-11-21, median_elo:1475
date:2016-11-22, median_elo:1432
date:2016-11-23, median_elo:1458
date:2016-11-24, median_elo:1490
date:2016-11-25, median_elo:1542
date:2016-11-26, median_elo:1454
date:2016-11-27, median_elo:1562
date:2016-11-28, median_elo:1545
date:2016-11-29, median_elo:1550
date:2016-11-30, median_elo:1602
date:2016-12-01, median_elo:1546
playerID:21022
date:2016-11-18, median_elo:1138
date:2016-11-19, median_elo:1176
date:2016-11-20, median_elo:1227
date:2016-11-21, median_elo:1293
date:2016-11-22, median_elo:1366
date:2016-11-23, median_elo:1313
date:2016-11-24, median_elo:1315
date:2016-11-25, median_elo:1324
date:2016-11-26, median_elo:1439
date:2016-11-27, median_elo:1379
date:2016-11-28, median_elo:1377
date:2016-11-29, median_elo:1452
date:2016-11-30, median_elo:1446
date:2016-12-01, median_elo:1420
playerID:1261
date:2016-11-05, median_elo:1110
date:2016-11-06, median_elo:1156
date:2016-11-07, median_elo:1106
date:2016-11-08, median_elo:1147
date:2016-11-09, median_elo:1150
date:2016-11-10, median_elo:1155
date:2016-11-11, median_elo:1226
date:2016-11-12, median_elo:1307
date:2016-11-13, median_elo:1477
date:2016-11-14, median_elo:1488
date:2016-11-15, median_elo:1515
date:2016-11-16, median_elo:1547
date:2016-11-17, median_elo:1525
date:2016-11-18, median_elo:1567
date:2016-11-19, median_elo:1590
date:2016-11-20, median_elo:1602
date:2016-11-21, median_elo:1567
date:2016-11-22, median_elo:1557
date:2016-11-23, median_elo:1525
date:2016-11-24, median_elo:1500
date:2016-11-25, median_elo:1506
date:2016-11-26, median_elo:1526
date:2016-11-28, median_elo:1513
date:2016-11-29, median_elo:1486
date:2016-11-30, median_elo:1483
date:2016-12-01, median_elo:1456
playerID:1459
date:2016-11-05, median_elo:1024
date:2016-11-06, median_elo:1062
date:2016-11-07, median_elo:1121
date:2016-11-08, median_elo:1202
date:2016-11-09, median_elo:1266
date:2016-11-10, median_elo:1350
date:2016-11-11, median_elo:1370
date:2016-11-12, median_elo:1354
date:2016-11-13, median_elo:1422
date:2016-11-14, median_elo:1459
date:2016-11-15, median_elo:1528
date:2016-11-16, median_elo:1419
date:2016-11-17, median_elo:1521
date:2016-11-18, median_elo:1502
date:2016-11-19, median_elo:1616
date:2016-11-20, median_elo:1547
date:2016-11-21, median_elo:1532
date:2016-11-22, median_elo:1597
date:2016-11-23, median_elo:1538
date:2016-11-24, median_elo:1466
date:2016-11-25, median_elo:1487
date:2016-11-26, median_elo:1506
date:2016-11-27, median_elo:1420
date:2016-11-28, median_elo:1460
date:2016-11-29, median_elo:1473
date:2016-11-30, median_elo:1497
date:2016-12-01, median_elo:1469
playerID:629
date:2016-11-04, median_elo:1012
date:2016-11-05, median_elo:968
date:2016-11-06, median_elo:982
date:2016-11-11, median_elo:1226
date:2016-11-12, median_elo:1301
date:2016-11-13, median_elo:1292
date:2016-11-14, median_elo:1253
date:2016-11-15, median_elo:1308
date:2016-11-16, median_elo:1446
date:2016-11-17, median_elo:1522
date:2016-11-18, median_elo:1449
date:2016-11-19, median_elo:1384
date:2016-11-20, median_elo:1330
date:2016-11-22, median_elo:1374
date:2016-11-23, median_elo:1424
date:2016-11-24, median_elo:1432
date:2016-11-25, median_elo:1357
date:2016-11-26, median_elo:1363
date:2016-11-27, median_elo:1437
date:2016-11-28, median_elo:1444
playerID:4139
date:2016-11-06, median_elo:1174
date:2016-11-07, median_elo:1396
playerID:20755
date:2016-11-15, median_elo:1088
date:2016-11-16, median_elo:1113
date:2016-11-17, median_elo:1132
date:2016-11-19, median_elo:1169
date:2016-11-20, median_elo:1249
date:2016-11-21, median_elo:1301
date:2016-11-27, median_elo:1279
date:2016-11-28, median_elo:1321
date:2016-11-29, median_elo:1373
date:2016-11-30, median_elo:1440
playerID:1602
date:2016-11-05, median_elo:999
date:2016-11-07, median_elo:927
date:2016-11-08, median_elo:991
date:2016-11-09, median_elo:1029
date:2016-11-10, median_elo:1099
date:2016-11-11, median_elo:1256
date:2016-11-12, median_elo:1323
date:2016-11-13, median_elo:1305
date:2016-11-14, median_elo:1403
date:2016-11-15, median_elo:1447
playerID:6865
date:2016-11-07, median_elo:1065
date:2016-11-08, median_elo:1079
date:2016-11-09, median_elo:1099
date:2016-11-10, median_elo:1057
date:2016-11-11, median_elo:1152
date:2016-11-12, median_elo:1091
date:2016-11-13, median_elo:1270
date:2016-11-14, median_elo:1276
date:2016-11-15, median_elo:1324
date:2016-11-16, median_elo:1445
playerID:8
date:2016-11-02, median_elo:1020
date:2016-11-03, median_elo:1139
date:2016-11-04, median_elo:1243
date:2016-11-05, median_elo:1213
date:2016-11-06, median_elo:1223
date:2016-11-07, median_elo:1067
date:2016-11-08, median_elo:1179
date:2016-11-09, median_elo:1229
date:2016-11-10, median_elo:1304
date:2016-11-11, median_elo:1219
date:2016-11-12, median_elo:1296
date:2016-11-13, median_elo:1246
date:2016-11-14, median_elo:1238
date:2016-11-15, median_elo:1383
date:2016-11-16, median_elo:1394
date:2016-11-17, median_elo:1365
date:2016-11-18, median_elo:1301
date:2016-11-19, median_elo:1397
date:2016-11-20, median_elo:1338
date:2016-11-21, median_elo:1301
date:2016-11-22, median_elo:1362
date:2016-11-23, median_elo:1385
date:2016-11-24, median_elo:1417
date:2016-11-25, median_elo:1395
date:2016-11-26, median_elo:1398
date:2016-11-27, median_elo:1373
date:2016-11-28, median_elo:1458
date:2016-11-29, median_elo:1414
date:2016-11-30, median_elo:1413
date:2016-12-01, median_elo:1452
playerID:2099
date:2016-11-05, median_elo:1070
date:2016-11-06, median_elo:1168
date:2016-11-11, median_elo:1136
date:2016-11-12, median_elo:1112
date:2016-11-13, median_elo:1341
date:2016-11-14, median_elo:1364
date:2016-11-15, median_elo:1401
date:2016-11-16, median_elo:1388
date:2016-11-17, median_elo:1412
date:2016-11-18, median_elo:1441
date:2016-11-19, median_elo:1397
date:2016-11-20, median_elo:1437
date:2016-11-21, median_elo:1483
date:2016-11-22, median_elo:1560
date:2016-11-23, median_elo:1508
date:2016-11-24, median_elo:1507
date:2016-11-26, median_elo:1494
date:2016-11-28, median_elo:1495
date:2016-11-29, median_elo:1468
date:2016-11-30, median_elo:1439
date:2016-12-01, median_elo:1418
playerID:7318
date:2016-11-08, median_elo:942
date:2016-11-09, median_elo:1124
date:2016-11-10, median_elo:1231
date:2016-11-11, median_elo:1368
date:2016-11-13, median_elo:1341
date:2016-11-14, median_elo:1349
date:2016-11-15, median_elo:1315
date:2016-11-16, median_elo:1356
date:2016-11-17, median_elo:1437
date:2016-11-18, median_elo:1522
date:2016-11-19, median_elo:1431
playerID:30742
date:2016-11-22, median_elo:965
date:2016-11-23, median_elo:1140
date:2016-11-24, median_elo:1226
date:2016-11-29, median_elo:1206
date:2016-11-30, median_elo:1289
date:2016-12-01, median_elo:1420
playerID:16053
date:2016-11-12, median_elo:1020
date:2016-11-13, median_elo:1111
date:2016-11-14, median_elo:1218
date:2016-11-15, median_elo:1310
date:2016-11-16, median_elo:1291
date:2016-11-17, median_elo:1371
date:2016-11-18, median_elo:1368
date:2016-11-19, median_elo:1413
date:2016-11-20, median_elo:1405
playerID:26619
date:2016-11-19, median_elo:1021
date:2016-11-20, median_elo:1049
date:2016-11-23, median_elo:1042
date:2016-11-24, median_elo:1134
date:2016-11-25, median_elo:1242
date:2016-11-26, median_elo:1324
date:2016-11-27, median_elo:1392
date:2016-11-28, median_elo:1399
date:2016-11-29, median_elo:1423
date:2016-11-30, median_elo:1371
date:2016-12-01, median_elo:1392
Wins/losses given the elo difference. Nov/dec 2016
https://forum.gladiabots.com/viewtopic.php?f=5&t=9&start=80#p3949
At this point the kfactor was varying between 40 and 25 in different leagues. So the limit that says "ok, there is enough distance" was around 400 points of difference.
score difference:25
total games considered by the score difference: 2069
wins by higher score:1018
draws:149
losses by the higher score:902
score difference:50
total games considered by the score difference: 1848
wins by higher score:936
draws:159
losses by the higher score:753
score difference:75
total games considered by the score difference: 1648
wins by higher score:932
draws:87
losses by the higher score:629
score difference:100
total games considered by the score difference: 1450
wins by higher score:866
draws:105
losses by the higher score:479
score difference:125
total games considered by the score difference: 1263
wins by higher score:787
draws:81
losses by the higher score:395
score difference:150
total games considered by the score difference: 1103
wins by higher score:771
draws:69
losses by the higher score:263
score difference:175
total games considered by the score difference: 952
wins by higher score:672
draws:52
losses by the higher score:228
score difference:200
total games considered by the score difference: 918
wins by higher score:682
draws:54
losses by the higher score:182
score difference:225
total games considered by the score difference: 805
wins by higher score:581
draws:41
losses by the higher score:183
score difference:250
total games considered by the score difference: 710
wins by higher score:559
draws:29
losses by the higher score:122
score difference:275
total games considered by the score difference: 655
wins by higher score:505
draws:27
losses by the higher score:123
score difference:300
total games considered by the score difference: 604
wins by higher score:489
draws:30
losses by the higher score:85
score difference:325
total games considered by the score difference: 506
wins by higher score:421
draws:20
losses by the higher score:65
score difference:350
total games considered by the score difference: 457
wins by higher score:393
draws:15
losses by the higher score:49
score difference:375
total games considered by the score difference: 386
wins by higher score:339
draws:13
losses by the higher score:34
score difference:400
total games considered by the score difference: 304
wins by higher score:270
draws:6
losses by the higher score:28
score difference:425
total games considered by the score difference: 245
wins by higher score:229
draws:1
losses by the higher score:15
score difference:450
total games considered by the score difference: 196
wins by higher score:183
draws:5
losses by the higher score:8
score difference:475
total games considered by the score difference: 160
wins by higher score:144
draws:4
losses by the higher score:12
score difference:500
total games considered by the score difference: 161
wins by higher score:150
draws:1
losses by the higher score:10
score difference:525
total games considered by the score difference: 126
wins by higher score:120
draws:2
losses by the higher score:4
score difference:550
total games considered by the score difference: 97
wins by higher score:91
draws:1
losses by the higher score:5
score difference:575
total games considered by the score difference: 82
wins by higher score:76
draws:1
losses by the higher score:5
score difference:600
total games considered by the score difference: 63
wins by higher score:57
draws:1
losses by the higher score:5
score difference:625
total games considered by the score difference: 44
wins by higher score:42
draws:0
losses by the higher score:2
score difference:650
total games considered by the score difference: 37
wins by higher score:36
draws:1
losses by the higher score:0
score difference:675
total games considered by the score difference: 21
wins by higher score:21
draws:0
losses by the higher score:0
score difference:700
total games considered by the score difference: 12
wins by higher score:12
draws:0
losses by the higher score:0
score difference:725
total games considered by the score difference: 8
wins by higher score:7
draws:0
losses by the higher score:1
score difference:750
total games considered by the score difference: 4
wins by higher score:4
draws:0
losses by the higher score:0
score difference:775
total games considered by the score difference: 1
wins by higher score:1
draws:0
losses by the higher score:0
score difference:800
total games considered by the score difference: 0
wins by higher score:0
draws:0
losses by the higher score:0
Do ghost helps inject points in the system for the benefit of the players?
Yes.
https://forum.gladiabots.com/viewtopic.php?f=7&t=493&p=17299#p17299
Ok no one helped me and mcompany to keep track of the player stats. This is something that we will regret as historical records are hugely important to make future decisions. /shrugs
Anyway now that there are ghost, thanks to the kind db export from gfx (for everyone, there is a link in the unavoidable tournament meta) I just checked something about net flow of points. The same I did in the past for the flow of points between score ranges (pre ghosts). See here: http://pier4r.wikidot.com/pierworks:articles:2017-06:elo-inights
So in short there is a massive trade of points towards the players.
For example checking the week 2018-08-18 to 2018-08-25 one has.
sqlite code
/*
CREATE TABLE matches (
id INT UNIQUE ON CONFLICT REPLACE,
season INT,
type TEXT,
resolutionEngineVersion INT,
creationTime TEXT,
resolutionTime TEXT,
missionID INT,
player1ID INT,
player2ID INT,
player1InitEloRating INT,
player2InitEloRating INT,
player1JoinTime TEXT,
player2JoinTime TEXT,
player1CommitTime TEXT,
player2CommitTime TEXT,
player1Ghost TEXT,
player2Ghost TEXT,
expectedResult REAL,
actualResult REAL,
player1EloDelta INT,
end_missing_column TEXT
);
*/
select
sum(player1EloDelta)
from
matches
where
player1Ghost like 'y'
and
resolutionTime between '2018-08-18' and '2018-08-25'
;
select
- sum(player1EloDelta)
from
matches
where
player2Ghost like 'y'
and
resolutionTime between '2018-08-18' and '2018-08-25'
;
result
sqlite> .read net_flow_players_ghost_points.sqlite
-16882
-12245
So 29127 points moved from ghost to players in the week 2018-08-18 - 2018-08-24.
That is ok anyway. What matters are the score differences.
week 2018-08-11 2018-08-17
sqlite> .read net_flow_players_ghost_points.sqlite
-27223
-23650
50873 points (there was more activity)
In general the trend is that ghost release points in the system and, as I said, it is ok. One should not be obnoxious about top scores.
Win/Draw/Loss score exchange in chess
Given the chess rating system by FIDE (2021.12), that is the basis of the formula in gladiabots, once can notice the following.
K is the amount of points exhanged. If the player wins (conversely if the player loses), the player gains K_win points, while the losing players loses K_loss points. K_win+K_loss is equal to K.
If they draw, instead, the exchange of points tells us who had a "gain" in points (more than K/2 points gained) in case of a win. K_draw would be equal to: [ if K_win > K_loss; then +1 else -1 ]*(max( K_win, K_loses) - K/2).
Practical example:
- 2856 vs a 2804 and K=10. For the 2856 win: +4.3 , loss -5.7 points, draw -0.7 points. One can see: 4.3 + 5.7 = 10. Further -0.7 = [4.3 < 5.7 thus -1]*(max (4.3, 5.7) - 5) = -1*(5.7-5) = -0.7
- 2856 vs a 2684 and K=10. For the 2856 win: +2.7 , loss -7.3 points, draw -2.3 points. One can see: 2.7 + 7.3 = 10. Further -2.3 = [2.7 < 7.3 thus -1]*(max (2.7, 7.3) - 5) = -1*(7.3-5) = -2.3
Given a tournament, the point won require only the average opposition and the final score
The single performances don't matter.
Example: A player with 2856 rating does the following, a 6.5 performance over 10 rounds against a field with avg rating of 2761
At first we check possible ways to get 6.5 points out of 10 games.
Win (1 pt) | Draw (0.5 pts) | Loss (0 pts) | Total |
---|---|---|---|
4 | 5 | 0 | 6.5 |
5 | 3 | 1 | 6.5 |
6 | 1 | 2 | 6.5 |
Then we see the total points having differnt performances against different players
Opponent rating | pts (result: W/D/L) run #1 | pts run #2 | pts run #3 |
---|---|---|---|
2804 | -0,7 D | -0.7 D | +4.3 W |
2799 | +4,2 W | -0.8 D | -0.8 D |
2792 | +4.1 W | -0.9 D | -0.9 D |
2782 | +4 W | -1 D | +4 W |
2772 | +3.8 W | -1.2 D | -1.2 D |
2763 | +3.7 W | +3.7 W | -1.3 D |
2761 | +3.7 W | +3.7 W | +3.7 W |
2700 | -7.1 L | +2.9 W | -2.1 D |
2684 | -7.3 L | +2.7 W | +2.7 W |
All those runs equal +8.4 points. I didn't prove it in general - most likely someone did, if I have an idea on a common topic, someone already solved it but their solution may not be well known and therefore I do the things again as I don't find them - but likely what matters is the result given the opposition.
Now I wanted to compute the 8.4 points from the start. Thus I thought "can I compute the final points without doing all the computations, knowing the final result and the average opposition?". One can take the 2761 average as a single player and then compute win/draw/loss points (+3.7 / -1.3 / -6.3).
For all the 3 type of runs the result given are
W | D | L | Total points | |
---|---|---|---|---|
4 | 5 | 0 | 6.5 | 8.3 |
5 | 3 | 1 | 6.5 | 8.3 |
6 | 1 | 2 | 6.5 | 8.3 |
So far I didn't find a counterexample where this "independently from the run, the points exchanged are the same". I didn't prove it but it seems working.