文档
  • PyCaret 3.0
  • 入门指南
    • 💻安装
    • 🚀快速入门
    • ⭐教程
    • 📶模块
    • ⚙️数据预处理
      • 数据准备
      • 缩放和转换
      • 特征工程
      • 特征选择
      • 其他设置参数
    • 💡函数
      • 初始化
      • 训练
      • 优化
      • 分析
      • 部署
      • 其他
  • 学习 PYCARET
    • 📖博客
      • 宣布 PyCaret 1.0
      • 宣布 PyCaret 2.0
      • 关于 PyCaret 你不知道的 5 件事
      • 构建和部署你的第一个机器学习 Web 应用
      • 使用 PyCaret 在 Power BI 中构建你自己的 AutoML
      • 在 Google Kubernetes 上部署机器学习管道
      • 在 AWS Fargate 上部署 PyCaret 和 Streamlit
      • 使用 PyCaret 在 Power BI 中进行异常检测
      • 在 Google Kubernetes 上部署机器学习应用
      • 在 GKE 上部署机器学习管道
      • 在 AWS Fargate 上部署机器学习管道
      • 使用 Docker 在云端部署机器学习管道
      • 使用 PyCaret 在 Power BI 中进行聚类分析
      • 使用 ONNX Runtime 在边缘部署 PyCaret 模型
      • GitHub 是你所需的最佳 AutoML
      • 在 AWS Fargate 上部署 PyCaret 和 Streamlit
      • 使用 PyCaret 和 MLflow 轻松实现 MLOps
      • 使用 PyCaret 在 Power BI 中进行聚类分析
      • 使用 PyCaret 在 Alteryx 中实现机器学习
      • 使用 PyCaret 在 KNIME 中实现机器学习
      • 使用 PyCaret 在 SQL 中实现机器学习 第 I 部分
      • 使用 PyCaret 在 Power BI 中实现机器学习
      • 使用 PyCaret 在 Tableau 中实现机器学习
      • 使用 PyCaret 进行多个时间序列预测
      • 使用 PyCaret 预测客户流失
      • 使用 PyCaret 预测潜在客户得分(正确方法)
      • 使用 PyCaret 在 Python 中进行 NLP 文本分类
      • 使用 PyCaret 预测潜在客户得分(正确方法)
      • 使用 PyCaret 预测黄金价格暴跌
      • 使用机器学习预测黄金价格
      • PyCaret 2.1 功能摘要
      • 使用 PyCaret 将机器学习模型部署到 SQL Server
      • 使用 PyCaret 和 Gradio 为你的机器学习赋能
      • 时间序列 101 - 新手入门
      • 使用 PyCaret 进行时间序列异常检测
      • 使用 PyCaret 回归进行时间序列预测
      • 使用 PyCaret 在 Power BI 中进行主题建模
      • 使用 PyCaret 编写和训练自定义机器学习模型
      • 使用 PyCaret 和 Streamlit 构建和部署机器学习应用
      • PyCaret 2.3.6 发布了!看看有什么新功能?
    • 📺视频
    • 🛩️备忘单
    • ❓常见问题
    • 👩‍💻示例
  • 重要链接
    • 🛠️发布说明
    • ⚙️API 参考
    • 🙋 讨论
    • 📤问题
    • 👮 许可证
  • 媒体
    • 💻Slack
    • 📺YouTube
    • 🔗领英
    • 😾GitHub
    • 🔅Stack Overflow
由 GitBook 提供支持
本页内容
  • 时间序列 101 — 新手入门
  • 👉 什么是时间序列数据?
  • 👉 什么是时间序列预测?
  • 👉 时间序列预测方法
  • 👉 PyCaret 回归模块
  • 👉 数据集
  • 👉 初始化设置
  • 👉 训练和评估所有模型
  • 👉 创建未来评分数据集
  • 👉 绘制实际数据和预测图
  • 即将推出!
  • 你可能也感兴趣
  • 重要链接
  • 想了解某个特定模块?

这有帮助吗?

  1. 学习 PYCARET
  2. 博客

时间序列 101 - 新手入门

上一篇使用 PyCaret 和 Gradio 为你的机器学习赋能下一篇使用 PyCaret 进行时间序列异常检测

上次更新于 2 年前

这有帮助吗?

时间序列 101 — 新手入门

时间序列预测的新手友好介绍

图片来源:Chris Liverani on Unsplash

👉 什么是时间序列数据?

时间序列数据是指在不同时间点收集的同一主题的数据,例如某国按年份计算的 GDP、某特定公司在一段时间内的股票价格,或你每秒记录的心跳。事实上,任何可以在不同时间间隔连续捕获的数据都是时间序列数据。

请看下面一个时间序列数据的例子,下图是特斯拉公司(股票代码:TSLA)去年每日的股票价格。右侧的 Y 轴是美元价值(图表上的最后一个点,即 701.91 美元,是截至本文撰写时(2021 年 4 月 12 日)的最新股票价格)。

另一方面,更传统的数据集,例如客户信息、产品信息、公司信息等,它们在单一时间点存储信息,称为横截面数据。

请看下面一个数据集的例子,它跟踪了 2020 年上半年美国最畅销的电动汽车。请注意,下面的图表不是跟踪一段时间内售出的汽车,而是在同一时期跟踪不同的汽车,例如特斯拉、雪佛兰和日产。

区分横截面数据和时间序列数据并不难,因为这两种数据集的分析目的截然不同。对于前一种分析,我们感兴趣的是跟踪一段时间内的特斯拉股票价格,而对于后一种分析,我们希望分析同一时期(即 2020 年上半年)的不同公司。

然而,典型的真实世界数据集很可能是混合的。想象一下像沃尔玛这样的零售商,它每天销售数千种产品。如果你分析特定日期按产品划分的销售情况,例如,如果你想知道圣诞前夜最畅销的商品是什么,这将是横截面分析。相反,如果你想了解某个特定商品(例如 PS4)在一段时间(例如过去 5 年)内的销售情况,这现在就变成了时间序列分析。

准确地说,时间序列数据和横截面数据的分析目的不同,真实的现实世界数据集很可能是时间序列数据和横截面数据的混合。

👉 什么是时间序列预测?

时间序列预测正如其名,即预测未来的未知值。然而,与科幻电影不同,它在现实世界中稍微不那么激动人心。它涉及收集历史数据,为算法消耗做准备(算法简单来说就是幕后的数学),然后根据从历史数据中学习到的模式预测未来值。

你能想到为什么公司或任何人都可能对预测任何时间序列(GDP、月销售额、库存、失业率、全球气温等)的未来值感兴趣吗?让我给你一些商业视角

  • 零售商可能对预测 SKU 级别的未来销售额感兴趣,以便进行规划和预算。

  • 小商家可能对按商店预测销售额感兴趣,这样他们就可以安排合适的资源(繁忙时期增加人手,反之亦然)。

  • 像谷歌这样的软件巨头可能想知道一天中最繁忙的时间或一周中最繁忙的日子,以便相应地安排服务器资源。

  • 卫生部门可能对预测累计 COVID 疫苗接种数量感兴趣,以便了解何时可能达到群体免疫的临界点。

👉 时间序列预测方法

时间序列预测大致可分为以下几类

  • 经典/统计模型 — 移动平均、指数平滑、ARIMA、SARIMA、TBATS

  • **机器学习 **— 线性回归、XGBoost、随机森林或任何带有降维方法的机器学习模型

  • **深度学习 **— RNN, LSTM

👉 PyCaret 回归模块

PyCaret 的回归模块是一个监督学习模块,用于估计因变量(通常称为“结果变量”或“目标”)与一个或多个自变量(通常称为“特征”或“预测因子”)之间的关系。

👉 数据集

**# read csv file
**import pandas as pd
data = pd.read_csv('AirPassengers.csv')
data['Date'] = pd.to_datetime(data['Date'])
data.head()
**# create 12 month moving average
**data['MA12'] = data['Passengers'].rolling(12).mean()

**# plot the data and MA
**import plotly.express as px
fig = px.line(data, x="Date", y=["Passengers", "MA12"], template = 'plotly_dark')
fig.show()

由于机器学习算法无法直接处理日期,我们从日期中提取一些简单的特征,例如月和年,并删除原始日期列。

**# extract month and year from dates**
data['Month'] = [i.month for i in data['Date']]
data['Year'] = [i.year for i in data['Date']]

**# create a sequence of numbers
**data['Series'] = np.arange(1,len(data)+1)

**# drop unnecessary columns and re-arrange
**data.drop(['Date', 'MA12'], axis=1, inplace=True)
data = data[['Series', 'Year', 'Month', 'Passengers']] 

**# check the head of the dataset**
data.head()
**# split data into train-test set
**train = data[data['Year'] < 1960]
test = data[data['Year'] >= 1960]

**# check shape
**train.shape, test.shape
>>> ((132, 4), (12, 4))

我在初始化设置之前手动分割了数据集。另一种方法是将整个数据集传递给 PyCaret 并让它处理分割,在这种情况下,你需要在 setup 函数中传递 data_split_shuffle = False 以避免在分割前打乱数据集。

👉 初始化设置

现在是时候初始化 setup 函数了,我们将使用 fold_strategy 参数明确传递训练数据、测试数据和交叉验证策略。

**# import the regression module**
from pycaret.regression import *

**# initialize setup**
s = setup(data = train, test_data = test, target = 'Passengers', fold_strategy = 'timeseries', numeric_features = ['Year', 'Series'], fold = 3, transform_target = True, session_id = 123)

👉 训练和评估所有模型

best = compare_models(sort = 'MAE')

基于交叉验证 MAE 的最佳模型是**最小角回归** (MAE: 22.3)。让我们检查一下在测试集上的得分。

prediction_holdout = predict_model(best);

测试集上的 MAE 比交叉验证的 MAE 高出 12%。不太好,但我们将继续使用它。让我们绘制实际值和预测值曲线来可视化拟合情况。

**# generate predictions on the original dataset**
predictions = predict_model(best, data=data)

**# add a date column in the dataset**
predictions['Date'] = pd.date_range(start='1949-01-01', end = '1960-12-01', freq = 'MS')

**# line plot**
fig = px.line(predictions, x='Date', y=["Passengers", "Label"], template = 'plotly_dark')

**# add a vertical rectange for test-set separation**
fig.add_vrect(x0="1960-01-01", x1="1960-12-01", fillcolor="grey", opacity=0.25, line_width=0)fig.show()

末端的灰色背景是测试期(即 1960 年)。现在让我们确定最终模型,即在整个数据集(这次包括测试集)上训练最佳模型,即最小角回归。

final_best = finalize_model(best)

👉 创建未来评分数据集

现在我们已经在整个数据集(1949 年至 1960 年)上训练了模型,让我们预测到未来五年,直到 1964 年。要使用最终模型生成未来预测,我们首先需要创建一个包含未来日期上的 Month、Year、Series 列的数据集。

future_dates = pd.date_range(start = '1961-01-01', end = '1965-01-01', freq = 'MS')

future_df = pd.DataFrame()

future_df['Month'] = [i.month for i in future_dates]
future_df['Year'] = [i.year for i in future_dates]    
future_df['Series'] = np.arange(145 (145+len(future_dates)))future_df.head()

现在,让我们使用 future_df 进行评分并生成预测。

predictions_future = predict_model(final_best, data=future_df)
predictions_future.head()

👉 绘制实际数据和预测图

concat_df = pd.concat([data,predictions_future], axis=0)
concat_df_i = pd.date_range(start='1949-01-01', end = '1965-01-01', freq = 'MS')
concat_df.set_index(concat_df_i, inplace=True)fig = 

px.line(concat_df, x=concat_df.index, y=["Passengers", "Label"], template = 'plotly_dark')
fig.show()

即将推出!

使用这个轻量级的 Python 工作流自动化库,你能实现的功能没有限制。如果你觉得这很有用,请不要忘记在我们的 GitHub 仓库上给一个 ⭐️。

你可能也感兴趣

重要链接

想了解某个特定模块?

点击下方链接查看文档和工作示例。

时间序列数据示例 — 特斯拉公司(股票代码:TSLA)日股票价格 1 年间隔。
来源:福布斯

本教程重点介绍使用机器学习进行时间序列预测。在本教程中,我将使用一个名为的开源低代码 Python 机器学习库的回归模块。如果你之前没用过 PyCaret,可以快速入门。尽管如此,你不需要任何 PyCaret 的先验知识就可以跟着本教程学习。

回归的目的是预测连续值,例如销售额、数量、温度、客户数量等。PyCaret 中的所有模块都提供了许多特征,通过函数来准备数据用于建模。它拥有超过 25 种即用型算法和来分析已训练模型的性能。

在本教程中,我使用了美国航空公司乘客数据集。你可以从下载数据集。该数据集提供了 1949 年至 1960 年美国航空公司乘客的月总数。

样本行
美国航空公司乘客数据集时间序列图(移动平均 = 12)
提取特征后的样本行
compare_models 的结果
predict_model(best) 函数的结果
实际和预测的美国航空公司乘客 (1949–1960)
future_df 的样本行
predictions_future 的样本行
实际值 (1949–1960) 和预测值 (1961–1964) 的美国航空公司乘客

我希望你觉得本教程很简单。如果你认为你已经准备好进入下一个级别,可以查看我在.

上发布的进阶时间序列教程。我很快将使用撰写一篇关于时间序列数据无监督异常检测的教程。如果你想获取更多更新,可以关注我的, ,和.

了解更多关于 PyCaret 的信息,请关注我们的和.

加入我们的 Slack 频道。邀请链接.

📖
PyCaret
这里
预处理
setup
多种图表
Kaggle
使用 PyCaret 进行多个时间序列预测
PyCaret 异常检测模块
Medium
LinkedIn
Twitter
LinkedIn
Youtube
这里
使用 PyCaret 2.0 在 Power BI 中构建你自己的 AutoML
使用 Docker 在 Azure 上部署机器学习管道
在 Google Kubernetes Engine 上部署机器学习管道
在 AWS Fargate 上部署机器学习管道
构建和部署你的第一个机器学习 Web 应用
使用 AWS Fargate 无服务器部署 PyCaret 和 Streamlit 应用
使用 PyCaret 和 Streamlit 构建和部署机器学习 Web 应用
在 GKE 上部署使用 Streamlit 和 PyCaret 构建的机器学习应用
文档
博客
GitHub
StackOverflow
安装 PyCaret
Notebook 教程
贡献 PyCaret
分类
回归
聚类
异常检测
自然语言处理
关联规则挖掘