垂れ流しの日記

休学中の大学3年生の雑記ブログです

ポーカーで統計的に有意に勝てているためには、どのくらいの勝率が必要なのかを統計とデータサイエンスの知識を使って、考えてみた。

 
私は現在GG poker の2NLを細々とプレーしている。勝ったり負けたりを繰り返しているのだが、これがどれくらい勝てれば自分の実力で、どれくらいならただの「運」のお陰かを知りたくなった。そのため、python統計学の知識を活かして、実際にランダムデータを生成し、統計的に有意な差があるといえる収支を計算した。
下にコードを載せる。
 
 
 
 
import random
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats


def gen_randomwalk(initpos,rwlen):
rw = [initpos]
for i in range(rwlen-1):
initpos += random.choice([-80,80]) # 100ハンドあたりのBB+-
rw.append(initpos)
return rw


sumlist =
sum1 = 0
resultlist =

for n in range(10):
resultlist += gen_randomwalk(0,10) #一万ハンドを実行
sum1 = sum(resultlist)/len(resultlist) #一万ハンドやった時の一ハンドあたりの収支平均
sumlist.append(sum1) #上の平均をさらに10回つまりは、10万回行った時のデータ。
sum2 = sum(sumlist)/len(sumlist)

counterlist = []

counter = 0
for r in sumlist: #100万ハンドをやって,500BB以上の差が出れば統計的に有意な差が出ているといえる。
if -150 < r < 150 : #10万ハンドだと試行数が少ない文少ないハンド数で少ないハンド数で150BBの差を出す必要がある。
counter +=1 #1万ハンドでも同じ同じ150BBの差が必要になる。ただ、この場合はデータ数が少なくて話にならない。

print(sum1,sum2,counter)

plt.hist(resultlist)
plt.show()

plt.hist(sumlist)
plt.show()


plt.hist(counterlist)
plt.show()
今回の統計では10万ハンドをおこなって+150BB以上の収支を上げれば有意な差があるといえることがわかった。これを100ハンドあたりにすると、1.5BBである。実際はレーキが取られるのでこの収支を実現するためには5BB程度を稼ぐ必要が出ててくる。
 
結論。
今回の記事ではポーカーにおいて、どの程度勝利することができれば実力による勝利といえるかについて書いた。1.5BB/100で10万ハンドなら時間に大きな余裕がある人は試してみることをお勧めする。