时间序列预测:使用Python的Prophet库

时间序列预测的基本概念

时间序列数据指的是随时间变化的数据集,例如股票价格或网站用户流量。预测这些数据的未来值就是时间序列预测。常见的时间序列预测模型包括ARIMA(自回归积分滑动平均模型)、自回归模型、指数平滑模型以及基于深度学习的LSTM(长短期记忆)模型。

季节性和趋势

季节性是指数据在时间上的重复模式,例如每年夏季电费的增加。趋势则描述了数据随时间的上升或下降趋势。理解这些概念对于构建准确的时间序列预测模型至关重要。

数据集和预处理

本文使用的是AV April Jobathon数据集,该数据集包含了日期、小时和租车需求等信息。目标是预测未来的租车需求。首先,需要对数据进行预处理,将小时和日期合并为一个日期时间戳。

def dataPreprocessing(dataFrame): dataFrame['date'] = pd.to_datetime(dataFrame['date']) + dataFrame['hour'].astype('timedelta64[h]') dataFrame.drop(columns=['hour'], axis=1, inplace=True) return dataFrame

通过上述代码,将小时信息添加到日期中,形成完整的日期时间戳,并删除原始的小时列。

探索性数据分析

探索性数据分析(EDA)有助于理解数据的季节性和趋势。通过可视化时间序列数据,可以观察到需求的季节性模式。

fig = xp.line(training_data, x='date', y='demand') fig.update_xaxes(rangeslider_visible=True) fig.show()

以上代码展示了如何使用Plotly库绘制时间序列数据,以便能够直观地看到季节性和趋势。

数据分割

在训练模型之前,需要将数据分割为训练集和验证集。Prophet库需要日期时间作为输入列(ds),输出列作为y列。

from sklearn.model_selection import train_test_split train_data, validation_data = train_test_split(training_data, test_size=0.2, random_state=10)

通过上述代码,将数据随机分割为80%的训练集和20%的验证集。

模型训练

接下来,将使用Prophet库来训练模型。首先,需要安装Prophet库。

!pip install fbprophet from fbprophet import Prophet model = Prophet() model.fit(train_data)

安装并导入Prophet库后,可以使用训练数据来拟合模型。

模型评估

使用验证数据来评估模型的性能。使用平均绝对误差(MAE)作为评估指标。

from sklearn.metrics import mean_absolute_error y_actual = validation_data['y'] y_predicted = prediction['yhat'] mae = mean_absolute_error(y_actual, y_predicted) test_data = pandas.read_csv('test_data.csv') testing_data = dataPreprocessing(test_data.copy()) test_prediction = model.predict(pd.DataFrame({'ds':testing_data['date']}))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485