geometric distribution

옛날에 이런 글을 썼던 기억은 나는데 이전 과정에서 빼먹었는지 글을 못 찾겠다. 검색했던 자료도 안 남아있고. 나름 열심히 썼었는데 그만큼 자세하게 쓰긴 힘드니까 대충 기억나는대로만 정리.

MATLAB 코드도 짰었던 것 같은데 없네…

 

출현확률이 p(=0.75%)인 가차(=[천계에서 내려온 자] 시온)을 반드시 뽑으려면 최소한 몇 번을 돌려야 할까? 이것은 가차게임을 하는 사람들이 언제나 묻는 질문이다. 물론 매번 독립시행이므로 반드시, 즉 P(A)=1 는 유한번의 시행에서는 불가능한 것은 자명하나 현실적으로 거의 확실하다고 말할 수 있는 값을 원하는 질문이다.

통계학상으로, 대체로 확실하다고 말하는 기준은 95%이상의 확률로 옳을 때 그러하다고 말하며 이 때의 확률을 유의수준이라고 한다. (99%를 쓰는 경우도 있다. 하지만 교과서 말고는 못봤다.)  아무튼 위의 질문에 대한 답은 이러한 기준에서 “95%이상의 확률로 뽑기 위한 횟수”가 될 것이다.

그렇다면 이것을 어떻게 풀어야 할까? 이러한 확률변수의 분포를 구하고자 “가차확률분포” 같은 개념도 구상했었는데 결론부터 말하자면 이미 오래전에 연구된 확률분포로서 그 이름은 “geometric distribution” 이라 한다. 이 확률분포의 특징은 가차 문제 그대로, 확률 p인 베르누이 시행을 처음 성공할 때까지 반복하는 것이다. pdf 는 X회에 처음 성공할 확률, cdf 는 X회 이내에 성공할 확률이 된다. 즉, X회 가차를 돌렸을 때 뽑을 확률은 geometric distribution 의 cdf 를 구하는 문제이며 위의 문제애 대한 답은 이 “cdf 가 95%를 넘는 최소의 X값” 이다.

사실 이 분포는 cdf 가 간단하기 때문에 matlab 이나 wolfram alpha 등을 이용하면 더 복잡한데 (language syntax 에 익숙하지 않다면) 그래도 이것을 활용하는 편이 응용하기에 좋으므로 wolfram alpha 를 이용해서 풀어보았다. MATLAB 은 지금 없어서 못함. p 값을 바꾸면 다른 문제에도 활용할 수 있다.

https://www.wolframalpha.com/input/?i=solve+cdf+of+geom%3D0.95,+p%3D0.75%2F100+for+x

X=397.87, cdf>0.95 이므로 398회를 하면 95%이상 확률로 뽑을 수 있다고 말할 수 있다.

 

즉 그러니까 이게 얼마냐면…

[천계에서 내려온 자] 시온

10연차에 3만원이라 해서 단차에 3천원이라 하고 3천원*398회=119만4천원…? 실제론 10연차가 3만원보다 비싸서 이보다 더 비싸다.

물론 398회나 돌리진 않았고 정확히 10연차 7번, 70연차에 얻었다… 아니 반값 단차도 있었을 테니까 71회인가?

 

아무튼 이게 중요한 건 아니고, geometric 란 이름이라서 기하학(geometry)과 관련이 있나 싶었는데, 결론부터 말하면 큰 관계는 없고 geometric series 에서 온 이름인데 geometric series 는 유럽인들이 geometry 책에서 많이 나온다고 geometric seires 라고 지었댔나…? 이 부분은 저번에 검색해보긴 했는데 그때도 확실한 레퍼런스는 없었고 추측 정도였던 것 같다.

기하(geometry)는 고대로부터 측량에 많이 쓰였고 측량에는 닮음이 많이 쓰였기 때문에 비례관게는 기하학적(geometric)인 것으로 여겨졌다. 이러한 배경에서 원소들 사이에 비율이 일정한 등비수열은 기하학적(geometric)인 수열이라고 여겨져 geometric series 란 이름이 붙었다.

… 는 추측이 스택 오버플로우에 있던데 그럴듯한 것 같다.

 

참조

geometric distribution

NOX가 이걸 해냅니다

리세마라 일기

아주르 레인 (벽람항로)

목표: 아타고, 타카오 (SSR)

확률: 불명, SSR=7%

시도횟수: 471회, 실패

드럽게 안나오네… SSR 7% 라는데 SSR 구경하기도 힘들다. 하지만 더 돌려서 타카오랑 쌍으로 나올때까지 돌려야겠다. 게임이 계정삭제를 지원한다. 인게임에서 리세마라가 가능.

하지만 결국 나오지 않았다. 타카오 자체는 한 번도 나온 적이 없고, 471회 중 아타고는 3번 출현했다. 프린스 오브 웨일즈는 그 2배 정도 출현한 듯. 훗드의 경우는 2~3번.

 

소녀전선 (한국서버)

목표: 스프링필드 스킨

확률: 불명

리세마라를 하기 위한 토큰 자체를 기본적으로 얻을 수 없어서 리세마라가 상당히 힘들었다. 230회에 출현. 최고로 희귀한 등급도 아닌데 원래 계정에서는 나오지 않아서 결국 이 계정으로 이전함.

 

아이돌마스터 밀리언 라이브! 시어터 데이즈 (미리시타)

목표: 카오리 쓰알

확률: 1/6 (SSR 확정 티켓)

횟수: 30회?

원래는 가차에서도 쓰알 뽑고 티켓에서도 쓰알을 뽑고 싶었는데, 녹스에서 실행이 안 되는 관계로 아이폰에서 수동으로 하다보니 너무 힘들어서 대충 카오리 쓰알만 챙기고 그만두었다.

 

아이돌마스터 신데렐라 걸즈 스타라이트 스테이지 (데레스테)

목표: 시즈쿠 한정 쓰알

확률: 0.4%

횟수: 36회

36회라니 너무 적은 것 같지만 한나절 정도 걸렸으니 맞는 것 같기도… 이 즈음에는 이미 데레스테 할 의욕은 없었지만 한정 시즈쿠 의상의 바스트 모핑이 대단하다고 해서 한번 얻어보았다. 트위터에서 비디오로 봤을 땐 굉장했는데 막상 직접 돌려보니 그다지 인상적이진 않았다. 제대로 확인할 수 있는 곡의 MV를 못 뚫어서 “お願い!シンデレラ!” 같은 거 밖에 못 틀어서 그런가…

 

섀도우버스

목표: 코어 전설 카드 3장 (또는 그에 상당하는 가루)

확률: 0.09% (카드 1장, 신들의 폭풍 팩 수룡왕의 무녀 기준)

횟수: 1덱 당 30회?, 총 500회 이상?

이직업 저직업 이카드 저카드 이것저것 해보느라 리세를 꽤 오래 했다. 기록해둔 계정 수로 추정했을때 아마 500회정도는 하지 않았나 싶다. 원하는 카드가 안 나오더라도 카드를 갈아서 원하는 카드를 만들 수 있기 때문에 전설이나 프리미엄 카드만 많이 나오면 시작할 수 있어서 낮은 확률에도 불구하고 목표 구성을 갖추는 데에 필요한 시간은 생각보다 오래 걸리지는 않는다. 몇 시간 정도?

 

앙상블 걸즈!! (리뉴얼 버전)

목표: 레이카 쓰알

확률: 불명 (<1%?)

횟수: 50회?

기록을 남기기 전에 했던 리세마라라 정확한 기록이 없다. 쓰알 티켓을 줘서 돌리긴 했는데 문제는 쓰알 멤버조차 엄청나게 많아서 원하는 쓰알을 얻기가 좀 힘들게 되어 있었다. 아마 100개가 넘었던 것 같다.

 

얼터너티브 걸즈

목표: 해변의 비너스 시온

확률: 0.75%

횟수: 5회?

정확히는 기억이 안 나지만 리세하려고 매크로를 세팅하던 중에 나왔으니까 아마 5회 미만일 듯 하다. 감사한 마음으로 시작. 시온 짱! 시온 최고다!

원래는 시온만 보고 시작했지만 처음 멤버는 그다지 갖고싶은 게 없어서 리세마라도 안하고 하는둥 마는둥 하다가 비너스 시온을 보고 바로 리세를 해서 새로 시작. 지금도 즐겁게 하고 있다. 첫 번째 이벤트는 지나고 두 번쨰 이벤트였던 듯. 가차도 메이드 다음에 두번째였던 것 같다. (아마 메이드 가차가 스타팅 가차와 함께 오픈과 동시에 시작했던 것 같다.)

 

아이돌마스터 신데렐라 걸즈 스타라이트 스테이지 (데레스테)

목표: 쓰알 1장 (아무거나)

확률: 불명 (확률 공개 전)

횟수: 100회?

리세하느라 한달 걸렸던 전설의 리세마라. 오픈 하자마자 시작해서 오픈 첫 가차와 두번째 가차를 보내고 아마 세번째 가차였던 듯하다. 이 때에는 매크로를 안 쓰고 아이폰으로 수동으로 데이터를 지워가면서 리세마라를 했기 때문에 매우 힘들었다. 그래도 이렇게 힘들게 힘들게 고생해서 나온 첫 쓰알이 아이리 한정 쓰알이어서 만족스러웠다. 3d 모델은 저 드레스가 아니라 아이돌마스터 전통의 유감스러운 의상인 게 아쉬울 따름이다.

 

브레이브 소드 블레이즈 소울 (브레브레)

목표: 레바테인=헬

확률: 불명

횟수: 30회?

특이하게도 인게임에서 리세마라를 공식 지원한다. 메뉴에서 초기화 버튼을 누르면 자동으로 튜토리얼 첫 화면까지 넘어감. 아주르 레인도 비슷한 기능이 있지만 이 기능은 정말로 리세마라를 위한 기능으로 게임 시작 후 스토리를 진행하거나 코드를 입력하는 등의 조작을 하고 나면 해당 버튼은 메뉴에서 사라지게 된다.

원래 레반테인을 보고 게임을 시작했고 리세해서 레반테인을 들고 시작했었는데, 아마 이때는 20번 정도 했었던 것 같다. 실은 이 때에는 레바테인=헬이라는 마검이 있는 줄도 몰랐었다. 그런데 시작하고 얼마 지나지 않아 마왕제라는 확률 업 이벤트를 하고 심지어 헬이라는 강화판 버전이 있는 것을 알게 되면서 다시 리세를 해서 이번에는 헬을 들고 시작했다. 아마 서너시간 했으니 30번 정도 한 듯하다. 리세마라를 공식 지원해서 다른 게임과는 달리 한번 리셋하는데 걸리는 시간이 짧아서 빨리 끝났다.

 

얼터너티브 걸즈 발렌타인 한정 가차 확률 보고서

기존에 썼던 글 데스티니 차일드 확률조작 사건 을 재활용해본 것.

결론부터 말하자면 별 소득이 없다. 일단 표본이 너무 작고… 아마 샘플을 키우면(3배 정도) 기대값으로 수렴할 것 같다.

일단 샘플 소개부터.

팔로우 중인 어느 불우한 캡틴을 대상으로 삼았다. 그리고 해당 캡틴이 목표로 했던 발렌타인 가차 한정 시온의 고지확률은 0.5%=0.005 이다.

우리가 알아야 하는 것은 이 캡틴의 시행횟수(가차를 돌린 횟수)가 몇 번이냐 하는 것인데, 문제는 쿼츠의 구입단위에 따라 가격이 다르기 때문에 같은 금액으로도 시행횟수가 달라진다는 점이다.

일단은 10연차= 3000엔 이라 두면 12만엔/3000엔=40, 40*10=400연차 가 된다.그래서 시행횟수를 400회라고 두고 검정을 해보도록 한다.

 

먼저 pdf부터.

이것만 봐도 벌써 망한 것 같다는 생각이 강하게 드는데, 일단 그래프의 좌측이 너무 많이 잘려서 정규분포 근사는 힘들 것 같고, X=0 일때 확률은 10%(0.1)을 넘는다.

값을 계산해봐도 N*P = 2 < 5 라서 정규분포 근사하기에는 적절치 않다는 결론만 나온다.

그래도 z검정을 해보면,

[h,ptest] = ztest(e1, mean, std,’Tail’,’left’)

h = 0
ptest = 0.0781

근사 자체가 적절치 않아서 별로 의미는 없지만 z검정에서도 고지확률이 거짓인지 아닌지 알 수 없다는 결론이 나온다.

보충1

실제로는 10연차=3000엔이 아니라 3200엔에 10연차 하고 과츠가 약간 남고(1/7 단차), 아마 쿼츠 증량 캠페인도 했던 거 같고, 12만이나 과금했으면 아무래도 3천엔 단위로 결제하진 않았을 것이므로 실제 횟수는 이보다 더 많을 것이다. 따라서 변수를 바꿔야 하는데…

결과가 변하는, 그러니까 유의확률 95% 수준에서 고지확률(0.005)이 실제와 다르다는 결과가 나오는 경계선을 구하면 대충 400+200=600회 정도였다. 이때도 여전히 정규분포 근사는 실패하지만 이 때 확률이 0.0494 로 5%보다는 작다.

일단 공식 트위터를 뒤져봤는데 증량 캠페인은 없었던 것 같고, 2295개 구입시 9800엔을 적용해서 12만엔으로 돌릴 수 있는 가차횟수를 구하면

>> 120000/9800 * 2295 /70

ans =

401.4577

….?????? 뭔가 이상해서 710개 단위로 다시 계산해보았다.

> 120000/3200 * 710 /70

ans =

380.3571

?????? 지금까지 10연=3000엔 이라고 생각해왔는데 최대 과금단위가 아니면 그보다도 더 손해를 보게 되있었다. 이럴 수가…

정확한 값을 적용하면 처음 추정보다 시행횟수가 더 커질 것으로 예상했는데 오히려 더 적을 가능성이 높아졌다. 아무튼 실제 시행이 600회나 될 가능성은 거의 없을 것으로 보인다.

 

보충2

가차 오픈 초기에 확률 1.5배 이벤트를 했었는데, 이 때 시온의 고지확률은 0.75% 였다. 만약 이 때 전부 돌렸던 것이라면 확률이 다르므로 결과가 달라지지 않았을까?

일단 저 캡틴을 5회 스페셜 가차 하기 전에 팔로했었는데 팔로 당시에는 10만이라고 써 있었으니 2만은 확실히 해당하지 않고, 나머지 10만이 문제인데 그러면 아래와 같이 된다.

P = 0.5/100 * 1.5; % P=0.75%

N = round(100000/9800 * 2295/70); % N=335

역시 유의미한 변화는 없었다는 점만 밝혀둔다.


지난번과 마찬가지로 매트랩 소스를 첨부한다.

alterna

데스티니 차일드 확률조작 사건

korean gacha game is cake

http://bbs.ruliweb.com/news/board/1004/read/2110154

이거 보고 재밌을 거 같아서… 가 아니라 답답해서 한번 정리해봄.

링크 글을 요약하면 공지된 당첨확률이 1.44%인 5640 회 시행에서 당첨(5성)이 42회.  그러므로 실제 확률이 0.745%다 라는 주장이다.

결론부터 말하면, 확률조작이 맞다.(유의확률 5%), 그리고 확률에 대한 MLE(Maximum Likelihood Estimation)는 0.745%, 95% 신뢰구간은 [0.54% 1.01%]이다.

일단 모집단을 분석해보자. 당첨확률 0.0144(=1.44%) 에 독립시행이라고 한다면 모집단은 Binomial Distribution 을 따른다. 즉 B(N=5640, P=0.0144)이다.

여기에는 별 논란의 여지가 없다. 컴퓨터로 계산되는 랜덤 숫자는 난수표를 사용하고 이것은 seed의 우연성만 보장된다면 이상적인 수학적 확률에 해당한다. 만일 이것이 성립하지 않는다면 그냥 처음부터 랜덤이 아니므로 별 할 말이 없다.

다음으로 pmf(확률질량함수) 를 보자. X=당첨횟수 별 확률을 도시한 것이다.

destiny-child-binomial-distribution-plot
B(5640, 0.0144)

평균(81.2)을 근처로 대칭인 그래프가 나오는데… 딱 봐도 42는 평균에서 너무 멀다. 한 3-sigma 쯤 되어보인다. 이것만 봐도 충분히 주작이라고 해도 되는데 더 나아가서 z-test 도 해보자.

z-test 란 자신의 주장을 h1 이라 하고 그것의 부정을 h0 라고 했을 때, h0가 참이라고 가정하면 관측한 사건이 불가능함(통계적으로 말하자면 해당 사건이 일어날 확률이 작음)을 보임으로서 h0가 거짓임을 보이는(즉 h0의 부정인 h1이 참임을 보이는) 테스트이다. 즉, 이 예에서는 당첨확률이 1.44%일 때 당첨횟수 42회가 일어날 확률을 계산하고, 이 값이 아주 작은 값임을 보임으로서 당첨확률이 1.44%라는 가정이 틀렸음을 보일 것이다.

먼저 z-test 를 위해서는 정규분포(normal distribution)으로의 근사가 필요하다. 일단 mean=81.2 고 std=8.946 이다. 그리고 N이 충분히 큰가 따져봐야 하는데… 몇십개도 아니고 5천개쯤 되니 따져볼 필요도 없긴 한데 통상적으로 따지는 N*P=81>=5 && N*(1-P)=5588>=5 도 만족한다.

일단 원문의, 그리고 사용자들의 주장은 P!=0.0144 이라는 것이므로 이것을 h1(대립가설) 로 놓고 P=0.0144 을 h0(귀무가설) 로 놓는다. 이렇게 두고 z-test 를 실시하면…

[h,p] = ztest(e1, mean, std) % e1=count of occured event=42
h = 1
p = 1.1694e-05

이게 의미하는 바를 해석하면… h=1 라는 것은 h0가 참일 확률이 5% 이하라는 것이다. 더 나아가서, h0가 참이라고 했을 때 이런 일이 일어날 확률은 1.2*10^-5 이하라는 뜻이다. 보통 통계적으로 설득력있다고 평가할 때 p=5% 를 쓰고 더 엄격하게 적용할때는 p=1% 를 쓰는데 이런 확률이라는 건….그냥 h0(당첨확률이 1.44%라는 가정)가 거짓이라는 것이다.

여기서 끝내도 되는데… 사실 사용자들이 진짜 주장하고 싶은 것은 P<0.0144 일 것이다.(위의 테스트는 P<0.0144 이거나 P>0.0144임을 뜻한다.) 이 때에 대해서도 z-test 을 실시해보자. h1 이 P<0.0144 가 되고 h0 는 P>=0.0144 가 된다.

[h,p] = ztest(e1, mean, std,’Tail’,’left’)

h =     1
p =   5.8472e-06

마찬가지다. 높을 리는 더더욱 없다.

그래서 1.44% 는 주작인 것을 보였는데… 그렇다면 실제 확률은 얼마일까? MLE 추정을 하면 가장 개연성이 높은 값은 0.745%, 95% 신뢰구간은 [0.54% 1.01%]이다.

[phat, pci] = binofit(e1, N)

역시 1.44% 는 신뢰구간에 들어가지도 않는다. z-test 에서 확인했으니 당연하지만… MLE에 대한 설명은 생략한다.

직접 계산해보고 싶은 사람을 위해 MATLAB 문서를 첨부한다. html 파일이므로 만일 확장자 없이 다운로드되는 문제를 겪는 경우 파일 이름을 수정하면 된다. FF에서 이런 문제가 생기는데 왜인지 모르겠다.

https://dl.dropboxusercontent.com/u/47197166/scam%20of%20destiny%20child.html