使用财务数据拆分训练和测试集

数据挖掘 r 训练 预言 金融
2022-02-27 09:18:13

我正在使用树算法(决策树、随机森林和 XGBoost)来预测股票市场回报的符号(分类)。

我使用这篇文章作为参考:

http://rpubs.com/raaraa/412512

在拆分训练集和测试集时,作者使用如下R代码:

index <- sample(1:nrow(stock_indicators)) 
size=0.2*nrow(stock_indicators)
test <- stock_indicators[index, ]
train <- stock_indicators[-index, ]

使用一组随机日期将测试集和训练集与时间序列财务数据分开是否正确?

对我来说,这看起来像是前瞻偏见。

这将是替代方案:

train <-head(stock_indicators,round(0.70 * nrow(stock_indicators)))
test <- tail(stock_indicators,round(0.30 * nrow(stock_indicators)))

但是通过这种拆分,即使尝试使用不同的数据集,我也无法获得显着的准确性。

你有什么建议吗?

2个回答

我认为您所做的是正确的,实际上在您的测试和训练集之间引入差距会更正确,即

train <-head(stock_indicators,round(0.65*nrow(stock_indicators))) 
test <- tail(stock_indicators,round(0.25*nrow(stock_indicators)))

原因是时间序列数据(通常)表现出很强的序列自相关性,所以如果你把一天的价格放在你的训练集中,然后把第二天的价格放在你的测试集中,它们离独立还有很长的路要走。测试误差有偏差。

你没有得到很好的拟合的原因是数据可能不是固定的,即推动股票价格的因素会随着时间的推移而变化,而且很难预测——如果不是每个人都能做到完美的话。

进行拆分的另一种方法是将数据拆分为块(例如几周),然后将 80% 的块用于训练集,20% 用于测试集。如果您的数据是季节性的(即电力需求),这很有用,在这种情况下,使用最后 20% 并不能真正代表您想要预测的全部未来。我认为股票价格并不过分季节性。

对于日期时间数据,最好根据您获得的最新结果测试数据

学习假设发生在以前的时期,然后针对最近的时期进行测试。

对于其他数据集,随机选择测试数据可能没问题。但建议将时间数据集用于最近时期