查看全集:💎Quantopia量化分析56讲
离散随机变量的取值是可数的,每个结果的概率明确。例如骰子的每个面有1/6的概率。
PMF满足两个性质:
import numpy as np
import matplotlib.pyplot as plt
class DiscreteUniformRV:
def __init__(self, low, high):
self.low = low
self.high = high
def draw_samples(self, n_samples):
return np.random.randint(self.low, self.high+1, n_samples)
# 骰子示例
die = DiscreteUniformRV(1, 6)
samples = die.draw_samples(1000)
plt.hist(samples, bins=6, density=True, alpha=0.8)
plt.title("Discrete Uniform Distribution (Die Roll)")
plt.show()
描述n次独立伯努利试验的成功次数,PMF为:
创建一个二项分布随机变量类并用它模拟股票涨跌情况:
BinomialRV
类初始化时需要两个参数:n
: 试验次数p
: 单次试验成功的概率draw_samples
方法生成指定数量的随机样本n=5, p=0.5
的二项分布(相当于5天内股票上涨概率为50%)class BinomialRV:
def __init__(self, n, p):
self.n = n
self.p = p
def draw_samples(self, n_samples):
return np.random.binomial(self.n, self.p, n_samples)
# 股票涨跌示例(假设每日涨的概率0.5)
stock_moves = BinomialRV(n=5, p=0.5)
samples = stock_moves.draw_samples(1000)
plt.hist(samples, bins=6, density=True, alpha=0.8)
plt.title("Binomial Distribution (n=5, p=0.5)")
plt.show()
这个例子很好地展示了如何使用二项分布模拟股票市场的简单涨跌模型。在这个模型中,每天股票有50%的概率上涨,我们观察5天内上涨的天数分布。最终的直方图应该呈现对称的钟形,峰值在2-3天处。
这种模型虽然简化了真实市场的复杂性,但对于理解随机事件的累积效应很有帮助。
连续随机变量取值不可数,用概率密度函数(PDF)描述概率分布。
满足:
最常见的重要分布,PDF为:
这个函数各部分的含义是:
当接近时,指数部分接近1,密度达到最大值;随着远离,概率密度迅速下降。较大的值会使曲线更平坦宽广,较小的值则使曲线更高且集中。
正态分布有"68-95-99.7"规则:约68%的数据在范围内,约95%在范围内,约99.7%在范围内。
这段代码创建了一个正态分布随机变量类并生成样本:
NormalRV
类初始化需要两个参数:mu
: 均值(分布的中心)sigma
: 标准差(分布的宽度)draw_samples
方法生成指定数量的随机样本class NormalRV:
def __init__(self, mu, sigma):
self.mu = mu
self.sigma = sigma
def draw_samples(self, n_samples):
return np.random.normal(self.mu, self.sigma, n_samples)
# 标准正态分布示例
normal = NormalRV(0, 1)
samples = normal.draw_samples(1000)
plt.hist(samples, bins=30, density=True, alpha=0.8)
plt.title("Standard Normal Distribution")
plt.show()
正态分布在金融领域极为重要,被广泛用于:
标准正态分布(μ=0, σ=1)是正态分布的标准化形式,呈现典型的钟形曲线,大约68%的数据落在±1标准差范围内,95%落在±2标准差范围内。
import yfinance as yf
import pandas as pd
# 获取特斯拉股票数据
tsla = yf.download('TSLA', start='2020-01-01', end='2023-01-01')
returns = tsla['Close'].pct_change().dropna()
Jarque-Bera测试是金融分析中常用的正态性检验方法,通过测量数据的偏度(skewness)和峰度(kurtosis)来判断数据是否符合正态分布:
从打印的p值可以判断TSLA(特斯拉)的日收益率是否符合正态分布。实际上,金融资产收益率通常表现出"尖峰厚尾"特征,即中间峰值比正态分布更高,尾部比正态分布更厚,这也是为什么需要进行这种正态性检验。
这种分析对于风险管理和投资组合构建非常重要,因为许多金融模型假设收益率呈正态分布。
from scipy.stats import jarque_bera
jb_test = jarque_bera(returns)
print(f"JB统计量: {jb_test[0]:.2f}, p值: {jb_test[1]:.4f}")
# 绘制收益率分布
plt.hist(returns, bins=50, density=True, alpha=0.8)
plt.title("TSLA Daily Returns Distribution")
plt.show()
这个可视化直接对比了实际收益率分布与理论正态分布,允许我们直观地判断:
from scipy.stats import norm
mu, std = returns.mean(), returns.std()
x = np.linspace(returns.min(), returns.max(), 100)
pdf = norm.pdf(x, mu, std)
plt.hist(returns, bins=50, density=True, alpha=0.5)
plt.plot(x, pdf, 'r', linewidth=2)
plt.title("Fitted Normal Distribution")
plt.show()
这种分析对于风险管理非常重要,因为如果实际分布显著偏离正态假设,那么基于正态分布的风险度量(如标准VaR)可能会低估极端损失的可能性。通常金融收益率会呈现出"尖峰厚尾"特征,即分布中心比正态分布更尖,两侧尾部比正态分布更厚。
# 练习3答案示例
prob = norm.cdf(1) - norm.cdf(-1)
print(f"标准正态分布在±1σ范围内的概率: {prob:.4f}")
通过这个结构化的教程,新手可以逐步理解随机变量的核心概念,并通过实际代码示例加深对理论的理解。