Formula for calculating ELO performance

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

James Constance
Posts: 358
Joined: Wed Mar 08, 2006 8:36 pm
Location: UK

Formula for calculating ELO performance

Post by James Constance »

If you have a player's rating, his opponents' ratings and his score, how does one calculate his performance?

http://www.chessbase.com/newsdetail.asp?newsid=4326 gives the equation for the expected winning percentage as

Image

from which one can work backwards. But I'm a bit stuck on the maths :(

Any pointers appreciated!

Thanks

James
CRoberson
Posts: 2056
Joined: Mon Mar 13, 2006 2:31 am
Location: North Carolina, USA

Re: Formula for calculating ELO performance

Post by CRoberson »

The performance estimate is much simpler; if you really mean performance.

perforamce = ((NumWins * (opp rating + 400) + NumDraws * (opp rating) + NumLosses * (opp rating - 400)) / Num Games
James Constance
Posts: 358
Joined: Wed Mar 08, 2006 8:36 pm
Location: UK

Re: Formula for calculating ELO performance

Post by James Constance »

Hi Charles

I've seen your equation before, but I'm not sure whether or how it relates to the ELO maths. For instance it is mentioned on http://www.chesselo.com/chess_elo_two.html
Calculating Performance Rating

Performance Rating = Opponents' Average + Performance Change

Performance Change is based on the Performance Ratio. If a player scored 9 in 9 games, his or her Performance Ratio is 1.00 and Performance Change + 677. If he scores 4.5 in 9 games, it is correspondingly 0.50 and Performance Change will be 0. The needed value is taken from the Table of Performance Change.

Please notice that your Performance Rating does not depend on your own rating but does depend on your Opponents' Average and "how you performed" (Performance Change). Performance Rating is very important for getting the Grandmaster and International Master Norms.

In some Chess Organizations, the Performance Rating is calculated with "the algorithm of 400": If you win, add 400 to the opponent's rating; if lose, subtract 400, if you make a draw, no change. Then find the average.
With this equation, the max performance would be the average of the opponents' elos + 400. It doesn't seem to tie in with the FIDE tables http://www.fide.com/info/handbook?id=75&view=article.

I suspect I need to remove the integral sign from the first equation, so I'm just researching how to the maths...

regards
Rémi Coulom
Posts: 438
Joined: Mon Apr 24, 2006 8:06 pm

Re: Formula for calculating ELO performance

Post by Rémi Coulom »

James Constance wrote: Image
This is the old traditional Elo formula, based on the Gaussian distribution. Most modern rating systems use another formula that is simpler to inverse:
http://en.wikipedia.org/wiki/Elo_rating_system
(see section "mathematical details").

Rémi
Rémi Coulom
Posts: 438
Joined: Mon Apr 24, 2006 8:06 pm

Re: Formula for calculating ELO performance

Post by Rémi Coulom »

James Constance wrote:
With this equation, the max performance would be the average of the opponents' elos + 400. It doesn't seem to tie in with the FIDE tables http://www.fide.com/info/handbook?id=75&view=article.

I suspect I need to remove the integral sign from the first equation, so I'm just researching how to the maths...

regards
I have no idea how the FIDE made their table. I could not find a way to replicate it. If I am not mistaken, the R code for computing rating as a function of winning rate should be,
for the Gaussian case (the formula on the chessbase site):

Code: Select all

> qnorm(0.99)*200*sqrt(2)
[1] 657.9905
> qnorm(0.95)*200*sqrt(2)
[1] 465.2349
> qnorm(0.70)*200*sqrt(2)
[1] 148.3229
and for the logistic case (the formula in the wikipedia article)

Code: Select all

> -400*log(1/0.99-1)/log(10)
[1] 798.254
> -400*log(1/0.95-1)/log(10)
[1] 511.5014
> -400*log(1/0.70-1)/log(10)
[1] 147.1907
Rémi
Harald Johnsen

Re: Formula for calculating ELO performance

Post by Harald Johnsen »

CRoberson wrote:The performance estimate is much simpler; if you really mean performance.

perforamce = ((NumWins * (opp rating + 400) + NumDraws * (opp rating) + NumLosses * (opp rating - 400)) / Num Games
When I played chess (in France) the approximation was like

perf = opp rating + (score-0.5) * 750

Also winning against a low ranked opponent was not counting.

HJ.
User avatar
Eelco de Groot
Posts: 4567
Joined: Sun Mar 12, 2006 2:40 am
Full name:   

Re: Formula for calculating ELO performance

Post by Eelco de Groot »

Rémi Coulom wrote:
James Constance wrote:
With this equation, the max performance would be the average of the opponents' elos + 400. It doesn't seem to tie in with the FIDE tables http://www.fide.com/info/handbook?id=75&view=article.

I suspect I need to remove the integral sign from the first equation, so I'm just researching how to the maths...

regards

I have no idea how the FIDE made their table. I could not find a way to replicate it.
Well, it probably will remain a bit of a mystery how exactly this table came to be, exactly how Prof. Elo arrived at these numbers, but it is satisfying to see that at FIDE headquarters they decided to at least use Prof. Elo's original table again instead of interpolated ratings.

The table at the link is I believe identical with the one given in "The Rating of Chessplayers, Past & Present" and we solved the mystery of FIDE's numbers here in the CCC as interpolations of Prof. Elo's original table:

http://www.stmintz.com/ccc/index.php?id=423250

Code: Select all

On April 27, 2005 at 16:37:24, Dieter Buerssner wrote:

>On April 27, 2005 at 15:16:00, Dieter Buerssner wrote:
>
>> [...] I don't have erf() with me [...]
>
>I even have it. I am surprised - the MinGW environment does support it (it is
>also part of the C99 Standard). So, if you have it too, you could change one
>line:
>
>>    printf("%d %.6f %.6f\n", d, expected_score(d), 1.0/(1.0+pow(10.0,
>
>to
>
>printf("%d %.6f %.6f %.6f\n", d, expected_score(d),
>       1.0/(1.0+pow(10.0, -d/400.0)), 0.5+0.5*erf(d/400.));
>
>It reproduces exactly the number I had given in the comment to the source (and
>still shows, that none of the formula is able to reproduce the mumbers from
>FIDE).
>
>Regards,
>Dieter

Hi Dieter,

I sure wish I could follow all your C code, but I never did Study C seriously.
Are there any good compilers that are not expensive and work under Windows?


I think I can guess where FIDE got its numbers, I suspect they are mainly
interpolations of the original table in Arpad E. Elo's 'The Rating of
Chessplayers, Past & Present' (Batsford Books, 1978). Prof. Elo gave the
following table:

    D          P             D          P            D          P
 Rtg.Dif.   H     L       Rtg.Dif.   H     L      Rtg.Dif.   H     L

   0-3     .50   .50      122-129   .67   .33     279-290   .84   .16
   4-10    .51   .49      130-137   .68   .32     291-302   .85   .15
  11-17    .52   .48      138-145   .69   .31     303-315   .86   .14
  18-25    .53   .47      146-153   .70   .30     316-328   .87   .13

  26-32    .54   .46      154-162   .71   .29     329-344   .88   .12
  33-39    .55   .45      163-170   .72   .28     345-357   .89   .11
  40-46    .56   .44      171-179   .73   .27     358-374   .90   .10
  47-53    .57   .43      180-188   .74   .26     375-391   .91   .09

  54-61    .58   .42      189-197   .75   .25     392-411   .92   .08
  62-68    .59   .41      198-206   .76   .24     412-432   .93   .07
  69-76    .60   .40      207-215   .77   .23     433-456   .94   .06
  77-83    .61   .39      216-225   .78   .22     457-484   .95   .05

  84-91    .62   .38      226-235   .79   .21     485-517   .96   .04
  92-98    .63   .37      236-245   .80   .20     518-559   .97   .03
  99-106   .64   .36      246-256   .81   .19     560-619   .98   .02
 107-113   .65   .35      257-267   .82   .18     620-735   .99   .01
 114-121   .66   .34      268-278   .83   .17     over735  1.00   .00

I think at FIDE headquarters, they wanted "exact" elo-numbers so at one point
they just linearly interpolated the elo-numbers given at each percentage-point
arriving at their own table. So i'm not surprised any efforts to reproduce that
with a formula will not give the exact numbers back... I wish I could blame this
gross oversimplification on Mr. Campomanes or the even greater crook Mr.
Ilyumzhinov but I'm afraid this dates back to even longer ago...

 Regards, Eelco

For a simple approximation of TPR I always use the percentage difference with tying at 50%, from that every percentage point extra is worth about 7 elopoints, if the rating difference is not too large this usually is good enough without having to look it up in tables. Formulas like Rp = Rc + 400(W-L)/N that maybe USCF still uses today I think are rather awkward.
To James, about differentiating that magnificent formula: the area under the integral from the original elo-system can only be solved with numerical methods but I think it is a great exercise to write a program for it, some Pascal code I made with the help of Odd Gunnar Malin based on a CASIO FX-501P calculator program can be found in the thread connected to above post.

Code: Select all

On April 16, 2005 at 09:32:14, Eelco de Groot wrote:

>  Hi Anson
>
>For a first order approximation, I always use 2812 - (50%-45%)*7 =2777, which is
>increasingly inaccurate with greater score-difference. Precise formula involves
>calculating an integral, which you can do numerically.
>
>I once wrote a little program for this for a Casio calculator, but that will not
>help you much I'm afraid without an explanation. It took the first order
>approximation and went from there. But it is not hard to do if you have the
>formula from professor Elo, Excel can do it too, easily. I don't have the
>formula at hand right now. But it is a nice programming excercise!
>
> Eelco

To my knowledge USCF uses Rp = Rc + 400(W-L)/N which I have in a Excel
spreedsheet. But it's not that hard to use pen and paper either.

Tony

>
>
>On April 15, 2005 at 17:58:30, Anson T J wrote:
>
>>Does anyone know the accurate formula to work out ELO performance based on an
>>estimated elo for a player and the % success?
>>
>>For example if Hydra played against Kasparov (2812) and scored 45%, what how
>>would we work out Hydra's elo performance in this match?
>>
>>I remember somebody posted a very accurate formula using logs, if they could
>>point me to the post or write the formula again in here I would greatly
>>appreciate it.
>>
>>Many thanks.

In our archives at http://www.stmintz.com/ccc/index.php?id=421289

Eelco
User avatar
hgm
Posts: 27808
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Formula for calculating ELO performance

Post by hgm »

The funny thing is that, in practice, these complicated formulae are much less accurate in describing resuts between good Human players then a simple linear relation. See the Sonas rating system.

Image
Dann Corbit
Posts: 12541
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: Formula for calculating ELO performance

Post by Dann Corbit »

James Constance wrote:If you have a player's rating, his opponents' ratings and his score, how does one calculate his performance?

http://www.chessbase.com/newsdetail.asp?newsid=4326 gives the equation for the expected winning percentage as

Image

from which one can work backwards. But I'm a bit stuck on the maths :(

Any pointers appreciated!

Thanks

James
For USCF Elo calculation, here is the header file:
http://cap.connx.com/tournament_software/USCF.H
And here is the implementation:
http://cap.connx.com/tournament_software/USCF.C

Here is the Royal Jones method of calculation:
http://cap.connx.com/tournament_software/prog10.cpp
James Constance
Posts: 358
Joined: Wed Mar 08, 2006 8:36 pm
Location: UK

Re: Formula for calculating ELO performance

Post by James Constance »

Thanks to all for your very interesting answers! It's surprising to me that it is so complex! Perhaps I will just copy the tables into an array!

best

James