【问题标题】:Forecasting future occurrences with Random Forest使用随机森林预测未来事件
【发布时间】:2019-12-12 01:48:07
【问题描述】:

我目前正在探索使用随机森林来预测事件的未来值(我的 ARIMA 模型给了我非常糟糕的预测,所以我正在尝试评估其他选项)。我完全清楚,糟糕的结果可能是由于我没有很多数据并且质量不是最好的。我的初始数据仅包含每个日期的出现次数。然后我添加了代表日、月、年、星期几的单独列(后来被单热编码),然后我还添加了两列具有滞后值的列(其中一个是前一天观察到的值,另一个是与两天前观察到的值)。最终数据是这样的:

Count   Year    Month   Day Count-1 Count-2 Friday  Monday  Saturday Sunday Thursday Tuesday Wednesday
196.0   2017.0  7.0    10.0 196.0   196.0     0       1        0       0       0     0        0
264.0   2017.0  7.0    11.0 196.0   196.0     0       0        0       0       0     1        0
274.0   2017.0  7.0    12.0 264.0   196.0     0       0        0       0       0     0        1
286.0   2017.0  7.0    13.0 274.0   264.0     0       0        0       0       1     0        0
502.0   2017.0  7.0    14.0 286.0   274.0     1       0        0       0       0     0        0
... ... ... ... ... ... ... ... ... ... ... ... ... 

然后我训练了一个随机森林,将计数作为标签(我试图预测的内容),其余的都是特征。我还进行了 70/30 的训练/测试拆分。在训练数据上对其进行训练,然后使用测试集对模型进行评估(代码如下):

rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
rf.fit(train_features, train_labels)

predictions = rf.predict(test_features)

我得到的结果很不错:MAE=1.71,准确率89.84%。

第一个问题:我是否有可能疯狂地过度拟合数据?我只是想确保我没有犯一些大错误,从而给我带来了比我应该得到的更好的结果。

第二个问题:经过训练的模型,我如何使用 RF 来预测未来值?我的目标是每周预测出现次数,但我有点不知道该怎么做。

如果在这方面比我更好、更有经验的人可以提供帮助,我将不胜感激!谢谢

【问题讨论】:

    标签: python time-series random-forest forecasting


    【解决方案1】:

    针对您的第一个问题,随机森林可能会过度拟合,但在比较测试集的 MAE、MSE、RMSE 时应该检查这一点。你说的准确度是什么意思?你的R方?然而,使用模型的方法通常是首先让它们过拟合,因此你有一个不错的准确率/mse/rmse,然后通过设置高min_child_weight 或低max_depth 来执行正则化技术来处理这种过拟合,高n_estimators也不错。

    其次,要使用您的模型来预测未来值,您需要使用与您训练过的完全相同的模型,以及您想要进行预测的数据集。当然,训练中给出的特征必须与进行预测时给出的输入相匹配。此外,请记住,随着时间的推移,通过将这些新信息添加到您的 train 数据集中,这些新信息对于改进您的模型非常有价值。

    forecasting = rf.predict(dataset_to_be_forecasted)
    

    【讨论】:

    • 非常感谢您的回答。不过我有一个问题:要预测数据,我到底要传递给模型什么?我知道在 ARIMA(和其他变体)中,您可以简单地定义您想要预测未来的时间步长,它会为您提供结果。我到底在为模型提供什么?因为如果我想预测下周的事件,例如,我不会有所有日子的滞后变量。我希望问题很清楚
    • 是的,我明白,这可能会导致一篇完整的帖子,长达几页。该模型比 ARIMA imo 简单得多。有很多问题,首先,正如您所描述的,在随机森林中没有直接的选择来滞后或转发模型。您正在输入所有这些数字数据(列),以便将树分成 n 维,从而获得最佳信息或准确性。我已经回答以帮助您解决您的问题。但是,我不建议使用随机福雷斯特进行时间序列分析。你如何检查 LSTM 网络?干杯!
    • 目前,我不使用 1 天和 2 天的滞后变量,而是尝试使用 1 周和 2 周。这样我就可以向模型提供新数据,在那里我可以预测所需的日期以及一周和两周前的值(这听起来合理吗)? LSTM 在这里可能是一个不好的选择,因为我没有很多数据......事实上,我只有一年的数据,从 1 月到 12 月,然后是 2017 年和 2019 年的几个月。但感谢您的意见!
    猜你喜欢
    • 2014-08-07
    • 2021-03-21
    • 2019-05-04
    • 2023-01-02
    • 2019-07-10
    • 2021-06-23
    • 2019-02-19
    • 2016-04-09
    相关资源
    最近更新 更多