跳到主内容
研究主线统计估计与回归基础 · 第6–13讲1/8模块导览 →
讲义

第6讲:均值 (Means)

比较算术平均数、中位数、众数、几何平均数和调和平均数,说明各自对收益、价格和异常值的适用条件。

完成状态保存在当前浏览器,可随时取消。

阶段 3 · 研究主线 · 第6–13讲

统计估计与回归基础

本模块要解决

  • 理解统计矩、相关性、估计不稳定性、回归与MLE
  • 用金融数据解释估计值及其不确定性

研究纪律

  • 报告估计窗口、标准误和参数稳定性
  • 不得从全样本标准化或调参后再声称样本外表现

本教程将介绍如何使用单一数值来概括数据集,核心目标是捕捉数据分布的关键信息。

准备工作#

code
# 导入必要的库
import yfinance as yf
import scipy.stats as stats
import numpy as np

# 定义自定义众数计算函数
def mode(l):
    counts = {}
    for e in l:
        counts[e] = counts.get(e, 0) + 1

    maxcount = max(counts.values(), default=0)
    if maxcount < 1 and len(l) > 1:
        return 'No mode'

    modes = [k for k, v in counts.items() if v == maxcount]
    return modes if maxcount > 1 or len(l) == 1 else 'No mode'

算术平均数#

最常用的集中趋势度量,计算公式为:

Mean=1ni=1nxi\text{Mean} = \frac{1}{n}\sum_{i=1}^n x_i
code
# 示例数据集
x1 = [1, 2, 2, 3, 4, 5, 5, 7]
x2 = x1 + [100]

print(f'x1的平均数: {np.mean(x1):.2f}')
print(f'x2的平均数: {np.mean(x2):.2f}')

中位数#

将数据排序后位于中间位置的值,对异常值不敏感:

code
print(f'x1的中位数: {np.median(x1)}')
print(f'x2的中位数: {np.median(x2)}')

众数#

出现频率最高的值,适用于类别数据:

code
print(f'x1的众数: {mode(x1)}')
print(f'x2的众数: {mode(x2)}')

几何平均数#

适用于增长率计算,计算公式:

i=1nxin\sqrt[n]{\prod_{i=1}^{n} x_i}
code
print(f'x1的几何平均数: {stats.gmean(x1):.2f}')
print(f'x2的几何平均数: {stats.gmean(x2):.2f}')

实际金融数据分析示例#

code
# 获取标普500指数数据
start = '2014-01-01'
end = '2015-01-01'
data = yf.download('SPY', start=start, end=end)
prices = data['Close']

# 计算日收益率
returns = prices.pct_change().dropna()

# 展示基本统计量
print('\n金融数据分析:')
print(f'收益率均值: {returns.mean():.4f}')
print(f'收益率中位数: {returns.median():.4f}')
print(f'收益率众数: {mode(returns.round(4))}')  # 四舍五入便于分组

# 几何平均收益率计算
geo_mean_return = stats.gmean(returns + 1) - 1
print(f'几何平均收益率: {geo_mean_return:.4f}')

# 验证几何平均计算
initial_price = prices.iloc[0]
final_price = prices.iloc[-1]
T = len(returns)
calculated_price = initial_price * (1 + geo_mean_return)**T
print(f'实际最终价格: {final_price:.2f}')
print(f'几何平均计算价格: {calculated_price:.2f}')

调和平均数#

适用于比率数据,计算公式:

H=ni=1n1xiH = \frac{n}{\sum_{i=1}^n \frac{1}{x_i}}
code
print(f'\nx1的调和平均数: {stats.hmean(x1):.2f}')
print(f'x2的调和平均数: {stats.hmean(x2):.2f}')

注意事项#

  1. 潜在偏差:平均数容易受极端值影响,需结合其他统计量分析

  2. 数据分布:中位数对偏态数据更具代表性

  3. 计算验证:几何平均数验证可确保计算正确性

  4. 数据分组:连续数据计算众数需先进行分箱处理

扩展应用#

code
# 多股票分析示例
tickers = ['AAPL', 'MSFT']
multi_data = yf.download(tickers, start=start, end=end)['Close']

# 计算各股平均收益率
avg_returns = multi_data.pct_change().mean()
print('\n多股票平均收益率:')
print(avg_returns)

关键要点#

  • 根据数据类型选择合适的集中趋势度量

  • 金融数据分析需特别注意收益率的计算方式

  • 结合多个统计量进行综合分析

  • 始终验证计算结果的合理性

通过本教程,您已掌握使用Python进行集中趋势分析的核心方法,并学会使用yfinance获取真实金融数据进行实践分析。建议继续探索离散趋势度量(如标准差、方差)来完善数据分析能力。