【问题标题】:Random Forest Accuracy Difference between Test Data & New Data测试数据与新数据之间的随机森林准确度差异
【发布时间】:2019-03-23 09:58:54
【问题描述】:

我的随机森林模型性能在测试数据和新数据之间存在巨大差异。

我的模型的目标是根据同一股票的时间序列数据预测未来期间的股票收益。我在 Python 中使用 scikit-learn 应用随机森林分类器来预测回报十分位数,而不是实际的价格变化。我使用了截至 2017 年 6 月的数据,并在 80% 的数据上训练了模型,并在 20% 上进行了测试。结果很好。大于或小于 1 个十分位数的错误分类概率为 3%。这意味着,如果模型预测回报率将下降到十分位 5,则实际回报率将低于十分位 4 或高于十分位 6 的情况下只有 3%。我对此非常满意。

但是,当我将模型应用于“新数据”时,从 2017 年 7 月 1 日至今,我得到了可怕的结果。错误分类的概率 >+/-1 十分位跃升至 60%!!!

我认为问题是由于树的深度而过度拟合。但事实并非如此。我将 min_samples_leaf 设置为 20 甚至 40,实际上它使对新数据的预测变得更糟。

还能是什么?如果模型在历史测试数据上表现如此出色,为什么它在新数据上表现如此不同。新数据的性质不可能如此不同。

【问题讨论】:

  • 很难说不确切知道你在看什么股票,但断言:“新数据的性质不可能有那么不同”通常是错误的股票,市场随着时间的推移而动态变化在个股水平上,很难从过去推断出很多关于未来的信息。出于某种原因,大多数金融产品的招股说明书都贴满了“过去的表现并不能成为未来的指南”。
  • 我听到了,但在没有进入有效市场假设讨论的情况下,该模型确实在测试 20% 的训练中保留的历史数据时显示出巨大的希望。测试数据和新数据之间的差异不应该是导致史诗失败的重要原因???这里还缺少其他东西......
  • 在不知道你在看什么股票的情况下很难说(如果你分享一些会有所帮助),但是有很多股票价格分布,其中训练数据集表现良好,未来预测完全可怕:1920 年前的马车公司、1930 年前的湖冰出口商、1960 年代前的打卡电脑制造商等等。

标签: python scikit-learn random-forest


【解决方案1】:

这是一个广泛的问题,可能有很多原因导致新数据的性能变差,但我会尽力帮助您:

  1. 过拟合 - 分别检查训练数据和测试数据的 RF 分数 -> 如果差异很大,并且您在训练集上的错误非常小,而在测试数据上的错误很大 - 那么您的模型可能存在过拟合问题。
  2. 尝试将一些新数据添加到模型中(即接下来的 6 个月,让其他 6 个月进行验证)。如果模型表现得更好,那么价格可能存在潜在的基本因素,即导致价格在 2017 年 7 月之后改变其行为的因素。
  3. 特征和特征工程 - 这与前一点有关,但您可能遗漏了一些东西,而历史数据中并未真正考虑到这一点。例如,一段时间以来,欧洲的能源价格上涨,其原因之一似乎是碳价格上涨。这是之前没有考虑到并在 2018 年“出现”的东西,我相信直到最近它才成为分析师的模型特征。您也可能是这种情况 -> 可能发生了大事,或者必须添加一项功能,以便在 2018 年使用。

【讨论】:

  • Re#1 我排除了基于有 200 棵树并将树缩短为 20 和 40 个样本的过度拟合,如我原来的帖子中所述。我错过了什么吗?还有什么可能导致过度拟合?关于 #2 我的特征主要是基于价格和数量行为的定量指标(即技术分析)。如果根据 20 年历史数据的训练和测试,它们运行良好,很难相信它们在过去 12 个月内失败得如此惨?
  • #1 我会尝试使用min_samples_leaf > 50,至少这通常是我的模型的起点:“较小的叶子使模型更容易在训练数据中捕获噪声。通常我更喜欢最小叶尺寸大于 50。”与测试准确度相比,您的训练准确度如何? #2 在不更好地了解问题的情况下很难判断 :(
猜你喜欢
  • 2017-10-13
  • 2016-04-20
  • 2021-01-01
  • 2020-10-20
  • 2022-01-03
  • 2018-03-10
  • 2021-07-12
  • 2015-06-24
  • 2016-11-05
相关资源
最近更新 更多