How to estimate the live FIBA ranking and rating with Bayeselo

fiba live rating
Updated: 2023-09-24

A. Introduction

FIBA [1] has a rating system used to rank and rate each team. It is based on rating points gained depending on the difference between the final score, of whether it is a home or away game, the strength of opponent and the weights considering the time decay, the competition type and region where competition is held, the stage of competition and the round where a game is fought - more weight is given as round approaches the end of a tournament such as preliminary, quarter, semi and final rounds.

The final rating of a team is calculated by taking the weighted average [4], [5] of the rating points. Only the games that happened in the last 8 years are counted for each team’s rating.

For every game, get the rating points or RP and the weight or W.

game (i) => rating points (i) => weight (i)

rating = sum(rp_i x w_i) / max(K, sum(w_i))

where:
i = 1 to n, i is the latest game and n is the last game in the last 8 years.
K = a factor to scale down the rating for those teams with lesser games.

The method I use to estimate the live FIBA ranking can be found in section C. It uses the games from the FIBA World Cup 2023 [3].

In section D, a method to calculate the prediction accuracy of FIBA rating list men 2023-02 is presented when tested against some of the game results from world cup 2023.

There is also a Bayeselo [7] rating system applied to get the Bayeselo rating list based from the world cup 2023 games. See section E.

B. FIBA Ranking system

The FIBA World Ranking presented by Nike [2] evaluates the strength of the teams by the points they gained from each game and the corresponding weight of this game. The weighted mean of these points and weights in the last 8 years or equivalent to a two 4-year world cup cycles are then computed to get the rating points and ranking of each team.

There are three main steps in the calculation of team ratings.

  1. Rating points calculation
  2. Weight calculation
  3. Team rating calculations involving the rating points and weights in the last 8 years.

Long story short.

rating = sum(rp_i x w_i) / max(K, sum(w_i))

where:
rating = rating of team
rp_i   = the rating points of every game i.
w_i    = the weight of every game i
K      = constant, less games has lower rank
i      = game number from latest to the last 8 years.

1. Rating points calculation

Rating points calculation [4] is further subdivided into three.

  1. Basis Points or BP
  2. Home or Away Point or HAP
  3. Opposition Ranking Points or ORP

The formula to get the rating points or RP is:

RP = BP + HAP + ORP

where:
RP = Rating Points
BP = Basis Points
HAP = Home or Away Points
ORP = Opposition Ranking Points

a. Basis Points or BP calculation

Whenever a game is held, each team will share the 1000 [4, p. 1] basis points.

  • Win by a margin of 1-9 points-> receive 600 basis points
  • Win by a margin of 10-19 points-> receive 700 basis points
  • Win by a margin of 20 or more points-> receive 800 basis points
  • Lose by a margin of 1-9 points-> receive 400 basis points
  • Lose by a margin of 10-19 points-> receive 300 basis points
  • Lose by a margin of 20 or more points-> receive 200 basis points
  • In the event of a game being forfeited, the winning team receives 800 points (for a victory by a margin of 20 points) and the losing team gets 0 basis points

Let us take a look at one result from the ongoing World Cup 2023 [3]. In the first round, USA won against NZL with the scores 99-72.

BP for USA

USA won and the score difference is 99 less 72 or 27. Since the score difference is 27 which is 20 or more, team USA received 800 BP or basis points.

BP for NZL

NZL lost the game and received 200 BP.

It has to be noted that losing a game is different from losing by a wide margin. The losing team should try to close the score gap to gain more basis points.

b. Home or Away Point or HAP calculation

FIBA ranking system penalizes a team by 70 points if a team hosts the game. However the opponent team will be given 70 points. For example, team Philippines is one of the hosts of the ongoing World Cup 2023. In the first round a game was held against DOM or Dominican Republic. PHI lost by a score of 81-87.

The HAP of PHI is -70 while the HAP of DOM is +70.

In the case where the two competing teams are neither the hosts, HAP is assigned a value of zero for both teams.

c. Opposition Ranking Points or ORP calculation

The concept of ORP is to give teams with lower ranks a higher point when they play against a higher rated opponent. It does not depend on the final score of the game. So we need to know the ranking of each team that will be playing the game.

FIBA released a rating list before the start of the world cup. Teams are ranked according to the rating. The team with the highest rating gets a rank of 1.

fiba world ranking feb 2023

source: FIBA World ranking [2]

The general formula to get each team's ORP is this.

ORP = 1.5 x (AVG_ALL_TEAM_PREGAME_RANKING - OPPONENT_PREGAME_RANKING)

where:
AVG_ALL_TEAM_PREGAME_RANKING is the average rank from the given rating list published.
OPPONENT_PREGAME_RANKING is the rank of the opponent.

That rating list has a total of 161 teams. I saved it in a csv file [11] for manipulation which is read by Pandas below.

>>> import pandas as pd
>>> df = pd.read_csv('fiba_ranking_world_2023-02.csv')
>>> print(df)
     WORLD RANK       COUNTRY  ZONE RANK  IOC  CURRENT POINTS  +/- RANK *
0             1         Spain        1.0  ESP           758.3           0
1             2           USA        1.0  USA           757.2           0
2             3     Australia        1.0  AUS           740.2           0
3             4     Argentina        2.0  ARG           733.6           0
4             5        France        2.0  FRA           715.9           0
..          ...           ...        ...  ...             ...         ...
156         157      Cambodia       42.0  CAM            28.6           2
157         158       Myanmar       43.0  MYA            26.6           2
158         159  Cook Islands       44.0  COK            22.9           2
159         160         Haiti       37.0  HAI            22.4           2
160         161       Eritrea       33.0  ERI            20.3           2

[161 rows x 6 columns]

You may visit that site to verify the number of ranked teams.

So to calculate the 'AVG_ALL_TEAM_PREGAME_RANKING', we will sum all the rank numbers and divide it with 161.

>>> ave_all_team_pregame_ranking = sum(range(1, 162)) / 161
>>> ave_all_team_pregame_ranking
81.0

So the average all team pregame ranking is 81.

Consider the game between PHI and ITA in round 1. The rank of PHI is 40 while that of ITA is 10.

ORP of PHI

ORP = 1.5 x (AVG_ALL_TEAM_PREGAME_RANKING - OPPONENT_PREGAME_RANKING)

ORP = 1.5 x (81 - 10)
ORP = 106.5

ORP of ITA

ORP = 1.5 x (AVG_ALL_TEAM_PREGAME_RANKING - OPPONENT_PREGAME_RANKING)

ORP = 1.5 x (81 - 40)
ORP = 61.5

PHI got a higher ORP compared to ITA because the former has a lower rating compared to the latter.

Let me show one more example showing all the variables in the calculation of rating points. The game is between the USA and the LTU in the second round. LTU won with the scores 110-104. We will calculate the RP or rating points via the BP, HAP and ORP for each team.

USA RP

BP = 400
HAP = 0
ORP = 1.5 * (81-8) = 109.5
RP = BP + HAP + ORP
RP = 509.5

The BP 400 is from a loss by 6 points. The '8' in ORP is the rank of LTU.

LTU RP

BP = 600
HAP = 0
ORP = 1.5 * (81-2) = 118.5
RP = BP + HAP + ORP
RP = 718.5

The BP 600 is for winning the match by a 6 point margin or difference. The '2' in ORP is the rank of USA.

2. Weight calculation

This is the main second step in the calculation of team ranking and rating. The document [4] to calculate the overall weight is also provided by FIBA.

For every rating point or RP there is a corresponding weight that will be calculated as well. There are four factors to compute the weight of the RP.

  1. Time decay or TD is a weight factor used to scale down old games. Recent games are given more weight. See table below.
  2. Competition and Region is a weight factor applied for the type of competition the games are played. Important competitions such as world cup have more weight than the others. The world cup qualifying games have different weights depending on the region the game is played. See table below.
  3. Competition stage is a weight factor for the type of competition such as 'Tournament', 'Qualifier', and others. See table below.
  4. Round weight factor according to the document [4].
    "Moving from a competition-based system to a game-based one, the new FIBA World Ranking Women, presented by Nike, introduces a weighting that works on a round basis, with results of the winning team receiving greater weighting the further through a final tournament a team progresses. The weights apply to games in the final tournaments of the FIBA Basketball World Cup, the Olympics and the FIBA Continental Cups. Any qualifying or pre-qualifying games or games in any other tournaments, or results of the losing team have a round weight R=1."
    See table below.

The formula to get the weight is the following.

weight = td_wf x competition_and_region_wf x competition_stage_wf x round_wf

where:
td = time decay
wf = weight factor

Example #1

PHI had played DOM in the first round of the ongoing FIBA World Cup 2023 [3] held in PHI. DOM won the game with the scores 87-81. Let us calculate the weight of this match.

td_wf = 1
competition_and_region_wf = 2.5
competition_stage_wf = 1
round_wf = 1

weight = td_wf x competition_and_region_wf x competition_stage_wf x round_wf
weight = 2.5

The round weight factor does not matter if you win or lose in the first round, it is always 1. See the round weight table below. So both teams have the same round weight factor, which also result to the same weight.

Example #2

USA defeated MNE in the second round with the scores 85-73.

Weight for USA

td_wf = 1
competition_and_region_wf = 2.5
competition_stage_wf = 1
round_wf = 2

weight = 1 x 2.5 x 1 x 2
weight = 5.0

Weight for MNE

td_wf = 1
competition_and_region_wf = 2.5
competition_stage_wf = 1
round_wf = 1

weight = 1 x 2.5 x 1 x 1
weight = 2.5

So in the second round and above, the round weight factor differs for a winning and losing team. For a winning team the factor is 2 (see the round weight factor table below) whereas it is only 1 for a losing team.

Example #3

SRB defeated LTU in one of the quarter final matches yesterday 2023-09-05 with the scores 87-68. A quarter final is like a round 3. In the round weight factor table this is equivalent to a round weight factor of 4. See table below.

Weight for SRB

td_wf = 1
competition_and_region_wf = 2.5
competition_stage_wf = 1
round_wf = 4

weight = 1 x 2.5 x 1 x 4
weight = 10.0

The win matters a lot in the later part of the tournament. This time, it gets a round weight factor of 4.

Weight for LTU

td_wf = 1
competition_and_region_wf = 2.5
competition_stage_wf = 1
round_wf = 1

weight = 1 x 2.5 x 1 x 1
weight = 2.5

LTU lost the game so its round weight factor is only 1, resulting in a lower weight compared to SRB.

2.1. Weight Factor Tables

These are the tables [4] used in the calculation of Weight.

1. Time Decay Weight Factor

Time of game (TD) Weight
Y (current year) & Y-1 1
Y-2 & Y-30.75
Y-4 & Y-50.50
Y-6 & Y-70.25
Y-8 and before0 (not taken into consideration)

2. Competition and Region Weight Factor

Competition/Region (C) Weight
FIBA Basketball World Cup2.5
Olympic Basketball Tournament2.0
Africa0.35
Americas0.80
Asia0.45
Europe1.0
Oceania0.7

3. Competition Stage Weight Factor

Stage (S) Weight
Tournament1
Qualifier0.5
Pre-Qualifier0.25
(European) Small Countries0.15

4. Round Weight Factor

Round (R) Weight
11
22
34
46
56

3. Team rating calculations

Once we have the Rating Points and Weight, we are now ready to get the rating of a team. FIBA also provides how this is calculated in the document [5].

The formula to get the team rating is the weighted average.

rating = sum(rp_i x w_i) / max(K, sum(w_i))

where:
rating = rating of team
rp_i   = the rating points of every game i.
w_i    = the weight of every game i
K      = constant, less games has lower rank
i      = game number from latest to the last 8 years.

There is no other detail regarding the K constant.

C. Live rating estimate

First we have the current rating list [2] released by FIBA last February. Second we have games from the ongoing world cup. There are 32 teams in this tournament. It consists of two rounds of group phases and a final phase comprising of quarters, semis and final.

Currently (2023-09-03) all round 2 games were played. 09-04 is a rest day and tomorrow 09-05, the quarter final matches will begin. I compiled all the match results [6] done so far after round two and calculated the rating points and weights for each team. I don't have the data from the last 8 years. I will just calculate the live team rating estimate based on the available games played by each team so far, following the FIBA calculation rules on rating points and weights.

This is the general idea mathematically.

line 1: wc_rating = sum(rp_i x w_i) / sum(w_i)
line 2:
line 3: live_rating_estimate = wc_rating
line 4:
line 5: where:
line 6: wc_rating = calculated rating based on world cup games (minimum of 5 games)

So it is just the same as FIBA but only using the world cup 2023 games.

Live Rating Estimate List

I am only displaying the top 50. All world cup participating teams are included.

Issue #1
Released: 2023-09-04
Games: World Cup 2023 after Round 2 and Class_17to32, each team has 5 games
FIBA rating reference: February 2023 (the ORating in the table below)

NRank Country IOC NRating ORating ORank Games Win Loss
1 Germany GER 858.4 643.5 11 5 5 0
2 Lithuania LTU 837.4 670.4 8 5 5 0
3 Serbia SRB 796.9 710.2 6 5 4 1
4 USA USA 793.5 757.2 2 5 4 1
5 Canada CAN 765.2 577.8 15 5 4 1
6 Argentina ARG 733.6 733.6 4 0 0 0
7 Latvia LAT 730.6 403.0 29 5 4 1
8 Slovenia SLO 722.3 701.9 7 5 4 1
9 Australia AUS 714.3 740.2 3 5 3 2
10 Italy ITA 712.4 650.4 10 5 4 1
11 Spain ESP 705.2 758.3 1 5 3 2
12 South Sudan SSD 675.3 170.4 62 5 3 2
13 Montenegro MNE 626.3 517.0 18 5 3 2
14 Brazil BRA 623.8 593.6 13 5 3 2
15 France FRA 616.2 715.9 5 5 3 2
16 Puerto Rico PUR 600.4 455.4 20 5 3 2
17 Czech Republic CZE 593.8 593.8 12 0 0 0
18 Poland POL 591.1 591.1 14 0 0 0
19 Dominican Republic DOM 580.4 445.6 23 5 3 2
20 Egypt EGY 566.7 191.0 55 5 2 3
21 Turkey TUR 537.0 537.0 16 0 0 0
22 Finland FIN 536.2 441.4 24 5 2 3
23 Greece GRE 535.4 665.1 9 5 2 3
24 Georgia GEO 530.9 352.7 32 5 2 3
25 New Zealand NZL 522.5 435.3 26 5 2 3
26 Lebanon LBN 507.6 300.8 43 5 2 3
27 Japan JPN 495.8 332.6 36 5 3 2
28 Angola ANG 486.9 308.5 41 5 1 4
29 Nigeria NGR 461.4 461.4 19 0 0 0
30 Mexico MEX 459.5 371.4 31 5 2 3
31 Tunisia TUN 448.4 448.4 21 0 0 0
32 Philippines PHI 442.6 315.9 40 5 1 4
33 Cape Verde CPV 440.7 154.3 64 5 1 4
34 Croatia CRO 439.8 439.8 25 0 0 0
35 Cote d'Ivoire CIV 436.3 306.6 42 5 1 4
36 Venezuela VEN 426.6 523.0 17 5 0 5
37 Ukraine UKR 406.6 406.6 28 0 0 0
38 Belgium BEL 386.8 386.8 30 0 0 0
39 China CHN 384.8 412.9 27 5 1 4
40 Iran IRI 370.3 447.1 22 5 0 5
41 Jordan JOR 364.6 342.4 33 5 0 5
42 Israel ISR 342.1 342.1 34 0 0 0
43 Bosnia and Herzegovina BIH 333.4 333.4 35 0 0 0
44 Senegal SEN 329.3 329.3 37 0 0 0
45 Korea KOR 327.7 327.7 38 0 0 0
46 Hungary HUN 325.8 325.8 39 0 0 0
47 Estonia EST 295.8 295.8 44 0 0 0
48 Netherlands NED 281.8 281.8 45 0 0 0
49 Uruguay URU 278.7 278.7 46 0 0 0
50 Bulgaria BUL 274.4 274.4 47 0 0 0

LEGEND:
NRank = new rank
Country = name of country
IOC = International Olympic Committee country code
NRating = new rating
ORating = old rating or current rating
ORank = old rank
Games = number of games played in world cup 2023

Issue #2
Released: 2023-09-07
Games: World Cup 2023 after Quarter final but excluding Class_5to8
FIBA rating reference: February 2023 (the ORating in the table below)

NRank Country IOC Zone NRating ORating ORank Games Win Loss
1 USA USA Americas 838.7 757.2 2 6 5 1
2 Serbia SRB Europe 802.0 710.2 6 6 5 1
3 Germany GER Europe 792.8 643.5 11 6 6 0
4 Lithuania LTU Europe 784.2 670.4 8 6 5 1
5 Canada CAN Americas 783.5 577.8 15 6 5 1
6 Argentina ARG Americas 733.6 733.6 4 0 0 0
7 Australia AUS Asia 714.3 740.2 3 5 3 2
8 Spain ESP Europe 705.2 758.3 1 5 3 2
9 Latvia LAT Europe 702.4 403.0 29 6 4 2
10 Slovenia SLO Europe 676.1 701.9 7 6 4 2
11 South Sudan SSD Africa 675.3 170.4 62 5 3 2
12 Italy ITA Europe 663.1 650.4 10 6 4 2
13 Montenegro MNE Europe 626.3 517.0 18 5 3 2
14 Brazil BRA Americas 623.8 593.6 13 5 3 2
15 France FRA Europe 616.2 715.9 5 5 3 2
16 Puerto Rico PUR Americas 600.4 455.4 20 5 3 2
17 Czech Republic CZE Europe 593.8 593.8 12 0 0 0
18 Poland POL Europe 591.1 591.1 14 0 0 0
19 Dominican Republic DOM Americas 580.4 445.6 23 5 3 2
20 Egypt EGY Africa 566.7 191.0 55 5 2 3
21 Turkey TUR Europe 537.0 537.0 16 0 0 0
22 Finland FIN Europe 536.2 441.4 24 5 2 3
23 Greece GRE Europe 535.4 665.1 9 5 2 3
24 Georgia GEO Europe 530.9 352.7 32 5 2 3
25 New Zealand NZL Asia 522.5 435.3 26 5 2 3
26 Lebanon LBN Asia 507.6 300.8 43 5 2 3
27 Japan JPN Asia 495.8 332.6 36 5 3 2
28 Angola ANG Africa 486.9 308.5 41 5 1 4
29 Nigeria NGR Africa 461.4 461.4 19 0 0 0
30 Mexico MEX Americas 459.5 371.4 31 5 2 3
31 Tunisia TUN Africa 448.4 448.4 21 0 0 0
32 Philippines PHI Asia 442.6 315.9 40 5 1 4
33 Cape Verde CPV Africa 440.7 154.3 64 5 1 4
34 Croatia CRO Europe 439.8 439.8 25 0 0 0
35 Cote d'Ivoire CIV Africa 436.3 306.6 42 5 1 4
36 Venezuela VEN Americas 426.6 523.0 17 5 0 5
37 Ukraine UKR Europe 406.6 406.6 28 0 0 0
38 Belgium BEL Europe 386.8 386.8 30 0 0 0
39 China CHN Asia 384.8 412.9 27 5 1 4
40 Iran IRI Asia 370.3 447.1 22 5 0 5
41 Jordan JOR Asia 364.6 342.4 33 5 0 5
42 Israel ISR Europe 342.1 342.1 34 0 0 0
43 Bosnia and Herzegovina BIH Europe 333.4 333.4 35 0 0 0
44 Senegal SEN Africa 329.3 329.3 37 0 0 0
45 Korea KOR Asia 327.7 327.7 38 0 0 0
46 Hungary HUN Europe 325.8 325.8 39 0 0 0
47 Estonia EST Europe 295.8 295.8 44 0 0 0
48 Netherlands NED Europe 281.8 281.8 45 0 0 0
49 Uruguay URU Americas 278.7 278.7 46 0 0 0
50 Bulgaria BUL Europe 274.4 274.4 47 0 0 0

The semi-finalists are USA, SRB, GER and CAN

Issue #3
Released: 2023-09-08
Games: World Cup 2023 after Quarter final plus 2 games from classification_5to8
FIBA rating reference: February 2023 (the ORating in the table below)

NRank Country IOC Zone NRating ORating ORank Games Win Loss
1 USA USA Americas 838.7 757.2 2 6 5 1
2 Serbia SRB Europe 802.0 710.2 6 6 5 1
3 Germany GER Europe 792.8 643.5 11 6 6 0
4 Lithuania LTU Europe 787.2 670.4 8 7 6 1
5 Canada CAN Americas 783.5 577.8 15 6 5 1
6 Argentina ARG Americas 733.6 733.6 4 0 0 0
7 Australia AUS Asia 714.3 740.2 3 5 3 2
8 Spain ESP Europe 705.2 758.3 1 5 3 2
9 Latvia LAT Europe 702.8 403.0 29 7 5 2
10 South Sudan SSD Africa 675.3 170.4 62 5 3 2
11 Slovenia SLO Europe 642.8 701.9 7 7 4 3
12 Italy ITA Europe 642.6 650.4 10 7 4 3

Issue #4
Released: 2023-09-09
Games: World Cup 2023 after semi-final plus 2 games from classification_5to8
FIBA rating reference: February 2023 (the ORating in the table below)

NRank Country IOC Zone NRating ORating ORank Games Win Loss
1 USA USA Americas 808.4 757.2 2 7 5 2
2 Lithuania LTU Europe 787.2 670.4 8 7 6 1
3 Germany GER Europe 766.6 643.5 11 7 7 0
4 Serbia SRB Europe 763.3 710.2 6 7 6 1
5 Canada CAN Americas 758.9 577.8 15 7 5 2
6 Argentina ARG Americas 733.6 733.6 4 0 0 0
7 Australia AUS Asia 714.3 740.2 3 5 3 2
8 Spain ESP Europe 705.2 758.3 1 5 3 2
9 Latvia LAT Europe 702.8 403.0 29 7 5 2
10 South Sudan SSD Africa 675.3 170.4 62 5 3 2
11 Slovenia SLO Europe 642.8 701.9 7 7 4 3
12 Italy ITA Europe 642.6 650.4 10 7 4 3

Looking at the live rating estimate between issue #3 and #4, in issue #4, the USA is still number 1 even though GER defeated her. And now GER's rating has gone down. This is illogical. We need to know the details of the K constant in the FIBA formula.

The other reasons could be that at higher rounds such as quarters, semis and finals, the weights are higher if a team wins resulting in lower rating because the sum of weights is a divisor in the rating formula. On top of that, the calculation of rating points RP, is probably not scaled well with respect to the base points BP and opposition ranking points ORP.

D. FIBA Rating Accuracy

FIBA had released this February 2023 a rating list for Men [2] before the current FIBA World Cup 2023 started. Currently all games in the quarter finals of this world cup were finished yesterday 2023-09-06. Let us measure the prediction accuracy rate of this rating list based from the games that were finished up to the quarter final stage.

To summarize, there are 32 teams in this world cup. After round one, three games were played by each team. After round two and classification games, each team now has a total of 5 games. In the quarter finals there is one game played in each team. The four winners will advance to the semi finals while the four losers will play on the classification for 2 more games in each team.

1. Procedure

  1. Get all the match results of the games that were already played (round 1 up to quarter finals plus the classification_17to32 games).
  2. Get the rating list that was published by FIBA this February.
  3. For each match results, get the rating of each team.
  4. If the team with a higher rating wins then count this as a success, meaning the rating list is correct.
  5. If the team with a higher rating loses then count this as a failure, meaning the rating list is incorrect.
  6. The accuracy rate is the count of success divided by the total of success and failure.

2. Code

"""Calculate the prediction success rate of FIBA rating list 2023-02."""

import pandas as pd

df_current_rating = pd.read_csv('fiba_ranking_world_2023-02.csv')
df_game_results = pd.read_csv('all_results.csv')

print(df_current_rating)
print(df_game_results)

success, failure = 0, 0
for index, row in df_game_results.iterrows():
    t1 = row['C1']
    s1 = row['C1S']

    t2 = row['C2']
    s2 = row['C2S']

    rtg1 = df_current_rating.loc[df_current_rating['IOC'] == t1].iloc[0]['CURRENT POINTS']
    rtg2 = df_current_rating.loc[df_current_rating['IOC'] == t2].iloc[0]['CURRENT POINTS']

    # success
    if rtg1 > rtg2 and s1 > s2:
        success += 1
    elif rtg2 > rtg1 and s2 > s1:
        success += 1
    else:
        failure += 1

games = success + failure
print(f'Number of games: {games}')
print(f'Success count: {success}')
print(f'Failure count: {failure}')
print(f'Success rate: {round(100*success/games, 2)}%')

3. Output

     WORLD RANK       COUNTRY  ZONE RANK  IOC  CURRENT POINTS  +/- RANK *
0           1.0         Spain        1.0  ESP           758.3           0
1           2.0           USA        1.0  USA           757.2           0
2           3.0     Australia        1.0  AUS           740.2           0
3           4.0     Argentina        2.0  ARG           733.6           0
4           5.0        France        2.0  FRA           715.9           0
..          ...           ...        ...  ...             ...         ...
156       157.0      Cambodia       42.0  CAM            28.6           2
157       158.0       Myanmar       43.0  MYA            26.6           2
158       159.0  Cook Islands       44.0  COK            22.9           2
159       160.0         Haiti       37.0  HAI            22.4           2
160       161.0       Eritrea       33.0  ERI            20.3           2

[161 rows x 6 columns]
     C1  C1S   C2  C2S  GI  WR1  WR2
0   CAN   65  BRA   69   4    1    2
1   ANG   76  CHN   83   4    1    1
2   CIV   77  BRA   89   3    1    1
3   ANG   67  DOM   75   3    1    1
4   ESP   94  CIV   64   1    1    1
..  ...  ...  ...  ...  ..  ...  ...
79  SLO  100  VEN   85   1    1    1
80  VEN   75  CPV   81   2    1    1
81  GEO   70  VEN   59   3    1    1
82  JPN   86  VEN   77   4    1    1
83  FIN   90  VEN   75   5    1    1

[84 rows x 7 columns]
Number of games: 84
Success count: 55
Failure count: 29
Success rate: 65.48%

And so we got our figure. The prediction accuracy of 'FIBA rating list 2023-02 men' is 65.48% when tested on the actual games from world cup 2023, starting from round one up to the quarter finals.

Accuracy Tracking

Games Accuracy (%)
Up to quarter finals65.48
Up to quarter finals plus 2 games from class_5to863.95

E. Bayeselo Rating System

Bayeselo [7] is a rating system invented by Rémi Coulom. The system is based on Elo rating system created by an American physics professor Arpad Elo (1903-1992) but uses the Bayes theorem which was invented by an English statistician, philosopher and Presbyterian minister Thomas Bayes (1701-1761).

Bayeselo rating generation is done through the use of the command line program bayeselo.exe [7], [9]. It needs a record of game results as input, stored in a file with a Portable Game Notation or PGN standard format.

1. Bayesian approach according to Rémi

The principle of the Bayesian approach [10] consists in choosing a prior likelihood distribution over Elo ratings, and computing a posterior distribution as a function of the observed results.

P(Elos|Results) = P(Results|Elos)P(Elos)/P(Results)

f(Delta) = 1 / (1 + 10^(Delta/400))
P(WhiteWins) = f(eloBlack - eloWhite - eloAdvantage + eloDraw)
P(BlackWins) = f(eloWhite - eloBlack + eloAdvantage + eloDraw)
P(Draw) = 1 - P(WhiteWins) - P(BlackWins)

2. Peculiarities of Bayeselo with respect to the current FIBA Basketball ranking system

  • Bayeselo rating system has a concept of rating interval and margin of errors. The strength of an entity is not described by a single rating points but a range of ratings. Consider GER in the Bayeselo rating issue #1 below, GER has a mean rating of 1117, an upper margin of error of 326, and a lower margin of error of 216. The strength of GER is in the range [901 - 1443]. In a bad day its strength is only 901 but in a better day it is very strong at 1443.
  • Bayeselo rating system has a concept of predicting the winning probabilities between a given two teams through the so called LOS or Likelihood of Superiority.
  • Bayeselo rating system has a concept of draw or even result, but in basketball there is no such thing as draw results. But Bayeselo has a way to disable this though the "mm" command without the parameters.
  • Bayeselo rating system has a concept of who played first which can be critical in the game such as chess. In basketball, the team that played first is the team that takes the first position of the ball after the "jump ball" in the beginning of the game. No I did not consider this in the bayeselo rating calculation. It is also set to zero through the "mm" command. It could be interesting to get the statistics of this feature and check if this affects the final score of the game.
  • Bayeselo rating system is only interested on win/loss/draw results.
    • In basketball the difference in the final score of the game is a factor. A difference in one or two points may indicate a high probability of an equal strength. In fact an overtime or OT can happen that is, after the first time allocation is exhausted, if the score is tied, the game is continued with a new time allocation as time extension. This can actually be applied in the Bayeselo rating calculation on basketball. Whenever there is OT, just consider it as a draw in the rating calculation. I have not consider this in rating generation below.
    • In basketball there is a rating factor of what year the game is played, where the game is played, tournament type and phase of the game such as group phase, quarter, semis and finals phases.
      Tournaments in Europe have more weight in rating compared to other regions such as Americas, etc. In contrast, Bayeselo can detect which team is stronger even if the teams have not played. This can be done through common opponents. As always more games are needed to get a better estimate.
  • Bayeselo rating system is applied in the generation of ratings for game programs like chess, go, etc. engines and other sports. In the case for computer programs, these entities have a strength that does not change compared to basketball team strength that can vary a lot. As an illustration, the USA team for World Cups may have a different strength from the USA team for Olympics. How about for other countries? This may lead to an idea to create two team names, "USA WC" and "USA Olympics". In computer game engines, these are normal, you will see Stockfish 15, Stockfish 16 and other engine versions.

3. Issue #1, 2023-09-07

The games are from round 1 up to quarter finals plus two games from classification_5to8. Team USA is set to 1000 Bayeselo [7] points as a reference.

Rank Name:   Elo    +    -  games  score oppo.  draws   win  loss  draw
   1 GER :  1117  326  216      6 100.0%   833   0.0%     6     0     0
   2 SRB :  1089  263  211      6  83.3%   888   0.0%     5     1     0
   3 LTU :  1046  265  212      6  83.3%   855   0.0%     5     1     0
   4 CAN :  1030  259  204      6  83.3%   853   0.0%     5     1     0
   5 USA :  1000  266  219      6  83.3%   798   0.0%     5     1     0
   6 LAT :   994  228  205      6  66.7%   894   0.0%     4     2     0
   7 ITA :   957  242  217      6  66.7%   864   0.0%     4     2     0
   8 PUR :   948  239  226      5  60.0%   885   0.0%     3     2     0
   9 SLO :   907  243  230      6  66.7%   795   0.0%     4     2     0
  10 DOM :   899  250  236      5  60.0%   848   0.0%     3     2     0
  11 MNE :   892  240  225      5  60.0%   839   0.0%     3     2     0
  12 AUS :   889  242  224      5  60.0%   846   0.0%     3     2     0
  13 ESP :   838  251  242      5  60.0%   782   0.0%     3     2     0
  14 BRA :   837  262  243      5  60.0%   782   0.0%     3     2     0
  15 SSD :   830  247  228      5  60.0%   787   0.0%     3     2     0
  16 FRA :   820  252  241      5  60.0%   759   0.0%     3     2     0
  17 JPN :   789  262  243      5  60.0%   742   0.0%     3     2     0
  18 GRE :   754  236  253      5  40.0%   815   0.0%     2     3     0
  19 GEO :   723  246  259      5  40.0%   784   0.0%     2     3     0
  20 LBN :   721  238  252      5  40.0%   778   0.0%     2     3     0
  21 MEX :   703  235  247      5  40.0%   753   0.0%     2     3     0
  22 FIN :   696  244  253      5  40.0%   761   0.0%     2     3     0
  23 EGY :   693  235  249      5  40.0%   755   0.0%     2     3     0
  24 NZL :   661  232  244      5  40.0%   725   0.0%     2     3     0
  25 CHN :   649  231  278      5  20.0%   823   0.0%     1     4     0
  26 PHI :   626  223  277      5  20.0%   791   0.0%     1     4     0
  27 ANG :   621  221  274      5  20.0%   792   0.0%     1     4     0
  28 CIV :   571  220  272      5  20.0%   739   0.0%     1     4     0
  29 CPV :   554  222  274      5  20.0%   714   0.0%     1     4     0
  30 IRI :   477  226  342      5   0.0%   757   0.0%     0     5     0
  31 JOR :   476  227  344      5   0.0%   762   0.0%     0     5     0
  32 VEN :   456  232  349      5   0.0%   734   0.0%     0     5     0

The column 'opp.' is the average rating of the opponent, if this column is high that means a team has stronger opponents.

The '+' and '-' columns are the margin of errors. The margin of errors helps determine the actual rating range of the team. For example, GER has a rating of 1117. The confidence interval is 1117 - 216 or 901 and 1117 + 326 or 1443, meaning the strength of GER is in the range [901 to 1443], with the USA being at 1000 as a reference.

4. Issue #2, 2023-09-08

The games are from round 1 up to semi finals plus two games from classification_5to8. Team USA is set to 1000 Bayeselo [7] points as a reference.

Rank Name:   Elo    +    -  games  score oppo.  draws   win  loss  draw
   1 GER :  1205  316  210      7 100.0%   896   0.0%     7     0     0
   2 SRB :  1151  256  203      7  85.7%   927   0.0%     6     1     0
   3 LTU :  1094  256  201      7  85.7%   883   0.0%     6     1     0
   4 LAT :  1078  222  193      7  71.4%   946   0.0%     5     2     0
   5 CAN :  1057  224  195      7  71.4%   940   0.0%     5     2     0
   6 USA :  1000  231  210      7  71.4%   867   0.0%     5     2     0
   7 PUR :   966  243  228      5  60.0%   904   0.0%     3     2     0
   8 ITA :   943  219  207      7  57.1%   911   0.0%     4     3     0
   9 AUS :   933  247  226      5  60.0%   893   0.0%     3     2     0
  10 SLO :   931  221  222      7  57.1%   875   0.0%     4     3     0
  11 DOM :   915  254  239      5  60.0%   865   0.0%     3     2     0
  12 MNE :   908  243  226      5  60.0%   857   0.0%     3     2     0
  13 ESP :   890  253  244      5  60.0%   835   0.0%     3     2     0
  14 BRA :   890  263  245      5  60.0%   835   0.0%     3     2     0
  15 FRA :   870  254  243      5  60.0%   811   0.0%     3     2     0
  16 SSD :   850  252  231      5  60.0%   809   0.0%     3     2     0
  17 JPN :   832  268  246      5  60.0%   791   0.0%     3     2     0
  18 LBN :   770  240  254      5  40.0%   831   0.0%     2     3     0
  19 GRE :   766  240  255      5  40.0%   832   0.0%     2     3     0
  20 GEO :   759  252  262      5  40.0%   829   0.0%     2     3     0
  21 FIN :   737  249  255      5  40.0%   810   0.0%     2     3     0
  22 MEX :   718  238  248      5  40.0%   773   0.0%     2     3     0
  23 EGY :   708  238  251      5  40.0%   775   0.0%     2     3     0
  24 NZL :   671  232  245      5  40.0%   735   0.0%     2     3     0
  25 CHN :   664  235  280      5  20.0%   846   0.0%     1     4     0
  26 PHI :   634  223  278      5  20.0%   800   0.0%     1     4     0
  27 ANG :   629  221  275      5  20.0%   801   0.0%     1     4     0
  28 CIV :   622  220  272      5  20.0%   789   0.0%     1     4     0
  29 CPV :   589  223  275      5  20.0%   750   0.0%     1     4     0
  30 IRI :   528  226  342      5   0.0%   808   0.0%     0     5     0
  31 VEN :   490  232  352      5   0.0%   769   0.0%     0     5     0
  32 JOR :   485  227  347      5   0.0%   772   0.0%     0     5     0

The ranks of top 2 teams GER and SRB are as expected as they are the finalists. Both SRB and LTU have identical (6-1) win-loss records, but SRB is ranked higher because in their matchup, the SRB won.

5. Issue #3, 2023-09-09

The games are from round 1 up to semi finals plus four games from classification_5to8. Team USA is set to 1000 Bayeselo [7] points as a reference.

Rank Name:   Elo    +    -  games  score oppo.  draws   win  loss  draw
   1 GER :  1283  319  209      7 100.0%   975   0.0%     7     0     0
   2 LAT :  1175  216  183      8  75.0%  1021   0.0%     6     2     0
   3 SRB :  1156  260  207      7  85.7%   925   0.0%     6     1     0
   4 CAN :  1133  224  194      7  71.4%  1017   0.0%     5     2     0
   5 LTU :  1082  221  193      8  75.0%   928   0.0%     6     2     0
   6 SLO :  1033  209  201      8  62.5%   943   0.0%     5     3     0
   7 AUS :  1022  247  227      5  60.0%   982   0.0%     3     2     0
   8 USA :  1000  237  213      7  71.4%   868   0.0%     5     2     0
   9 BRA :   974  263  246      5  60.0%   920   0.0%     3     2     0
  10 ESP :   974  254  245      5  60.0%   920   0.0%     3     2     0
  11 FRA :   954  255  244      5  60.0%   896   0.0%     3     2     0
  12 PUR :   954  245  230      5  60.0%   892   0.0%     3     2     0
  13 JPN :   920  267  246      5  60.0%   877   0.0%     3     2     0
  14 ITA :   916  203  201      8  50.0%   931   0.0%     4     4     0
  15 DOM :   900  255  241      5  60.0%   851   0.0%     3     2     0
  16 MNE :   898  244  227      5  60.0%   848   0.0%     3     2     0
  17 LBN :   853  241  254      5  40.0%   916   0.0%     2     3     0
  18 GEO :   849  252  263      5  40.0%   919   0.0%     2     3     0
  19 SSD :   837  254  233      5  60.0%   797   0.0%     3     2     0
  20 FIN :   824  248  255      5  40.0%   896   0.0%     2     3     0
  21 GRE :   756  240  256      5  40.0%   824   0.0%     2     3     0
  22 MEX :   706  238  249      5  40.0%   763   0.0%     2     3     0
  23 CIV :   706  220  272      5  20.0%   873   0.0%     1     4     0
  24 EGY :   696  239  251      5  40.0%   765   0.0%     2     3     0
  25 CPV :   677  224  276      5  20.0%   841   0.0%     1     4     0
  26 NZL :   662  233  245      5  40.0%   727   0.0%     2     3     0
  27 CHN :   649  236  281      5  20.0%   835   0.0%     1     4     0
  28 PHI :   616  224  279      5  20.0%   783   0.0%     1     4     0
  29 IRI :   612  226  342      5   0.0%   892   0.0%     0     5     0
  30 ANG :   611  221  276      5  20.0%   784   0.0%     1     4     0
  31 VEN :   578  233  354      5   0.0%   861   0.0%     0     5     0
  32 JOR :   475  227  347      5   0.0%   764   0.0%     0     5     0

6. Issue #4, 2023-09-10

All games from World Cup 2023 are used to calculate the rating list. Team USA is set to 1000 Bayeselo [7] points as a reference.

Rank Name:   Elo    +    -  games  score oppo.  draws   win  loss  draw
   1 GER :  1357  308  201      8 100.0%  1037   0.0%     8     0     0
   2 LAT :  1227  218  184      8  75.0%  1073   0.0%     6     2     0
   3 CAN :  1202  217  183      8  75.0%  1058   0.0%     6     2     0
   4 SRB :  1171  229  202      8  75.0%   999   0.0%     6     2     0
   5 LTU :  1102  224  196      8  75.0%   945   0.0%     6     2     0
   6 SLO :  1078  211  202      8  62.5%   991   0.0%     5     3     0
   7 AUS :  1075  249  228      5  60.0%  1036   0.0%     3     2     0
   8 ESP :  1032  255  245      5  60.0%   979   0.0%     3     2     0
   9 BRA :  1032  265  247      5  60.0%   979   0.0%     3     2     0
  10 FRA :  1012  256  244      5  60.0%   954   0.0%     3     2     0
  11 USA :  1000  217  207      8  62.5%   926   0.0%     5     3     0
  12 JPN :   972  270  247      5  60.0%   932   0.0%     3     2     0
  13 PUR :   968  245  230      5  60.0%   907   0.0%     3     2     0
  14 ITA :   937  205  203      8  50.0%   952   0.0%     4     4     0
  15 DOM :   915  256  241      5  60.0%   867   0.0%     3     2     0
  16 LBN :   910  242  255      5  40.0%   975   0.0%     2     3     0
  17 MNE :   905  245  228      5  60.0%   856   0.0%     3     2     0
  18 GEO :   899  254  264      5  40.0%   973   0.0%     2     3     0
  19 FIN :   876  250  256      5  40.0%   952   0.0%     2     3     0
  20 SSD :   850  254  233      5  60.0%   812   0.0%     3     2     0
  21 CIV :   763  220  272      5  20.0%   931   0.0%     1     4     0
  22 GRE :   761  242  257      5  40.0%   830   0.0%     2     3     0
  23 CPV :   727  223  276      5  20.0%   891   0.0%     1     4     0
  24 MEX :   712  239  249      5  40.0%   771   0.0%     2     3     0
  25 EGY :   703  240  252      5  40.0%   773   0.0%     2     3     0
  26 IRI :   670  226  342      5   0.0%   950   0.0%     0     5     0
  27 NZL :   665  232  245      5  40.0%   731   0.0%     2     3     0
  28 CHN :   662  236  281      5  20.0%   849   0.0%     1     4     0
  29 PHI :   631  224  279      5  20.0%   798   0.0%     1     4     0
  30 VEN :   628  233  354      5   0.0%   910   0.0%     0     5     0
  31 ANG :   626  221  276      5  20.0%   799   0.0%     1     4     0
  32 JOR :   478  228  349      5   0.0%   768   0.0%     0     5     0

7. Head to Head

   1 GER   1357   8.0 (  8.0 :   0.0)
                  1.0 (  1.0 :   0.0) LAT   1227
                  1.0 (  1.0 :   0.0) SRB   1171
                  1.0 (  1.0 :   0.0) SLO   1078
                  1.0 (  1.0 :   0.0) AUS   1075
                  1.0 (  1.0 :   0.0) USA   1000
                  1.0 (  1.0 :   0.0) JPN    972
                  1.0 (  1.0 :   0.0) GEO    899
                  1.0 (  1.0 :   0.0) FIN    876
   2 LAT   1227   8.0 (  6.0 :   2.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) CAN   1202
                  1.0 (  1.0 :   0.0) LTU   1102
                  1.0 (  1.0 :   0.0) ESP   1032
                  1.0 (  1.0 :   0.0) BRA   1032
                  1.0 (  1.0 :   0.0) FRA   1012
                  1.0 (  1.0 :   0.0) ITA    937
                  1.0 (  1.0 :   0.0) LBN    910
   3 CAN   1202   8.0 (  6.0 :   2.0)
                  1.0 (  1.0 :   0.0) LAT   1227
                  1.0 (  0.0 :   1.0) SRB   1171
                  1.0 (  1.0 :   0.0) SLO   1078
                  1.0 (  1.0 :   0.0) ESP   1032
                  1.0 (  0.0 :   1.0) BRA   1032
                  1.0 (  1.0 :   0.0) FRA   1012
                  1.0 (  1.0 :   0.0) USA   1000
                  1.0 (  1.0 :   0.0) LBN    910
   4 SRB   1171   8.0 (  6.0 :   2.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  1.0 :   0.0) CAN   1202
                  1.0 (  1.0 :   0.0) LTU   1102
                  1.0 (  1.0 :   0.0) PUR    968
                  1.0 (  0.0 :   1.0) ITA    937
                  1.0 (  1.0 :   0.0) DOM    915
                  1.0 (  1.0 :   0.0) SSD    850
                  1.0 (  1.0 :   0.0) CHN    662
   5 LTU   1102   8.0 (  6.0 :   2.0)
                  1.0 (  0.0 :   1.0) LAT   1227
                  1.0 (  0.0 :   1.0) SRB   1171
                  1.0 (  1.0 :   0.0) SLO   1078
                  1.0 (  1.0 :   0.0) USA   1000
                  1.0 (  1.0 :   0.0) MNE    905
                  1.0 (  1.0 :   0.0) GRE    761
                  1.0 (  1.0 :   0.0) MEX    712
                  1.0 (  1.0 :   0.0) EGY    703
   6 SLO   1078   8.0 (  5.0 :   3.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) CAN   1202
                  1.0 (  0.0 :   1.0) LTU   1102
                  1.0 (  1.0 :   0.0) AUS   1075
                  1.0 (  1.0 :   0.0) ITA    937
                  1.0 (  1.0 :   0.0) GEO    899
                  1.0 (  1.0 :   0.0) CPV    727
                  1.0 (  1.0 :   0.0) VEN    628
   7 AUS   1075   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) SLO   1078
                  1.0 (  1.0 :   0.0) JPN    972
                  1.0 (  1.0 :   0.0) GEO    899
                  1.0 (  1.0 :   0.0) FIN    876
   8 ESP   1032   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) LAT   1227
                  1.0 (  0.0 :   1.0) CAN   1202
                  1.0 (  1.0 :   0.0) BRA   1032
                  1.0 (  1.0 :   0.0) CIV    763
                  1.0 (  1.0 :   0.0) IRI    670
   9 BRA   1032   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) LAT   1227
                  1.0 (  1.0 :   0.0) CAN   1202
                  1.0 (  0.0 :   1.0) ESP   1032
                  1.0 (  1.0 :   0.0) CIV    763
                  1.0 (  1.0 :   0.0) IRI    670
  10 FRA   1012   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) LAT   1227
                  1.0 (  0.0 :   1.0) CAN   1202
                  1.0 (  1.0 :   0.0) LBN    910
                  1.0 (  1.0 :   0.0) CIV    763
                  1.0 (  1.0 :   0.0) IRI    670
  11 USA   1000   8.0 (  5.0 :   3.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) CAN   1202
                  1.0 (  0.0 :   1.0) LTU   1102
                  1.0 (  1.0 :   0.0) ITA    937
                  1.0 (  1.0 :   0.0) MNE    905
                  1.0 (  1.0 :   0.0) GRE    761
                  1.0 (  1.0 :   0.0) NZL    665
                  1.0 (  1.0 :   0.0) JOR    478
  12 JPN    972   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) AUS   1075
                  1.0 (  1.0 :   0.0) FIN    876
                  1.0 (  1.0 :   0.0) CPV    727
                  1.0 (  1.0 :   0.0) VEN    628
  13 PUR    968   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) SRB   1171
                  1.0 (  0.0 :   1.0) ITA    937
                  1.0 (  1.0 :   0.0) DOM    915
                  1.0 (  1.0 :   0.0) SSD    850
                  1.0 (  1.0 :   0.0) CHN    662
  14 ITA    937   8.0 (  4.0 :   4.0)
                  1.0 (  0.0 :   1.0) LAT   1227
                  1.0 (  1.0 :   0.0) SRB   1171
                  1.0 (  0.0 :   1.0) SLO   1078
                  1.0 (  0.0 :   1.0) USA   1000
                  1.0 (  1.0 :   0.0) PUR    968
                  1.0 (  0.0 :   1.0) DOM    915
                  1.0 (  1.0 :   0.0) PHI    631
                  1.0 (  1.0 :   0.0) ANG    626
  15 DOM    915   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) SRB   1171
                  1.0 (  0.0 :   1.0) PUR    968
                  1.0 (  1.0 :   0.0) ITA    937
                  1.0 (  1.0 :   0.0) PHI    631
                  1.0 (  1.0 :   0.0) ANG    626
  16 LBN    910   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) LAT   1227
                  1.0 (  0.0 :   1.0) CAN   1202
                  1.0 (  0.0 :   1.0) FRA   1012
                  1.0 (  1.0 :   0.0) CIV    763
                  1.0 (  1.0 :   0.0) IRI    670
  17 MNE    905   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) LTU   1102
                  1.0 (  0.0 :   1.0) USA   1000
                  1.0 (  1.0 :   0.0) GRE    761
                  1.0 (  1.0 :   0.0) MEX    712
                  1.0 (  1.0 :   0.0) EGY    703
  18 GEO    899   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) SLO   1078
                  1.0 (  0.0 :   1.0) AUS   1075
                  1.0 (  1.0 :   0.0) CPV    727
                  1.0 (  1.0 :   0.0) VEN    628
  19 FIN    876   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) GER   1357
                  1.0 (  0.0 :   1.0) AUS   1075
                  1.0 (  0.0 :   1.0) JPN    972
                  1.0 (  1.0 :   0.0) CPV    727
                  1.0 (  1.0 :   0.0) VEN    628
  20 SSD    850   5.0 (  3.0 :   2.0)
                  1.0 (  0.0 :   1.0) SRB   1171
                  1.0 (  0.0 :   1.0) PUR    968
                  1.0 (  1.0 :   0.0) CHN    662
                  1.0 (  1.0 :   0.0) PHI    631
                  1.0 (  1.0 :   0.0) ANG    626
  21 CIV    763   5.0 (  1.0 :   4.0)
                  1.0 (  0.0 :   1.0) ESP   1032
                  1.0 (  0.0 :   1.0) BRA   1032
                  1.0 (  0.0 :   1.0) FRA   1012
                  1.0 (  0.0 :   1.0) LBN    910
                  1.0 (  1.0 :   0.0) IRI    670
  22 GRE    761   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) LTU   1102
                  1.0 (  0.0 :   1.0) USA   1000
                  1.0 (  0.0 :   1.0) MNE    905
                  1.0 (  1.0 :   0.0) NZL    665
                  1.0 (  1.0 :   0.0) JOR    478
  23 CPV    727   5.0 (  1.0 :   4.0)
                  1.0 (  0.0 :   1.0) SLO   1078
                  1.0 (  0.0 :   1.0) JPN    972
                  1.0 (  0.0 :   1.0) GEO    899
                  1.0 (  0.0 :   1.0) FIN    876
                  1.0 (  1.0 :   0.0) VEN    628
  24 MEX    712   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) LTU   1102
                  1.0 (  0.0 :   1.0) MNE    905
                  1.0 (  0.0 :   1.0) EGY    703
                  1.0 (  1.0 :   0.0) NZL    665
                  1.0 (  1.0 :   0.0) JOR    478
  25 EGY    703   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) LTU   1102
                  1.0 (  0.0 :   1.0) MNE    905
                  1.0 (  1.0 :   0.0) MEX    712
                  1.0 (  0.0 :   1.0) NZL    665
                  1.0 (  1.0 :   0.0) JOR    478
  26 IRI    670   5.0 (  0.0 :   5.0)
                  1.0 (  0.0 :   1.0) ESP   1032
                  1.0 (  0.0 :   1.0) BRA   1032
                  1.0 (  0.0 :   1.0) FRA   1012
                  1.0 (  0.0 :   1.0) LBN    910
                  1.0 (  0.0 :   1.0) CIV    763
  27 NZL    665   5.0 (  2.0 :   3.0)
                  1.0 (  0.0 :   1.0) USA   1000
                  1.0 (  0.0 :   1.0) GRE    761
                  1.0 (  0.0 :   1.0) MEX    712
                  1.0 (  1.0 :   0.0) EGY    703
                  1.0 (  1.0 :   0.0) JOR    478
  28 CHN    662   5.0 (  1.0 :   4.0)
                  1.0 (  0.0 :   1.0) SRB   1171
                  1.0 (  0.0 :   1.0) PUR    968
                  1.0 (  0.0 :   1.0) SSD    850
                  1.0 (  0.0 :   1.0) PHI    631
                  1.0 (  1.0 :   0.0) ANG    626
  29 PHI    631   5.0 (  1.0 :   4.0)
                  1.0 (  0.0 :   1.0) ITA    937
                  1.0 (  0.0 :   1.0) DOM    915
                  1.0 (  0.0 :   1.0) SSD    850
                  1.0 (  1.0 :   0.0) CHN    662
                  1.0 (  0.0 :   1.0) ANG    626
  30 VEN    628   5.0 (  0.0 :   5.0)
                  1.0 (  0.0 :   1.0) SLO   1078
                  1.0 (  0.0 :   1.0) JPN    972
                  1.0 (  0.0 :   1.0) GEO    899
                  1.0 (  0.0 :   1.0) FIN    876
                  1.0 (  0.0 :   1.0) CPV    727
  31 ANG    626   5.0 (  1.0 :   4.0)
                  1.0 (  0.0 :   1.0) ITA    937
                  1.0 (  0.0 :   1.0) DOM    915
                  1.0 (  0.0 :   1.0) SSD    850
                  1.0 (  0.0 :   1.0) CHN    662
                  1.0 (  1.0 :   0.0) PHI    631
  32 JOR    478   5.0 (  0.0 :   5.0)
                  1.0 (  0.0 :   1.0) USA   1000
                  1.0 (  0.0 :   1.0) GRE    761
                  1.0 (  0.0 :   1.0) MEX    712
                  1.0 (  0.0 :   1.0) EGY    703
                  1.0 (  0.0 :   1.0) NZL    665

8. Bayeselo Prediction Accuracy

In issue #1 rating list, before the semi-finals are played between USA-GER and SRB-CAN. It correctly predicts that GER will win over USA and SRB over CAN.

In issue #3, before the finals are played between GER-SRB for Gold/Silver and USA-CAN for Bronze, it also correctly predicts that GER will win over SRB and CAN over USA.

9. Download FIBA games in PGN format

You may download the pgn file [8] in my google drive. I use this to generate the bayeselo rating list.

Sample game.

[Event "FIBA World Cup 2023, INA, JPN, PHI, 2023-08-25 to 2023-09-10"]
[White "AUS"]
[Black "GER"]
[Result "0-1"]
[WhiteFIBARank "3"]
[BlackFIBARank "11"]
[WhiteFIBARating "740.2"]
[BlackFIBARating "643.5"]
[WhitePoints "82"]
[BlackPoints "85"]

0-1

White refers to a team at the left when viewed from FIBA page. The Black is a team shown at the right. FIBA ranks and ratings are based from the rating list released by FIBA this February. The Points are the actual scores in the game.

Download the bayeselo.exe and the pgn file from the links in the reference section. Put them in the same folder and run from the terminal.

./bayeselo
readpgn fiba_WC2023.pgn
elo
mm
exactdist
offset 1000 USA
ratings >ratings.txt
details >details.txt

Instead of exactdist, you can also use covariance to calculate the confidence interval.

You can also use my modified bayeselo program from my github repository [9]. This is the one I used to generate the rating list above.

F. Summary

Calculation Tree based from FIBA ranking system.

  1. Rating points calculation
    RP = BP + HAP + ORP (for each game)
    1. Base points or BP
    2. Home or Away Points or HAP
    3. Opposition ranking Points or ORP
  2. Weight calculation
    Weight = TD x CR x CS x R (for each game)
    1. Time decay, TD
    2. Competition and Region, CR
    3. Competition Stage, CS
    4. Round, R
  3. Team rating calculations involving the rating points and weights in the last 8 years.
    rating = Sum(rp_i x w_i) / max(K, Sum(w_i)) (for all games i)

G. References

[1]. FIBA Basketball official page (accessed 2023-09-05)
[2]. FIBA World Ranking presented by Nike (accessed 2023-09-05)
[3]. FIBA World Cup 2023 (accessed 2023-09-05)
[4]. FIBA ranking for men calculation document (accessed 2023-09-05)
[5]. FIBA ranking calculation examples (accessed 2023-09-05)
[6]. Get FIBA match results by Playwright (accessed 2023-09-05)
[7]. Bayeselo rating system (accessed 2023-09-05)
[8]. Games in PGN format (accessed 2023-09-10)
[9]. Bayeselo from my github repository (accessed 2023-09-10)
[10]. Bayeselo History (accessed 2023-09-18)
[11]. FIBA World Ranking in CSV (accessed 2023-09-18)

Comments