凯利判据原理及证明 - 为什么不要All In

引言

偶然了解的有意思的知识。
赢面很大的连续赌局,为什么容易倾家荡产?在股市上频繁交易,为什么容易赔钱?明明每次赢钱数学期望都是正的,为什么还是结果还是输钱?
奇怪的是,仅仅只要选对合适的下注比例,通常就能笑到最后。

感觉很反直觉,所以有意思。

输或赢的赌局

先从一个有意思的例子说起:

如有有一个连续的赌局,不是输就是赢,有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×01=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.831=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()

结果是:输光!
image.png
不同颜色代表不同玩家,x轴是游戏次数,y轴是金额。可以看到,即使不是极端的赌局,大多数玩家最终的资产都会归零。换成对数坐标轴更容易看出来(注意y轴,大多数人,在一开始资产就迅速接近0):
image.png
这就很难理解了,明明赢钱的期望总是正的,为什么大多数人都会输光?难道大数定律有问题?
我觉得其实主要是因为这是一个连续的局面,每次游戏之间的钱会互相影响,每次都不独立。简单的理解角度:

  • 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=r1r2pr1qr2
其中

  • 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=1p,赔率为 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=r1pr1q=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=r1r2pr1qr2
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()

可以看到,使用凯利公式计算最佳投注比例之后,所有的玩家,或许有不同波动,但都赢到最后。
image.png
这很神奇吧!

凯利判据的证明

为什么呢?来看下凯利判据的证明就知道了。

对数资产期望

凯利公式的目标是最大化资产的增长率,也即最大化对数资产的期望值。不失一般性,设开始时的资产是1,每次下注的比例为 f ∗ f^* f,有 p p p的概率会以 r 1 r_1 r1的赔率赢钱,这时资产变为。有 q = 1 − p q=1-p q=1p的概率会以 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+fr1)+(1p)log(1fr2)
要找到最大化这个期望值,只需令导数值为零:
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  dfdE=1+fr1pr11fr2(1p)r2=0
求解上述方程即得凯利公式
f ∗ = p r 1 − q r 2 r 1 r 2 f^*=\frac{pr_1-qr_2}{r_1r_2} f=r1r2pr1qr2

详细证明

这个证明很简洁,上面有一个问题为什么是最大化对数资产期望值,而不是资产期望值?
原因是,这是个连续的赌局,不是单一的赌局。这里需要一点随机过程的知识。
image.png
在这里插入图片描述

image.png
观察公式(11)和公式(7),求该最大值,其实只需要求单一随机过程 E ln ⁡ R k E \ln R_k ElnRk的最大值即可。这也就是为什么求的是对数期望。

https://zhuanlan.zhihu.com/p/35707775

收尾

回过头,再来回答一开始的问题:为什么期望是正的,一直赌,却一定会输光?
其实本质上是因为它并不是单一赌局,事实上它是一个连续赌局,你应该选择合适的下注比例去最大化对数资产期望。
下面这种想法是正确的:

  • 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。

写在后面

这个小知识之所以有意思,因为它对我来说是很反常识的,我很相信统计基本原理,所以,我的常识经常是——只要保证一直做大概率的事情,那么最终一定会是正收益。
但是现在来看,似乎需要再加点限定条件。
再一个点是,这个曲线它居然仅仅因为一个比例,就一定(统计意义上)能够正收益,而这个最佳比例,居然是能计算的!

参考文献

  1. 凯利判据-维基百科
  2. https://www.physixfan.com/weishenmepinfanjiaoyiderendaduoshuzaigushishangdoupeiqianleyigeyouqudexiaoshuxueyouxiyexua/
  3. https://www.physixfan.com/yongkailipanjuwanzhuanqianwenzhongdeyigeyouqudexiaoshuxueyouxi/
  4. https://zhuanlan.zhihu.com/p/35707775
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值