作为一名数据科学家,可能经常需要处理和预测时间序列数据。本文将介绍如何使用Python的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()