일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- command
- C++11
- FTZ 레벨2
- Overwatch League SaberMetrics
- ftz
- 오버워치 세이버메트릭스
- BEST of the BEST
- vi 외부 명령어
- #MINT64 #Sqix
- Find
- vim
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- Network
- linux
- >
- #Qt Creator
- #Best of the Best #OS #MINT64 #Sqix
- libtins
- KASAN
- 인터럽트
- vi
- #
- 오버워치
- Sqix
- libpcap
- #IntelManual
- Today
- Total
Sqix
OWL Statistics : 팀 기여도에 대한 연구 2 - FBpW 본문
이전 세이버매트릭스에서 공격 기여에 대해서 공부를 해 보았습니다. 야구의 세이버매트릭스에서 세 가지의 중요한 공격 지표로 사용되는 RC(Runs Created, 득점 창출력), wOBA(weighted On Base Average, 가중 출루율), EqA(Equivalent Average, 등가 타율)에 대해서 어떤 스탯이 산출되고, 어떻게 가중치를 부여하는지를 간략하게 보았습니다.
오늘은 어떻게 해야 오버워치 리그 데이터를 통해서 선수들의 공격적 기여도를 측정할 수 있는지에 대해 생각해 봐야겠습니다.
야구는 근본적으로 득점에 기반한 스포츠입니다. 출루도, 수비도, 타격도, 주루플레이도 결국에는 득점을 성공시켜 상대방보다 게임의 끝에 도달했을 때 더 많은 득점을 올린 선수가 게임에서 승리합니다.
오버워치는 오브젝트에 기반한 FPS 게임입니다. 승리를 위해서는 오브젝트 점유를 방해하는 상대방을 이겨 화물의 목적지까지에 대한 이동 혹은 거점에 대한 점령이 필요합니다. 이러한 중요한 오브젝트를 점유하기 위해서는 한타가 발생하기 마련이고, 한타에서 팀을 유리하게 해 줄 지표는 상대방을 잡아내는 것입니다.
결국 오버워치는 킬을 생성해 내기 위한 행위가 팀을 유리한 위치에 놓게 해 줍니다.
그렇다면, 선수 한 명이 몇 개의 Final Blows를 만들어 내어야 1승을 더 기여할 수 있을까요
글 작성 시점 기준으로 공개된 OWL 2020시즌 데이터는 4.20까지의 데이터입니다. 각 팀이 진행한 매치를 합치면 140매치가 이루어졌으며, 나온 Final Blows는 40694, Deaths는 41900(자살도 합친 횟수), Play Time은 4806855.56초입니다.
피타고리안 승률을 생각해 봅시다. 득점^1.87 / (득점^1.87 + 실점^1.87)이 일반적인 세이버의 기대승률입니다. n을 구하는 과정이 여러 보정이 이루어져야 하는데, 아직 그러한 보정계수들은 못 구했으므로 현재 리그 팀들의 데이터를 회귀분석해서(= 노가다로) 구해보도록 합시다.
피타고리안 기대승률 공식은 다음과 같습니다.
$FB^n / (FB^n + D^n) = W$
자살 수치를 보정해서 Final Blows와 Deaths가 동일하다고 가정해 보도록 하겠습니다. 자살 수치 역시 킬로 인해서 유리하게 이끈 한타를 상대방이 궁극기를 채워주지 않게 하기 위해 죽는 것으로, Final Blows에 이 수치를 보정했습니다. 평균 승률이 0.5인 팀은 FB와 D가 동일하겠죠.
현재 공개된 데이터를 한 팀 수준으로 낮추기 위해 각 값을 20으로 나눠줍니다.
팀당 평균 Final Blows : 2034.7, Time Played : 240342.778, Deaths : 2095, Matches : 7, Wins : 3.5
현재 승률은 0.5이고, 팀이 1승을 더한다면 승률은 약 64%가 될 것입니다. 그럼 목표 승률은 4.5/7로 잡도록 합시다.
피타고리안 승률이 위와 같았으니, 이를 이용한다면 1승을 더하기 위한 팀의 Final Blows를 계산할 수 있을 것입니다. 우리가 구하고자 하는 값을 x라고 생각합시다. Target Win Rate는 0.64285714였죠. FB는 이미 Deaths와 동일 수치로 보정을 했습니다.
$(FB+x)^n / ((FB+x)^n + D^n) = W$
그런데, 여기서 x 이외의 모든 값은 주어져 있습니다. 수식을 다시 쓰면
$\ln(1 + x/FB) = \ln(W / 1-W) / n$
이제 x만 좌변에 남기고 모두 넘기도록 합시다.
$x = FB * (exp(\ln(W/1-W)/n)-1)$
각 요소에 해당 값을 대입해 주면 238.9054303이 나오게 됩니다. 해당 값이 매치에서 팀 전체가 1승을 하기 위해 추가로 필요한 FB입니다. 이를 피타고리안 승률에 도입하게 되면, 우리가 추정했던 승률치(약 64%)가 나오게 됩니다. 오버워치의 한 팀 구성은 6명이므로, 이를 6으로 나누면 선수 1명당 1승을 추가하기 위해 매치에서 해야 할 킬 수치인 39.81757172가 나옵니다. (FBpW for Match)
경기 단위 스케일에서 이제 수치화하기 편하게 선수의 분 단위 스케일로 변경해 줍시다. 이를 위해서는 단일 팀 스케일에서, 하나의 매치 당 한 명의 선수가 소화하는 시간을 알아보아야 합니다. 이를 위해선 위의 팀당 Time Played를 평균 매치 수인 7으로 나눈 뒤, 한 팀당 플레이하는 선수의 수인 6으로 나눕니다. 이러면 한 선수가 한 매치에서 평균 플레이한 시간은 5722.447095초로 구해집니다.
10분당 수치를 구할 것이기 때문에, 승리 기여를 위한 1초당 Final Blows를 구한 뒤 600을 곱합니다.
$FBpW for 10 mins = 600 * (FBpW for Match / 6 / Avg Playtime)$
이를 통해 팀의 매치 1승을 위해 10분당 선수가 발생시켜야 하는 Final Blows 수치를 구할 수 있습니다.
FBpW for 10 mins를 X, Average Playtime을 AP로 놓고 수식을 대략 정리해 보면
$X = 600 * FB * (exp(\ln((win/lose)/(1-(win/lose))/n) - 1) / 6 / AP)$
로 놓을 수 있고, 현재 데이터 기준(~4.20)으로는 4.17488229가 됩니다.
'OWLMetrics - 오버워치 세이버메트릭스' 카테고리의 다른 글
Data View - Team Contributed per 10 mins (0) | 2020.05.09 |
---|---|
OWL Statistics : 팀 기여도에 대한 연구 3 - Key Stats (0) | 2020.04.27 |
OWL Statistics : 세이버매트릭스에서 공격 기여에 대한 공부 - wOBA (0) | 2020.04.25 |
OWL Statistics : 세이버매트릭스에서 공격 기여에 대한 공부 - EqA (0) | 2020.04.24 |
OWL Statistics : 세이버매트릭스에서 공격 기여에 대한 공부 - RC (0) | 2020.04.24 |