前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Facebook开源时序王器-Kats

Facebook开源时序王器-Kats

原创
作者头像
皮大大
发布2022-04-02 22:49:20
5940
发布2022-04-02 22:49:20
举报
文章被收录于专栏:机器学习/数据可视化

作者:Peter 编辑:Peter

大家好,我是Peter~

Kats(Kits to Analyze Time Series)是一款轻量级、易于使用、可扩展和通用的框架,用于在Python中进行时序分析,由Facebook开源。

TimeSeriesData是Kats中表示单变量和多变量时间序列的基本数据结构,有两种初始化的方法:

  • TimeSeriesData(df):要求包含一个"time"列和任意值列的pd.DataFrame对象
  • TimeSeriesData(time, value):其中"time"是pd.Series或者pd.DatetimeIndex对象,值是pd.Series(单变量)或者pd.DataFrame(多变量)

<!--MORE-->

安装

Mac中安装是非常简单的,直接pip install;如果是Windows系统,请百度解决各种依赖问题:

代码语言:python
代码运行次数:0
复制
pip install --upgrade pip
pip install kats

GitHub学习地址:https://github.com/facebookresearch/Kats

API地址:https://facebookresearch.github.io/Kats/api/

导入库

In 1:

代码语言:python
代码运行次数:0
复制
# 导入库
import numpy as np
import pandas as pd
from datetime import datetime, timedelta

import matplotlib.pyplot as plt
%matplotlib inline

import warnings
warnings.filterwarnings('ignore')

from kats.consts import TimeSeriesData

单变量预测

使用自带的air_passengers.csv的数据集。

导入数据

In 2:

代码语言:python
代码运行次数:0
复制
# ./ 表示的当前目录下

air = pd.read_csv("./Kats/kats/data/air_passengers.csv")
air.head()

字段重命名

一定要有time字段:

方式1:创建TimeSeriesData对象

In 7:

代码语言:txt
复制
type(air)  # 转换前

Out7:

代码语言:txt
复制
pandas.core.frame.DataFrame

In 8:

代码语言:txt
复制
air_ts = TimeSeriesData(air) # 实施转换

In 9:

代码语言:txt
复制
type(air_ts)  # 转换后

Out9:

代码语言:txt
复制
kats.consts.TimeSeriesData

In 10:

代码语言:txt
复制
print(type(air_ts.time))
print(type(air_ts.value))
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>

方式2:TimeSeriesData(time,value)创建

In 11:

代码语言:txt
复制
air_ts_from_series = TimeSeriesData(time=air.time, value=air.value)
air_ts_from_series

TimeSeriesData对象操作

TimeSeriesData对象支持很多类似pd.DataFrame的操作:

  • 切片取数slicing
  • 数学计算
  • 内置的plot()方法绘图
  • 一些常用的内置函数使用
切片取数
数学运算

当两个TimeSeries对象进行相加的时候,time列的取值必须相同

In 16:

代码语言:txt
复制
air_ts[2:8] + air_ts_from_series[2:8] 

如果time列的值不同,则会报错:

逻辑判断

In 18:

代码语言:txt
复制
air_ts == air_ts_from_series

Out18:

代码语言:txt
复制
True
计算长度

In 19:

代码语言:txt
复制
len(air_ts)

Out19:

代码语言:txt
复制
144
常用属性

In 20:

代码语言:txt
复制
air_ts.max

Out20:

代码语言:txt
复制
622

In 21:

代码语言:txt
复制
air_ts.min

Out21:

代码语言:txt
复制
104

In 22:

代码语言:txt
复制
# 是否是单变量:is_univariate
air_ts.is_univariate()  

Out22:

代码语言:txt
复制
True

In 23:

代码语言:txt
复制
# 是否为空
air_ts.is_empty()

Out23:

代码语言:txt
复制
False

In 24:

代码语言:txt
复制
# 是否有数据缺失
air_ts.is_data_missing()

Out24:

代码语言:txt
复制
False
转成DataFrame对象

In 25:

代码语言:txt
复制
air_to_df = air_ts.to_dataframe()
air_to_df.head()
扩充extend(重点)

对两个不同的TimeSeries对象在axis=0方向上的扩充

In 26:

代码语言:txt
复制
k1 = air_ts[2:5]  # 3行记录
k2 = air_ts[5:8]  # 3行记录

k1.extend(k2)

需要注意的是,扩充的时候两个对象的日期的头尾必须是能连接的上:

绘图

直接使用plot方法对Kats中的TimeSeriesData对象进行绘图

In 29:

代码语言:txt
复制
air_ts.plot()

plt.show()

基于Kats的预测

Kats目前是支持多种预测的算法,常见的有:

  • Linear
  • Quadratic
  • ARIMA(重点)
  • SARIMA
  • Holt-Winters
  • Prophet(重点)
  • AR-Net
  • LSTM(重点)
  • Theta
  • VAR

在使用的时候通过fit和predict函数就可以完成基本的预测功能。

使用Prophet

建模拟合 + 预测的过程:

In 30:

下面的预测结果中:fcst是预测的均值,fcst_lower是预测的下限,fcst_upper是预测的上限

绘制预测结果的可视化图形:

In 31:

代码语言:txt
复制
model.plot()

plt.show()

加上历史数据我们再预测一次:

代码语言:python
代码运行次数:0
复制
from kats.models.prophet import ProphetModel, ProphetParams

params = ProphetParams(seasonality_mode="multiplicative", interval_width=0.8)
model = ProphetModel(data=air_ts, params=params)
model.fit()

# 加上历史数据 include_history=True
forecast = model.predict(steps=24, freq="MS",include_history=True)
model.plot()

黑线是原始的数据,蓝线是预测的结果

使用LSTM

使用LSTM模型再预测一次:

In 33:

对比Prophet和LSTM模型,我们发现:Prophet的趋势更好

多变量预测

导入数据

创建TimeSeriesData对象

方式1

In 4:

代码语言:txt
复制
multi_ts = TimeSeriesData(df)

In 5:

代码语言:txt
复制
type(multi_ts.time)

Out5:

代码语言:txt
复制
pandas.core.series.Series

In 6:

代码语言:txt
复制
type(multi_ts.value)

Out6:

代码语言:txt
复制
pandas.core.frame.DataFrame
方式2

In 7:

代码语言:txt
复制
multi_ts_two = TimeSeriesData(time=df.time,value=df[["v1","v2"]])
multi_ts_two

原数据绘图

In 10:

代码语言:txt
复制
multi_ts.plot(cols=["v1","v2"])

plt.show()

多变量预测

预测结果如下:

上海疫情

手动整理上海最近30天的数据:

读取数据:

绘图

1、每日新增的预测结果:

具体数值为:

2、7日均值的预测趋势图

具体的数值为:

后续会来验证下这个结果!

时序资料

将来需要学习的主要内容:

1、模型框架:Prophet + Kats + ARIMA

2、书籍:FPP《预测:方法与实践》(第2版左,第三版右),第二版中文在线地址:https://otexts.com/fppcn/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 导入库
  • 单变量预测
    • 导入数据
      • 字段重命名
        • 方式1:创建TimeSeriesData对象
          • 方式2:TimeSeriesData(time,value)创建
            • TimeSeriesData对象操作
              • 切片取数
              • 数学运算
              • 逻辑判断
              • 计算长度
              • 常用属性
              • 转成DataFrame对象
              • 扩充extend(重点)
            • 绘图
              • 基于Kats的预测
                • 使用Prophet
                • 使用LSTM
            • 多变量预测
              • 导入数据
                • 创建TimeSeriesData对象
                  • 方式1
                  • 方式2
                • 原数据绘图
                  • 多变量预测
                  • 上海疫情
                    • 绘图
                    • 时序资料
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档