如何使用基于日期列的预测

Posted

技术标签:

【中文标题】如何使用基于日期列的预测【英文标题】:How to use predictions based on a Date column 【发布时间】:2021-12-10 16:46:38 【问题描述】:

我对 python 和 ML 还很陌生。我有一个简单的表,其中包含一个日期列和一个浮点值。我想预测给定时期的未来销售额,比如说2022-01,我设法根据我的数据获得了预测,但预测值的数量等于给定训练值的数量。另外,meanSquaredError 的值是不是太高了?到目前为止,我得到了以下信息:

import pandas as pd
import numpy as np
import datetime

df=pd.read_csv(r"Sale.csv")
#Breaki date column into multiple columns
df["Data"]=pd.to_datetime(df["Data"])
df["Data"]=df["Data"].dt.strftime("%d.%m.%Y")
df["Year"]=pd.DatetimeIndex(df["Data"]).year
df["Month"]=pd.DatetimeIndex(df["Data"]).month
df["Day"]=pd.DatetimeIndex(df["Data"]).day
df["Weekday"]=pd.DatetimeIndex(df["Data"]).weekday
df["Dayofyear"]=pd.DatetimeIndex(df["Data"]).dayofyear

df=df.drop(["Data"],axis=1) #drop initial column

## Dummy Encoding
df = pd.get_dummies(df, columns=['Year'], drop_first=False, prefix='Year')
df = pd.get_dummies(df, columns=['Month'], drop_first=True, prefix='Month')
df = pd.get_dummies(df, columns=['Weekday'], drop_first=True, prefix='Weekday')

##split Train and test data
train=df.sample(frac=0.8,random_state=200) 
test=df.drop(train.index)

target_column_train=['Sales']
predictors_train= list(set(list(train.columns))-set(target_column_train))

X_train=train[predictors_train].values
y_train=train[target_column_train].values

##Loading ML model
from sklearn import model_selection
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error

model_rf = RandomForestRegressor(n_estimators=5000, oob_score=True, random_state=100)
model_rf.fit(X_train, y_train.ravel()) #.ravel will convert the array shape to (n, )

pred_train_rf= model_rf.predict(X_train)

print("RMSE:")
print(np.sqrt(mean_squared_error(y_train,pred_train_rf))) 
# 7956042.545725489
print ("\n r2_score(Coefficient of determination:) is : ")
print(r2_score(y_train, pred_train_rf))
# 0.9284689685103222

Data

DataVisualisation

【问题讨论】:

【参考方案1】:

当您运行 model.predict 时,您是在 x_train 而不是 test 上运行它 - 这就是您的预测值等于该数字的原因。你想在你的训练数据上fit你的模型,在你的测试数据上predict

【讨论】:

您好,感谢您的回答。在这种情况下,我有 16 个结果,即测试样本的体积 这是否解决了您的问题,还是有其他问题?您的模型的高精度意味着它很可能过度拟合(您给它的这个样本很好,但在泛化到未来数据方面很糟糕) 那没有明确答案,我想预测未来的具体时间,不清楚如何实现! 我建议阅读文档并查看其他人的示例 - 如果您有具体问题,我很乐意提供帮助。从这里开始:10mohi6.medium.com/…。然后研究可视化模型的预测数据。我建议将您的预测绘制在实际数据之上,以了解您的模型是如何工作的。

以上是关于如何使用基于日期列的预测的主要内容,如果未能解决你的问题,请参考以下文章

如何使用滚动功能来预测基于简单移动平均线或其他策略的趋势

如何使用 sequelize 基于 sqlite3 中的“日期”列进行查询?

如何添加带有预测的新列?

如何使用我的日期时间进行预测(随机森林模型)

如何预测股票分析--先知(Prophet)

如何使用 DBI 写入带有日期列的表