4. 描述性统计:均值、方差、偏度、峰度、极值分析,理解碳价分布特征
做碳市场高频交易,第一步不是跑模型,而是先摸清数据的「脾气」。
说白了,就是得知道碳价这个数字到底是怎么分布的。它是不是像正态分布那样规规矩矩?还是说经常抽风?
我个人习惯,拿到任何新的碳市场数据,第一件事就是跑一遍描述性统计。这就像医生看病先量体温、测血压一样,是基本功。
4.1 均值与方差:碳价的「中心」和「波动」
均值,就是碳价的平均价格。但这里有个坑——碳价数据往往有尖峰厚尾特征,均值很容易被极端值带偏。
我记得有一次分析广东碳市场的盘中数据,某天下午突然出现一笔异常高的成交,直接把当天的均值拉高了3%。如果你只看均值,会以为市场情绪突然亢奋了。其实呢?就是一笔错单。
方差(或标准差)衡量的是碳价的波动程度。方差越大,说明价格越「跳」。
你想想看,如果方差突然放大,往往意味着有重大消息要出来了,或者市场流动性出了问题。
import numpy as np
import pandas as pd
# 假设 df 是包含碳价数据的 DataFrame,列名为 'price'
# 计算日内5分钟频率的均值和标准差
df['return'] = df['price'].pct_change()
daily_stats = df.resample('1D').agg({
'price': ['mean', 'std', 'min', 'max'],
'return': ['std']
})
print(daily_stats.head())
4.2 偏度:碳价是「左偏」还是「右偏」?
偏度描述的是数据分布的不对称性。
- 偏度 > 0(右偏):说明价格经常出现较大的正涨幅,但跌幅相对温和。市场情绪偏乐观。
- 偏度 < 0(左偏):说明价格容易暴跌,但上涨比较缓慢。市场情绪偏悲观。
我在研究欧盟碳市场(EU ETS)时发现,政策公布前后的偏度变化非常明显。政策利好时,偏度瞬间转正;政策利空时,偏度直接跳水到负值。
4.3 峰度:碳价的「尖峰厚尾」特征
峰度衡量的是数据分布的「尖锐」程度。
- 峰度 > 3(尖峰):说明价格集中在均值附近,但尾部(极端值)比正态分布更厚。这就是典型的「尖峰厚尾」。
- 峰度 < 3(平峰):分布比较平坦,极端值较少。
碳市场的数据,尤其是高频数据,峰度通常远大于3。我见过最高的峰度值出现在湖北碳市场的开盘瞬间,峰度一度超过20。
为什么会这样?因为碳市场不是连续竞价,而是有集合竞价和间歇性交易。价格经常在某个区间内「僵持」,然后突然爆发。
4.4 极值分析:捕捉碳价的「极限」
极值分析,说白了就是研究碳价「最坏的情况」和「最好的情况」。
我们通常关注两个指标:
- 最大值/最小值:日内最高价和最低价,反映当天的价格区间。
- 极值间隔:两次极端价格之间的时间间隔。如果间隔越来越短,说明市场越来越不稳定。
我个人习惯用「极值比率」——即日内最高价除以最低价。这个比率如果超过1.05(5%的波动),我就会警惕起来,检查是否有异常事件。
# 计算日内极值比率
df['daily_range'] = df.groupby(df.index.date)['price'].transform(lambda x: x.max() / x.min())
# 标记异常波动日
abnormal_days = df[df['daily_range'] > 1.05].index.date
print(f"异常波动天数: {len(set(abnormal_days))}")
4.5 知识体系:描述性统计的核心逻辑
下面这张图,是我自己总结的碳价分布特征分析框架。你可以把它当作一个检查清单。
4.6 实战案例:一次完整的描述性统计
拿某试点碳市场2023年7月的数据举个例子。我随机抽了一天,跑了一下描述性统计:
| 统计量 | 数值 | 解读 |
|---|---|---|
| 均值 | 58.23 元/吨 | 价格中枢在58元附近 |
| 中位数 | 57.98 元/吨 | 与均值接近,说明没有严重偏态 |
| 标准差 | 1.45 元/吨 | 日内波动约2.5%,相对温和 |
| 偏度 | 0.32 | 轻微右偏,上涨概率略大 |
| 峰度 | 5.87 | 尖峰厚尾,极端值比正态分布多 |
| 最小值 | 55.10 元/吨 | 日内最低点 |
| 最大值 | 61.50 元/吨 | 日内最高点,极值比率1.12 |
看到这个结果,我的第一反应是:峰度5.87,说明这个市场有「肥尾」风险。做策略时,止损要设得比正态分布假设下更宽一些。