backend icon indicating copy to clipboard operation
backend copied to clipboard

Rank to MMR

Open dankYoff opened this issue 2 years ago • 6 comments

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:

image

dankYoff avatar Jan 31 '24 14:01 dankYoff

is this EU only or does it hold true for russia, eu, sea, us east, us west?

awesome job with the formulas!

Geczy avatar Jan 31 '24 16:01 Geczy

СIS + EU

dankYoff avatar Jan 31 '24 16:01 dankYoff

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.

dankYoff avatar Jan 31 '24 16:01 dankYoff

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

dankYoff avatar Mar 11 '24 10:03 dankYoff

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

Geczy avatar Mar 12 '24 00:03 Geczy