欢迎关注 ,专注Python、数据分析、数据挖掘、好玩工具!

我相信很多人都听过或者用过 FaceBook 的 Prophet 来解决时间序列问题,前几天我分享了这样一篇文章:太棒了!FaceBook 开源全网第一个时序王器 Kats ! 受到了很多人的喜爱!也有部分朋友私信我,对于 Kats 还有很多没有理解透彻的地方。

今天我们再次出发,通过通俗易懂的方式,让大家更好理解 Kats ,喜欢此文点赞支持,欢迎收藏学习。

我们知道时间序列分析是数据科学中一个非常重要的领域,它主要包含统计分析、检测变化点、异常检测和预测未来趋势。然而,这些时间序列技术通常由不同的库实现。有没有一种方法可以让你在一个库中获得所有这些技术?

答案是肯定的,本文中我将分享一个非常棒的工具包 Kats,它可以完美解决上述问题。

什么是 Kats?

目前时间序列分析以及建模的技术非常多,但相对散乱,本次 FaceBook 开源了 Kats,它是一款轻量级的、易于使用的、通用的时间序列分析框架,包括:预测、异常检测、多元分析和特征提取嵌入。你可以将 Kats 视为Python中时间序列分析的一站式工具包。

安装 Kats

pip install --upgrade pip
pip install kats

为了了解 Kats 的功能,我们将使用这个框架来分析 Kaggle 上的 StackOverflow问题计数问题。数据链接为:
https://www.kaggle.com/aishu200023/stackindex

首先我们从读取数据开始。

import pandas as pd
df = pd.read_csv("MLTollsStackOverflow.csv")
# Turn the month column into datetime
df["month"] = pd.to_datetime(df["month"], format="%y-%b")
df = df.set_index("month")

现在让我们分析一下与 Python 相关的 StackOverflow 问题计数。数据被分成一列和一个测试集来评估预测。

python = df["python"].to_frame()# Split data into train and test set
train_len = 102
train = python.iloc[:train_len]
test = python.iloc[train_len:]

将数据转换为时间序列

首先构造一个时间序列对象。我们使用
time_col_name='month'
指定时间列。

from kats.consts import TimeSeriesData# Construct TimeSeriesData object
ts = TimeSeriesData(train.reset_index(), time_col_name="month")

要绘制数据,调用plot方法:

ts.plot(cols=["python"])

酷!看起来关于 Python 的问题的数量随着时间的推移而增加。我们能预测未来30天的趋势吗?是的,我们可以和 Kats 一起做。

预测

Kats目前支持以下10种预测模型:

  • Linear
  • Quadratic
  • ARIMA
  • SARIMA
  • Holt-Winters
  • Prophet
  • AR-Net
  • LSTM
  • Theta
  • VAR

上述模型较多,让我们试一下其中两种类型吧!

1、从使用 Prophet 进行预测开始:
from kats.models.prophet import ProphetModel, ProphetParams
# Specify parameters
params = ProphetParams(seasonality_mode="multiplicative")
# Create a model instance
m = ProphetModel(ts, params)
# Fit mode
m.fit()
# Forecast
fcst = m.predict(steps=30, freq="MS")
fcst


可视化

m.plot()


酷!让我们通过与测试数据的比较来评估预测。

import matplotlib.pyplot as pltfig, ax = plt.subplots(figsize=(12, 7))train.plot(ax=ax, label="train", color="black")
test.plot(ax=ax, color="black")
fcst.plot(x="time", y="fcst", ax=ax, color="blue")ax.fill_between(test.index, fcst["fcst_lower"], fcst["fcst_upper"], alpha=0.5)
ax.get_legend().remove()


预报似乎很好地符合观察结果!

Holt-Winters

我们将尝试的下一个模式是Holt-Winters。它是一种捕捉季节性的方法。下面是如何在 Kats 中使用 Holt-Winters 方法。

from kats.models.holtwinters import HoltWintersParams, HoltWintersModel
import warnings
warnings.simplefilter(action='ignore')params = HoltWintersParams(trend="add",seasonal="mul",seasonal_periods=12,)
m = HoltWintersModel(data=ts, params=params)m.fit()
fcst = m.predict(steps=30, alpha = 0.1)
m.plot()

检测变化点

你有没有想过在你的时间序列中发生统计上显著的均值变化的时间?

Kats 允许使用 CUSUM 算法检测变化点。Cusum 是一种检测时间序列中均值上下移动的方法。

让我们看看如何检测 Kats 中的变化点。

from kats.consts import TimeSeriesData, TimeSeriesIterator
from kats.detectors.cusum_detection import CUSUMDetector
import matplotlib.pyplot as pltdetector = CUSUMDetector(ts)change_points = detector.detector(change_directions=["increase", "decrease"])
print("The change point is on", change_points[0][0].start_time)# plot the results
plt.xticks(rotation=45)
detector.plot(change_points)
plt.show()


酷!让我们尝试检测 StackOverflow 问题计数的其他类别的变化点。

首先创建一个函数来检测主题提供的更改点。

def get_ts(topic: str):return TimeSeriesData(df[topic].to_frame().reset_index(), time_col_name="month")def detect_change_point(topic: str):ts = get_ts(topic)detector = CUSUMDetector(ts)change_points = detector.detector()for change_point in change_points:print("The change point is on", change_point[0].start_time)# plot the resultsplt.xticks(rotation=45)detector.plot(change_points)plt.show()

机器学习

detect_change_point("machine-learning")


深度学习

detect_change_point("deep-learning")

孤立点检测

你在看NLP的时间序列时看到了什么?


df["nlp"].plot()

从2018年到2019年,NLP的问题数量有所下降。

问题数量的下降是一个异常值。检测异常值很重要,因为它们可能会在下游处理中造成问题。

然而,通过查看数据来发现异常值并不总是高效和容易的。幸运的是,Kats还允许您检测时间序列中的异常值!

用kat检测异常值只需要几行行代码。

from kats.detectors.outlier import OutlierDetector# Get time series object
ts = get_ts("nlp")# Detect outliers
ts_outlierDetection = OutlierDetector(ts, "additive")
ts_outlierDetection.detector()# Print outliers
outlier_range1 = ts_outlierDetection.outliers[0]
print(f"The outliers range from {outlier_range1[0]} to {outlier_range1[1]}")
The outliers range from 2018-01-01 00:00:00 to 2019-03-01 00:00:00

酷!结果证实了我们从上图中看到的情况。

时间序列特征

除了统计数据外,时间序列中还有其他一些特性,如线性、趋势强度、季节性强度、季节性参数等,您可能会感兴趣。

Kats 允许通过 TsFeatures 查找有关时间序列特征的重要信息:

from kats.tsfeatures.tsfeatures import TsFeaturesmodel = TsFeatures()output_features = model.transform(ts)
output_features

小结

我们刚刚学习了如何使用 Kats 来预测、检测变化点、检测异常值和提取时间序列特征。我希望这篇文章能帮助到大家解决工作中的时间问题,并从你的数据中提取有价值的信息。


技术交流

欢迎转载、收藏、有所收获点赞支持一下!


目前开通了技术交流群,群友超过2000人,添加方式如下:

如下方式均可,添加时最好方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式一、发送如下图片至微信,进行长按识别,回复加群;
  • 方式二、直接添加小助手微信号:pythoner666,备注:来自CSDN
  • 方式三、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

再次出发!FaceBook 开源“一站式服务“时序利器 Kats !相关推荐

  1. 【时间序列】再次出发!FaceBook 开源一站式服务时序利器 Kats !

    时间序列分析是数据科学中一个非常重要的领域,它主要包含统计分析.检测变化点.异常检测和预测未来趋势.然而,这些时间序列技术通常由不同的库实现.有没有一种方法可以让你在一个库中获得所有这些技术? 答案是 ...

  2. 深度解读Facebook刚开源的beringei时序数据库——数据压缩delta of delta+充分利用内存以提高性能...

    转自:https://yq.aliyun.com/topic/58?spm=5176.100239.blogcont69354.9.MLtp4T 摘要: Facebook最近开源了beringei时序 ...

  3. 【机器学习】FaceBook开源全网第一个时序王器--Kats。

    作者:杰少 时间序列王器-Kats 简介 时间序列分析建模是数据科学和机器学习的一个重要的领域,在电子商务.金融.供应链管理.医学.气象.能源.天文等诸多领域有着广泛的应用.而对于时间序列的分析以及建 ...

  4. 【时间序列】FaceBook开源全网第一个时序王器--Kats。

    kaggle竞赛宝典干货 作者:杰少 时间序列王器-Kats 简介 时间序列分析建模是数据科学和机器学习的一个重要的领域,在电子商务.金融.供应链管理.医学.气象.能源.天文等诸多领域有着广泛的应用. ...

  5. ali arthas 火焰图_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>[1]系列,今天给大家带来一款阿里开源的 Java 诊断利器 ...

  6. java为什么打不开jar_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>[1]系列,今天给大家带来一款阿里开源的 Java 诊断利器 ...

  7. idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款阿里开源的 Java 诊断利器 Art ...

  8. Facebook 有序队列服务设计原理和高性能浅析

    [CSDN 编者按]作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界人所关注. 作者 | Coder的技术之路 责编 | 欧阳姝黎 出品 | C ...

  9. 万字长文:读懂微服务编排利器Zeebe

    万字长文:读懂微服务编排利器Zeebe 1.工作流与微服务编排 1.1工作流 提到工作流,印象里都是OA系统各种请假审批流.事实上,广义上的工作流是对工作流程及其各操作步骤之间业务规则的抽象.概括.描 ...

最新文章

  1. 在fvwm中将右手习惯改为左手习惯的简单办法
  2. 给新手程序猿的16个必备小妙招
  3. HDU1269 迷宫城堡(模板题)
  4. HDU - 1024 Max Sum Plus Plus 最大m段子段和+滚动数组优化
  5. 链表最终总结【数据结构】
  6. 漫画:如何实现大整数相乘?(下)
  7. Java中Javadoc的{@link}与@see的简单区别
  8. PIC单片机开发环境搭建
  9. 计算器c语言源代码全,C语言的计算器源代码
  10. 比较器与滞回比较器的原理及应用
  11. 微信小程序申请 软件著作权(其它 软件,小程序都可以)
  12. 最新列表!国内外核心期刊数据库收录范围汇总介绍
  13. 龙族路明非和零h_第一章 海芒
  14. 前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal)
  15. mysql 测试数据库employees导入
  16. JavaScript 汉字转拼音
  17. Exchange Server 2013 共享邮箱
  18. 能力开放平台系列-概述
  19. Ansys electronics desktop 2020R1安装之后出现了很大的问题
  20. esp32cam应用一 点亮我的TFT小屏幕

热门文章

  1. Gym - 100502G Outing (强连通缩点+树形依赖背包)
  2. LTE(4G) GUTI分配流程
  3. LoRa SX1278通信代码开发学习
  4. 阿里云 IoT 物联网平台 MQTT 通讯模式
  5. FND_MESSAGE使用总结
  6. java计算出现负数吗,请问一个计算器的有关问题,怎么实现负数计算
  7. 自动驾驶测试流程大全
  8. 三种不同组网方式,组建WIFI全覆盖
  9. 我的世界服务器指令修复耐久,我的世界修改装备耐久度指令 | 手游网游页游攻略大全...
  10. 漫画:程序员找工作—外包公司