Python 测试数据与测试数据之间的随机森林精度差异;新数据

Python 测试数据与测试数据之间的随机森林精度差异;新数据,python,scikit-learn,random-forest,Python,Scikit Learn,Random Forest,我的随机森林模型的性能在测试数据和新数据之间存在巨大差异 我的模型的目标是基于同一股票的时间序列数据预测未来时期的股票收益。我使用Python中的scikit learn应用随机森林分类器来预测收益十分位数,而不是实际的价格变化。我使用了截至2017年6月的数据,在80%的数据上对模型进行了培训,并在20%的数据上进行了测试。结果很好。错误分类大于或小于十分之一的概率为3%。这意味着,若模型预测收益率下降到十分位5,实际收益率将下降到低于十分位4或高于十分位6的情况仅占3%。我对此感到非常高兴

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

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

然而,从2017年7月1日至今,当我在“新数据”上应用该模型时,我得到了可怕的结果。误分类概率>+/-1十分位跳到60%

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


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

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

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

  • 很难说不知道你在看什么股票,但“新数据的性质不可能有那么大的不同”这句话对股票来说通常是错误的,因为随着时间的推移,市场变化如此动态,很难从过去就单个股票的水平推断出关于未来的很多信息“过去的表现不是未来的指南”被贴在大多数金融产品说明书上是有原因的。我听你说,但没有进入有效市场假设的讨论,该模型确实在测试20%的历史数据时显示了巨大的希望。测试数据和新数据之间的差异不应导致en epic失败???这里还缺少其他东西……在不知道你在看什么股票的情况下很难说(如果你分享一些股票会有所帮助),但有很多股票价格分布,训练数据集将表现良好,未来的预测非常糟糕:1920年前的马车公司,1930年前的湖冰出口商,打孔卡电脑制造商在20世纪60年代之前,等等。我排除了过度装修的可能性,因为我有200棵树,并将树缩短到20和40个样本,正如我在最初的帖子中所说的那样。我错过什么了吗?还有什么可能导致过度装配?Re#2我的特征主要是基于价格和交易量行为(即技术分析)的定量指标。如果他们在20年历史数据的培训和测试基础上表现良好,很难相信他们在过去12个月里会如此惨败?#1我会尝试使用
    minu samples\u leaf
    >50,至少这通常是我的模型的出发点:“较小的叶子使模型更容易捕获列车数据中的噪声。一般来说,我更喜欢最小叶片尺寸大于50。“与测试精度相比,您的训练精度如何?#2如果不了解问题,很难判断:(