이전글 내용 보충(https://arca.live/b/heroes/39136535?category=%EC%82%AC%EC%84%A4%EB%A7%A4%EC%B9%AD+%EA%B0%9C%EC%84%A0%EC%95%88&p=1)


1. 신규유저 초기 점수 부여

30판 이상 플레이한 시즌 중 가장 최근시즌(폭풍리그 망하기 전 시즌 것들로 추려서)의 마지막 랭크와 점수가 있을 때 이를

브론즈5 0점을 0점으로 환산, 실버5 0점은 5000, 골드5 0점은 10000, ..골5 500점은 10500, 골드3은 500점은 12500.. 이런식으로 숫자로 환산.

 

브론즈5 0점0
실버5 0점5000
골드5 0점10000
플레5 0점15000
다이아5 0점20000
마스터 0점25000

ex)

골드5 500점10500
골드3 500점12500
마스터 2400점27400
그마 4000점29000


그 다음에 지금 히오스크에 들어온 들어와서 30판 이상 돌렸으며 승률이 50%에 도달한 사람들의 히오스크 점수와 그 사람들의 폭풍리그 점수 데이터를 수집함. 그 다음에 그 둘의 관계를 회귀분석 등 여러방법 중 하나를 택하여 관계식을 찾아냄. 아래는 선형회귀분석으로 추세선 공식 도출한것임.


xy선형회귀 수식
기존
히오스크 유저
폭풍리그점수히오스크점수y=0.0223x + 696
A2740012501308.26
B2900014001344.01
C13000980986.49
D6500850841.24

 

선형추세 계수0.022345183
상수항696



신규유저임

폭풍리그 점수 실버4 400점 -> 6400

0.0223*6400 + 696 = 839점으로 초기점수로 부여

js 통계 라이브러리

https://www.npmjs.com/package/simple-statistics



폭풍리그 점수를 불러올 수 있는 api는 찾지를 못하겠는데 

만약 존재하지 않으면 관리자들이 신규유저 가입할 때 확인하고 입력해야 되는 부분일듯.

존재하지 않는 경우 기존유저도 30판 이상되는 유저 중 승률 50%에 근접한 사람들 조회한다음에 운영자들이 인게임에서 조사해야됨. 전수조사는 아니더라도 통계적으로 유의하기 위해 최소표본값이라고 하는 30개 정도는 필요할듯. 표본은 많을 수록 정확  힘들면 다른 방법을 생각해야됨



*승률 50%를 찾는 이유와 승률 자체를 변수로 두지 않는 이유

승률에 관하여 사람들에게 많이 잘못 알려진게 있는데 승률은 그 자체로 실력을 판단하는 잣대가 안됨. 

실력을 나타내는 지표는 MMR이고 지금 현재 MMR에 따라 매칭을 해주는데, 최근 승률이 높다는 거는 현재 MMR이랑 비슷한 적들을 많이 이겼다는 것이고 이건 자기 실제 MMR이 더 높다는 의미일 뿐임. 최근 승률이 많이 높으면 훨씬 높다는 뜻. MMR의 실제값에 대한 하나의 경향성을 보여주는 지표라서 "승률 50% 미만은 파티로 안받아요" 이런게 잘못된 생각임. 전체승률도 의미가 적고, 최근 승률이 50%이냐,  위, 아래냐에 따라 현재 MMR이 균형인 상태이거나 실제 MMR이 더 높거나 낮은 상태라는 것을 의미하는 것임

연승하면 연패시켜서 승률을 50%로 만드는 사악한 블리자드의 알고리즘이 있다는 음모론들. 자기MMR이 이미 균형상태에 이르렀는데 매칭 팀원 셔플로 운좋게 자기 MMR보다 더 높은 MMR을 받게 되자 자기 자리를 찾아가게 되는 것임. 경기를 무한히 돌리면 돌릴 수록 MMR이 자기 실력에 맞게 찾아감에 따라 승률은 50%로 수렴함.


그래서 MMR 차이에 따른 승률을 알 수 있는 MMR 체계에서는 최근 승률에 따라 해당 유저의 실제 MMR을 좀 더 정확하게 알 수 있을 것 같음. 이걸 기존 히오스크 유저 중 최근 경기가 승률 50%에 근접하지 않은 유저들의 예상 실제 폭풍리그 점수, 히오스크 점수를 역산해서 회귀분석 정확도를 좀 더 올릴 수 있을 것 같음. 이건 이하 내용에서 MMR 관련 기술하고 나서 쓰겠음.


2. MMR

1) Elo rating

플레이어  A, B가 있을때 

A가 이길 확률   

B가 이길 확률  


A의 점수  B의 점수

숫자 400은 정할 수 있는 상수인데 양 플레이어 점수가 400점 차이 날 때 승률이 10 : 1 비율로 차이나게 설정한다는 의미임.

저 위 수식  - ,  -  부분에 400 넣고 계산하면 10/11, 1/11 나옴

점수체계 고안자인 Arpad Elo 교수가 400을 써서 많은 곳에서 400을 그대로 많이 씀.


경기 후 점수 산출은

 

( A의 실제 경기 결과. 1이 승리, 0이 패배, 0.5가 무승부.  

K는 K-factor라고 불리는 상수값인데 마스터급 플레이어에는 16을 쓰고 32를 약한 플레이어에 쓰도록 했으나 게임, 기관마다 저마다 최적의 값을 찾아서 쓰고 있음.

(ex. 국제체스연맹 2400점이상이고 이전에 30겜 이상 했으면 K=10, 항상 2400이하였으면 K=20, 처음 등장해서 30겜 하기전까지(배치고사?) or 18세미만이면 K=40) 높은 K값은 점수에 큰 변동을 가져옴.

 


점수
점수
A1250F1350
B1150G1200
C1000H1150
D1300I1000
E1000J1250
평균1140평균1190


왼쪽팀을 A팀, 오른쪽 팀을 B팀이라고 했을 때

A팀이 이길확률  = 1 / ( 1 + 10^( ( 1190 - 1140 )/400) ) = 0.428537 = 42.85%

실제 결과 이겼고, 배치게임 보는 중이라 K값은 40인 경우에 A팀 점수 변화는

1140 + 40 * (1  - 0.4285) = 1162.859 

평균이 22.859 올랐으므로 A팀 각 유저 점수에 22.859씩 더해주면 됨.



이제 1) 말미에서 말한 최근 30판 승률과 현재 점수에 따른 실제 점수 추정을 해볼 수 있음

상대가 본인의 현재 MMR로 잡힌다는 가정하에 현재 점수가 1200이고 최근승률이 70%인 유저 A가 있다고 하자

이 유저를 제외한 아군, 적 팀원은 안정화된 리그에서 모두 1200 점으로 비슷할 것임. 

그러므로 상대팀 점수 R_B는 유저A팀 현재 점수과 같음( ). 그리고 이 유저에 의해 팀의 예상 승률(이

70%가 된다는 가정을 할 수 있음.

유저A팀 현재 실제 점수: 유저A팀 예상 승률

위 공식을 변형하면

계산하면 1347.190714 나옴. 유저A팀이 1200 1200 1200 1200 1200(유저A)인데 1347.190714가 나오려면

유저 A 실제 추정점수가 1200 + 5*(1347.190714 - 1200) = 1935.954 점이 된다는 것을 알 수 있음.

정리하면

유저 실제 추정점수,  유저 현재 점수,  400 들어가는자리 rating variance라고 할까.. 최근 30판 승률


Elo rating은 1:1인 체스게임을 가정하고 만들어서 평균을 구하는 방식을 추가했는데 다대다 게임에서의 엘로변형에 관한 자료 찾기가 힘들어서, 해당부분은 본인생각으로 기술했고 승률과 실제MMR 추정치에 관한 것도 본인 생각으로 기술한 것이니 감안해서 검토하길 바람. 거친 추정일 수 있는데 아예 추정 안하고 위 회귀분석 돌리는 것보단 나을 것으로 봄

물론 이걸 적용하려면 점수가 elo rating을 따라야 하고 폭풍리그 점수나 현재 히오스크 점수에는 바로 적용 못함.


아 근데 하고 싶은 말은 많은데 정리해서 쓰는게 너무 힘든데..? 

이 글보고 다른 사람이 새로운 아이디어 떠올릴 수 있으니까 일단 올리고 glicko rating이랑 히오스크 점수체계를 새로운 점수 체계(elo, glicko..)로 변환하는 방법에 관해 생각 좀 해보고 이어 쓰겠음..