预测和比较不同月份的数据

问题描述

我正在对结束于 2021 年 1 月的数据框进行线性回归。目标变量是月平均值,因此它将预测 2 月。

我在不同的数据集中有 1 月底和 2 月底结束的信息。我想用 1 月的数据训练模型,然后将预测结果与 2 月底结束的数据帧的数据进行比较。

对于我来说,我是否需要将目标列(从二月数据框)合并到一月数据框并像这样运行模型:

january.drop('january_avg_colum',axis=1,inplace=True)
df = pd.merge(january,february[['ID','february_avg_colum']],how="inner",on=["ID","ID"])

X = df.drop('february_avg_colum',axis=1)
y = df['february_avg_colum']

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)

model = LinearRegression().fit(X_train,y_train)

y_preds = model.predict((X_test))

print('RMSE:',metrics.mean_squared_error(y_test,y_preds,squared=False))

我是否需要在合并前降低 1 月份的平均值? 这是解决这个问题的正确方法吗?有没有更简单或更有效的方法? 非常感谢任何帮助!

解决方法

如果您已经知道要在 1 月训练数据并在 2 月测试,那么不需要拆分,您已经准备好训练和测试数据集。

如果您必须微调模型的参数或测试其他模型,您可能希望将训练数据拆分为虚拟训练和测试数据集。那么对你的训练数据做一个 train_test_split 会很有用,或者更好,做几次分割并在所有这些运行中找到最好的模型+参数,仍然没有看到二月的数据(这是非常重要)。

此处,LinearRegression 无需任何参数即可工作,因此实际上没有必要拆分或混洗任何内容。

现在让我向您展示您的代码做了什么,然后如果我们将您想要实现的目标转化为代码,它会是什么样子:

你在这里做什么

  1. 删除一月份的任何目标值:
january.drop('january_info_colum',axis=1,inplace=True)
  1. 将 2 月目标与 1 月功能合并:
df = pd.merge(january,february[['ID','february_info_colum']],how="inner",on=["ID","ID"])
  1. 在 80% 的训练/20% 的测试中拆分此数据集:
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
  1. 拟合和预测:
model = LinearRegression().fit(X_train,y_train)
y_preds = model.predict((X_test))
  1. 打印指标
print('RMSE:',metrics.mean_squared_error(y_test,y_preds,squared=False))

与您描述的目标相对应的内容

  1. 针对 1 月份的功能和目标进行训练:
model = LinearRegression().fit(january.drop('january_info_colum',axis=1),january['january_info_colum'])
  1. 预测 2 月份的特征:
y_preds = model.predict(february.drop('february_info_colum',axis=1))
  1. 打印指标
print('RMSE:',metrics.mean_squared_error(february['february_info_colum'],squared=False))