--- date: "{ date:YYYY-MM-DD }": tags: title: --- 在之前模拟游戏收益的情境中,模拟一万次后收益和实际年化利率的最高值、最低值本身并不一定对应着某种典型的已知函数形式。不过我们可以从以下几个角度来分析和探讨可能的关联: 1. 数据分布特性与函数的关系 模拟收益和年化利率的随机性 每次模拟游戏的结果是随机的,由游戏的获胜概率、赢和输时的年化利率等因素共同决定。在多次模拟后,收益和年化利率的分布是基于大量随机事件的统计结果。 这种随机性使得最高值和最低值的产生也是随机的,并不遵循简单的确定性函数规律。例如,每次模拟中游戏的输赢顺序不同,最终的收益和年化利率就会不同,从而导致最高值和最低值不断变化。 2. 可能的近似分布及对应函数 收益和年化利率的分布可能近似为某种概率分布 正态分布:在某些情况下,如果模拟的次数足够多且满足一定条件,收益和年化利率可能近似服从正态分布。但最高值和最低值并非正态分布本身,而是从正态分布样本中选取的极端值。 极值分布:对于大量随机变量的最大值和最小值,它们往往服从极值分布。常见的极值分布有三种类型:Gumbel 分布、Fréchet 分布和 Weibull 分布。 Gumbel 分布:通常用于描述最大值的分布,当数据没有上限且分布的尾部较轻时,最大值可能服从 Gumbel 分布。 Fréchet 分布:适用于具有重尾分布且没有上限的数据,最大值可能遵循此分布。 Weibull 分布:可用于描述最小值的分布,当数据有下限且满足一定条件时,最小值可能服从 Weibull 分布。 1. 通过代码验证近似分布 以下是一个简单的示例,展示如何使用 Python 模拟游戏收益,并观察最高值和最低值的分布情况,尝试判断是否符合某种极值分布: ```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() ``` ![[../attachments/Pasted image 20250222113205.png]] 这张图包含两个子图,分别展示了模拟游戏收益中最高值和最低值的分布情况,以及它们与特定极值分布的拟合结果: ### 左图: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分布。