5.8 KiB
5.8 KiB
date | tags | title | ||
---|---|---|---|---|
|
在之前模拟游戏收益的情境中,模拟一万次后收益和实际年化利率的最高值、最低值本身并不一定对应着某种典型的已知函数形式。不过我们可以从以下几个角度来分析和探讨可能的关联:
- 数据分布特性与函数的关系 模拟收益和年化利率的随机性 每次模拟游戏的结果是随机的,由游戏的获胜概率、赢和输时的年化利率等因素共同决定。在多次模拟后,收益和年化利率的分布是基于大量随机事件的统计结果。 这种随机性使得最高值和最低值的产生也是随机的,并不遵循简单的确定性函数规律。例如,每次模拟中游戏的输赢顺序不同,最终的收益和年化利率就会不同,从而导致最高值和最低值不断变化。
- 可能的近似分布及对应函数 收益和年化利率的分布可能近似为某种概率分布 正态分布:在某些情况下,如果模拟的次数足够多且满足一定条件,收益和年化利率可能近似服从正态分布。但最高值和最低值并非正态分布本身,而是从正态分布样本中选取的极端值。 极值分布:对于大量随机变量的最大值和最小值,它们往往服从极值分布。常见的极值分布有三种类型:Gumbel 分布、Fréchet 分布和 Weibull 分布。 Gumbel 分布:通常用于描述最大值的分布,当数据没有上限且分布的尾部较轻时,最大值可能服从 Gumbel 分布。 Fréchet 分布:适用于具有重尾分布且没有上限的数据,最大值可能遵循此分布。 Weibull 分布:可用于描述最小值的分布,当数据有下限且满足一定条件时,最小值可能服从 Weibull 分布。
- 通过代码验证近似分布 以下是一个简单的示例,展示如何使用 Python 模拟游戏收益,并观察最高值和最低值的分布情况,尝试判断是否符合某种极值分布:
import random
import math
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gumbel_r, weibull_min
# 初始本金
initial_principal = 10000
# 游戏次数
num_games = 146
# 获胜概率
win_prob = 0.75
# 年化赢利率
annual_win_rate = 0.5
# 年化输利率
annual_loss_rate = -0.8
# 模拟次数
simulation_times = 10000
final_amounts = []
annual_interest_rates = []
for _ in range(simulation_times):
principal = initial_principal
# 模拟游戏过程
for _ in range(num_games):
# 模拟游戏结果
result = random.random()
if result < win_prob:
# 赢了
daily_rate = (5 / 365) * annual_win_rate
principal *= (1 + daily_rate)
else:
# 输了
daily_rate = (5 / 365) * annual_loss_rate
principal *= (1 + daily_rate)
final_amounts.append(principal)
# 计算实际年化利率
years = 2
annual_interest_rate = math.pow(principal / initial_principal, 1 / years) - 1
annual_interest_rates.append(annual_interest_rate)
# 提取每次模拟中的最高和最低收益
max_amounts = []
min_amounts = []
for i in range(0, simulation_times, 100): # 这里简单分组,每 100 次模拟一组
group = final_amounts[i: i + 100]
max_amounts.append(max(group))
min_amounts.append(min(group))
# 绘制最高值的直方图并拟合 Gumbel 分布
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.hist(max_amounts, bins=30, density=True, alpha=0.6, color='g')
params = gumbel_r.fit(max_amounts)
x = np.linspace(min(max_amounts), max(max_amounts), 100)
plt.plot(x, gumbel_r.pdf(x, *params), 'r-', lw=2)
plt.title('Distribution of Max Amounts (Fitted Gumbel)')
# 绘制最低值的直方图并拟合 Weibull 分布
plt.subplot(1, 2, 2)
plt.hist(min_amounts, bins=30, density=True, alpha=0.6, color='b')
params = weibull_min.fit(min_amounts)
x = np.linspace(min(min_amounts), max(min_amounts), 100)
plt.plot(x, weibull_min.pdf(x, *params), 'r-', lw=2)
plt.title('Distribution of Min Amounts (Fitted Weibull)')
plt.show()
这张图包含两个子图,分别展示了模拟游戏收益中最高值和最低值的分布情况,以及它们与特定极值分布的拟合结果:
左图:Distribution of Max Amounts (Fitted Gumbel)
- 直方图:绿色的直方图表示每次分组模拟(每100次模拟为一组)中的最高收益的分布频率。纵轴是概率密度,横轴是收益金额。可以看到,收益最高值主要集中在一定范围内,其中某个区间的出现频率相对较高,而两端的频率较低。
- 红色曲线:这条曲线是根据Gumbel分布拟合得到的概率密度函数(PDF)。通过将模拟数据拟合到Gumbel分布,我们可以判断最高收益的分布是否近似符合Gumbel分布。从图中可以看出,红色曲线与直方图的形状有一定的契合度,说明最高收益的分布在一定程度上符合Gumbel分布的特征。
右图:Distribution of Min Amounts (Fitted Weibull)
- 直方图:蓝色的直方图展示了每次分组模拟中的最低收益的分布频率。同样,纵轴是概率密度,横轴是收益金额。最低收益值的分布也呈现出一定的集中趋势,有一个出现频率较高的区间。
- 红色曲线:该曲线是根据Weibull分布拟合得到的概率密度函数(PDF)。将模拟数据拟合到Weibull分布,以判断最低收益的分布是否符合Weibull分布。从图中可见,红色曲线与直方图的形状也较为匹配,表明最低收益的分布在一定程度上符合Weibull分布的特点。
总体而言,通过直方图和拟合曲线的对比,可以初步判断在这个游戏收益模拟中,最高收益的分布近似符合Gumbel分布,最低收益的分布近似符合Weibull分布。