如何使用 Python 进行时间序列预测?

python使用ARIMA进行时间序列的预测(基础教程) 时间序列就是以时间为索引的数据,比如下面这种形式 python使用ARIMA建模,主要是使用statsmodels库 首先是建模流程,如果不是太明白不用担心,下面会详细的介绍这些过程 阅读详情

建立基线对于任何时间序列预测问题都是至关重要的。

性能基准让您了解所有其他模型如何在您的问题上实际执行。

在本教程中,您将了解如何开发持久性预测,以便用Python计算时间序列数据集的性能基准级别。

完成本教程后,您将知道:Python学习交流群:1004391443

  • 计算时间序列预测问题的性能基线的重要性。
  • 如何在Python中从头开发一个持久化模型。
  • 如何评估来自持久性模型的预测,并用它来建立性能基准。

让我们开始吧。

 

 

 

 

此配图与本文无关

预测基准性能(Forecast Performance Baseline)

预测基准性能给我们提供了一个比较点。

这是您的问题的所有其他建模技术的参考点。如果一个模型达到或低于基线的性能,该技术应该被固定或放弃。

用于生成预测以计算基线性能的技术必须易于实施,并且针对特定问题的细节尚未实现。

在为预测问题建立性能基准之前,您必须开发一个测试工具。这包括:

  1. 您打算用来训练和评估模型的数据集。
  2. 您打算用来估计技术性能的重采样技术(如,训练/测试分离)。
  3. 您打算用于评估预测的性能指标(例如均方误差)。

准备好之后,您需要选择一个朴素的方法,您可以使用此方法进行预测并计算基准性能。

目标是尽可能快地获得时间序列预测问题的基线性能,以便您更好地了解数据集并开发更高级的模型。

制定基线预测的好技术的三个属性是:

  • 简单:只需要很少或根本不需要训练和智力的方法。
  • 快速:一种快速执行的方法,在计算上可以做出预测。
  • 可重复:一种确定性的方法,意味着它在给定相同的输入的情况下产生预期的输出。

用于建立基准性能的常用算法是持久性算法。

持久性算法("朴素"预测)

监督机器学习最常见的基线方法是零规则算法。

该算法在分类时可以预测大多数类别,或者在回归时可以预测平均结果。这可以用于时间序列,但不可以用于时间序列数据集中与序列相关的结构。

与时间序列数据集一起使用的等效技术是持久性算法。

持久性算法使用前一时间步(t-1)的值来预测下一时间步(t + 1)的预期结果。

这满足了上述三个基准线预测的条件。

为了做到这一点,我们将研究如何开发一个持久性模型,并用它来建立一个简单的单变量时间序列问题的基线性能。首先,我们来回顾一下洗发水销售的数据集。

洗发水销售数据集

该数据集描述了3年期间洗发剂销售的每月数量。

这些单位是计数单位,有36个数据点。原始数据集归功于Makridakis,Wheelwright和Hyndman(1998)的搜集工作。

以下是前5行数据的示例,包括标题行。

"Month","Sales"
"1-01",266.0
"1-02",145.9
"1-03",183.1
"1-04",119.3
"1-05",180.3

以下是从Data Market获取的整个数据集的图表,您可以下载数据集并了解更多信息。

 

 

 

 

洗发水销售数据集

数据集呈现增长趋势,当然可能还有一些季节性因素。

下载数据集并将其放在当前工作目录中,文件名为 " shampoo-sales.csv "。

以下代码片段将加载Shampoo Sales数据集并绘制时间序列。

from pandas import read_csv
from pandas import datetime
from matplotlib import pyplot
def parser(x):
    return datetime.strptime('190'+x, '%Y-%m')
series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
series.plot()
pyplot.show() 

运行程序可以绘制时间序列,如下所示:

 

 

 

 

洗发水销售数据集情况

持久性算法

持久模型可以在Python中轻松实现。

我们将这个部分分成4个步骤:

  1. 将单变量数据集转换为监督学习问题。
  2. 建立测试设备的训练和测试数据集。
  3. 定义持久性模型。
  4. 进行预测并建立基准性能。
  5. 查看完整的示例并绘制输出。

让我们来具体实施下把

第一步:定义监督学习问题

第一步是加载数据集并创建一个滞后表示。也就是说,给定t-1的数据值,预测t + 1的数据值。

# Create lagged dataset
values = DataFrame(series.values)
dataframe = concat([values.shift(1), values], axis=1)
dataframe.columns = ['t-1', 't+1']
print(dataframe.head(5))

这段代码创建数据集并打印新数据集的前5行。

我们可以看到,第一行(索引0)的数据将被剔除,因为在第一个数据点之前没有用于进行预测的数据点。

从监督学习的角度来看,t-1列是输入变量或称为x变量,而t + 1列是输出变量或称为y变量。

     t-1    t+1
0    NaN  266.0
1  266.0  145.9
2  145.9  183.1
3  183.1  119.3
4  119.3  180.3

第2步:训练集和测试集

下一步是将数据集分成训练集和测试集。

我们将保留"训练集"的前66%的数据点,其余的34%的数据用于评估。在划分过程中,我们要注意剔除掉第一行数据(值为NaN)。

在这种情况下不需要训练了; 因为训练只是我们习惯做的,并不是必须的。每个训练集和测试集然后被分成输入和输出变量。

# split into train and test sets
X = dataframe.values
train_size = int(len(X) * 0.66)
train, test = X[1:train_size], X[train_size:]
train_X, train_y = train[:,0], train[:,1]
test_X, test_y = test[:,0], test[:,1] 

第3步:持久性算法

我们可以将我们的持久性模型定义为直接返回输入值的函数。

例如,如果提供的t-1值为266.0,则将其作为预测返回,而实际的实际值或期望值恰好为145.9(取自滞后数据集的第一个可用行)。

# persistence model
def model_persistence(x):
    return x

 

步骤4:制定和评估预测

现在我们可以在测试数据集上评估这个模型。

我们使用前向验证方法来做到这一点。

不需要进行模型训练或再训练,所以本质上,我们按照时间序列逐步完成测试数据集并得到预测。

一旦完成对训练数据集中的每个时间点进预测,就将其与预期值进行比较,并计算均方差(MSE)。

# walk-forward validation
predictions = list()
for x in test_X:
    yhat = model_persistence(x)
    predictions.append(yhat)
test_score = mean_squared_error(test_y, predictions)
print('Test MSE: %.3f' % test_score)

在这种情况下,测试数据集的均方差超过17730。

Test MSE: 17730.518

 

第5步:完成示例

最后,在同一个图中绘制测试数据集合的预期值曲线、训练数据集的数据曲线和不一致的预测图。

从持久性模型预测的情节来看,这个模型显然是落后于现实的一步。销售数字有上升的趋势并且会受累月的干扰数据影响,凸显了持久性技术的局限性。

 

 

 

 

洗发水销售持久性模型

完整的例子如下所示。

from pandas import read_csv
from pandas import datetime
from pandas import DataFrame
from pandas import concat
from matplotlib import pyplot
from sklearn.metrics import mean_squared_erro
def parser(x):
    return datetime.strptime('190'+x, '%Y-%m')
series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
# Create lagged dataset
values = DataFrame(series.values)
dataframe = concat([values.shift(1), values], axis=1)
dataframe.columns = ['t-1', 't+1']
print(dataframe.head(5))
# split into train and test sets
X = dataframe.values
train_size = int(len(X) * 0.66)
train, test = X[1:train_size], X[train_size:]
train_X, train_y = train[:,0], train[:,1]
test_X, test_y = test[:,0], test[:,1]
# persistence model
def model_persistence(x):
    return x
# walk-forward validation
predictions = list()
for x in test_X:
    yhat = model_persistence(x)
    predictions.append(yhat)
test_score = mean_squared_error(test_y, predictions)
print('Test MSE: %.3f' % test_score)
# plot predictions and expected results
pyplot.plot(train_y)
pyplot.plot([None for i in train_y] + [x for x in test_y])
pyplot.plot([None for i in train_y] + [x for x in predictions])
pyplot.show()

我们已经学习了从头开发一个针对洗发水销售问题的持久性模型的例子。

持久性算法是朴素的。它通常被称为朴素的预测(naive forecast)。

它并不假定它所适用的时间序列问题的具体情况。这使得理解变得容易,实施和评估也变得很快。

作为一名机器学习的,也可以进行大量的改进。

请吧这些改进的想法都记下来。这是非常有用的,因为这些想法可以成为特征工程工作中的输入特征,或者可以在后来的合成工作中组合成简单的模型。

结论

在本教程中,您了解到了如何建立Python时间序列预测问题的基准性能。

具体来说,你了解到:

  • 建立一个基线和你可以使用的持久化算法的重要性。
  • 如何从头开始在Python中实现持久化算法。
  • 如何评估持久化算法的预测并将其用作基准。
Python时间序列分析和预测库之prophet使用详解 时间序列分析在许多领域中都是至关重要的,包括金融、天气预测、销售预测等。Python Prophet是一个强大的时间序列预测工具,由Facebook开发,具有易用性和高度可定制性的特点。本文将深入介绍Python Prophet的基本概念、安装方法以及如何使用它进行时间序列预测,并提供丰富的示例代码来帮助大家入门。 阅读详情

相关推荐

【时序分析】使用skforecast进行时间序列预测并分享14个Python时间序列分析库

时间序列是一系列按照时间顺序排列的数据,这些数据之间的间隔可以是等距的,也可以是不等距的。 **时间序列的预测过程包括通过对时间序列的过去行为进行建模(自回归)或使用其他外部变量来预测时间序列的未来值**。

小哲的博客 1682

多维高斯混合模型参数估计(python)

通过python实现了三维高斯混合模型的参数估计。

weixin_43755560的博客 1166

python:使用傅里叶特征的时间序列预测方法

本文将介绍如何使用傅里叶特征进行时间序列预测的方法。将使用Python中的几个库来实现这一目标,包括pandas、scipy、pmdarima和matplotlib。

养乐多的博客 1201

python 预测下一年数据 程序_用python做时间序列预测二:时间序列的一般数据格式和可视化...

本文将介绍如何通过python来读取、展现时间序列数据。读取时间序列数据一般用cvs等电子表格的形式存储,这里以cvs为例:from dateutil.parser import parsefrom datetime import datetimeimport matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as sns...

weixin_39781186的博客 702

QDMA工程搭建/windows驱动编译与性能测试

请注意,根据您的目标操作系统,您可能需要在windows启动配置中启用测试签名的驱动程序,以便启用此驱动程序的安装。右键单击设备,选择更新驱动程序软件,然后选择构建的QDMA驱动程序的文件夹(通常为。创建一个新工程,在IP Catalog中搜索QDMA,双击创建qdma ip核。驱动程序安装安装驱动程序最简单的方法是通过Windows的“设备管理器”。如果系统提示未经验证的驱动程序发布者,请选择无论如何安装此驱动程序软件。本节主要介绍QDMA驱动在Windows系统的源文件、编译和安装过程。

qq_28455081的博客 2288

Kettle 连接 Oracle 数据库全流程指南

例如:C:\Oracle\product\19.0.0\dbhome_1\jdbc\lib\ojdbc8.jar 2. 替换 Kettle 驱动文件 将驱动文件复制到 Kettle 的 目录: 删除旧版本驱动:如 ojdbc14.jar 只能保留一个oracle驱动 重启 Kettle 以加载新驱动 二、配置数据库连接 1. 启动 Kettle 并新建转换 运行 (Windows)或 (Linux)。 新建转换(Transformation),添加 “表输入” 步骤,双击进入配置。 2.

qq_44724453的博客 3484

用Python绘制折线图,表示每年交的男女朋友数量的变化

第一次作业,绘制简单的折线图 假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌从11岁到30岁每年交的男女朋友的数量如列表a和b,请绘制出该数据的折线图,以便分析自己和同桌每年交男女朋友的数量走势 a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] b = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2] 要求: • y轴表示个数 • x轴表示岁数,比如11岁,12岁 可以通过下面方法来实现: *from matplot

m0_45906029的博客 906

支持找回微信删除好友!一款人人可用的全能微信数据分析工具

找回删除好友、查看删除记录、恢复聊天信息....

1727

Python数据分析-折线图

【代码】Python数据分析-折线图。

qq_63979966的博客 769

华为iTrustee实战:5分钟搞定TrustZone环境搭建(附BoostKit配置技巧)

本文提供了一份华为iTrustee与ARM TrustZone环境的5分钟快速搭建实战指南。详细介绍了在TaiShan服务器上利用鲲鹏BoostKit套件部署可信执行环境(TEE)的完整流程,包括环境检查、驱动安装、首个可信应用(TA)的编译与运行,并分享了关键的BoostKit配置技巧与深度排错方法,助力开发者快速为业务注入硬件级安全能力。

yoga7的博客 968

鱼鹰优化算法(OOA)详解:从猛禽捕食智能到优化算法实现

鱼鹰优化算法(Osprey Optimization Algorithm, OOA)是2023年提出的一种新型元启发式优化算法,灵感来源于鱼鹰(一种中型猛禽)高效的捕食策略。算法模拟了鱼鹰从空中识别水下鱼类位置并俯冲捕食,然后将捕获的鱼带至安全位置享用的全过程,以此抽象出全局探索和局部开发两个核心阶段。OOA算法具有参数少、结构简单、收敛速度快、全局寻优能力强等特点。自提出以来,已在函数优化、机器学习参数调优(如CatBoost模型)、路径规划等多个领域展现出良好性能,为解决复杂优化问题提供了新的有效工具。

qq_42212808的博客 273

Python做数据可视化—折线图

  Python中的折线图可用于分析类似温度,市场等数据的变化趋势等。本人做的小练习是分析一段数据中各任务的运行时长,检测出异常数据(运行时间超出正常时间范围的任务)。自学可在网上下载一些数据作分析。 import csv from matplotlib import pyplot as plt filename = 'run.csv' with open(filename) as f: rea...

qq_36151472的博客 3423

halcon知识:常见三种模板匹配方法总结

halcon的三种模板匹配方法总结,halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。 先要补充点知识:形状匹配常见的有四种情况 一般形状匹配模板shape_model、线性变

gongdiwudu的专栏 4万+

如何使用Python进行时间序列预测的基线预测

本文是翻译大神【Jason Brownlee PhD】的文章,很喜欢大神的时间序列系列的文章,原文在这里。 建立基线对于任何时间序列预测问题都是必不可少的。 性能基准可以使您了解所有其他模型在解决问题上的实际效果。 在本教程中,您将发现如何开发持久性预测,该持久性预测可用于计算Python时间序列数据集的基准性能水平。 ...

Together_CZ的博客 3817

电商行业分析爬虫:抓取行业数据,进行行业分析

电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。

u014481728的博客 1629

JVM高频面试基本问题与知识点整理

JVM高频面试基本问题与知识点整理

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

python 时间序列预测_使用Python进行动手时间序列预测

python 时间序列预测Time series analysis is the endeavor of extracting meaningful summary and statistical information from data points that are in chronological order. They are widely used in applied science...

weixin_26713521的博客 2302

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python中使用LSTM网络进行时间序列预测

Python中使用LSTM网络进行时间序列预测 2017-04-09 21:08来源:AI100 原标题:AI 技术讲座精选:Python中使用LSTM网络进行时间序列预测 长短记忆型递归神经网络拥有学习长观察值序列的潜力。 它似乎是实现时间序列预测的完美方法,事实上,它可能就是。 在此教程中,你将学习如何构建解决单步单变量时间序列预测问题的LSTM预测模型。 在学习完此教程后,您将学

Goldxwang的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python xgb模型 预测_时间序列预测(四):使用XGBoost模型进行时间序列预测

提要接上篇biaobiaodeqiu:时间序列预测(三):使用Keras搭建LSTM Networks时间序列模型​zhuanlan.zhihu.com项目实现的内容完全一致,本篇新增传统的监督回归问题训练方法,本文中选用的是目前工程应用比较广泛和有效的Xgboost的算法项目描述请参考其他篇,内容完全一致,不在累述算法原理请自行Google+陈天奇有关XGBOOST的论文,论文感觉自己还未掌握精...

weixin_39616416的博客 2386

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何使用Python进行时间序列分析与预测

1.背景介绍 时间序列分析和预测是一种对时间顺序有序的观测数据进行分析和预测的方法。它广泛应用于各个领域,如金融、商业、天气、科学研究等。随着数据量的增加,人工智能和机器学习技术的发展为时间序列分析和预测提供了强大的支持。Python是一种流行的编程语言,拥有丰富的数据分析和机器学习库,使其成为时间序列分析和预测的理想工具。 在本文中,我们将讨论以下主题: 背景介绍 核心概念与联系 核心算...

AI天才研究院 999

python做预测_如何使用 Python 进行时间序列预测?

原标题:如何使用 Python 进行时间序列预测? 译者:Hi胡瀚@云+社区翻译社原文链接:https://machinelearningmastery.com/persistence-time-series-forecasting-with-python/原文作者:Jason Brownlee建立基线对于任何时间序列预测问题都是至关重要的。性能基准让您了解所有其他模型如何在您的问题上实际执行。在...

weixin_39685459的博客 400

在Python中使用LSTM和PyTorch进行时间序列预测

原文链接:http://tecdat.cn/?p=8145 顾名思义,时间序列数据是一种随时间变化的数据类型。例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格。诸如长期短期记忆网络(LSTM)之类的高级深度学习模型能够捕获时间序列数据中的模式,因此可用于对数据的未来趋势进行预测。在本文中,您将看到如何使用LSTM算法使用时间序列数据进行将来的预测。 数据集......

大数据部落 1万+

Python知识点:如何使用Python进行时间序列预测

上述步骤展示了一个简单的时间序列预测流程。根据实际情况,你可以选择更复杂的模型,如 SARIMA、季节性分解、或使用机器学习和深度学习模型(如 LSTM)。此外,可以使用更复杂的特征工程和模型选择方法来进一步提高预测的准确性。

杰哥在此的专栏 981

python xgb模型 预测_如何使用XGBoost模型进行时间序列预测

字幕组双语原文:如何使用XGBoost模型进行时间序列预测英语原文:How to Use XGBoost for Time Series Forecasting翻译:雷锋字幕组(Shangru)XGBoost是在有效解决分类和回归问题的一种梯度提升方法。在广泛的预测模型任务中,它快且有效,性能好。它在诸如Kaggle等数据科学竞赛的获胜者中最受欢迎。XGBoost也可以被用于时间序列预测,尽管它需...

weixin_39765339的博客 869

如何使用Python实现LSTM 时间序列预测模型等

如何使用Python实现LSTM 时间序列预测模型等

擅自各种语言算法!欢迎咨询! 979
上一篇: 用 Python 实现所有算法!Github 星标近 5w !
下一篇: 12步轻松搞定Python装饰器 !
普通网友
博客等级 码龄7年 438粉丝 263原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值