
数据质量决定预测天花板
做股票价格预测,很多人一上来就调模型、调参数,结果折腾半天准确率还是上不去。问题大概率不在模型本身,而在喂进去的数据。数据准备这步没做好,后面全是空中楼阁。
缺失值不是随便填个数就行
股票数据常见的缺失有两种。一种是停牌导致的整段空白,另一种是某些交易日只有开盘价没有收盘价。前者不能简单用前值填充,因为停牌期间市场信息已经变化,复牌后价格往往跳空。正确做法是把停牌区间标记为独立状态,用复牌后第一笔有效成交价重新锚定。后者可以用当日均价或者前后交易日的插值来补,但补完要记录一个缺失标记列,让模型知道这个位置原本是空的。

期货数据更麻烦。主力合约切换时,不同月份的合约价格不连续,直接拼接会制造出虚假的跳空缺口。处理方法有两种:一是用复权价格,把历史价格按换月价差调整;二是用价差序列建模,把不同合约分开预测再合成。散户做期货预测最容易踩这个坑,数据看着连续,其实中间断过好几次。
异常值要区分真假
股票价格极少出现真正意义上的异常值,因为涨跌停板天然限制了极端波动。但期货夜盘、节假日前后、主力换月当天,价格容易剧烈跳动。这些波动是真实的市场行为,不能当噪声删掉。
真正需要处理的是数据源错误。不同平台抓到的同一只股票收盘价偶尔差几分钱,这种要统一数据源。成交量字段偶尔出现负值或者零,那是接口故障,直接剔除该行。价格数据的异常检测用滚动窗口的绝对偏差更靠谱,别用全局标准差,一只股票半年前的价格水平和现在完全不同,全局阈值会误杀正常波动。
特征构造是拉开差距的地方
原始价格序列对预测模型来说信息密度太低。直接拿收盘价喂给模型,它只能学到趋势惯性。真正有用的特征是那些把市场逻辑翻译成数字的东西。
技术指标要选有经济含义的
移动平均线交叉、RSI、MACD这些老生常谈的指标不是不能用,关键是要理解它们背后的市场行为。均线交叉本质是不同周期持仓成本的相对变化,RSI反映短期买卖力量失衡,MACD捕捉趋势加速或衰减。每构造一个指标,先问自己一个问题:这个数字变大变小对应市场上发生了什么?
成交量相关的特征比价格特征更稳定。量比、换手率、成交额占流通市值比例,这些指标在不同股票之间可比性更强。期货市场还要加上持仓量变化,持仓量增加伴随价格上涨,说明多头主动增仓,比单纯看价格突破更有信息量。
波动率特征不能少
股票价格预测最大的敌人是波动率突变。历史波动率、已实现波动率、高低价差比率,这些特征能让模型感知市场情绪的温度。用过去20个交易日的日收益率标准差构造滚动波动率,再计算波动率的变化率,效果比直接使用原始价格好得多。
期货市场还要关注基差特征。现货价格与期货价格的差值变化,往往领先于期货价格自身的转向。基差走强说明现货紧张,期货价格下方支撑强。这个特征在股票指数期货上尤其明显。
平稳性处理绕不开
价格序列是非平稳的,直接建模容易得到伪回归。差分是最简单的平稳化手段,但一阶差分后丢失了价格水平信息。更好的做法是同时保留原始价格的水平特征和差分后的收益率特征,让模型自己学习权重。
对期货连续合约,还要做展期收益调整。主力合约切换带来的价差不是真实的市场收益,计算收益率时要扣除展期成本。很多量化回测收益虚高,就是没处理这个细节。
时间序列的切分方式决定评估真实性
股票和期货数据有时间顺序,随机打乱切分训练集和测试集会引入未来信息。正确做法是按时间滚动切分:用前N年训练,后M个月测试,然后窗口向前滑动。
滚动窗口验证
固定窗口容易过拟合某段特定行情。滚动窗口每次训练集和测试集都向前推进,能检验模型在不同市场环境下的稳定性。股票市场牛熊转换周期长,至少要用跨越一轮完整周期的数据做验证。期货市场波动更快,滚动窗口可以短一些,但必须包含至少一次主力合约换月。
特征标准化要用滚动统计量
用全样本的均值和标准差做标准化,测试集的信息会泄漏到训练过程。正确做法是用训练窗口内的统计量来标准化测试数据,滚动计算。期货数据波动率变化剧烈,固定标准化参数会让模型在行情突变时失效。
降维与特征选择要克制
特征不是越多越好。股票价格预测中,几十个技术指标堆进去,模型容易学到噪声。用相关性筛选去掉高度共线的特征,再用树模型的特征重要性做初步排序。
主成分分析可以用,但解释性会下降。期货跨品种预测时,用主成分提取共同因子有优势,单品种预测没必要。特征选择的标准是:这个特征在样本外是否稳定有效,而不是在训练集上重要性多高。
数据准备做到位,模型选择反而简单。线性模型在清洗好的特征上表现不差,复杂模型容易过拟合。股票价格预测的准确率提升,七分靠数据,三分靠模型。