我正在构建一个量化模型,该模型采用一系列特性并预测索引的性能。这个模型做得非常好,这显然让我怀疑自己是否犯了什么错误。
我已经查看了我正在使用的基本功能,以确保没有数据泄露。所以现在我的注意力转向了我的代码。下面是我用于预测的代码的主体。
循环中有什么问题吗?或者我的预测方式有问题吗?如果你需要更多信息,请告诉我,我会分享我能分享的。
X
->模型训练和预测中使用的特征y
->类别变量(1,0(n_record
->数据集中的记录数n_train
->在滚动窗口构造中用于训练的数据量model
->sklearn的集成模型
我的训练数据是c4500条记录。我使用n_train为800来训练模型的第一个实例,然后使用滚动窗口为800进行训练来预测第801个实例(依此类推(。因此,通过这种方式,我在时间上滚动,去掉了非常旧的数据(保持模型"最新"(。
col_names = ['Pred', 'Actual', 'Pred Prob'] #Column names for prediction output dataframe
def Strategy (n_train):
list_ans = []
n_records = len(X) #Number of records in X
for i in range(n_train, n_records):
# creating a rolling window to train model on backward data (n_train records) and predict tomorrows performance
X_train, X_test, y_train, y_test = X[i-n_train:i], X[i:i+1], y[i-n_train:i], y[i:i+1]
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
model.fit(X_train,y_train)
Pred=model.predict(X_test)
Actual = y_test.values
Prob = model.predict_proba(X_test)[:,1]
i_ans = [Pred.item(), Actual.item(), Prob.item()]
resi = pd.Series(data=i_ans, index=col_names)
list_ans.append(resi)
return pd.DataFrame(list_ans)
对于1。您期望n_record
或n_train
的值是多少?请记住,CCD_ 8充当该范围的CCD_ 9值。我不知道是否应该这样,但要小心,你可能会跳过训练数据。
除此之外,它对我的眼睛很好!