基于CNN-LSTM的股指/股价预测:多变量时间序列数据预处理方案咨询
针对CNN-LSTM股指/股价预测的最优数据预处理方案
结合你用到的多类数据特性和CNN-LSTM模型的需求(既要捕捉局部价格模式,又要学习长期时序依赖),分类型的预处理是核心,以下是具体建议:
一、分类型预处理策略
1. 时序价格数据(OHLCV)
- 避免全局标准化/差分一刀切:股价是带趋势的非平稳序列,全局标准化会抹平不同时间段的波动特征,而全序列差分可能丢失长期趋势信号。
- 推荐方案:
- 先做ADF检验确认序列平稳性,若一阶差分后平稳,对OHLC做一阶差分(
close[t] - close[t-1]),否则保留原始价格。 - 采用滑动窗口归一化:用和模型输入窗口一致的大小(比如60天),在每个窗口内用
MinMaxScaler将价格缩放到[0,1],这样能保留局部的价格相对关系(如当天高低开收的位置差),适配CNN的局部特征提取需求。 - 成交量:先做
log(1+volume)处理(避免0值问题),再和价格数据一起做窗口内归一化,因为成交量的绝对量级波动远大于价格。
- 先做ADF检验确认序列平稳性,若一阶差分后平稳,对OHLC做一阶差分(
2. 基本面数据(失业率、各类利率)
- 这类数据低频、趋势性强,不适合差分:差分后会把缓慢变化的趋势变成微弱的波动信号,丢失长期关联信息。
- 推荐方案:
- 用
RobustScaler做全局归一化:这类数据可能存在突发政策导致的 outliers,鲁棒缩放对异常值的容忍度更高,能保留原始趋势。 - 数据对齐:低频数据(如月度失业率)用前向填充(ffill)补全日频数据,不要用插值避免引入噪声。
- 用
3. 技术指标(RSI、MACD)
- 无需额外差分/对数处理:这类指标本身是基于价格计算的无量纲或固定范围特征(如RSI为0-100),已经包含了价格的相对关系。
- 推荐方案:
- 用
MinMaxScaler将不同指标统一缩放到[0,1]范围,避免不同指标的量级差异干扰模型权重分配。比如MACD正负波动,RSI固定0-100,统一缩放后更利于模型学习。
- 用
4. 移动均线(SMA、EMA、WMA)
- 不要用“均线减开盘价”的处理:这种操作会丢失均线的绝对趋势信息(如长期均线高于价格的多头信号),且不同价位的差值量级无对比性。
- 推荐方案:
- 和OHLC数据一起做滑动窗口归一化,保留均线与原始价格的相对位置关系,让CNN能捕捉到均线对价格的支撑/压制等局部模式。
二、整体流程注意事项
- 严格避免数据泄露:所有归一化/缩放的拟合过程只在训练集上进行,用训练集的scaler转换验证集和测试集,绝对不能用全数据集拟合。
- 特征拼接:预处理后的各类特征按维度拼接成
[样本数, 时间步长, 特征总数]的形状,作为CNN-LSTM的输入。 - 可选优化:
- 把OHLC转换为衍生特征:如当日波动幅度(high-low)、开盘收盘差值(close-open),这类特征更直接反映价格行为,适合CNN提取局部特征。
- 特征筛选:用互信息、皮尔逊相关性分析剔除与预测标签无关的特征,减少模型复杂度,避免过拟合。
三、对你当前处理方式的问题分析
- 全数据集标准化:破坏了股价时序的局部波动特征,CNN无法有效提取价格的局部模式。
- 所有数据差分:基本面和技术指标本身是平稳的,差分后丢失有效信息,引入不必要的噪声。
- 均线减开盘价:丢失均线的绝对趋势,模型难以学习一致的多空信号模式。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

