온라인 게임에서의 이항 분포
온라인 게임의 아이템 강화, 확률형 아이템 등을 이항 분포로 설명한다.
게임, 불확실성의 연속
온라인 게임에서 일어나는 모든 이벤트는 확률을 수반한다. 캐릭터가 몹을 한 번 때리는 행위에서도 수 많은 사건들이 확률과 연관되어 발생한다. 크리티컬 데미지가 발생할지 확률로 결정되고, 기본 데미지에 어느 정도의 무작위성이 적용되어 최종 데미지가 정해질지 확률로 결정된다. 회피 확률에 따라 해당 공격에서 회피 사건이 발생할지 결정되고, 기본 방어력에 어느 정도 무작위성이 영향을 미칠지 확률로 결정된다. 불확실한 결과가 발생하는 모든 과정에 확률은 존재한다.
<데미지 숫자 하나도 결국 확률에 의해서 결정된 사건 중 하나다. 출처: http://i.imgur.com/YjI1H.jpg linked in us.battle.net>
게임에서 일어나는 대부분의 사건은 그 결과가 불확실하다. 즉, 게임 속의 거의 모든 사건에는 확률이 관여하고 있다. 따라서 재미있는 게임을 만들기 위해서는 확률에 의해 게임의 사건들이 어떤 모습으로 발생할지 알아야 한다. 예를 들어, 장비 강화에 성공할 확률이 10%라고 하면 10번 시도해서 한 번 성공한다고 이해할 수 있다. 이는 틀린 이야기가 아니지만, 게임을 즐기는 플레이어 입장에서 충분한 설명은 아니다. 게임을 만드는 입장에서도 플레이어가 어떤 경험을 하게 될지 막연한 기분에 의존하게 된다. ‘10% 성공 확률’이 ‘10번 시도 중 한 번 성공한다’는 단순한 의미 이상을 이야기하지는 않을까?
시행, 사건, 확률
불확실한 결과가 나타나는 과정을 반복하면 이를 실험(experiment) 혹은 시행(trial)이라고 한다. 온라인 게임에서 캐릭터의 장비를 강화한다면 이는 성공 혹은 실패라는 불확실한 결과가 나타날 수 있으므로 시행이다. 확률형 아이템을 구매하여 결과를 확인한다면 이 역시 그 결과가 불확실하기 때문에 또 다른 형태의 시행이다. 흔히 ‘동전 던지기’나 ‘주사위 던지기’를 시행의 예로 들어 확률을 설명한다. 여기서는 ‘동전 던지기’나 ‘주사위 던지기’를 ‘강화 시도’와 ‘확률 아이템 열기’로 대체한다.
동전을 던지는 행위를 한다는 것은 곧 나타날 수 있는 결과들이 무엇인지 선언하는 것과 같다. 즉, 어떤 시행을 하느냐가 결정되면 그 시행에 따른 결과도 범위가 정해진다. 동전을 던지면 가능한 모든 결과는 ‘앞면(H)’ 혹은 ‘뒷면(T)’이다. 이외의 다른 결과는 나타날 수 없다. 이렇게 시행에 따라서 나타날 수 있는 모든 결과의 집합을 표본 공간(sample space)이라고 부른다. 일단 어떤 시행을 하면 모든 가능한 결과를 나열할 수 있고, 그 결과 중에 하나가 실현된다.
이렇게 표본 공간 상에 있는 결과 중, 그 일부를 사건(event)이라고 부른다. 사건은 표본 공간의 부분 집합이 된다. 보통 관심이 있는 결과를 모아서 특정 사건이라 부른다. 실현 여부에 따라 사건의 범위를 축소하여 언급할 수도 있다. 동전을 던지고 그 결과를 확인하기 전까지는 사건이 아직 발생하지 않았다. 동전을 쥔 주먹을 펴서 그 결과를 관찰하고 나면 시행의 결과, 실현된 사건을 알 수 있다. 동전 던지기의 표본 공간에 있는 원소는 ‘앞면(H)’ 혹은 ‘뒷면(T)’이기 때문에 사건은 둘 중에 하나가 나타난다.
확률(probability)이란 이러한 사건들이 일어날 수 있는 가능성(likelihood)을 0에서 1 사이의 숫자로 나타낸 척도다. 표본 공간 안에 있는 사건들은 총합이 1인 확률을 일어날 수 있는 가능성에 비례하여 나눠 갖는다. 확률 분포(distribution)에서 ‘distribute’은 총합이 1인 확률을 나눠준다는 의미다. 동전 던지기의 표본 공간에는 ‘앞면(H)’ 혹은 ‘뒷면(T)’이라는 원소가 있으므로 1이라는 숫자를 두 원소에게 나눠준다. 공정한 동전(fair coin)이라면 앞면과 뒷면이 나올 가능성은 같으므로 각각 0.5라는 확률을 나눠 갖는다.
이렇게 확률을 사건들에게 나눠주는 방식에 따라서 불확실한 세상은 아주 다양한 모습을 보여준다. 게임도 다르지 않다. 어떤 시행인지 정해지면 표본 공간이 결정되고, 각 사건들에게 부여한 실현 가능성의 정도에 따라서 다양한 결과가 나타난다.
아이템 강화 - 베르누이 시행
시행(trial)에는 매우 전형적인 형태가 있어서 어떤 시행은 특별한 이름을 가지고 있다. 베르누이 시행(Bernoulli trial)이 그 중에 하나인데, 이를 처음 이야기한 통계학자의 이름을 따와 지었다. 이 시행의 특징은 그 결과가 단 두 가지 밖에 없다는 점이다. 동전 던지기가 베르누이 시행의 가장 대표적인 예다. 게임에서는 아이템 강화가 좋은 예가 된다.
게임 캐릭터의 장비를 강화하면 일정 확률로 강화가 성공하면서 기존의 장비가 더 뛰어난 성능을 갖게 된다. 만약 강화 시도에 실패하면 경우에 따라서는 해당 장비가 사라진다. ‘장비가 깨진다.’ 즉, 강화라는 시행의 결과는 성공 혹은 실패라는 두 가지 결과만 있다. 이는 베르누이 시행이다. 성공과 실패에 따른 결과에 가치를 부여하는 일은 이후에 다루도록 한다. 플레이어의 경험을 고민하면서 비용 함수를 고려할 필요가 있는데, 확률을 먼저 이해하고 고민한다.
강화 성공 확률이 얼마인지 기획자는 알고 있다. 성공 확률을 $p$라고 하면, 강화 시행은 성공 확률이 $p$인 베르누이 시행이 된다. 문제는 강화를 딱 한 번만 시도하지 않는다는 점이다. 베르누이 시행을 반복하면 사건은 조금 복잡한 모양이 된다. 성공 확률이 $p$인 베르누이 시행을 $n$번 시도했을 때, $k$번 성공하는 사건을 생각할 수 있다. 동전을 10번 던졌을 때, 3번 앞면이 나오는 사건이 발생할 수 있다. 10번 강화를 시도했을 때, 1번 성공하는 사건도 발생할 수 있다.
이렇게 $n$번 베르누이 시행을 반복하는 시행을 이항 시행(binomial trial)이라고 한다. 이항은 항이 2개라는 의미다. 즉, 시행의 결과가 2개인 특성을 말한다. 영어로는 ‘nomial’이 2개라서 ‘bi + nomial’이라고 쓴다.
아이템 강화 성공 확률 - 이항 분포
이항 시행의 확률은 이항 분포(binomial distribution)를 따른다. 분포는 위에서 설명한 것처럼 확률을 어떻게 나눠주는지 그 방법을 의미한다. 구체적으로 확률을 계산하는 방법은 아래 함수를 따른다.
\[P(X=k) = \frac{n!}{k!(n-k)!}p^{k}(1-p)^{n-k}\]이는 성공 확률이 $p$인 강화를 $n$번 시행했을 때, $k$번 성공할 확률을 함수로 표현한 식이다. 확률을 어떻게 나눠주는지 결정하기 때문에 이항 확률 분포 함수(binomial probability distribution function)다.
예를 들어, 강화 성공 확률이 10%라면 10번 시도했을 때 1번 성공할 확률(= $P(X=1)$)은 38.74%가 된다. 그럼 강화 확률이 10%일 때, 10번 시도해도 한 번도 성공하지 못할 확률(= $P(X=0)$)은 얼마인가? 약 34.87%다. 즉, 10번 강화 시도를 하더라도 약 1/3의 확률로 강화에 한 번도 성공하지 못한다. 100명의 플레이어가 똑같은 시행을 한다면 약 35명은 강화에 한 번도 성공하지 못한다.
강화 성공 확률이 10%라는 의미는 10번 시도했을 때 한 번 성공한다는 의미가 맞다. 그러나 10번 강화 시도를 했을 때, 한 번도 성공하지 못할 확률이 34.87%라는 현상을 내포하고 있다. 전체 플레이어가 같은 시행을 한다면 약 1/3의 플레이어들은 강화에 실패한다. 플레이어의 경험을 고려한다면 후자의 설명이 더 와닿는다.
확률 값은 R을 이용하여 아래와 같이 계산한다. 성공 확률(prob)이 0.1인 경우, 10번(size) 시도했을 때, 0번부터 10번 성공(x)할 확률 11개 값을 계산한 값이다. 총합 1인 확률을 각 사건에 나눠주었기 때문에 11개 확률 값의 합계는 당연히 1이 된다.
확률 분포를 그래프로 나타내면 아래와 같다. 10번 시도해서 5번 넘게 성공할 확률은 상당히 낮을 것을 알 수 있다.
몇 번을 시도해야 10번 성공할까? - 음이항 분포
플레이어 입장에서 궁금한 것은 10번 시도했을 때 한 번 이상 성공할 확률이 아니다. 한 번이라도 성공하려면 몇 번이나 시도해야 하는지 알고 싶다. 혹은 10번 강화에 성공해서 +10강 무기를 만들려면 몇 번이나 강화를 시도해야하는지가 궁금하다. 이항 확률 분포에서는 $n$번 시행해서 $k$번 성공할 확률을 계산하였다. 이는 $n$을 미리 정해놓고 $k$에 따른 확률을 계산한 것이다. 이제 궁금한 것은 성공 횟수 $k$를 미리 정해놓고, $n$에 따른 확률을 계산하는 방법이다. 성공 확률이 $p$인 강화를 $k$번 성공하기 위해서 $n$번의 시도 수가 필요할 확률을 구한다.
이러한 확률은 음이항 분포(negative binomial distribution)를 이용해서 계산한다. 정확하게는 목표한 성공 횟수에 도달하기 위해서 얼마나 많은 실패가 필요한지 실패 횟수 $r$에 대한 확률을 계산한다. 총 시도 수는 ‘성공 횟수 + 실패 횟수’이므로 +10강 무기를 위해서 몇 번이나 실패를 해야하는지 구하면 총 시도 수는 실패 수 + 10으로 계산 가능하다.
목표 성공 횟수 $k$와 성공 확률 $p$가 정해진 상황에서 실패 횟수가 $r$이 될 확률은 아래와 같은 수식으로 계산할 수 있다. 이는 음이항 확률 분포 함수(negative binomial distribution function)다.
\[P(X=r) = \frac{(k + r - 1)!}{k!(r-1)!}(1-p)^{r}p^{k}\]이를 토대로 성공 확률이 10%인 강화를 10번 성공하기 위해서 $r$번 실패할 확률은 아래와 같이 계산한다. 이항 분포의 성공 횟수와는 달리 음이항 분포의 실패 횟수는 무한대까지 확장이 가능하다.
확률 분포를 그래프로 나타내면 아래와 같다. 대략적으로 봐도 10번 강화에 성공하려면 100번 정도는 강화 시도를 해야 현실적인 확률 값에 도달할 수 있다.
100번 시도 안에 10번 강화에 성공할 확률(= $P(X \le 90)$)은 약 55%다.
10번 강화에 성공할 확률이 절반이 되기 위해서 필요한 실패 횟수는 87번이다. 즉 97번 시도하면 10번 강화에 성공할 확률이 딱 50%가 된다. 100명의 플레이어가 있다면 50명은 97번 강화 시도 안에 +10강 무기가 생긴다. 나머지 절반은 강화 시도가 더 필요하다.
99%의 확률로 +10강 무기를 얻으려면 173번의 강화 실패가 필요하다. 즉, 183번 강화 시도를 하면 99%의 확률로 +10강 무기가 생긴다.
100%의 확률로 +10강 무기를 가지려면 몇 번이나 강화 시도를 해야할까? 정말 억세게 운이 나쁜 플레이어가 존재하기 때문에 그런 강화 시도 횟수는 없다. 즉, 이론적으로 무한대 시도해야 100% 확실하게 +10강 무기를 가질 수 있다.
10번 강화 성공을 위해서 필요한 강화 시도 수의 평균 값은 $k / p = 10 / .1 = 100$번이다. 한 번의 강화 시도에 1,000원의 금액이 필요하다면 10번 강화 성공에 대한 평균 비용은 10만원이 된다. 즉, +10강 무기의 평균 가치는 10만원이다. 플레이어가 10만원을 투자해서 +10강 무기를 만들 수 있도록 난이도를 조절할 것인지 결정하는 것은 기획자의 몫이다.
다만, 이는 평균 수치일 뿐이며 100번 시도해도 위에서 본 것처럼 55%의 플레이어만 +10강에 성공한다. 반대로 45%의 플레이어는 10만원을 투자해도 +10강에 도달하지 못한다. 99%의 +10강 성공 확률을 보장하려면 183번의 강화 시도가 필요하며 이 경우 필요한 비용은 약 18만원이다. 성공 확률 $p$를 변경하면서 플레이어의 경험을 이런 식으로 가늠해 보고, 게임 난이도를 조정할 필요가 있다.
지금까지는 강화 실패에 따른 비용이 0이며, 강화 시도에만 비용이 발생한다는 가정 하에서 확률을 계산하였다. 대부분의 경우, 고강 장비를 강화 시도하다가 실패하면 해당 장비는 사라진다. 게다가 시도하는 강화 수치에 따라 강화 확률은 달라진다. 예를 들어, +0에서 +1로 시도할 때는 성공 확률이 50%지만, +9에서 +10으로 강화 시도할 때는 성공 확률이 3%로 낮아지는 식이다. 이렇게 문제가 복잡해지면 단일 확률 분포로만 확률을 계산하기 어렵다.
복잡한 강화 확률 계산하기 - 모의 실험
복잡한 강화 확률을 계산하기 위해서 문제에 맞는 확률 분포 함수를 만들 수 있다면 가장 이상적이지만, 이는 쉽지 않다. 따라서 확률에 영향을 줄 수 있는 모든 변수를 고려하여 모의 실험을 수행해본다. 예를 들어, 특정 조건 하에서 1만 명의 플레이어들이 강화를 시도한다면 얼마나 많은 비용을 들여서 어느 정도의 확률로 목표한 강화에 성공하는지 모의 실험을 해본다. 모의 실험 속에서 가상의 플레이어는 주어진 조건 하에서 무작위로 결과를 얻게 된다. 가상의 플레이어 규모가 크다면 모의 실험의 결과로 실제 일어날 일을 추측해볼 수 있다. 모의 실험을 수행하기 위해서 먼저 강화에 영향을 줄 수 있는 요소들을 살펴본다.
강화 성공 확률
위에서는 강화 성공 확률이 모든 경우에 동일한 10%라고 가정하였으나, 일반적인 게임에서 강화 성공 확률은 장비의 종류나 강화를 시도하려는 아이템의 현재 강화 수치에 따라 다르다. 따라서 모의 실험을 위해서 가변적인 강화 성공 확률을 적용한다. 에를 들어 아래와 같은 성공 확률을 갖는다면, +0 -> +1 성공 확률은 55%이며, +10강 이상의 경우 10%로 성공 확률이 고정된다.
강화 시도 비용
강화 시도에 필요한 비용이 단일한 경우도 있지만, 이 역시도 경우에 따라 다르다. 가변적인 강화 비용을 가정하여 모의 실험을 진행한다. 아래와 같이 정하면, 기본 1,000원의 비용이 들어가고, +7강부터 1,500원, +10강 이상부터 2,000원의 금액이 필요하다.
강화 실패 비용
강화가 실패할 경우, 강화를 시도한 장비는 사라지는 경우가 많다. 특히, 강화를 시도한 현재 장비의 강화 수치가 높은 경우에 이런 제약이 많다. 또 어떤 경우에는 강화가 실패한 경우, 바로 아래 강화 등급으로 하향 조정되는 경우도 있다. 특정 강화 수치를 넘는 장비에 강화를 시도하다가 실패하는 경우에 장비가 사라지거나 하향 되는 경우를 모의 실험에 반영한다. 만약, 장비가 사라지면 강화 시도는 멈춘다.
아래와 같이 정하면, +7강 시도부터 실패 후 하향 조정되고, +10강 이상 시도부터 실패 시 장비가 사라진다.
+6강에 도전하는 10,000명의 가상 플레이어
위에서 예시로 든 초기값으로 모의 실험을 진행한다. 일단 +6강에 도전하는 모의실험을 하는데, +7강부터 실패 비용이 있기 때문에 +6강과 +7강의 난이도 차이가 현격하게 벌어진다. 모의 실험에서 모든 가상의 플레이어는 +0강 장비에서 강화를 시작한다. 만 명의 플레이어가 +6강에 도달할 때까지 사용한 비용을 집계하여 히스토그램을 그리면 아래와 같다.
절반의 플레이어는 대략 13,000원 정도의 금액으로 +6강에 성공하는 것을 알 수 있다. 아주 운이 없는 플레이어는 40,000원까지 사용해야 +6강에 도달한다. 대략 23,000원 정도를 사용하면 95%의 플레이어들은 +6강 성공을 보장받는다.
+7강에 도전하는 10,000명의 가상 플레이어
+7강부터 실패 비용을 적용하였다. +6강인 장비를 강화하다가 실패하면 +5강으로 강화 수치가 떨어진다. 따라서 필요한 시도 수와 비용이 상당히 크게 증가한다.
아래는 +7강에 도전하는 만 명의 플레이어가 사용한 비용의 히스토그램이다.
일단 +6강 모의 실험과 비교해서 비용의 범위가 크게 넓어진 것을 알 수 있다. 절반의 플레이어는 25,000원 정도에서 +7강에 성공하였지만, 운이 나쁜 플레이어는 200,000원의 비용이 들었다. 대략 66,000원 정도를 사용하면 95%의 플레이어들은 +7강에 성공한다.
강화 실패 페널티가 생기면서 강화 성공에 필요한 비용이 크게 증가하는 모습을 볼 수 있다. 특히, 비용 분포가 오른쪽으로 긴 꼬리를 형성하는 것을 알 수 있는데 운 나쁜 특정 플레이어에게는 매우 가혹한 현상이다. 강화 실패 페널티로 강화 난이도를 조정하는 게임 기획을 고민할 때는 이 부분을 염두에 둘 필요가 있다. 특히, 평균적인 플레이어에게 증가하는 난이도와 특별히 운이 나쁜 플레이어에게 증가하는 난이도의 차이가 과도하다. 난이도의 차별화를 의도하는 것은 당연하지만, 플레이어 전체를 고민하면 특정 플레이어는 난이도 절벽을 경험할 가능성이 있다.
+10강에 도전하는 10,000명의 가상 플레이어
드디어 +10강이다. +8강과 +9강은 생략한다. 게임마다 상징적인 강화 수치가 있기 마련인데, 이번 모의 실험에서는 +10강이 그렇다. 강화 실패 페널티로 장비가 사라지는 최초의 강화 수치이기 때문에, 강화 시도에 들어가는 실질 비용은 매우 크다. 그만큼 성공 쾌감도 크고, 얻는 보상(장비 성능의 증가분)도 크기 마련이다.
아래는 +10강에 도전하는 만 명의 플레이어가 사용한 비용 히스토그램이다. 창이 2개인데, 장비가 결국 깨진 플레이어는 상단에 ‘-1’로, +10강에 성공한 플레이어는 하단에 ‘10’으로 구분하였다.
얼핏 봐도 장비가 없어진 플레이어가 훨씬 많다. 만 명 중에서 +10강에 성공한 플레이어는 약 천 명 정도로, +10강 강화 성공 확률은 10.62%에 불과하다. 약 90%의 플레이어는 강화 시도 중 +9강 장비가 없어졌다. 게다가 상당한 비용을 이미 사용한 상태다. 모의 실험 결과지만, 안타깝다!
아래는 강화에 성공한 플레이어만 집계한 비용 누적 분포다. 절반의 플레이어는 약 36만원을 사용하여 +10강에 성공하였다. 가장 운이 나쁘지만 의지가 강한 플레이어는 약 500만원을 사용하여 +10강 장비를 만들었다. 물론 모의 실험에 따른 가상의 플레이어이기 때문에 이 정도의 금액을 사용하였다. 실제로 이렇게 많은 비용을 지불할 플레이어는 극소수다. 95%의 플레이어가 +10강 장비를 갖기 위해서는 약 150만원의 비용이 들어간다.
비용 분포는 오른쪽 꼬리가 매우 길어진 형태다. 운이 정말 안 좋은 플레이어는 500 만원이 없으면 +10강 장비를 못 만든다. 그나마 성공할 확률은 10% 정도다. 플레이어가 접하는 장비 강화 경험은 이렇게 나타난다. 이는 애초에 설정한 초기 값에 의해서 결정된다. 따라서 플레이어 경험을 미리 가늠해보고 성공 확률과 시도 비용, 실패 비용 등을 신중하게 정할 필요가 있다.
모의 실험의 결과는 그 규모가 클수록 믿을 수 있다. 실험을 반복할 때마다 다른 결과를 얻게 되지만, 가상의 플레이어가 충분히 많다면 그 변화는 크지 않다. 해당 실험에서는 만 명의 가상 플레이어만 동원해서도 충분히 유의미한 결과를 얻을 수 있었다.
게임 속의 이항 시행
이항 분포는 결과가 2개인 시행에서 이용할 수 있다. 아이템 강화를 예로 들었지만, 게임의 승/패, 던전 클리어 유/무, KILL/DEATH, 재접속/이탈, 구매/비구매, 이벤트 참여/미참여, 득템/미득템 등에 적용 가능하다. 게임 안에서 일어나는 상당 수의 사건은 대부분 이항 분포로 설명이 가능하다. 결과가 0 혹은 1로 나타나기 때문에 복잡한 문제를 다루기에 너무 단순하다고 생각할 수 있지만, 대부분의 문제는 0 또는 1로 해결된다. 컴퓨터의 연산이 그렇지 않은가. 활용할 수 있는 부분은 셀 수 없이 많다. 상상력이 부족할 뿐이다.
확률형 아이템은 시행 결과가 2개로 나타나는 경우가 거의 없다. 복권에 비유하자면, 1등부터 5등까지 있는 형태다. 즉석 복권과 매우 유사한데, 1등은 성공, 나머지는 실패(꽝)라고 치환하면 이항 분포로 설명 가능하다. 분석 방법은 위의 예시를 그대로 사용 가능하다. ‘강화 성공’과 ‘원하는 아이템이 나타난 사건’을 동일시하면 같은 방법을 적용할 수 있다.
만약 다수의 결과를 이항으로 만드는 것에 회의적이라면, 다항 분포(multinomial distribution)를 활용한다. 다항 분포는 시행 결과가 2개를 초과하는 경우 사용한다. 결과가 여러 개라 ‘다항’이라고 부르고, ‘multi + nomial’이라 쓴다. 다항 분포를 활용해 확률형 아이템을 설명하는 내용은 ‘확률형 아이템을 위한 다항분포’에서 다룬다.
좋은 확률 설계
게임에서 확률은 매우 중요한 요소다. 게임 속에서 벌어지는 대부분의 사건에 확률이 개입한다. 따라서 게임 컨텐츠에 내재된 확률은 플레이어의 경험에 지대한 영향을 끼친다. 어쩌면 적절한 불확실성 자체가 게임의 주요 재미라고 볼 수도 있다. 이 때문에 게임 속의 확률은 신중하게 설계해야 한다. 확률 분포의 가장 간단한 형태인 이항 분포만 잘 활용해도, 플레이 경험의 상당 부분을 미리 가늠하여 게임 디자인에 참고할 수 있다. 좋은 확률 설계만으로 재미있는 게임을 만들 수는 없지만, 잘못된 확률 설계는 어떤 게임이든 망칠 수 있다.
참고
- 관련 발표 - PyCon KR 2017: 온라인 게임에서의 이항 분포
- 관련 글 - 확률형 아이템을 위한 다항분포