时间序列数据指的是随时间变化的数据集,例如股票价格或网站用户流量。预测这些数据的未来值就是时间序列预测。常见的时间序列预测模型包括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']}))