时间序列数据分析与预测

作为一名数据科学家,可能经常需要处理和预测时间序列数据。本文将介绍如何使用Python的Darts库来处理这类数据。Darts库提供了多种模型,包括传统的统计模型和深度学习模型,能够满足不同的业务需求。

安装Darts库

首先,需要安装Darts库。推荐使用Anaconda环境进行安装,以便于管理依赖。在终端中输入以下命令进行安装:

conda install -c conda-forge -c pytorch u8darts-all

请注意,安装过程可能需要较长时间,因为需要下载大约2.98GB的数据。

加载数据集

Darts库提供了一些内置的数据集,例如航空乘客数量和牛奶产量数据。可以使用以下代码来加载这些数据集:

from darts.datasets import AirPassengersDataset, MonthlyMilkDataset air_passengers = AirPassengersDataset().load() milk_production = MonthlyMilkDataset().load()

这些数据集可以以Data Array或DataFrame的形式加载,方便进行进一步的分析和处理。

数据可视化

在进行数据分析之前,通常会先对数据进行可视化,以了解数据的分布和趋势。使用matplotlib库,可以绘制时间序列数据的图表:

import matplotlib.pyplot as plt air_passengers.plot(label="乘客数量") milk_production.plot(label="牛奶产量") plt.legend()

通过图表,可以直观地看到数据随时间的变化情况。

数据预处理

在训练模型之前,需要对数据进行预处理,包括标准化和归一化等。Darts库提供了Scaler类来帮助进行数据的标准化处理:

from darts.dataprocessing.transformers import Scaler scaler = Scaler() scaled_air_passengers = scaler.fit_transform(air_passengers) scaled_milk_production = scaler.fit_transform(milk_production)

标准化后的数据将更有利于模型的训练和预测。

模型训练与预测

Darts库提供了多种时间序列预测模型,包括ARIMA、Prophet等。在本例中,将使用N-BEATS模型来进行预测,因为它支持多变量时间序列预测:

from darts.models import NBEATSModel model = NBEATSModel(input_chunk_length=24, output_chunk_length=12, n_epochs=100, random_state=15) model.fit([scaled_air_passengers, scaled_milk_production], verbose=True)

模型训练完成后,可以使用它来预测未来的数据。

结果评估

为了评估模型的预测效果,可以使用平均绝对百分比误差(MAPE)作为评估指标:

from darts.metrics import mape predicted_air_passengers = model.predict(n=36, series=scaled_air_passengers) predicted_milk_production = model.predict(n=36, series=scaled_milk_production) print("航空乘客MAPE = {:.2f}%".format(mape(scaled_air_passengers, predicted_air_passengers))) print("牛奶产量MAPE = {:.2f}%".format(mape(scaled_milk_production, predicted_milk_production))) actual_air_passengers = scaled_air_passengers.pd_dataframe() predicted_air_passengers = predicted_air_passengers.pd_dataframe() plt.plot(actual_air_passengers, label="实际乘客数量") plt.plot(predicted_air_passengers, label="预测乘客数量") plt.legend()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485