统计基础与数据准备:均值、方差、标准差、正态分布、Z-score、数据获取与清洗

各位好,欢迎来到第二章。

上一章我们聊了均值回归的核心思想——价格涨多了会跌,跌多了会涨。但光有想法不够,你得有工具去量化它。说白了,你得知道“涨多了”到底是多少,“跌多了”又该怎么定义。

这一章,我们就来搞定这些基础工具。我敢说,这些统计概念你大学都学过,但真正用在交易里,感觉完全不一样。我自己刚入行时也踩过坑,以为懂公式就能赚钱,结果被市场狠狠教育了一顿。

2.1 均值与方差:描述数据的两个维度

先问个问题:给你一组价格数据,你最想知道什么?

大部分人第一反应是“平均价格”。没错,均值就是最直观的指标。它告诉我们数据的“中心”在哪里。

均值(Mean):所有数据加起来除以个数。

公式:μ = (x₁ + x₂ + ... + xₙ) / n

但光有均值够吗?不够。举个例子:

  • 股票A:价格一直在100元附近波动,偶尔到101或99
  • 股票B:价格从80元冲到120元,又跌回90元

两只股票的均值可能都是100元,但它们的“性格”完全不同。这时候就需要方差出场了。

方差(Variance)衡量的是数据偏离均值的程度。公式是:

σ² = Σ(xᵢ - μ)² / n

嗯,这里要注意:方差是平方过的,单位也跟着平方了。比如价格是元,方差就是“元²”,这玩意儿不太好直观理解。所以更常用的是标准差——方差开个根号就行。

我的经验:在量化交易中,我习惯用标准差来设置价格通道。比如“价格偏离均值2个标准差”就是一个常见的交易信号。我曾经用这个逻辑做过一个简单的均值回归策略,回测效果还不错,但实盘时发现——嗯,市场极端行情下,2个标准差根本不够用。后来我改成了动态标准差,根据波动率调整阈值。

2.2 正态分布:市场的“理想模型”

正态分布,也叫高斯分布,就是那个钟形曲线。你想想看,自然界里很多现象都符合正态分布:人的身高、考试成绩、测量误差……

在金融领域,我们经常假设资产收益率服从正态分布。为什么?因为正态分布有很好的数学性质,方便我们计算概率。

正态分布的几个关键特征:

  • 68%的数据落在均值±1个标准差内
  • 95%的数据落在均值±2个标准差内
  • 99.7%的数据落在均值±3个标准差内

这个“68-95-99.7法则”在交易中非常实用。比如你发现某只股票的价格偏离均值超过2个标准差,按照正态分布,这种情况发生的概率只有5%。那它大概率会回归——这就是均值回归策略的理论基础。

避坑指南:我曾经天真地以为市场完全服从正态分布,结果在2008年金融危机时吃了大亏。实际上,金融数据有“肥尾”特征——极端事件发生的概率比正态分布预测的要高得多。所以用正态分布做交易时,一定要留个心眼,设置好止损。

2.3 Z-score:标准化的利器

Z-score,说白了就是“距离均值有几个标准差”。公式很简单:

Z = (x - μ) / σ

Z-score的好处是标准化。不同股票的价格尺度不一样,茅台几百块,农业银行几块钱,没法直接比较。但Z-score把它们都变成了“偏离均值的标准差倍数”,这样就能放在一起看了。

举个例子:

  • 茅台当前价格1800元,均值1700元,标准差100元 → Z-score = (1800-1700)/100 = 1.0
  • 农业银行当前价格3.6元,均值3.0元,标准差0.3元 → Z-score = (3.6-3.0)/0.3 = 2.0

你看,农业银行的Z-score更高,说明它偏离均值的程度更大,回归的“动力”可能更强。

我的习惯:在构建均值回归策略时,我通常用Z-score作为入场信号。当Z-score的绝对值大于2时,我会关注;大于2.5时,我会考虑入场。当然,这个阈值不是固定的,需要根据具体品种和波动率来调整。

2.4 数据获取:从哪里来?

巧妇难为无米之炊。没有数据,再好的策略也是白搭。

我个人常用的数据源有:

  • Yahoo Finance:免费,覆盖面广,适合个人研究
  • 东方财富:A股数据比较全,有API接口
  • Wind/聚宽:专业数据源,收费,但数据质量高

这里用Python的yfinance库举个例子:

import yfinance as yf

# 获取贵州茅台的历史数据
maotai = yf.download('600519.SS', start='2023-01-01', end='2023-12-31')
print(maotai.head())

运行这段代码,你会得到一个DataFrame,包含开盘价、最高价、最低价、收盘价、成交量等字段。嗯,收盘价是我们最常用的。

2.5 数据清洗:脏数据是策略的杀手

数据拿到手,别急着用。我敢打赌,90%的原始数据都有问题。常见的问题包括:

  • 缺失值:某一天没有交易数据(节假日、停牌)
  • 异常值:价格突然跳空,或者成交量异常放大
  • 重复值:同一时间戳出现多条数据

清洗步骤我一般这样处理:

  1. 检查缺失值:用isnull()函数看看哪些列有空值
  2. 填充或删除:对于少量缺失,可以用前向填充(ffill)或插值;缺失太多就直接删除
  3. 去重:用drop_duplicates()干掉重复行
  4. 处理异常值:用Z-score或IQR方法识别并处理

代码示例:

import pandas as pd
import numpy as np

# 假设df是原始数据
# 1. 检查缺失值
print(df.isnull().sum())

# 2. 前向填充
df.fillna(method='ffill', inplace=True)

# 3. 去重
df.drop_duplicates(inplace=True)

# 4. 用Z-score识别异常值(以收盘价为例)
z_scores = np.abs((df['Close'] - df['Close'].mean()) / df['Close'].std())
df = df[z_scores < 3]  # 保留Z-score小于3的数据

避坑指南:我曾经在回测时发现策略表现特别好,兴奋得不行。结果一查,原来是数据里包含了未来信息——我用的是当天的收盘价来计算信号,但实际交易中,收盘价是在收盘后才确定的。这种“前视偏差”是新手最容易犯的错误。记住:只能用历史数据计算信号,不能用未来数据。

2.6 知识体系总览

说了这么多,我们来画个图,把这一章的知识结构串起来。

第二章:统计基础与数据准备 核心概念 统计基础 数据准备 均值与方差 正态分布 Z-score 数据获取 数据清洗 缺失值处理 目标:构建均值回归策略的数据基础 统计工具 + 干净数据 = 可靠策略 图2-1:本章知识体系结构图

这张图把本章的内容分成了两大块:统计基础和数据准备。左边是理论工具,右边是实操技能。两者缺一不可。

2.7 小结

这一章我们聊了:

  • 均值和方差——描述数据的基本特征
  • 正态分布——市场的理想模型,但要注意肥尾
  • Z-score——标准化的利器,用于识别极端值
  • 数据获取与清洗——从源头保证策略质量

我个人觉得,统计基础这部分虽然看起来简单,但真正理解透了,对后续的策略构建帮助巨大。尤其是Z-score,它几乎是所有均值回归策略的基石。

下一章,我们会把这些工具用起来,构建一个完整的均值回归策略。到时候你会发现,原来这些统计概念真的能赚钱——前提是你用对了地方。


蓝海数据掘金营,专注资料整理