多数人进行机器学习少不了利用scikit-learn,本文介绍一种开展时间序列预测更简单更好用的数据库——dart
darts库的GitHub链接:
https://github.com/unit8co/darts
darts库的文档:
https://unit8co.github.io/darts/quickstart/00-quickstart.html#Training-forecasting-models-and-making-predictions
1. darts库如何安装:
pip install darts
2. 导入darts库和数据集
像scikit-learn一样,dart也附带了一些标准数据集,不需要从外部网站下载任何文件。
#从darts库导入类timeseries
From darts import TimeSeries
#导入航空乘客数据集
From darts.datasets import AirPassengersDataset
TimeSeries是dart中的主要数据类。TimeSeries表示具有适当时间索引的单变量或多变量时间序列。
3. 加载时间序列数据并画图
#加载导入的数据
Series= AirPassengersDataset().load()
#画出这个数据集
Series.plot()
x轴代表年份,y轴代表乘客人数。
4. 其他操作
(1)数据切分
有两个命令进行数据切分:split_after(split_point)和split_before(split_point),他们都可以将数据分成两部分,下图代码展示了将数据分成75%和25%两部分。
(2)数据切片
可以根据索引对时间序列数据进行切片。(3)进行运算
(4)映射
运算使用Numpy库进行映射计算import numpy as npSeries1.map(np.log).plot
(5)基于国家代码增加节假日
add_holidays方法向当前序列添加了一个二元变量,该组件在与所选国家的假日对应的每个索引处等于1,否则等于0。
(6)填充缺失值
dart包含一个filling_missing_values函数,它能够在时间序列数据中填充缺失的值,代码如下:
结果输出:(7)划分训练集和测试集
代码中划分的训练集是直到1958年1月(不包括)的TimeSeries值,测试集余值的TimeSeries。(8)使用NaiveSeasonal进行预测
在分割数据集之后,建立由dart库提供的第一个预测模型。dart中存在一组“原始”基线模型,这对于了解期望的最低精度非常有用。例如,naivesasional (K)模型总是“重复”K个时间步之前发生的值。在最原始的形式中,当K=1时,该模型总是简单地重复训练序列的最后一个值,代码如下:输出如下:
使用dart库非常容易拟合和预测时间序列数据,fit()用于训练集,而predict()用于得到预测值。
(9)季节性
可以看到数据每年都显示季节性,可以通过使用stats.utils.statistics中check_seasonality来检查数据中的季节性。代码及结果如下:
可以在x = 12处看到一个峰值,它代表了年度季节性趋势(红线)。使用k = 12,重新运行Naïve季节性模型,模型及结果如下:模型中实现季节变化值后,它显示了更好的预测,但仍然不准确。在他们的官方文档中所述,还有另一个捕获趋势的朴素基线模型,称为NaiveDrift。该模型产生线性预测,其斜率由训练集的第一个和最后一个值决定。
(10)计算误差矩阵
可以使用stats .metrics中的map函数必须最小化的误差值,代码如下:
在k=12的Naïve模型,显示了大约13%的误差。对这些数据执行NaiveDrift,检查它是否减少了些许误差。