接受者操作特征(ROC)曲线入门·进阶篇
(2/3)· 从二元分类到AUC,多数交易者只看了曲线却算不清假正例的代价
ROC曲线表在Crash 1000指数M5上的实测输出
上面这组日志来自 MT5 专家顾问在 Crash 1000 Index 的 M5 周期上跑 ROC 曲线表demo,同一时间戳 17:13:16.458 下连续打印了 9 个标的(RH/IK/CK/NK/EJ/DJ/HJ/NM/GM)的逐行指标。每一行末尾的 0.97211 到 0.96155 是随序号递减的 AUC 类参考值,说明在样本切分变动时模型区分度有轻微下滑倾向。 观察首列阈值类字段:第4、5列恒为 1.000 1.000,第6列恒为 0.000,意味着在当前切分下真阳性率与假阳性率边界被推到极值。第7~9列(如 0.385 / 0.733 / 0.615)则随行号平滑摆动,RH 行是 0.385 0.733 0.615,到 GM 行变成 0.231 0.840 0.769,反映出阈值偏移带来的召回与精度置换。 外汇与合成指数这类品种杠杆高、跳空频繁,Crash 1000 Index 尤甚,直接用 ROC 表判信号容易在极端行情被洗。建议把这套打印逻辑复用到自己品种上,先确认第4~6列是否也出现全 1 / 全 0 的退化,再谈调参。
「ROC曲线表里藏着分类阈值漂移」
在 Crash 1000 Index 的 M5 周期上跑 ROC_curves_table_demo,日志会按不同阈值标记(CL、LL、NL…OQ)逐行吐出一组概率与曲线值。同一时间戳 17:13:16.458 下,随着标记从 CL 推进到 OQ,首列数值从 0.577 单调爬到 0.885,而第三列(反向比例)从 0.423 降到 0.115,说明分类切点在持续往正类偏移。 末列曲线下面积从 CL 的 0.95943 缓降到 OQ 的 0.94420,跌幅约 1.5 个千分点;中间第 8、9 列(如 0.853 / 0.788 到 0.960 / 0.942)同步抬升,反映特异度与召回随阈值移动的此消彼长。外汇与指数差价合约波动剧烈,这类合成标的回测曲线只作方法验证,实盘高杠杆风险极高,结论仅具概率意义。 打开 MT5 终端的 Experts 日志,搜 ROC_curves_table_demo 即可复现上述 9 行输出;若想看阈值漂移更细的粒度,把脚本里的步长参数调小,行数会成倍增加,便于肉眼捕捉 AUC 拐点。
◍ ROC 曲线表里的阈值梯度怎么读
上面这组日志来自 Crash 1000 Index 的 M5 图表,是 ROC_curves_table_demo 在一次回测里打印出的阈值梯度。每一行代表一个分类阈值下的判别表现,从左到右依次是灵敏度、特异度缺失、假阳率、真阳率等派生指标,最后一列是该阈值对应的收益系数。 注意 NQ 行(阈值 0.923)收益系数 0.93619,而 OP 行(阈值 1.000、假阳率 0.020)收益系数骤降到 0.12257。这说明在该品种 M5 结构上,把阈值卡到极致反而吃掉大部分样本外收益,过拟合倾向明显。 RS 到 KR 这几行,假阳率从 0.061 爬到 0.122,真阳率同步从 0.939 掉到 0.878,收益系数却从 0.05349 降到 0.02523。做外汇或贵金属时这类合成指数波动更猛,高风险,直接照搬阈值容易在实盘被滑点洗掉。 开 MT5 把脚本挂到自己的品种上跑一遍,重点看最后一列收益系数随阈值单调还是突变——突变点往往就是该品种价格行为学上的有效分界。
ROC 曲线表里的阈值扫描现象
上面这组日志来自 Crash 1000 Index 的 M5 周期,脚本在 17:13:16.458 一次性吐出了 10 行不同阈值下的 ROC 评估数据。每一行前缀(JR/HE/QE/DE/PD/MG/JG/EG)代表一种判定边界,后面跟着的 10 个浮点数是该边界对应的曲线指标。 注意第 2 列始终为 1.000、第 4 列始终为 0.000,说明在扫描区间内正类覆盖与负类漏报的极端基准没动;但第 3 列从 0.143 爬到 0.306,第 5 列从 0.788 降到 0.634,意味着随阈值放宽,召回倾向上升、精度倾向下滑。 末列的面积类数值从 0.02147 收缩到 0.00683,提示更宽松的边界在样本分离度上反而更薄。外汇与合成指数这类高波动品种用这套表做阈值筛选时,需明确其跳空与流动性断裂带来的高风险,数据仅反映历史切片。 开 MT5 把这段日志对应的演示脚本挂到 Crash 1000 Index 的 M5 上复跑,重点看自己经纪商数据下第 3 列与末列的偏离是否也呈现单调收敛。
「ROC曲线表里阈值漂移的真实读数」
上面这组输出来自 Crash 1000 Index 的 M5 周期,指标在 17:13:16.458 同一毫秒打印了 10 行阈值扫描结果。每行前缀是阈值代号(LF、CF、KF…KK),后面跟着一串 0~1 之间的概率与面积值。 看 LF 到 KK 这 10 行:第二列从 0.327 单调爬到 0.490,第四列从 0.673 降到 0.510,第九列(AUC 类指标)从 0.837 缓降到 0.755。也就是说,阈值越往中性靠,模型区分度倾向走弱,但末列成本值从 0.00635 砍到 0.00238,降幅约 62%。 外汇与贵金属指数这类高波动品种,用 M5 跑 ROC 扫描很容易因跳空造成曲线假平滑。建议直接开 MT5 把这段日志对应的 ROC_curves_table_demo 挂在 Crash 1000 Index 的 M5 上复算一遍,重点核对 KK 行 0.755 的 AUC 是否与你本地一致。
◍ Crash 1000 指数 M5 上的 ROC 分层读数
上面这组输出来自 ROC_curves_table_demo 在 Crash 1000 Index 的 M5 周期上跑出的九行样本,时间戳统一停在 17:13:16.458,说明是同一次计算里按阈值分层打印的。 首列 HK 到 DL 是分层标签,第二列恒为 0,后面紧跟的 1.000 是曲线基准值(AUC 满分的参照线)。第三、四列如 0.510 / 0.000 表示该类分层的正例占比与负例零界,第五、六列 0.490 / 0.510 则是对应的反向权重,越往 DL 走,正向权重从 0.490 爬到 0.559。 值得盯的是倒数第二列的真阳性率:HK 为 0.667,DL 升至 0.560,呈单调下滑;末列阈值从 HK 的 0.00225 收缩到 DL 的 0.00119,几乎腰斩。这类合成指数波动极猛,外汇与贵金属虽不在该标的里,但同周期 ROC 分层思路可直接搬去验证 XAUUSD 的 M5 假突破概率。 把这段代码塞进 MT5 的脚本区,改一行标的名就能看到你常用品种的分层表,比肉眼翻 K 线更快定位临界阈值。