NDC 후기: 매칭시스템

  • 이 글은 NDC (Nexon Developers Conference) 홈페이지에서 YouTube 영상을 보고 관심 있던 주제인 매치 메이킹을 현업에서 어떻게 사용하는 지에 대해 정리한 글입니다.
  • 다음 방침에 따라 권리자명과 홈페이지를 출처로 밝힘을 알립니다.

NDC 저작권 방침: 저작물을 개인 블로그, 페이스북 등 SNS에 게재하길 원하시는 경우에는 반드시 권리자명 및 본 홈페이지를 출처로 명시하여야 하고, 해당 저작물을 변형시키지 않는 전제 하에서 게재하실 수 있습니다.


넥슨: 어떻게 매칭시켜드릴까요?


문제 정의

매치메이킹이란 사업, 스포츠, 게임에서 상대를 찾는 과정, 게임판을 짜주는 작업을 의미합니다.
"유저 간 상호 작용"의 첫 관문이기 때문에 상대를 잘 찾아주는 과정이 필요합니다.

브롤스타즈를 하면서도 종종 매치메이킹에 곤혹을 겪기도 하는데요. 저 사진처럼 예전에 로사라는 신규 캐릭터가 출시되었을 때 매치메이킹에 불만이 많아서 인스타그램에도 써놨습니다.ㅋㅋㅋ

이 글을 쓴 배경은 다음과 같습니다.
로사를 상점에서 싸게 구매할 수 있게 해놓아서 대부분의 유저가 로사 캐릭터를 갖게 됩니다. 결과적으로 로사를 선택하면 매치메이킹도 매우 길어지고, 매치메이킹이 되어도 한 팀에 3명 중 2명 정도가 로사였습니다. 더 심각한건 로사의 밸런스 조정이 안 되고 너무 능력치가 높아서 게임도 재미있게 즐기지 못했다는 점입니다. 그 이후부터는 신규 캐릭터가 나와도 “뿌리기” 식의 구매는 자제하고, 로사는 하향 조정 되었습니다.

또 하나의 문제점은 브롤 스타즈가 (경험 상) 캐릭터 별 레벨이 비슷한 유저끼리 매치 메이킹을 하는 방식이라는 점입니다. 이 경우 아예 게임을 처음 시작하는 뉴비와 신규 캐릭터를 뽑은 장기 유저 간의 배틀이 성사되기 때문에 문제가 됩니다. 흔히 말하는 "양민 학살"이 일어날 수도 있기 때문에 뉴비들의 게임 적응을 막는 방해요소라는 생각이 들었습니다.

다시 본론으로 돌아와서 넥슨에서도 이러한 매치메이킹을 어떻게 하면 잘 할까에 대해 고민했습니다.


기존의 접근 방법: 실력 점수 방식


되도록 비슷한 실력의 유저를 짝 지어주는 것이 기존의 접근 방법입니다. 비슷한 실력인 지 판단하기 위해서 **실력 점수 (Skill Rating, MMR (Match Making Rating))**을 도입합니다.
실력 점수는 초기값에서 시작해서 게임 결과가 예상과 일치하는 방향으로 점수를 갱신합니다.

구체적인 실력 점수의 예시는 Elo 실력점수 체계입니다. tmi로 "일로"라 읽을 줄 알았는데 "엘뢰"이네요!
미국의 물리학 교수이자 체스 플레이어인 “아르파드 엘뢰” 교수님이 착안한 방법이라 합니다. ([link])

Elo 점수 체계는 다음과 같이 X축에는 점수 차이, Y축은 승률을 그래프로 나타내서, 점수 차가 얼마일 때 그에 대한 예상 승률이 공식으로 정해져 있다 합니다. 예를 들어, 다음과 같이 점수 차이가 날 때 승률은 이렇습니다.

  • 내 점수가 상대방보다 200점 높으면 승률이 75%
  • 내 점수가 상대방과 같다면 승률이 50%
  • 내 점수가 상대방보다 200점 낮으면 승률이 25%

의문이 드는 점은 게임마다 점수 차에 따른 승률이 다를 것 같은데 이런 걸 고려하고 있는 지 궁금하네요…!

Elo의 실력 점수 갱신식을 보면 새 실력 점수는 이전 실력에서 실제 결과와 예상과의 차이를 더해주는 식으로 되어 있습니다.
예를 들어 내 점수가 1600점일 때 상대방이 1800점인 경우, 승률은 25% = 0.25입니다. 여기서 $$K=24$$라 가정합시다.

  • 내가 승리한 경우, 점수가 낮은데도 승리했기 때문에 "예상 밖의 승리"로 간주해 더 많은 가중치 0.75를 곱해줍니다.

    1600+K(10.25)=1600+0.75×24=16181600 + K(1-0.25) = 1600 + 0.75\times24 = 1618

  • 내가 패배한 경우, 점수가 낮으므로 "예상 하의 패배"로 간주해 적은 가중치 0.25를 곱해 빼줍니다.

    1600+K(00.25)=16000.25×24=15941600 + K(0-0.25) = 1600 - 0.25\times 24 = 1594

즉, 예상 밖의 승리를 했을 때 기존의 실력점수보다 18점이 오른 반면, 예상 하의 패배를 하면 6점만 깎이게 되죠!


실력 기반 매치메이킹 절차

이제 실력 기반의 매치 메이킹 절차를 정리해봅시다.

  1. 매칭을 요청한 유저를 실력점수에 따라 정렬하고, 인접한 유저끼리 매칭
  2. 제한 시간 내에 인접한 유저 탐색
  3. 게임 시작
  4. 게임 결과를 점수에 반영

결국 실력기반의 매치메이킹은 상대와의 실력 동등함과 대기 시간의 트레이드 오프라 할 수 있습니다.

실력이 비슷한 사람과 게임하면

  • 너무 많이 지거나 많이 이기지도 않고
  • 일방적인 게임은 적어지며
  • 지더라도 납득할 수 있습니다.

끝나지 않은 문제

설령 매치메이커가 모든 유저의 승률을 50%로 만들더라도…유저들 마다 결과를 받아들이는 것은 주관적입니다. 앞의 제가 예시를 들은 브롤스타즈도 제가 생각하기엔 불공평하다고 느낄 수 있지만, 다른 유저들은 오히려 팀 내 브롤러가 중복되면 재밌고 공정하다 느낄 수 있죠. 실제로 "공정하다"라고 여기는 유저들의 승률은 50%보다 높은 편이라는 설문조사 결과도 있다고 합니다.

이와 더불어서 매치 메이킹에서 고려해야할 문제는 더 있습니다.

  1. 운영 상의 문제: 게임핵, 어뷰징, 대리 게임, 패작 (일부러 져주는 행위), 부계정, 양민학살 등을 들 수 있는데요. 앞의 두 번째 예시처럼 뉴비와 장기 유저, 더 심각하게는 패작을 하는 계정과 매치메이킹될 경우 뉴비의 이탈 요인이 되기 때문에 조심해야합니다.
  2. 측정의 문제: 이 문제는 실력 점수의 신뢰성을 의미합니다. 실력 점수라는 하나의 지표로 매치메이킹되는 것보단 여러 요소를 고려해서 점수를 체계화하는 것이 더 나을 것이라는 판단하에서이죠!
  3. 동등함의 문제: 이는 가장 중요한 문제로, 실력의 동등함이 "재미"와 직결되지 않는다는 점입니다. 항상 비등한 유저와 매칭하는 것보다 제 레벨이 높고 상대방은 낮아서 시원하게 이길 때 재미를 느낄 수도 있겠죠…? (동감합니다!)

해결을 위한 고민: 머신러닝 적용하기

이를 위해 넥슨에서 해결한 방법은 머신러닝을 적용하는 것입니다.
넥슨의 경우 다양한 장르의 게임로그를 오랫동안 저장한 라이브기록이 있고, 유저 단위의 프로파일 형태로 잘 저장되어 있다고 합니다!

기존에는 단일 유저의 실력점수를 측정했지만, 더 나아진 방법으로 같이 플레이할 유저들의 조합을 고려해 피처를 선택했습니다. 예를 들어, 다음과 같은 피처를 생성하고

  • 각 유저의 선호 무기? 캐릭터 선택?
  • 선호하는 포지션 전략
  • 맵리딩 능력
  • 선택 캐릭터의 숙련도와 평균 퍼포먼스
  • 최근 게임의 격차수준
  • 연승 연패
  • 파티 상태
  • 아군팀과의 상성
  • 트롤이나 비매너 행위 등

승률을 다음과 같이 함수 형태로 정의하는 것이죠.

나의 승률=f(내 프로필, 상대의 프로필, 게임 정보,...)\text{나의 승률} = f(\text{내 프로필, 상대의 프로필, 게임 정보,...})

어떤 머신러닝 방법을 사용했는 지에 대한 언급은 없네요…!

실제로 실력 점수만을 고려한 매치메이킹보다 머신러닝 모형을 사용하면 66%의 정확도 (승패 여부 = 예측한 승패 여부)로 6% 정도 향상되었다고 합니다.


마치며

매치 메이킹의 핵심은 "주어진 시간"하에서 유저가 최대한 재미를 느낄 수 있도록 매칭 조합에 대한 품질을 평가하는 것입니다.


느낀 점


이미지 링크
{:.figure}

  1. 매치 메이킹, 생각보다 쉽지 않을 것 같습니다. 여기서 매치메이킹이 얼마나 잘 됐나 평가할 때 정확도를 사용하는데, 이보단 각 매치 메이킹마다 유저가 만족한 정도도 정량적으로 파악하는 지표가 필요해 보입니다.
  2. 저도 팀의 조합이 중요하다는 점에 동의합니다. 그러나 랜덤성에서 오는 재미가 있기 때문에 너무 조합에만 맞춘 매치메이킹도 경계해야 한다 생각합니다. 오버워치의 경우 탱커-딜러-힐러의 인원을 2명씩 제한해서 팀의 밸런스가 붕괴되지 않는 장치를 인위적으로 마련했는데 또 그러니 재미가 줄었거든요.
  3. 제가 생각했을 때 게임의 재미는 "연패"를 무마할 "연승"인데요. 이 경우라면 평균 게임 이용 시간을 따져 가능한 연승과 연패의 횟수를 계산한 후 매치메이킹에 반영하면 좋을 것 같다 생각이듭니다.