Feature Get
· 阅读需 4 分钟
在时间序列数据(如 OHLCV 数据)中,提取特征是构建高效预测模型的关键步骤。本文介绍从原始数据中提取对模型有用的技术指标、统计特征和时间特征的方法,并提供完整代码示例。
🧠 特征类型总览
特征提取主要分为三类:
- 📉 技术指标
- 📊 统计特征
- ⏱️ 时间特征
1️⃣ 技术指标(Technical Indicators)
技术指标是金融领域中常用的分析工具,能够帮助捕捉价格趋势、动量和波动性。
常见技术指标
✅ 移动平均线(MA)
- 简单移动平均(SMA)
- 指数移动平均(EMA)
✅ 相对强弱指数(RSI)
衡量价格变动强度与速度:
✅ 布林带(Bollinger Bands)
使用标准差衡量波动性:
- 中轨:SMA
- 上轨:SMA + 2σ
- 下轨:SMA - 2σ
✅ MACD(移动平均收敛/发散)
- 快线 = 12日 EMA - 26日 EMA
- 慢线 = 快线的 9 日 EMA
✅ VWAP(成交量加权平均价格)
2️⃣ 统计特征(Statistical Features)
描述价格和收益率的分布和波动。
常见统计特征
- 收益率(Returns):
- 波动率(Volatility):
- 最大值/最小值:过去 (n) 天内的最高/最低价
- 分位数:如 25%、50%、75% 分位值
- 偏度 & 峰度:反映收益率分布的形态特征
3️⃣ 时间特征(Time Features)
从时间索引中提取周期性与趋势性特征。
常见时间特征
data['Year'] = data.index.year
data['Month'] = data.index.month
data['Day'] = data.index.day
data['Weekday'] = data.index.weekday
- 滞后特征(Lag features):
data['Lag_1'] = data['Close'].shift(1)
data['Lag_2'] = data['Close'].shift(2)
- 滚动窗口统计(Rolling stats):
data['Rolling_Mean'] = data['Close'].rolling(window=5).mean()
data['Rolling_Std'] = data['Close'].rolling(window=5).std()
💻 特征提取完整代码示例
import pandas as pd
import numpy as np
from ta import add_all_ta_features # pip install ta
# 1. 加载数据
data = pd.read_csv('ohlcv_data.csv', index_col='Date', parse_dates=True)
# 2. 添加所有技术指标
data = add_all_ta_features(
data, open="Open", high="High", low="Low", close="Close", volume="Volume", fillna=True
)
# 3. 统计特征
data['Returns'] = data['Close'].pct_change()
data['Volatility'] = data['Returns'].rolling(window=5).std()
# 4. 时间特征
data['Year'] = data.index.year
data['Month'] = data.index.month
data['Weekday'] = data.index.weekday
# 5. 滞后特征
data['Lag_1'] = data['Close'].shift(1)
data['Lag_2'] = data['Close'].shift(2)
# 6. 滚动统计
data['Rolling_Mean'] = data['Close'].rolling(window=5).mean()
data['Rolling_Std'] = data['Close'].rolling(window=5).std()
# 7. 删除缺失值
data = data.dropna()
# 8. 输出结果
print(data.head())
🧬 特征选择(Feature Selection)
提取大量特征后,需要选择最相关的特征来提高模型效果,避免过拟合:
- ✅ 相关性分析:删除与目标变量弱相关或与其他特征高度相关的变量。
- ✅ PCA 降维:将高维特征映射到低维空间。
- ✅ 模型评估法:如基于树模型的特征重要性分析(随机森林、LightGBM)。
📌 总结
- 技术指标能反映价格行为;
- 统计特征描述波动性与收益;
- 时间特征挖掘周期性;
- 代码示例展示完整的提取流程;
- 特征选择至关重要。