[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [pbmserv-dev] ratings.cpp



| > if (games1 < 20) {  /* Provisional against... */
| >  int value;
| >  if (games2 < 20) /* provisional */
| >   value = (rating1+effrat2)/2 + 200*outcome;
| >  else   /* established */
| >   value = effrat2 + 400*outcome;
| >  newrating = (rating1*games1+value)/(games1+1) + (1720-rating1)/5;
| 
| >Note that the term (1720-rating1)/5 is added to your rating
| >EVERY TIME a game is completed. No record is kept of what your
| >rating would have been without this bias. This seems to contradict
| >what it says in http://www.gamerz.net/pbmserv/ratings.html
| 
| No. It is only added if games1<20 that if you is provisional.

Of course, this happens only for provisional games. That's what the
logic branch at the beginning of my code excerpt says. I was talking
about a flaw in the provisional rating system. I should have made
that more clear; sorry.

If I didn't get that much across, perhaps I wasn't clear about my
main point, either. As I read the description of provisional
ratings on the PBMserv web page, the rating you are supposed to get
as a provisional player is equal to (the provisional rating you
would have received without any bias towards 1720), shifted 20%
closer to the value of 1720. The problem is, this 20% shift
occurs after every provisional game, and its cumulative effect
results in a much bigger shift towards 1720 than 20%. For example,
suppose you just completed game 20, with a the following values:

rating1 = 1860 (your provisional rating before this game)
games1 = 19    (number of games you have completed)
games2 = 50    (your opponent has an established rating)
effrat2 = 1900 (your opponent's rating)
outcome = 1    (you won the game)

This will result in:

value = 2300
(rating1*games1+value)/(games1+1) = 1882
(1720-rating1)/5 = -28
newrating = 1854

You lose 6 points after beating an established 1900 player, 40
points higher than you. Does this seem right?

Of course, in practice this would not happen, because NO PROVISIONAL
PLAYER COULD EVER REACH 1860 by game 19 in the first place.

| Oh. I forgot to add that I think the rating-system is maybe not
| perfect but close and I haven't seen anything better yet.

How about replacing this: 

 newrating = (rating1*games1+value)/(games1+1) + (1720-rating1)/5;

By this:

 unbiasedrating1 = rating1 - (1720-rating1)/4;
 newunbiasedrating = (unbiasedrating1*games1+value)/(games1+1);
 newrating = newunbiasedrating + (1720-newunbiasedrating1)/5;
 
David