작성자 |
|
||
---|---|---|---|
작성일 | 2014-01-22 10:49:31 KST | 조회 | 789 |
제목 |
Trueskill 랭킹 시스템을 이용한 군심 밸런스 & 선수 분석
|
먼저 TeamLiquid Progaming Database에서 군단의 심장 출시 이후 모든 대회의 데이터를 추출해서 JSON 형태로 저장했습니다. (TLPD Link)
Source code : http://ideone.com/8txBxh
총 22300 경기가 나오네요.
경기가 진행된 모든 리그들을 분류(Link)하고 경기 수를 기준으로 정렬해보니, 대부분 메이저라고 할만한 대회들이 상위에 있기는 합니다. 그런데 한번도 들어보지 못한 리그도 있긴 하더군요. 이걸 어떻게 할까 고민하다, 그냥 전 경기 다 넣었습니다 -,.- 어차피 경기 숫자가 적은 리그는 전체 결과에 미치는 영향이 미미할 것이고, 어떤 기준으로 리그를 선택해야 할지 애매한 면이 있었으니까요.
그리고 외국인 선수와 한국인 선수를 또 별도로 구분하지 않았습니다. 이 역시 저의 귀차니즘 및 기술적 어려움 때문인데, 때문에 한국인은 전혀 안 만나는데 외국인들은 학살하고 다니는 양본좌가 있다면 점수가 높게 나오게 되는 것입니다. 아예 지역별로 구분하여 왕래가 불가능한 WCS 결과 때문에 그런 현상이 더 나타나기 쉽고요.
Trueskill 시스템에 대해서 간단히 설명드리자면, Microsoft에서 베이즈 정리에 기반하여 개발한 레이팅 시스템입니다. 쉽게 말해서 선수들 실력 줄세우는 시스템입니다. elo 레이팅 시스템에 대해서는 많은 분들이 알고 계실 겁니다. 그런데 elo는 완전 쌩 신인 선수의 점수와 고참 선수의 점수가 같다면 두 선수 사이의 승률을 50%로 계산합니다. 그리고 경기력 기복이 심한 선수와 기복이 별로 없는 선수 사이의 차이도 전혀 고려에 들어가지 않습니다.
이 알고리즘이 어떻게 동작하는지에 대해서는 다음 게시물(영어)에 잘 설명되어 있습니다.
http://www.moserware.com/2010/03/computing-your-skill.html
https://dl.dropboxusercontent.com/u/1083108/Moserware/Skill/The%20Math%20Behind%20TrueSkill.pdf
아니면 논문을 직접 보셔도 됩니다.
http://research.microsoft.com/pubs/67956/NIPS2006_0688.pdf
요약하면 trueskill은 선수의 실력을 하나의 숫자로 나타내는 것이 아니라, skill과 distribution이라는 두 개의 변수로 나타냅니다. skill은 이 선수가 발휘할 것으로 기대되는 평균적인 실력을 나타내는 것이며, distribution은 선수의 실력 기복의 정도를 나타내는 것으로 볼 수도 있고, 아니면 경기 수가 적은 선수의 불확정성(uncertainty)으로 볼 수도 있습니다.
elo 레이팅에서는 점수가 매우 높은 선수가 새로 게임에 들어선 신인에게 패배하면 엄청난 점수 변동이 일어납니다. 그러나 trueskill은 uncertainty의 개념을 도입하고 있기 때문에, uncertainty가 큰 신인에게 패배한 경우 점수가 큰 폭으로 깎이지는 않습니다. uncertainty는 경기 수가 증가할수록 감소하는 경향이 있습니다만, 시스템 입장에서 의외의 결과가 나오면 증가하는 경우도 있습니다. skill과 distribution의 증가/감소량은 꽤 복잡한 베이즈 정리를 통해 유도되는데, 일단 시스템 개발자들이 똑똑하니 알아서 잘 했으리라 생각하는 것이 마음 편하겠네요.
Trueskill이 elo에 비해서 우수한 점이 많은데요. 첫째로 선수의 실제 실력으로 수렴하는 속도가 훨씬 빠릅니다. 또 한 가지 중요한 점은, 원래 XBOX 멀티플레이에 사용하기 위해 개발한 것인 만큼 팀 대 팀 게임에도 적용할 수 있다는 것입니다. 리그 오브 레전드에서 elo를 사용하고 있고 그 외에도 몇몇 게임에서 사용하고 있습니다만, 그것은 사실 팀 대 팀 게임에 elo를 사용하기 위해 몇몇 응용을 하면 대충 동작은 하더라는 경험적 지식에 의한 것이지, 수학적으로는 정당성이 없습니다. 그러나 Trueskill은 factor graph라는 개념을 도입함으로써 어째서 1:1 경기에 사용되는 방법을 n:n으로 확장할 수 있는지 우아하게 설명하고 있습니다.
사족이 길었습니다만, 바로 팀 대 팀 경기에도 이용할 수 있다는 특성을 어떻게 이용해볼 수는 없을까 생각해보다가 한가지 아이디어가 생각이 났습니다.
“스타 2의 종족 상성과, 맵의 종족별 유불리가 어느 정도나 되는지 이를 이용해 알아낼 수는 없을까?”
예컨대 이런 아이디어입니다.
테란 종족의 A라는 선수가, 저그 종족의 B라는 선수와 M이라는 맵에서 경기를 한다고 합시다.
종족을 기준으로 TvZ, ZvT라는 가상의 선수를 생성합니다.
그리고 맵을 기준으로 M_ZvT, M_TvZ라는 가상의 선수를 생성합니다.
그리고 나서 이 경기를 A와 B의 대결으로 보지 않고…
[A, TvZ, M_TvZ]라는 세 명의 선수를 한 팀, [B, ZvT, M_ZvT]라는 세 명의 선수를 한 팀으로 하여 팀 대 팀의 경기를 펼치는 것으로 생각하는 겁니다.
22,300경기를 차례대로 이런 식으로 계산하고 난 뒤에 TvZ라는 선수와 ZvT라는 선수 사이의 기대 승률을 계산하면, 두 선수의 실력이 완전이 동등하고 맵이 완전히 공평할 경우의 두 종족 사이의 기대 승률을 구하는 것과 같다고 생각할 수 있지 않을까요?
아니면 특정 맵, 말하자면 연수라는 맵의 유불리가 프로토스와 테란 중에서 어느 쪽에 기울어 있는지를 알아낼 수 있지는 않을까요?
...해서 분석을 해봤더니 테란이 프로토스 상대로 승리확률 80%가 나오는 말도 안 되는 결과가 나오더군요. 이유를 생각해보니 테란 유저가 저그를 상대로 승리하면 TvZ라는 선수는 점수가 오르고 ZvT선수는 점수가 깎일 것 아니겠어요? 그러니 점수 차이가 점점 커질 수밖에 없는 거죠..
아… 짜증난다… 내 시간… 하면서 다시 고민해봤습니다.
네트워크 게임이란 게, 특히 다대다 게임인 경우에는 모든 사람이 게임이 시작할 때부터 끝날 때까지 같이 플레이를 한다는 것이 참 힘든 일입니다. 특히 FPS같은 경우 중간에 나가는 사람도 많지만 중간에 들어오는 사람도 많죠. 그래서 Trueskill에는 플레이어들의 플레이 시간에 따른 기여도를 감안하여 계산할 수 있도록 하는 장치가 되어 있습니다.
그래서 서로 대칭되는 애들끼리는 경기 시간을 50%만 참가한 걸로 놨습니다. 이거야말로 딱히 정당성은 없는 땜빵식 처방이지만 뭐 어떱니까. 재미로 하는 건데. 아, 까짓거 게임 절반은 테저전 했고 절반은 저테전 했다고 보면 되는 거 아닙니까? (...)
이렇게 하자 변화폭 자체는 줄어들었지만, 여전히 TvP와 PvT는 대칭적으로 증가 감소합니다. 기본 레이팅이 (25, 8.3)인데, TvP가 (25.3, 8)이라면 PvT는 (24.7, 8)인 식으로요.
해서… 테프가 얼마나 기울었는지를 보려면 TvP와 기본 레이팅인 (25.0, 8.3) 사이의 승리 확률을 구하면 되겠네요.
해서 구해진 결과가..
테저 : 53.33%
프저 : 52.44%
테프 : 52.19%
다만, 이건 군단의 심장 런칭 직후의 대 혼돈기를 모두 포함한 결과라서, 최근 패치 이후의 밸런스를 말해주는 것은 아닙니다. 그리고 실제 게임에선 맵의 영향이란 것도 있게 마련이구요. 그러니 이건 나중에 확인해보면 될 것 같고…
맵에서의 종족 상성도 비슷하게 구할 수 있겠죠?
GSL 맵이자 래더맵인 다이달로스를 기준으로 구해 봅시다.
프테 : 77.83%
저프 : 69.17%
저테 : 67.88%
………
이딴 맵을 만든 맵퍼는 가서 좀 반성하기 바랍니다.
아무튼, 시간이 되면 조금 더 심도있는 분석이 가능한 데이터가 될 것 같습니다 :) 예를 들어서 어떤 선수를 기준으로 이 선수의 실력이 시간에 따라서 어떻게 변화하고 있는지, 특정한 패치를 기준으로 얼마나 밸런스의 변동이 생기는지 등을 알아볼 수 있겠습니다. 아니면 여기서 더욱 발전된 Trueskill through time 알고리즘을 적용할 수도 있겠는데, 이 경우 서로 분리되어 있는 지역 사이에서 실력 수치가 제멋대로 움직이는 현상이 어느 정도 보정이 됩니다. 이건 가지고 있는 구현체가 없어서 현재는 할 수가 없네요. 종변을 하기 전과 한 후의 김도우의 실력 변화를 보는 것도 흥미로울 것 같습니다.
나아가서는 어떤 두 선수가 어떤 맵에서 붙었을 때 누가 이길 확률이 얼마나 높은지도 계산할 수 있겠죠. …. 어라, 이거 어째 배저씨들이 좋아할 것 같은데.
아무튼 일단 결과는 아래 링크의 엑셀 파일에 넣어 두었습니다.
https://www.dropbox.com/s/yapbmxchwh97hsa/Sc2Trueskill.xlsx
“선수만” 워크시트는 맵별, 종족별 상성 그런 거 없고, 그냥 그 경기에서 실력이 좋았던 선수가 이긴다는 가정 하에 Trueskill 랭킹을 구한 결과입니다.
“맵별” 워크시트는 각 맵에서 각 종족전이 얼마나 기울었는지를 확인할 수 있습니다. 평균값이 25.0에 가까울수록 균형에 가깝다는 것을 의미하겠죠.
“종족별” 워크시트는 맵이 동일할 경우 각 종족전이 얼마나 기울었는지를 확인할 수 있습니다.
“선수별” 워크시트는 선수와 맵과 종족전을 모두 고려하여 계산한 Trueskill 레이팅입니다.
|
||
|
|
||
|
|
||
|
© PlayXP Inc. All Rights Reserved.