확률과 통계 핵심 정리

확률과 통계는 불확실한 데이터를 다루는 수학이다.

게임에서는 생각보다 많이 사용한다.

아이템 드랍률, 치명타 확률, 가챠, 랜덤 스폰, 전투 데이터 분석, 플레이어 행동 분석, 서버 통계 등 대부분의 시스템에서 확률이나 통계를 사용할 수 있다.

둘의 역할은 조금 다르다.

확률 -> 앞으로 어떤 일이 발생할 가능성을 계산
통계 -> 이미 발생한 데이터를 분석

예를 들어

아이템 드랍 확률이 5%다

는 확률의 문제고,

10000번 플레이했더니 실제 드랍률이 4.8%였다

는 통계의 문제다.

확률

확률은 어떤 사건이 발생할 가능성을 나타낸다.

일반적인 확률은

P(A) = 사건 A가 발생할 확률

로 표현한다.

확률은 기본적으로

0 <= P(A) <= 1

의 범위를 가진다.

백분율로 표현하면

0 <= P(A) <= 100%

이다.

예를 들어 동전을 던져 앞면이 나올 확률은

P(앞면) = 1/2 = 0.5 = 50%

이다.

표본공간

어떤 확률 실험에서 발생할 수 있는 모든 결과의 집합을 표본공간이라고 한다.

주사위를 한 번 던진다면

S = {1, 2, 3, 4, 5, 6}

이다.

그중 특정 조건을 만족하는 결과를 사건(Event)이라고 한다.

예를 들어 짝수가 나오는 사건은

A = {2, 4, 6}

이다.

따라서

P(A) = 3/6 = 1/2

이다.

여사건

사건 A가 발생하지 않는 것을 여사건이라고 한다.

Aᶜ

확률은

P(Aᶜ) = 1 - P(A)

이다.

예를 들어 아이템 드랍 확률이 10%라면

드랍 성공 = 10%
드랍 실패 = 90%

이다.

합사건

두 사건 중 하나라도 발생할 확률을 생각할 수 있다.

두 사건 A와 B가 동시에 발생할 수 없는 경우

P(A ∪ B) = P(A) + P(B)

이다.

하지만 두 사건이 겹칠 수 있다면 중복된 부분을 빼야 한다.

P(A ∪ B) = P(A) + P(B) - P(A ∩ B)

이 식은 확률 계산에서 기본이 된다.

교집합

A와 B가 동시에 발생하는 사건이다.

A ∩ B

확률은

P(A ∩ B)

로 표현한다.

게임으로 생각하면

치명타 발생
AND
헤드샷 발생

처럼 여러 조건이 동시에 만족되는 경우다.

조건부 확률

조건부 확률은 어떤 사건이 이미 발생했다는 조건에서 다른 사건이 발생할 확률이다.

P(A|B)

는 “B가 발생했다는 조건에서 A가 발생할 확률”을 의미한다.

공식은

P(A|B) = P(A ∩ B) / P(B)

이다.

게임 AI나 데이터 분석에서는 특정 조건이 주어진 상황에서 행동이나 사건의 발생 가능성을 분석할 때 사용할 수 있다.

독립 사건

두 사건의 발생 여부가 서로 영향을 주지 않는다면 독립이라고 한다.

독립이라면

P(A ∩ B) = P(A)P(B)

이다.

예를 들어 서로 독립적인 주사위를 두 번 던진다면 첫 번째 결과가 두 번째 결과에 영향을 주지 않는다.

게임에서 각각 독립적인 랜덤 판정을 수행한다면 이런 구조를 생각할 수 있다.

판정 A -> 독립
판정 B -> 독립
판정 C -> 독립

단, 게임 시스템에서 실제로 독립인지 여부는 설계에 따라 달라진다.

조건부 확률과 독립의 차이

이 둘을 혼동하기 쉽다.

조건부 확률은

B라는 조건이 주어졌을 때 A의 확률

이고,

독립은

B의 발생 여부가 A의 확률에 영향을 주지 않음

을 의미한다.

독립이라면

P(A|B) = P(A)

가 된다.

기대값

기대값(Expected Value)은 확률적으로 여러 번 반복했을 때 얻을 것으로 예상되는 평균적인 값이다.

이산 확률변수에서는

E(X) = Σ xP(X=x)

이다.

예를 들어

100 데미지 -> 50%
200 데미지 -> 50%

라면 기대 데미지는

E(X) = 100(0.5) + 200(0.5)
     = 150

이다.

게임 밸런스에서 상당히 중요한 개념이다.

분산

평균만 봐서는 데이터가 얼마나 퍼져 있는지 알 수 없다.

분산(Variance)은 데이터가 평균에서 얼마나 떨어져 있는지를 나타낸다.

Var(X) = E[(X - μ)²]

또는

Var(X) = E(X²) - E(X)²

로 표현할 수 있다.

분산이 크면 결과가 평균에서 많이 퍼져 있다는 뜻이다.

게임에서 같은 평균 데미지를 가진 두 무기를 비교해도

무기 A -> 데미지 95 ~ 105
무기 B -> 데미지 10 ~ 200

이라면 플레이 감각은 완전히 다르다.

평균뿐 아니라 분산도 중요하다.

표준편차

분산의 제곱근을 표준편차(Standard Deviation)라고 한다.

σ = sqrt(Var(X))

분산은 단위가 제곱되지만 표준편차는 원래 데이터와 같은 단위를 가진다.

그래서 실제 데이터의 변동성을 이해하기 더 편하다.

평균 -> 중심
표준편차 -> 퍼진 정도

확률변수

확률변수(Random Variable)는 확률적인 결과를 숫자로 표현하는 변수다.

예를 들어 주사위를 던진 결과를

X

라고 하면

X ∈ {1,2,3,4,5,6}

이다.

확률변수는 크게

이산 확률변수
연속 확률변수

로 나눌 수 있다.

이산 확률변수

셀 수 있는 값을 가지는 확률변수다.

주사위 결과
아이템 획득 개수
치명타 횟수
몬스터 처치 수

등이 있다.

연속 확률변수

특정 범위 안에서 무한히 많은 값을 가질 수 있는 확률변수다.

플레이 시간
이동 거리
반응 시간
측정값

등이 대표적이다.

확률분포

확률분포는 확률변수가 어떤 값을 얼마나 자주 가지는지를 나타낸다.

게임에서 랜덤 시스템을 설계할 때도 중요한 개념이다.

대표적인 분포는 다음과 같다.

베르누이 분포
이항 분포
정규 분포
포아송 분포
기하 분포

베르누이 분포

한 번의 시행에서 결과가 두 가지뿐인 경우다.

성공 / 실패
명중 / 빗나감
치명타 / 일반 공격
드랍 / 미드랍

성공 확률을 p라고 하면

P(X=1) = p
P(X=0) = 1-p

이다.

게임의 단순한 랜덤 판정 대부분이 베르누이 시행으로 생각할 수 있다.

이항 분포

독립적인 베르누이 시행을 여러 번 반복했을 때 성공 횟수를 나타낸다.

성공 확률이 p이고 n번 시행한다면

P(X=k) = C(n,k)p^k(1-p)^(n-k)

이다.

예를 들어 치명타 확률이 20%인 공격을 10번 했을 때 치명타가 정확히 3번 발생할 확률 등을 계산할 수 있다.

정규 분포

정규 분포는 평균을 중심으로 좌우가 대칭인 종 모양의 분포다.

        /\
      /    \
    /        \
___/__________\___
       μ

자연적으로 발생하는 여러 측정값이 정규분포에 가까운 경우가 많다.

게임 데이터 분석에서도

플레이 시간
반응 시간
피해량
점수

등을 분석할 때 정규분포를 가정하는 경우가 있다.

포아송 분포

일정한 시간이나 공간에서 사건이 몇 번 발생하는지를 나타낼 때 사용한다.

예를 들어

1분 동안 몬스터가 평균 3마리 등장

같은 상황이다.

게임에서는 이벤트 발생 횟수나 특정 행동 횟수 등의 모델링에 사용할 수 있다.

기댓값과 게임 밸런스

확률은 게임 밸런스와 직접 연결된다.

예를 들어 공격이

90 데미지 -> 80%
200 데미지 -> 20%

라면

E(X) = 90(0.8) + 200(0.2)
     = 112

이다.

평균적인 데미지는 112다.

하지만 이것만 보고 무기의 성능을 판단하면 안 된다.

기대값
+ 분산
+ 발생 빈도
+ 결과의 체감
+ 다른 시스템과의 상호작용

까지 봐야 한다.

드랍률

아이템 드랍률이 5%라면 한 번의 시도에서

P(drop) = 0.05

이다.

하지만 이것은 “20번 하면 반드시 한 번 나온다”는 의미가 아니다.

20번 모두 실패할 확률은

P(0 drops) = 0.95²⁰

이다.

따라서 확률형 시스템을 설계할 때는 단순한 드랍률뿐 아니라 플레이어가 실제로 몇 번의 시도 안에 아이템을 얻는지를 확인해야 한다.

최소 한 번 성공할 확률

독립적인 시행에서 성공 확률이 p이고 n번 시도한다고 하자.

한 번도 성공하지 않을 확률은

(1-p)^n

이다.

따라서 최소 한 번 성공할 확률은

P(최소 1회 성공) = 1 - (1-p)^n

이다.

게임의 드랍 시스템을 분석할 때 매우 유용하다.

큰 수의 법칙

같은 확률 실험을 반복하면 실제 관측 비율은 이론적인 확률에 점점 가까워진다.

예를 들어 동전을

10번

던졌을 때 앞면이 70% 나올 수도 있다.

하지만

100000번

정도로 충분히 많이 반복하면 앞면 비율은 50%에 가까워지는 경향이 있다.

중요한 점은 많이 반복한다고 정확히 확률과 일치하는 것은 아니라는 것이다.

중심극한정리

통계에서 매우 중요한 정리다.

독립적인 표본을 충분히 많이 모아 평균을 계산하면, 원래 데이터의 분포가 정규분포가 아니더라도 표본평균의 분포가 정규분포에 가까워지는 경향이 있다.

이것 때문에 실제 통계 분석에서 정규분포가 매우 중요하게 등장한다.

원본 데이터
-> 여러 표본 추출
-> 표본 평균 계산
-> 평균들의 분포
-> 정규분포에 가까워짐

모집단과 표본

전체 데이터를 모집단(Population)이라고 하고 그중 일부를 표본(Sample)이라고 한다.

예를 들어 게임 전체 이용자의 플레이 데이터를 모두 분석할 수 없다면 일부 이용자의 데이터를 추출해서 분석할 수 있다.

전체 플레이어 -> 모집단
일부 플레이어 -> 표본

표본을 이용해서 모집단의 특성을 추정하는 것이 통계의 중요한 역할이다.

평균과 중앙값

평균은 모든 값을 더해서 개수로 나눈 값이다.

중앙값은 데이터를 정렬했을 때 가운데에 위치하는 값이다.

예를 들어

1, 2, 3, 4, 100

이면

평균 = 22
중앙값 = 3

이다.

극단적인 값이 존재할 때 평균은 크게 왜곡될 수 있다.

게임의 플레이 시간이나 결제 금액처럼 편차가 큰 데이터를 분석할 때는 평균만 보면 안 된다.

상관관계

두 변수 사이에 어떤 관계가 있는지를 나타낼 수 있다.

예를 들어

플레이 시간
경험치

가 함께 증가한다면 양의 상관관계를 생각할 수 있다.

상관계수는 일반적으로 -1에서 1 사이의 값을 가진다.

1   -> 강한 양의 상관
0   -> 선형 상관이 거의 없음
-1  -> 강한 음의 상관

하지만 상관관계가 있다고 해서 인과관계가 있는 것은 아니다.

이것은 게임 데이터 분석에서도 매우 중요하다.

회귀

회귀 분석은 변수 사이의 관계를 모델링하는 방법이다.

가장 단순한 선형 회귀는

y = ax + b

형태다.

예를 들어 플레이 시간 x로 구매 금액 y를 예측하는 식을 만들 수 있다.

Play Time -> Regression Model -> Expected Spending

실제 데이터 분석이나 머신러닝에서도 기본적인 개념으로 사용된다.

랜덤과 의사난수

컴퓨터에서 일반적인 랜덤 함수는 진정한 의미의 무작위가 아니라 의사난수(Pseudorandom Number) 인 경우가 많다.

초기값인 Seed를 기반으로 수열을 생성한다.

Seed -> Pseudo Random Generator -> Random Sequence

같은 Seed를 사용하면 같은 난수열을 재현할 수 있다.

게임에서는 이것이 중요하다.

Replay
Deterministic Simulation
Network Synchronization
Debugging

등에서 같은 랜덤 결과를 재현할 수 있기 때문이다.

랜덤 시스템의 함정

확률 시스템에서 흔히 발생하는 문제가 있다.

예를 들어

드랍률 = 10%

이라고 했을 때 플레이어 입장에서는 연속으로 20번 실패하면 이상하게 느낄 수 있다.

하지만 확률적으로는 충분히 가능한 결과다.

독립적인 10% 판정에서 20번 연속 실패할 확률은

0.9²⁰ ≈ 12.2%

이다.

생각보다 높다.

따라서 게임에서는 순수 확률만 사용하지 않고

천장 시스템
보정 확률
연속 실패 보정
가중치 조정
Pseudo Random

등을 사용하기도 한다.

통계와 게임 데이터

실제 게임 서비스에서는 통계가 매우 중요하다.

예를 들어

DAU
MAU
Retention
Play Time
Win Rate
Pick Rate
Drop Rate
Conversion Rate

등의 지표를 분석할 수 있다.

이런 데이터를 통해 게임 시스템의 상태를 판단한다.

예를 들어 특정 캐릭터의 승률이 지나치게 높다면

사용률
-> 승률
-> 평균 피해량
-> 생존율
-> 조합별 성능
-> 티어별 성능

등을 함께 분석해야 한다.

단일 통계값만 보고 밸런스를 조정하면 잘못된 결론을 내릴 가능성이 높다.

확률과 통계의 전체 구조

확률과 통계는 다음과 같이 연결된다.

확률
-> 사건
-> 확률변수
-> 확률분포
-> 기대값 / 분산

그리고 통계는

데이터
-> 표본
-> 평균 / 중앙값
-> 분산 / 표준편차
-> 상관관계
-> 추정 / 회귀
-> 의사결정

으로 이어진다.

게임 개발 관점에서는

랜덤 시스템
-> 확률 모델
-> 실제 플레이 데이터
-> 통계 분석
-> 밸런스 조정
-> 다시 게임 시스템에 반영

의 순환 구조로 볼 수 있다.

핵심 정리

확률과 통계에서 우선적으로 이해해야 할 개념은 다음과 같다.

확률
-> 사건이 발생할 가능성

조건부 확률
-> 특정 조건에서의 확률

독립
-> 사건끼리 서로 영향을 주지 않음

기대값
-> 장기적으로 예상되는 평균 결과

분산
-> 데이터가 평균에서 퍼진 정도

표준편차
-> 분산의 제곱근

확률변수
-> 확률적인 결과를 숫자로 표현

확률분포
-> 확률변수가 어떤 값을 가지는지 나타내는 구조

큰 수의 법칙
-> 반복 횟수가 증가할수록 관측 비율이 이론적 확률에 가까워짐

상관관계
-> 두 변수의 관계

회귀
-> 변수 사이의 관계를 모델링하고 예측

표본
-> 모집단에서 추출한 데이터

게임 개발에서는 확률을 단순히 Random() 하나로 생각하면 부족하다.

중요한 것은 랜덤한 결과가 장기적으로 어떤 분포를 만들고, 플레이어가 실제로 어떤 경험을 하며, 수집된 데이터가 시스템의 의도와 일치하는지를 확인하는 것이다.

결국 확률과 통계의 흐름은 다음과 같다.

불확실성
-> 확률 모델
-> 랜덤한 결과
-> 데이터 축적
-> 통계 분석
-> 패턴 발견
-> 의사결정

게임에서 확률은 시스템을 만드는 도구이고, 통계는 그 시스템이 실제로 어떻게 동작하고 있는지를 확인하는 도구다.