引言
偶然了解的有意思的知识。
赢面很大的连续赌局,为什么容易倾家荡产?在股市上频繁交易,为什么容易赔钱?明明每次赢钱数学期望都是正的,为什么还是结果还是输钱?
奇怪的是,仅仅只要选对合适的下注比例,通常就能笑到最后。
感觉很反直觉,所以有意思。
输或赢的赌局
先从一个有意思的例子说起:
如有有一个连续的赌局,不是输就是赢,有60%的获胜率(p = 0.6),赢了,则钱变成2倍,输了钱全部输光,请问,这时候应该All in吗?如果赌局一直进行,那应该一直All in吗?
直觉上来讲:还有这种好事,赢面大,肯定All in;
如果谨慎一点,刚好又懂一点数学,可以算一下赢钱的数学期望:
E
=
0.6
×
2
+
0.4
×
0
−
1
=
0.2
E=0.6 \times2 + 0.4 \times 0 - 1= 0.2
E=0.6×2+0.4×0−1=0.2,赌局赢钱的期望是0.2;
如果刚好了解一些统计学:根据大数定律,只要赌局够多,保证数学期望为正,那就一定能够赚到钱;
但是很遗憾,上述这些想法都不对,一直All in,极大概率会输光。为什么呢?
为什么不能总是All in?
其实上面的赌局有一种比较好理解的方式:
这种赌局太极端了!你要么一直赢,要么你在任意时刻,仅仅只需要输一次,就会让你倾家荡产。那么你一直赢的概率是多少呢?假如赌局进行100次,总是选择All in,那么你赢到最后的概率只有 0. 6 100 0.6^{100} 0.6100,中间任何一次输,都直接游戏结束,尽管最后可能奖金丰厚——这个甚至都不用计算。
这个理解没啥毛病,但是生活中这种极端的局面比较少,更多时候是,赢了就涨一些,输了就输一些(股市不就是吗)。
例如下面这个游戏:
假设有这么一家赌场,提供了这么一个你可以玩无穷多次的游戏:扔一个硬币,若正面向上,则你的资产变成当下的 1.2 倍;若反面向上,则你的资产变成当下的 0.83 倍。
这种情况就很难判断了。
赢钱的数学期望永远为正:
E
=
0.5
×
1.2
+
0.5
×
0.83
−
1
=
0.015
E=0.5 \times1.2 + 0.5 \times 0.83 - 1= 0.015
E=0.5×1.2+0.5×0.83−1=0.015。
而且,再怎么造也不会输光,它也不像股市交易还要收过路费,根据大数定律,我们一定能赢。
那我们来用程序模拟一下,假设100个玩家,每人本金为10000,每人都进行赌局30000次(够“大数”吧),总是All in:
这个有趣的案例,以及代码来自:https://www.physixfan.com/weishenmepinfanjiaoyiderendaduoshuzaigushishangdoupeiqianleyigeyouqudexiaoshuxueyouxiyexua/
import numpy as np
import matplotlib.pyplot as plt
P = 100 # Number of players
N = 30000 # Total times played for one player
win = 1.2
lose = 0.83
Num_of_winner = 0
Money_of_the_luckiest_winner = 0.0
for j in range(P):
m = np.zeros(N)
m[0] = 10000.0
for i in range(1,N):
if np.random.randint(2):
m[i] = m[i-1]*win
else:
m[i] = m[i-1]*lose
if m[-1]>m[0]:
Num_of_winner += 1
if m[-1]>Money_of_the_luckiest_winner:
Money_of_the_luckiest_winner = m[-1]
plt.plot(m)
print(Num_of_winner)
print(Money_of_the_luckiest_winner)
plt.xlabel('Times played')
plt.ylabel('Money')
plt.show()
结果是:输光!
不同颜色代表不同玩家,x轴是游戏次数,y轴是金额。可以看到,即使不是极端的赌局,大多数玩家最终的资产都会归零。换成对数坐标轴更容易看出来(注意y轴,大多数人,在一开始资产就迅速接近0):
这就很难理解了,明明赢钱的期望总是正的,为什么大多数人都会输光?难道大数定律有问题?
我觉得其实主要是因为这是一个连续的局面,每次游戏之间的钱会互相影响,每次都不独立。简单的理解角度:
- 0.83 * 1.2=0.996,由于输赢概率相同,所以连续的局面下,钱会不断地减少。
好了懂了,这个故事告诉我们:远离赌博!
ok,可以关掉了。
……
等一下!你听我说,赌局不是关键,我们关注的是背后的为什么。
凯利判据表示,你应该在每次赌局都选择一个合适的下注比例,那你就能发家致富了。
那,比例是多少呢?
凯利判据 - 如何计算最佳下注比例?
凯利判据研究,在这样只有输和赢两种局面的多次游戏,怎么计算最佳的每次的下注比例。
f
∗
=
p
r
1
−
q
r
2
r
1
r
2
f^*=\frac{pr_1-qr_2}{r_1r_2}
f∗=r1r2pr1−qr2
其中
- f ∗ f^* f∗为现有资金应进行下次投注的比例;
- r 1 r_1 r1为投注可得的赔率(不含本金), r 2 r_2 r2为输的赔率(不含本金);
- p p p为获胜率;
- q q q为落败率;
如果
q
=
1
−
p
q=1-p
q=1−p,赔率为
1
1
1,即输了就输光。则上述公式可以简化为:
f
∗
=
p
r
1
−
q
r
1
=
p
(
r
1
+
1
)
−
1
r
1
f^*=\frac{pr_1-q}{r_1}=\frac{p(r_1+1)-1}{r_1}
f∗=r1pr1−q=r1p(r1+1)−1
例如在开头提到的例子中,赢的概率为0.6,输的概率为0.4,假设为单位成本,
r
1
,
p
,
q
r_1,p,q
r1,p,q分别是1,0.6,0.4,代入得到最佳下注比例应该是20%。
我知道你又要跑了:这么多数学公式,不感兴趣!
再等一下,来看看凯利判据的威力——仅仅只是改动一下下注比例,结局是多么天差地别。
凯利判据的威力
还是上边那个模拟游戏:
假设100个玩家,每人本金为10000,每人都进行赌局30000次。
只不过这次,我们通过代入凯利公式,每次都计算最佳的投注比例。
f
∗
=
p
r
1
−
q
r
2
r
1
r
2
f^*=\frac{pr_1-qr_2}{r_1r_2}
f∗=r1r2pr1−qr2
p
,
q
,
r
1
,
r
2
p,q,r_1,r_2
p,q,r1,r2,分别是0.5,0.5,0.2,0.17,代入可得,最佳比例为0.44。
来看一下程序:
import numpy as np
import matplotlib.pyplot as plt
P = 100 # Number of players
N = 30000 # Total times played for one player
win = 1.2
lose = 0.83
Num_of_winner = 0
Money_of_the_luckiest_winner = 0.0
W = abs(win - 1)
L = abs(lose - 1)
Kelly_percentage = (0.5 * W - 0.5 * L) / (W * L)
print(Kelly_percentage) # is about 0.44 in our case
for j in range(P):
m = np.zeros(N)
m[0] = 10000.0
for i in range(1, N):
if np.random.randint(2):
m[i] = m[i - 1] * win * Kelly_percentage + m[i - 1] * (1 - Kelly_percentage)
else:
m[i] = m[i - 1] * lose * Kelly_percentage + m[i - 1] * (1 - Kelly_percentage)
if m[-1] > m[0]:
Num_of_winner += 1
if m[-1] > Money_of_the_luckiest_winner:
Money_of_the_luckiest_winner = m[-1]
plt.semilogy(m)
print(Num_of_winner)
print(Money_of_the_luckiest_winner)
plt.xlabel('Times played')
plt.ylabel('Money')
plt.show()
可以看到,使用凯利公式计算最佳投注比例之后,所有的玩家,或许有不同波动,但都赢到最后。
这很神奇吧!
凯利判据的证明
为什么呢?来看下凯利判据的证明就知道了。
对数资产期望
凯利公式的目标是最大化资产的增长率,也即最大化对数资产的期望值。不失一般性,设开始时的资产是1,每次下注的比例为
f
∗
f^*
f∗,有
p
p
p的概率会以
r
1
r_1
r1的赔率赢钱,这时资产变为。有
q
=
1
−
p
q=1-p
q=1−p的概率会以
r
2
r_2
r2的赔率赔钱。因此资产的对数的期望值为:
E
=
p
log
(
1
+
f
∗
r
1
)
+
(
1
−
p
)
log
(
1
−
f
∗
r
2
)
E=p \log \left(1+f^* r_1\right)+(1-p) \log \left(1-f^*r_2\right)
E=plog(1+f∗r1)+(1−p)log(1−f∗r2)
要找到最大化这个期望值,只需令导数值为零:
d
E
d
f
∗
=
p
r
1
1
+
f
∗
r
1
−
(
1
−
p
)
r
2
1
−
f
∗
r
2
=
0
\frac{\mathrm{d} E}{\mathrm{~d} f^*}=\frac{p r_1}{1+f^* r_1}-\frac{\left(1-p\right)r_2}{1-f^*r_2}=0
df∗dE=1+f∗r1pr1−1−f∗r2(1−p)r2=0
求解上述方程即得凯利公式
f
∗
=
p
r
1
−
q
r
2
r
1
r
2
f^*=\frac{pr_1-qr_2}{r_1r_2}
f∗=r1r2pr1−qr2
详细证明
这个证明很简洁,上面有一个问题为什么是最大化对数资产期望值,而不是资产期望值?
原因是,这是个连续的赌局,不是单一的赌局。这里需要一点随机过程的知识。
观察公式(11)和公式(7),求该最大值,其实只需要求单一随机过程
E
ln
R
k
E \ln R_k
ElnRk的最大值即可。这也就是为什么求的是对数期望。
收尾
回过头,再来回答一开始的问题:为什么期望是正的,一直赌,却一定会输光?
其实本质上是因为它并不是单一赌局,事实上它是一个连续赌局,你应该选择合适的下注比例去最大化对数资产期望。
下面这种想法是正确的:
- 0.83 * 1.2=0.996,由于输赢概率相同,所以连续的局面下,钱会不断地减少
- 根据凯利判据,计算最佳投注比例是44%,这个时候,就变成了赢则变1.088倍,输则变0.9252倍。1.088*0.9252是多少呢?1.0066176!大于1了!这就解释的通为啥所有玩家的资产都纷纷上涨了。
看起来很美好,但现实情况可不是这样的——大多数时候,你既不知道胜率,也不知道赔率。
但凯利判据至少在提醒我们,频繁交易或总是All in,都是一种很差的策略——容易赔钱。
道理很简单,不说复杂了,时间拉长,抛硬币会输也会赢,输赢概率看作均等,那么一输一赢又如何呢?
- 如果本金为1,上涨50%下降50%,或者下降50%再上涨50%,结果如何?你可能在想,那不就不输不赚吗?错了,一通操作下来,你只剩0.75(😊)
- 再以上边的模拟游戏(股市)为例,你以为你能赚个差价,0.2-0.17=0.03,实际上你只剩下0.996(0.83*1.2)
本质的原因是因为这是连续的,前面的结果影响后面的本金,如果你在考虑“复利”的奇迹,那就不要忽略它是个连续的赌局,或许你该选择合适的比例,而不是All in。
写在后面
这个小知识之所以有意思,因为它对我来说是很反常识的,我很相信统计基本原理,所以,我的常识经常是——只要保证一直做大概率的事情,那么最终一定会是正收益。
但是现在来看,似乎需要再加点限定条件。
再一个点是,这个曲线它居然仅仅因为一个比例,就一定(统计意义上)能够正收益,而这个最佳比例,居然是能计算的!
参考文献
- 凯利判据-维基百科
- https://www.physixfan.com/weishenmepinfanjiaoyiderendaduoshuzaigushishangdoupeiqianleyigeyouqudexiaoshuxueyouxiyexua/
- https://www.physixfan.com/yongkailipanjuwanzhuanqianwenzhongdeyigeyouqudexiaoshuxueyouxi/
- https://zhuanlan.zhihu.com/p/35707775