【技术教程】一个python库让时间序列预测更简单

多数人进行机器学习少不了利用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,检查它是否减少了些许误差。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值