Rank to MMR
I wrote a code that can convert rank to mmr. To do this, we substitute the rank in the 1st or 2nd formula (depending on the rank). And we can see how the rank and MMR correlate. For high ranks, the error is 100-300 MMR (> rank = <accuracy: it depends on the top, as well as a limited amount of information about the ranks, I had 15 of them).
But in general, this can be easily corrected and the formulas can be made even more accurate, although they are already quite accurate in calculating MMR.
MAIN
Accuracy: 95-98% | If Rank <=460 Formula: MMR = -448.45658 * ln(9264.01245 * "RANK") + 17242.22337
Accuracy: 98-99% | If Rank>460 Formula: MMR = -1248.02749 * ln(1861.20536 * "RANK") + 27052.29973
Example:
Rank 131 | ~ 11000-11150 MMR MMR = -448.45658 * ln(9264.01245 * 131) + 17242.22337 = 10959.75 MMR Accuracy: 98.3%
Rank 1674 | ~ 8245 MMR MMR = -1248.02749 * ln(1861.20536 * 1674) + 27052.29973 = 8391 MMR Accuracy: 98.2%
Image for example:
is this EU only or does it hold true for russia, eu, sea, us east, us west?
awesome job with the formulas!
СIS + EU
I don't think it makes sense to do this for the US/SEA, because there are more streams from either the CIS or Europe, and I'm not sure if it's possible to track the region of the match.
The rating systems are different everywhere, because the number of players varies from region to region.
How to do this for any server.
Step 1. We have data from dotabod: what mmr = what rank. So we can do the following. We take people from the database, look at which server they played the last match on, and write them into the database. Now we know and can calculate the average rating for each region.
Step 2. From each region CIS/Europe/Chine/US West|East, we select a separate region and calculate the rank approximation to mmr, as it was in my code, the more data the more accurate the result will be.
Step 3. We get formulas that now calculate the average player rating at any given time.
Ez
thats a good idea @dankYoff
looks like opendota returns the region in api https://docs.opendota.com/#tag/matches/operation/get_matches_by_match_id maybe so does steam api, but i haven't checked