查看全集:💎Quantopia量化分析56讲
最大似然估计是统计学中用于参数估计的经典方法,其核心思想是:寻找能够最大化观测数据出现概率的参数值。
量化交易策略开发中,将历史数据拟合到混合分布模型,使用MLE估计参数后,可以:
金融机构广泛使用MLE来校准内部风险模型、定价模型和评级系统,尤其在Basel框架下的风险资本计算中扮演核心角色。
pip install yfinance scipy matplotlib numpy statsmodels
import math
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats
import yfinance as yf
from statsmodels.stats.stattools import jarque_bera
TRUE_MEAN = 40 # 真实均值
TRUE_STD = 10 # 真实标准差
np.random.seed(2023) # 固定随机种子保证可重复性
X = np.random.normal(TRUE_MEAN, TRUE_STD, 1000)
对于正态分布 ,其MLE估计量为:
其中:
def normal_mu_MLE(X):
return np.mean(X)
def normal_sigma_MLE(X):
return np.std(X, ddof=0) # ddof=0表示除以n而不是n-1
print("均值估计(手动):", normal_mu_MLE(X))
print("标准差估计(手动):", normal_sigma_MLE(X))
mu, std = scipy.stats.norm.fit(X)
print("Scipy均值估计:", mu)
print("Scipy标准差估计:", std)
x = np.linspace(0, 80, 100)
plt.hist(X, bins=30, density=True, alpha=0.7)
plt.plot(x, scipy.stats.norm.pdf(x, mu, std), 'r-', lw=2)
plt.title('正态分布拟合结果')
plt.legend(['MLE拟合曲线', '样本分布'])
plt.show()
TRUE_LAMBDA = 5
np.random.seed(2023)
X = np.random.exponential(1/TRUE_LAMBDA, 1000) # 注意numpy参数为scale=1/λ
对于指数分布,其MLE估计量为:
其中:
def exp_lambda_MLE(X):
return 1 / np.mean(X)
print("Lambda估计(手动):", exp_lambda_MLE(X))
_, l = scipy.stats.expon.fit(X, floc=0) # 固定位置参数为0
print("Scipy Lambda估计:", 1/l) # Scipy返回的是scale参数=1/λ
# 获取特斯拉股票数据
data = yf.download('TSLA', start='2014-01-01', end='2015-01-01')
# 计算日收益率
close_prices = data['Close'].values
returns = np.diff(close_prices) / close_prices[:-1]
mu, std = scipy.stats.norm.fit(returns)
print(f"收益率均值: {mu:.4f}")
print(f"收益率标准差: {std:.4f}")
plt.figure(figsize=(10,6))
plt.hist(returns, bins=50, density=True, alpha=0.6)
x = np.linspace(-0.2, 0.2, 100)
plt.plot(x, scipy.stats.norm.pdf(x, mu, std), 'r-')
plt.title('股票收益率正态分布拟合')
plt.xlabel('日收益率')
plt.ylabel('概率密度')
plt.show()
jb_value, p_value, skewness, kurtosis = jarque_bera(returns)
print(f"JB统计量: {jb_value:.2f}")
print(f"P值: {p_value:.2e}")
print(f"偏度: {skewness:.2f}")
print(f"峰度: {kurtosis:.2f}")
当样本量增大时:
对苹果股票(AAPL)的收益率进行正态分布拟合,并检验其正态性
实现均匀分布U(a,b)的MLE估计,并验证其有效性
注意事项:
代码更新说明: