使用随机森林进行预测建模

数据挖掘 scikit-学习 随机森林
2022-02-28 11:42:45

我在 skicit-learn 中创建了一个随机森林分类模型,但我不确定如何最终确定我的预测。

我已经建立了模型,它在测试数据上显示出良好的结果。我的平均准确率为 85%。预测股价是涨还是跌。我使用了来自雅虎财经的数据,包括开盘价、最高价、最低价、收盘价和成交量。从那里我制定了一些技术指标,例如 RSI、ROC、随机振荡器(快速和慢速)、macd、平衡量和 200 天移动平均线,并将这些用作随机森林分类器中的特征(自变量)。我创建了另一列,价格上涨时显示 1,价格下跌时显示 0。该列被用作因变量。(我想预测的事情)

我现在想知道的是如何将预测运行到未知的未来?目前,我已将数据分为训练和测试,在训练数据集上训练模型,然后在测试数据集上使用预测函数。该模型表现良好,经过更多调整后即可使用。

但是怎么做?我似乎无法在 sklearn 随机森林文档中找到有关如何实际运行未来预测的任何地方(而不是在测试数据上),例如从数据的最后一天开始的接下来的 10 天。我希望你明白我的意思。下面是我的代码。

这是我的代码:

X_train2, X_test2, y_train2, y_test2 =
train_test_split(data2.drop('prediction',axis=1),data2.prediction,test_size=0.02)

from sklearn.ensemble import RandomForestClassifier
model1 = RandomForestClassifier(random_state=13)
model1.fit(X_train2,y_train2)

predicted = model1.predict(X_test2)
model1.score(X_test2, y_test2)

from sklearn.metrics import roc_auc_score 
probabilities = model1.predict_proba(X_test)
probabilities

roc_auc_score(y_test2, probabilities[:,1])

from sklearn.metrics import confusion_matrix

confusion_matrix(y_test2, predicted)

在此处输入图像描述

3个回答

在您的情况下,X 不是未来数据。

X 是今天的数据,因为您试图预测明天值 1 或 0 的增加或减少。

所以 model1.predict(X) 与 X 是今天的数据,会给你预测 0 或 1。

这就是你的模型

简短的回答,你不能像将来描述的那样运行你当前的模型。不过,还是有希望的。

在构建预测模型时,您通常使用“自回归”模型,例如,根据过去的价格预测未来的价格。这样做的原因是您既要预测下一个值,又要为模型生成下一个输入。假设您有一个自回归模型 ,它根据今天的价格 ( )预测明天的股票价格 ( )。您可以通过对模型的递归调用将其运行到未来。 = = ...F(X)YYXY10F(Y9)F(F(Y8))=F(...F(X)

那么让我们来看看你的情况。您的模型将各种技术指标 作为输入 ,因此使用您当前的模型,为了预测未来 10 天,我们需要对未来 9 天的这些特征进行估计。RSI, ROC, stochastic oscillators (fast and slow), macd, on balance volume and the 200 day moving average

这里有几个解决方案。

您可以训练一个模型来预测未来 10 天。所以不是训练你训练F(Xi)Yi+1F(Xi)Yi+10

您可以构建一个模型来预测您未来的功能。,然后将这些新的估计特征与您当前的模型一起使用。如果是从价格中得出的,这会更容易。在这种情况下,我们可以估计价格,然后得出这些值。虽然,我不熟悉金融说你是否可以从价格中得出它们。F(Xi)Xi+1RSI, ROC, stochastic oscillators, ...

虽然,作为一个警告,你应该深入思考你的模型性能,以及它是否在愚弄你。您可以考虑以下几点:您是否将性能与任何简单的基线模型进行了比较?有没有“目标泄露”?如果你着眼于解释你的模型,它发现的模式是否有意义?

您已完成训练阶段。下一阶段通常称为预测/推理。那是已经训练好的模型预测数据标签的时候。

由于您使用的是 scikit-learn,因此您应该使用 call.predict方法。在您的代码中,它将是包含数据特征的类似 numpy 的数组在model1.predict(X)哪里。X结果将是 中每个条目的预测类别(0 或 1)X