记一次统计学知识的应用

初学数据分析,临时起意给自己出了个题,不过这是个反面教材。

统计学刚入门,接触到了概率的基础知识。中学的排列组合我还记得,A(5,3)、C(5,3)这种,一堆阶乘除来除去。我还给自己编了个记忆口诀,组合是大阶乘除以小阶乘除以差阶乘,排列是大阶乘除以差阶乘。

我真是个很爱算的人,玩游戏都不忘做数学题。英雄无敌4是一个我玩了很久的游戏,其中原版战役海盗的女儿第一关,地图上有4座魔法建筑可以学到魔法技能。整个游戏有5大派系魔法,我特别钟爱自然系魔法,总想让主角学自然法术。但有时候,运气就是那么背,4个魔法建筑都随机不到自然魔法。我决定算一算成功学到的概率,其中2个建筑是直接学会某个随机派系,还有一个是随机出两个派系,二选一,剩下一个建筑牵扯到一些复杂的游戏设定,就不展开讲了。最终算出来学到自然魔法的概率是:

1 - 4/C(5,1) x 4/C(5,1) x C(4,2)/C(5,2) x C(12,4)/C(15,4) =
1 - 4/5 x 4/5 x 3/5 x 11x10x9/15/14/13 ≈
86%
看来那次没学到是真的背。

当然,统计学远不止这点内容。最近接触到一个基础概念:期望值,指多次试验中,每次试验的结果与该结果发生概率的乘积之和。它可以用来评估大量反复做同一件事时整体表现如何。

忽然灵光一现,可以给自己出个练习题了。练习题本身的前提假设是有问题的,后面会解释。但没关系,主要目的是练习概念运用与数据操作:

获得比特币近3年、5年、有数据以来的每日价格,根据收盘价算出每日较前一日的涨跌幅百分比。把涨跌视作随机发生的概率事件,假设每天都在收盘时买入,并把这笔在第二日收盘时卖出,长此以往,这种操作的期望值如何?没错,这就是把币价波动当做赌场了,通过统计学方法,看看会得到什么结果。

首先,要获得数据。原本是想让ChatGPT或Bing Chat教我爬数据,但一问发现,这是个公开数据,直接导出就是表格了。好吧,爬数据以后再慢慢学,先做题。

拿到表格导入Jupyter中,初始化一下,发现表里有日期、开盘价、最高价、最低价、收盘价、成交量、市值。

我要用的只有收盘价,根据它来计算出每日较前日的涨跌百分比,记录在return列里。

既然是把它看作赌场,那么涨还是跌、涨跌百分之多少就是完全随机的,和丢骰子没差别。把return列的百分比值划分到不同的区间,我随便定了个5%作为区间的跨度。然后得出每天的涨跌百分比落在了哪个区间里,记录到另一列中。

先画个分布图,直观感受下是什么情况。如图所示,几乎全部涨跌都落在正负20%范围内。从历史看来,单日能波动这么多已是极限。而绝大多数落在了正负5%范围内,看来近3年里币价整体平稳。

现在来计算具体的分布数据。把前面的百分比值按所在区间分组,有很多区间没有数据,去掉空值行之后,得到百分比值在各区间的平均值、中位数、数量。中位数没有用到,但可以和平均值对比做个参考,两者差别不大,表明每个区间内的分布相对均匀。

计算出涨跌落在每个区间的概率,也就是用该区间里的数量除以总数量,单开一列记录概率。把平均值和概率相乘,另开一列记录。

最终把乘积加总,得到统计学意义上的期望值。3年、5年、有数据以来,期望值都很接近,基本上都接近0。我也试着把区间划得更小,1%为一个区间,结果也差不多。

期望值为0,表明什么?代表当天买第二天卖的操作,长期坚持下来毫无收获,尽管它诞生以来涨了这么多。

但要注意,这个结论其实是错误的。因为这个练习题的前提假设就错了,币价的涨跌不能视为独立的概率事件,有太多场外因素对每日涨跌产生影响,同时过去的涨跌也在心理层面对未来的涨跌产生影响。这些影响无法用简单的统计学模型来量化。

再者,即使这真是纯概率事件,比如我们实际上活在一个像大富翁游戏那样的虚拟世界中,里面的股票涨跌全是计算机程序生成的随机数,这结论是不是就正确呢?还是错误的,这种当天买第二天卖的操作,不是一无所获,而是注定亏损。因为我们观察的指标是涨跌百分比,每一天这个百分比的基数都不同。无论先涨10%再跌10%,还是先跌10%再涨10%,效果都不是变回原价,而是比原价低。

一番折腾,基于错误假设得出错误结论。除了练习数据分析技巧外,还有个重要的收获:统计学真的可以验证和研究生活中的问题,只要你尊重和敬畏它的严谨和局限性。这是信心的收获。