用随机森林预测趋势·进阶篇
(2/3)· 从源数据智能分析到随机森林效率验证,手把手打通 MT5 外接统计建模链路
很多交易者把指标堆在图表上找形态,却没意识到预测目标和实际下单动作常常不是同一件事。用统计模型做趋势预判时,若目标变量定义错,后面再复杂的算法也只是精准地跑偏。本篇接着把 R 与 Rattle 的建模链路往下拆。
◍ 把多品种数据喂进分析前的清洗与尺度处理
用 Rattle 做外汇多品种挖掘时,Data 页负责载入源文件。Spreadsheets 按钮能直接读 Excel,想验证自己的策略想法可自建表格丢进去;R Dataset 按钮则加载 .RData 格式的已备文件,上传后需在 Log 页开发模型,每次操作都必须按 Run 才会真正执行。 变量相关性要先看目标列。以 ZZ.35 为目标时,表内 RSICAD.14 与它的相关系数仅 -0.0104,JPY.dif2 为 -0.0088,绝大多数变量相关绝对值都低于 0.01。统计上小于 0.1 的相关性基本无法认定自变量对目标有实质影响,这类弱相关项在分类模型里更像是噪声。 噪声处理没有通用阈值。业内常拍脑袋用 5%,其实不准:删掉真噪声能降预测误差,删错有用因子反而抬升误差,所以预测因子清单得靠实验反复筛。Partition 按钮在此阶段把数据按种子拆成 70% 训练、15% 验证、15% 测试,换随机种子就能生成无数子集。 SVM 这类模型对量纲极敏感。EURUSD 报价波动常在 0.5 以内,USDJPY 却以数十点跳动,不处理会扭曲边界。到 Transform/Rescale/Scale [0-1] 勾选全部变量并 Run,可把波动统一压进 0–1 区间。 最后把连续值转分类:RSI 接近 0 或 100 视为反转征兆,用 Transform/Recode/KMeans 设 8 级、勾选所有 RSI 再 Run。将 ZZ.35 设 Ignore 后,便可进模型训练阶段。外汇与贵金属数据的高波动特性会放大上述清洗误差,实操前建议在 MT5 导出同源数据交叉核对。
分类模型的训练与验证闭环
在 Rattle 环境里能直接跑的分类器不止一种:单棵决策树、随机森林、AdaBoost 树、SVM、广义线性模型以及神经网络。它们底层机制差异很大,但面对同一件任务——把 88 个预测因子组合出的样本,从标注为 "long" 和 "short" 的两堆里干净地切开。 一次实测用的训练序列有 18030 行字符串记录,带 88 个预测因子和明确的目标变量(多 / 空)。训练阶段就是让算法学会这条分割边界;之后必须把源数据拆出的验证集喂进去,用已知标签比对预测标签,实际头寸与预测值不一致的比例就是预测误差。 误差不满意就得回智能数据分析阶段重做特征或换样本,这一步质量基本由交易者经验决定,没有自动最优解。训练和验证都过了,才上完全没碰过的测试集。 好模型的两个硬指标:预测误差小,且训练 / 验证 / 测试三者的误差离散度也小——后者代表鲁棒,也就是交易者说的不过拟合、不用反复重训。外汇与贵金属市场高波动,这类统计模型在外推时失效概率不低,MT5 接 R 或 Python 桥之前先拿历史分三段跑一遍再信。 本文后面只拆随机森林这一种实现。
「随机森林怎么靠多棵树扛住行情噪声」
单一决策树做交易信号太脆:价格一抖、RSI 异常一下,叶子节点就可能从“卖”翻成“买”。随机森林不赌一棵树,而是并行长 100~500 棵分类树,每棵都基于随机抽取的观测行和预测因子子集,整体按多数投票出信号——51 棵看多就开多,哪怕剩下 49 棵反对。 随机性体现在两层:建树时从训练集Bootstrap抽样(约 2/3 观测进包、1/3 留作袋外),且每个分裂节点只看全部变量中的一小撮(本例每节点用 9 个)。这样既能抗异常值、免重训,又比单树省算力。 实盘参考价值在误差可量化。某次 EUR 相关模型长满 500 棵树、节点用 9 因子,袋外(OOB)误差 15.97%:做空样本 6123 笔中错判 1163 笔(class.error 0.190),做多样本 6535 笔中错判 858 笔(0.131)。那 40% 没参与建树的袋外数据,就是现成的免回测验证集。 变量重要性表直接告诉你该删谁。像 MA_eur.5.dif1 的 MeanDecreaseAccuracy 有 54.86、MeanDecreaseGini 321.86,而 CHF.dif3 仅 73.36——后者若统计不显著,剔掉它模型准确率几乎不动,树反而更轻。外汇和贵金属波动大、滑点凶,这种降维必须自己跑一遍 MT5+Rattle 核对,别盲信默认因子集。
◍ 用误差矩阵给模型挑刺
在 Rattle 的 Evaluate 标签页里,评估模型效率最实在的工具是误差矩阵(旧称似然表)。从 Model 切到 Evaluate 时,刚建好的模型会被自动选中,接下来要选拿哪份数据去验——Training / Validation / Test / Full 四个源对应 Data 分割出的训练、检验、测试与全量集。 拿训练集验模型基本是自欺:模型本就是从训练集长出来的,跑出来的分数好看但说明不了泛化能力。正路是先拿 Validation 集调参比优劣,再把定型的“最佳”模型丢到从头到尾没参与建模的 Test 集上算真实误差。Full 集把三类数据混一起,只适合满足好奇心,给不出准数。 随机森林例子的数字很说明问题:训练阶段预测误差 15.97%,图 9 平均误差 0.167(16.7%),而在测试集上绝对计数矩阵为 0 类 1016/256、1 类 193/1248,百分比矩阵总误差 0.1654994、平均分类误差 0.1649244,预测误差 16.4%。三数接近,模型算站得住。 但 Rattle 里跑通的模型只是半成品。必须进 MT4/MT5 策略测试器核验效率,再走模拟账户,最后用小仓位实盘试。外汇与贵金属波动剧烈、杠杆风险高,任一环节没过都别急着放大交易量,模型在新数据上的表现才可能接近那 16% 上下的误差预期。