深度神经网络 (第 IV 部)。创建, 训练和测试神经网络模型·进阶篇
🧠

深度神经网络 (第 IV 部)。创建, 训练和测试神经网络模型·进阶篇

(2/3)· 从神经元初始化到带/不带预训练的结果对比,手把手拆开 DNN 建模全流程

进阶 第 2/3 篇
不少交易者直接拿默认参数训 DNN,却忽略隐藏层权重初始化方式对收敛速度的决定性影响。预训练并非可选项,在样本少时它往往才是模型能用的前提。本篇接上篇,继续深挖 R 里 deepnet 等包怎么真正把网络跑起来。

◍ 预训练两阶段与无预训练误差实测

深度网络训练拆成两段更稳:先用 SRBM 在预训练集上做无监督预训练,再只练上层并拿 par_0 验证;随后用 par_1 在训练/验证集上微调全网络。两阶段参数分开设,par_0 管通用+RBM+上层,par_1 管所有层,缺省值可被列表覆盖。 第一阶段跑完会吐出一个带权重和误差记录的 DArch 结构,把它塞进第二阶段参数清单才能继续。测试集上最终分类错误:带预训练在 woe 集 0.6687(区间 0.6255–0.7098)、raw 集 0.6826(0.6399–0.7232);无预训练对应 0.7006、0.6786。 无预训练时验证/测试误差明显大于训练误差,图表里能看出重复训练迹象。带预训练两集错误都落在 30%±4 范围内,虽不比基础模型强太多,但泛化更干净,后续实验倾向沿用预训练。 下面这段 R 式脚本是数据准备和 WOE 分箱的起点,直接在 MT5 外接 R 环境里 evalq 就能复现分箱表:

MQL5 / C++
evalq({
  dt <- PrepareData(Data, Open, High, Low, Close, Volume)
  DT <- SplitData(dt, class="num">2000, class="num">1000, class="num">500, class="num">500)
  pre.outl <- PreOutlier(DT$pretrain)
  DTcap <- CappingData(DT, impute = T, fill = T, dither = F,
                       pre.outl = pre.outl)
  preproc <- PreNorm(DTcap, meth = meth)
  DTcap.n <- NormData(DTcap, preproc = preproc)
  preCut <- PreDiscret(DTcap.n)
}, env)
evalq(tabulate.binning <- woe.binning.table(preCut), env)
> env$tabulate.binning
$`WOE Table for v.fatl`
                    Final.Bin Total.Count Total.Distr. class="num">0.Count class="num">1.Count class="num">0.Distr. class="num">1.Distr. class="num">1.Rate   WOE     IV
class="num">1   <= -class="num">0.3904381926          class="num">154         class="num">7.7%     class="num">130      class="num">24    class="num">13.2%     class="num">2.4%  class="num">15.6% class="num">171.3 class="num">0.185
class="num">2 <= -class="num">0.03713814085          class="num">769        class="num">38.5%     class="num">498     class="num">271    class="num">50.4%    class="num">26.8%  class="num">35.2%  class="num">63.2 class="num">0.149
class="num">3   <= class="num">0.1130198981          class="num">308        class="num">15.4%     class="num">141     class="num">167    class="num">14.3%    class="num">16.5%  class="num">54.2% -class="num">14.5 class="num">0.003
class="num">4                     <= Inf          class="num">769        class="num">38.5%     class="num">219     class="num">550    class="num">22.2%    class="num">54.3%  class="num">71.5% -class="num">89.7 class="num">0.289
class="num">6                     Total         class="num">2000       class="num">100.0%     class="num">988    class="num">1012  class="num">100.0%   class="num">100.0%  class="num">50.6%    NA class="num">0.626
$`WOE Table for ftlm`
                    Final.Bin Total.Count Total.Distr. class="num">0.Count class="num">1.Count class="num">0.Distr. class="num">1.Distr. class="num">1.Rate   WOE     IV

RBCI 与另类指标的 WOE 分箱对比

把 rbci 和前一小节的指标做 WOE 分箱,能直接看出哪段值域对「1 类」样本更有区分度。rbci 第一箱(<=-0.1718)共 616 条,占 30.8%,其中 0 类 421 条、1 类 195 条,1 类命中率 31.7%,WOE 79.4,是该指标正向区分最强的一段。 反观前指标第四箱(>0.1789 到 Inf)样本 616 条、占比 30.8%,但 1 类率冲到 71.3%,WOE 为 -88.4,说明高值区几乎被 1 类占据,和 rbci 高值箱(WOE -86.1、1 类率 70.8%)走向一致。 两个表的 IV 合计分别约 0.463 与 0.335,rbci 的信息量略低但单调性更干净:从第一箱到第四箱 1 类率 31.7%→43.8%→57.6%→70.8% 逐箱抬升。外汇与贵金属行情受杠杆与跳空影响大,这类统计区分度只代表历史样本倾向,实盘须以小仓位验证。 开 MT5 把这两张表导进 Excel,用分箱边界写 iCustom 阈值过滤,比直接喂原始值进模型更抗过拟合。

「RBCI 与 SATL 的 WOE 分箱对比」

用 WOE(证据权重)给两个指标做分箱,能直接看出哪一段区间对「1 类样本」更有区分力。下面两张表都来自 2000 条样本的总集,其中 0 类 988 条、1 类 1012 条,整体 1 类占比 50.6%。 v.rbci 被切成 4 个箱:当值 ≤ -0.1837 时 1 类率仅 34.1%,WOE 高达 68.3;而最右箱(≤ Inf)1 类率跳到 70.8%,WOE 为 -86.1。该变量总 IV 0.331,右尾区间贡献了 0.161,是主要区分来源。 v.satl 分两箱:≤ -0.0184 时 1 类率 36.6%、WOE 57.3;右侧箱 1 类率 58.9%、WOE -33.6。总 IV 0.191,左尾负区间的 IV 0.148 占大头。 开 MT5 把这两个变量的分箱边界照抄进 EA 的预处理函数,用 WOE 值替换原始值再喂给模型,外汇与贵金属行情下杠杆风险高,替换后信号概率分布可能偏移,务必用近期数据重算 IV。

◍ WOE 分箱里藏着变量区分度

上面三张表是同一批 2000 条样本(标签 0 有 988 条、标签 1 有 1012 条,整体 1 类占比 50.6%)在不同特征上的 WOE 分箱输出。直接看 IV 列就能判断哪个变量更值得进模型:v.stlm 的 IV 累计 0.244,明显高于前一张未命名表的 0.330 总 IV 中单变量贡献分散的情况,说明它在区分两类样本上更有信息量。 以 v.stlm 为例,分箱 1(值 <= -0.403)里 1 类比率仅 23.4%,WOE 高达 121.1,而分箱 4(值 > 0.114 且 <= Inf)1 类比率 62.7%、WOE 为 -49.4。正负 WOE 拉开差距,正是 IV 能攒到 0.244 的原因。 做特征筛选时,把这类表导进 MT5 外的分析脚本跑一遍,挑 IV 过 0.1 的变量留着。外汇与贵金属市场高杠杆、高风险,历史分箱结论只代表样本内倾向,实盘替换数据后区分度可能衰减,需重新验证。

WOE 分箱里藏着的两个反向信号

把 v.ftlm 和 v.rftl 两个变量的 WOE 分箱表拉出来看,能直接读出哪些区间对「1 类」样本更友好。外汇与贵金属行情里这类变量属于高噪声输入,分箱结论只代表样本内倾向,实盘须防过拟合。 v.ftlm 的第一箱(值 ≤ -0.03698)覆盖 923 个样本、占 46.2%,其中 1 类占比 36.4%、1 类命中率 39.9%,WOE 为 43.5、IV 0.086;第三箱(>0.24375 到 Inf)仅 462 个样本却给出 66.7% 的 1 类命中率,WOE -66.9、IV 0.099。越往正无穷走,1 类概率越倾向走高。 v.rftl 对应的总样本也是 2000,整体 1 类率 50.6%;它第一箱 WOE 43.5 而第三箱 WOE -66.9,和 v.ftlm 的方向几乎镜像。两个变量 IV 分别 0.228 与 0.194,在二分类筛选里都算有区分度,但都没到强预测级别。 开 MT5 把这两列特征按上述切点手动分箱,核对一下自己样本窗里第三箱的 1 类率是否也贴着 66% 附近——贴不住就说明行情结构已经漂移。

「分箱残差里的 WOE 与 IV 信号」

上面两张表是把某特征(表头 stlm)做最优分箱后,直接吐出来的 WOE/IV 明细。第一张表总样本 2000,正负类几乎对半(988 对 1012),整体 IV 累加 0.140,属于弱到中等预测力。 看 bin1:特征值 ≤ -0.1578 时,1 类占比 39.6%,WOE 正值 44.6,说明该区间偏多头样本;而 bin4(>0.329)1 类率冲到 66.6%,但 WOE 是 -66.4,负向分离最强,IV 单箱 0.065 是全表最高。 第二张 stlm 表切得更细,bin4 在 0.263~0.359 区间样本骤减到 154 条,1 类率 37.0% 反而低于基线,WOE 正 55.6——这种窄箱高 WOE 往往是过拟合苗头,实盘拿去当过滤条件前要先用 MT5 自带样本外数据重算。 外汇与贵金属波动大、杠杆高,这类分箱指标只作概率参考,任何单箱信号都不能当成开仓依据,上真仓前务必走一遍样本外验证。

把重复训练交给小布
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到模型训练与回测的轻量监控,把重复劳动交给小布,你专注决策。

常见问题

deepnet 可创建并训练预训练的 SAE(堆叠自编码器)和 SRBM(堆叠受限玻耳兹曼机),参数较少,适合快速验证 DNN 思路。
预训练将 MLP 置于接近最优解的空间,所需标记样本数与训练世代数通常更少,收敛更稳,但需额外无监督训练阶段。
层数增加后随机初始化易使梯度消失或爆炸,G.Hinton 的 RBM/AE 预训练思路正是为解决该敏感问题提出。
小布内置的 AIGC 看板可呈现品种页上的轻量模型监控,帮助交易者快速识别训练异常,但外汇贵金属属高风险,模型信号仅作概率参考。
一般用同品种历史 tick 或 K 线派生特征即可,无需人工标注,量越大越能突显数据中的隐藏结构。