# 6th place(UriB) by Uri Blass I calculated rating for every player in months 101-105 and after having the rating I have a simple formula to calculate the expected result only based on the rating and the color. The tricks that I used were mainly in calculating the rating but I will start explaining the simple part. The first part was calculating the bonus for white I had the following formula for this part: bonus=maximum((white_rating+black_rating-3100)/40.0,50) Diff=white_rating+bonus-black_rating Expected_result=0.5+Diff/850 When I changed it to be not more than 0.970588 and not less than 0.1(practically it had a very small effect because the result was always bigger than 0.1 and there was only one case when I needed to reduce it to 0.970588) Now we go to the hard part that is how to calculate the rating for every player. For this purpose I admit that I used the future to predict the past(but I have also prediction based on a different model in the top 10 when I did not use the future to predict the past). I used a function that I called repeat_strength_estimate The function get the following parameters: 1)k that is the last month that is not missing. For the prediction of months 101-105 k=100 but for testing my parameters I used k=90,91,92,...99 2)max_months(practically get the value 81 and I admit that it is not a good name) The meaning of max_months=81 is practically that I do not use the first 20 months to predict month 101 and that I do not use the first 21 months to predict month 102 and generally I do not use the first m-81 months to predict month number m. 3) big_dif=310 big_dif was used to calculate performance rating and for some reason I found that small values give better results in my tests so I used this small value My formula for performance rating was performance_rating=avg_rating+((result-opponents)/opponents)*big_dif; the value of the division can be at most 1 and at least -1 because result is practically weighted half points and is something between 0 and twice the weight of the opponent. opponents in this formula mean the number of weight opponents(when the weight is based on the distance in month from the month to predict) This formula means that even if a player lost all the games against the opponents then he still got performance rating that is only 310 elo weaker than the average of the opponents because the result of the division is always between -1 for losing all games and 1 for winning all games. I guess that it was good because not all games are included so person who played against strong opponents probably performed practically better than his real score and it is not good for the real world when games are not missing. 4)num_avg=5.9 similiar to chess metrics(I added 5.9 faked opponents with average rating) 5)num_weak=2.2(added 2.2 faked weak opponents) 6) value_weak=2210(rating of the weak opponents like chess metrics 7) unrated=2285(I think that practically had no effect because players always have games in the last 80 months) 8) minimal_game_finished=15(I reduce rating to players with less than 15 weighted games similiar to chess metrics) 9)reduction_per_game=12(the number that I reduce for less of experience for player without many weight games) 10)adding=39(the number that I add to rating of players after every iteration) repeat_strength_estimate basically did 10 iterations for evaluating the strength of every player in every month. The evaluation of the strengh was based on 2 steps when step 1 was the function that calculate strength that is similiar to chess metrics but there are important differences and step 2 was deciding that place 50 has rating 2625 in the rating list that is exactly the same as chess metrics. calc_strength_chess_metric is the missing function to understand the algorithm and it basically got 11 parameters(all the 10 parameters that repeat_strength_estimate got and another parameter that is the month that we calculate estimate for it). Note that the estimate for month 50 of player 1 when months 101-105 are missing is important because if player 2 played with player 1 at month 50 then it is going to influence the rating of player 2  at month 101-105 that is used to calculate the expected result. I use the word estimate and not rating because rating by definition assume that we do not have future results. I had basically 2 steps in calc_strength_chess_metric The first step was a loop that calculated the estimate for strength for every player in the relevant month. The second step is a step that I used only when I needed to predict the strength in the missing months and it is practically unfair trick but not something that is forbidden in the competition because I used the information about games and not about the results in the supposed missing months to calculate changes in the rating estimate in these months. I did not finish to explain my algorithm and I plan also to send code later but now I need only to explain the 2 steps of calc_strength_chess_metric to explain my algorithm and I will do it later in another post(this part of the program is only slightly more than 100 lines of code in C).