Theta方法:一种时间序列分解与预测的简化方法

Theta方法整合了两个基本概念:分解时间序列和利用基本预测技术来估计未来的价值。

每个数据科学爱好者都知道,时间序列是按一定时间间隔收集或记录的一系列数据点。例如,每日温度或经济指标的月值。把时间序列想象成不同成分的组合,趋势(数据移动的一般方向),季节性(随时间重复的规律模式)和噪声(不能归因于趋势或季节性的随机波动)是时间序列预测的常用方法

什么是θ方法?

Theta方法核心思想是将时间序列数据分解为两个或多个子序列,然后对每个子序列分别应用简单的指数平滑技术。

Theta方法的关键在于其分解过程,它将原始时间序列通过一种特定的“Theta线”分解技术,把时间序列分解为趋势组件和随机波动组件。这种分解有助于更清晰地看到数据中的趋势和周期性变化,从而使预测更为准确。

在应用Theta方法时,通常会使用两条Theta线:一条用于捕捉序列的长期趋势(通常称为Theta(0)),另一条用于描述更短期的波动(Theta(2))。这两个组件经过适当的处理和组合,最终形成最终的预测模型

Theta方法修改时间序列以突出显示不同的组件。这是通过在原始序列中添加或减去趋势分量来完成的。例如,如果我们选择Theta值为2,则我们创建了一个趋势影响加倍的新系列。如果θ为0,则完全去除趋势,只关注周期性和不规则成分。

在对序列进行处理后,它受到基本预测技术的影响,如指数平滑,通过平滑短期波动来突出长期模式。Theta方法的优点在于其简便性和对数据不高的需求,使得它非常适合对于时间序列数据进行快速而有效的预测。此外这种方法在多个预测比赛中表现出色,证明了其有效性。

在Python中创建用于时间序列分析的Theta方法算法

如果你正在试图预测一家商店未来的销售额。你会注意到,这些年来销售额总体上是增长的(趋势),但每年12月的销售额也有一个高峰(季节性)。最重要的是,由于各种不可预测的因素(噪音),销售额会随机波动。

Theta方法可以帮助分离这些不同的影响,从而更容易理解潜在的模式。通过分别关注和预测每个组成部分,然后将这些预测结合起来,可以对未来的销售做出更可靠的预测。

下面我们在Python中创建一个非常简单的算法,它使用Theta方法来预测ISM PMI的未来值。

PMI是指美国供应管理协会(ISM)的采购经理人指数(PMI)。这是一个受到广泛关注的经济指标,可以洞察制造业和服务业的整体健康状况。

PMI指数高于50表明制造业或服务业正在扩张,而低于50则意味着收缩。

算法代码如下:

 importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromstatsmodels.tsa.holtwintersimportExponentialSmoothingdeftheta_decomposition(time_series, theta):trend=np.polyval(np.polyfit(np.arange(len(time_series)), time_series, 1), np.arange(len(time_series)))deseasonalized=time_series-trendtheta_series=deseasonalized+ (theta*trend)returntheta_series, trenddefforecast_theta(time_series, theta, forecast_horizon):# Decompose the time seriestheta_series, trend=theta_decomposition(time_series, theta)# Fit an Exponential Smoothing model on the theta seriesmodel=ExponentialSmoothing(theta_series, seasonal='add', seasonal_periods=12).fit()# Forecast the future valuesforecast_values=model.forecast(forecast_horizon)# Add the trend component back to the forecasted valuestrend_forecast=np.polyval(np.polyfit(np.arange(len(time_series)), time_series, 1), np.arange(len(time_series), len(time_series) +forecast_horizon))final_forecast=forecast_values+trend_forecastreturnfinal_forecastif__name__=="__main__":time_series=pd.read_excel('ISM_PMI.xlsx')time_series['Date'] =pd.to_datetime(time_series['Date'])time_series.set_index('Date', inplace=True)time_series=time_series['Value']# Set theta and forecast horizontheta=0forecast_horizon=12# Forecast future valuesforecast_values=forecast_theta(time_series, theta, forecast_horizon)# Plot the original series and the forecastplt.figure(figsize=(10, 6))plt.plot(time_series[-100:,], label='ISM PMI')plt.plot(pd.date_range(start=time_series.index[-1], periods=forecast_horizon+1, freq='M')[1:], forecast_values, label='Forecast', color='red')plt.title('Theta Method')plt.xlabel('Date')plt.ylabel('ISM PMI')plt.legend()plt.grid()plt.show()

这里我们选择在Theta方法中使用指数平滑算法。

下图显示了使用Theta方法对未来12个月ISM PMI的预测。

我们上面演示了简单的指数平滑算法,因为Theta方法包含了2个步骤:

1、分解时间序列;2、对不同的子序列应用适当的预测

所以这两种方法都可以使用不同的方法进行,我们下面做一个简单的总结:

分解时间序列

Theta方法的分解主要是通过处理时间序列的趋势和季节性组件来实现,其核心思想是将原始序列转化为更简单的子序列,然后对这些子序列进行预测。这种方法虽然在原始提出时没有特别复杂的分解方法,但它依赖于一种关键的转换,即“Theta线”。下面是几种常用于时间序列分解的方法,这些方法可以与Theta方法结合使用或作为其分解步骤的参考:

  1. 趋势和季节性分解:- 经典分解:将时间序列分解为趋势、季节性和随机成分。这种方法通常假设季节性和趋势成分的长度是固定的。- STL分解(季节性和趋势分解):这是一种更为灵活的分解方法,允许季节性组件随时间变化,适用于处理复杂的季节性模式。
  2. 指数平滑状态空间模型:- 单一指数平滑:用于没有趋势和季节性的数据。- 双重指数平滑:添加趋势成分的处理。- 三重指数平滑(Holt-Winters方法):同时处理趋势和季节性变化。
  3. 差分:- 季节性差分:用于减少数据中的季节性效应。- 一阶或高阶差分:用于使非平稳序列平稳化,通过消除趋势成分。
  4. Theta线:- Theta(0)和Theta(2)线:在原始的Theta方法中,时间序列通过调整二阶差分的系数来创建两条Theta线。Theta(0)通常适用于平滑处理,捕捉更长期的趋势;Theta(2)则强调更短期的波动。

通过这些分解技术,可以更好地理解和预测时间序列数据的动态。在实际应用中,选择哪种分解方法取决于数据的特点以及预测的具体需求。Theta方法的优点在于它通过一个相对简单的处理过程,将复杂的时间序列转换为更易于分析和预测的形式。

子序列预测

移动平均(MA)

这是一种简单的技术,通过计算时间序列中一定数量的最近数据点的平均值来进行预测。这种方法适用于平滑数据并预测短期趋势。

指数平滑(Exponential Smoothing)

单一指数平滑适用于没有明显趋势和季节性的数据;双重指数平滑用于有趋势无季节性的数据;三重指数平滑(Holt-Winters方法)适用于同时具有趋势和季节性的数据。

自回归模型(AR)

自回归模型是通过前几期的数据值来预测未来值,这种模型假设未来的值与历史值之间存在线性关系。

机器学习方法

线性回归、决策树和随机森林、深度学习的方法

总结

Theta方法是一种时间序列预测技术,因其操作简单和有效性而在许多应用场景中得到了广泛的使用。这种方法主要通过分解时间序列并应用简单的指数平滑来预测未来的值,特别是在处理具有明显趋势的数据时表现出色。它的主要优势在于易于实施和理解,对于非专业人士也较为友好,且由于其简洁性,Theta方法在计算成本上相当低,适合于大规模数据集的快速预测。

但是Theta方法也存在一些局限。首先,它在原始版本中并不直接处理季节性变化,这可能会限制其在处理季节性明显的时间序列数据时的适用性。此外,该方法对时间序列的趋势做了线性假设,这意味着它可能无法很好地处理趋势非线性或更复杂模式的数据。尽管Theta方法在多个预测比赛中表现优异,但它的理论基础相对薄弱,主要是基于经验的应用导向,这在某些统计严谨性要求较高的场合可能是一个缺点。

尽管Theta方法本身简单,但要达到最佳预测效果,选择合适的参数和组合策略是必需的,这有时需要依靠预测者的经验和实验。因此尽管Theta方法在许多情况下非常有用,但它也需要在特定的应用背景下进行适当的调整和优化。

https://avoid.overfit.cn/post/2aa300c36e934fe69435467c92b52c4d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

取证工作:怎样解锁 LUKS2 加密磁盘?

对于 LUKS2 密码进行恢复,Elcomsoft Distributed Password Recovery (简称 EDPR) 软件可以构建高性能集群,以更快地破解密码。EDPR 软件提供零开销的可扩展性,并支持 GPU 加速,以加快恢复速度。EDPR 可帮助…

Redis-实战篇-编码解决商铺查询的缓存穿透问题(缓存空对象)

文章目录 1、缓存穿透2、常见的解决方案有两种:2.1、缓存空对象2.2、布隆过滤器 3、编码解决商铺查询的缓存穿透问题3.1、queryById3.2、RedisConstants.java 1、缓存穿透 缓存击穿是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效…

【b站-湖科大教书匠】3 数据链路层-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 3 数据链路层 3.1 数据链路层概述 3.1.1 数据链路层在网络体系结…

2024华为数通HCIP-datacom最新题库(变题更新⑤)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、…

【项目管理体系】代码评审规范

1完整性检查 2一致性检查 3正确性检查 4可预测性检查 5健壮性检查 6结构性检查 7可追溯性检查 8可理解性检查 9可验证性检查 软件开发全套资料获取:(本文末个人名片直接获取) 软件产品,特别是行业解决方案软件产品不同于一般的商品…

JavaScript中常用数据类型做布尔值(Boolean)转换

一、前言 二、示例 1、String转Boolean 2、Number转Boolean 3、NaN、Null、undefined 转Boolean 4、Object转Boolean 5、Array转Boolean 6、Symbol转Boolean 三、总结 四、思考 一、前言 JavaScript中,经常需要对一些值进行boolean判断,根据判…

DDoS攻击的最新防御策略:从检测到缓解的全方位方案

在数字化浪潮的推动下,互联网已成为现代社会的血脉。然而,随着网络空间的不断膨胀,分布式拒绝服务(DDoS)攻击如同潜伏在暗处的猛兽,随时准备发动致命一击,威胁着网络的稳定与安全。面对这一严峻…

前端-echarts tooltip展示多项自定义数据

效果如图,鼠标滑动到某一个柱子的时候,出现这一项数据的多个自定义数据,外加自己的模板样式渲染。 希望能展示每一列中的多个自定义数据 代码部分 主要是在data中,value就是实际展示的主数据,其他字段名为自定义的数…

Linux常见操作问题

1、登录刚创建的用户,无法操作。 注:etc/passwd文件是Linux操作系统中存储用户账户信息的文本文件,包含了系统中所有用户的基本信息,比如用户名、用户ID、用户组ID、用户家目录路径。 注:etc: 这个目录存放所有的系统…

Java工具包——Lombok

目录 1. maven仓库手动导入依赖注解 1.1 maven仓库引入依赖 1.2 在类上使用Data注解 1.3 在属性上使用Getter与Setter注解 2. EditStarters插件注解 2.1 安装EditStarters插件 2.2 在pom.xml中进行操作 2.3 在java对象类中使用注解 3. lombok工具使用结果查看 3.1…

腾讯云CVM,CentOS8系统下部署Java-Web项目步骤详解

在CVM中部署项目首先要配置好JDK,Tomcat,Mysql(这里以Tomcat和Mysql为例)。部署JDK和Tomcat的步骤可以参考 CentOS7系统下部署tomcat,浏览器访问localhost:8080/_不积跬步,无以至千里;不积小流,无以成江河。-CSDN博客 我这里从Mysql的安装和设…

HDOJ5616 Jam‘s balance

目录 HDOJ5616 Jams balance题目描述背景输入输出 题解解法一解法二优化 打赏 HDOJ5616 Jam’s balance 题目描述 背景 有 N N N个已知质量的砝码,分别询问给出的 M M M个质量能否被称出 输入 第一行输入一个变量 T T T,表示有 T T T组数据&#xf…

数据预处理功能教程,上传文件生成知识库 | Chatopera

如何快速的生成高质量的知识库? 数据预处理功能教程 | Chatopera 云服务低代码定制聊天机器人 关于 Chatopera Chatopera 云服务重新定义聊天机器人,https://bot.chatopera.com 定制智能客服、知识库、AI 助手、智慧家居等智能应用,释放创新…

【java算法专场】双指针(上)

目录 前言 基本原理 对撞指针 快慢指针 移动零 算法思路 算法步骤 代码实现 算法分析 复写零 算法思路 算法步骤 代码实现 快乐数 算法思路 算法步骤 代码实现 盛最多水的容器 ​编辑算法思路 代码实现 前言 双指针是一种在数组或链表等线性数据结构中高效…

Axure 教程 | 雅虎新闻焦点

主要内容 在雅虎首页,新闻焦点大图和焦点小图同步切换轮播,本课程我们来学习如何实现这个效果。 交互说明 1.页面载入后,切换当前屏幕显示的5张焦点图,小图标处以横线提示当前焦点图。 2.鼠标移入焦点大图,新闻标题显示…

马斯克的SpaceX星舰有多牛?我们离殖民火星还有多远?

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 埃隆马斯克是一位知名的企业家和工程师,他掌握着多家公司,涉及多个领域,包括电动汽车、太空探索、太阳能、脑…

Charles 证书迁移/复制,实现手机安装一次证书可以连接多个设备的 charles 效果

如果你希望在一个手机上安装一次证书,但是使用这个手机可能在不同的时候去连接你自己安装了Charles的不同设备。比如你在公司有有一个电脑,你在家里也有一个电脑,甚至还有一个笔记本等。 如果想实现只给手机安装一次证书,就可以都…

告别数据线!轻松实现iOS和安卓设备间的文件共享

用 AirDroid 的附近传输功能,完全免费,几十个G的文件也可以相互传输。不限制iPhone和iPad数量,多个设备同时登录也不会强迫下线。 当你要在苹果手机和安卓手机之间传输文件,请将AirDroid安装到两台手机上,然后登录同一…

[AI开发配环境]VSCode远程连接ssh服务器

文章目录 总览:ssh连接远程服务器连接免密登录:Docker:ssh连接远程宿主机后,进一步连接并使用其中的docker容器reload window 配置解释器:CtrlP,在上面输入“>python”, 然后选selecet interpreter运行命…

Ubuntu磁盘分区和挂载 虚拟机扩容 逻辑卷的创建和扩容保姆及教程

目录 1、VMware虚拟机Ubuntu20.04系统磁盘扩容 2、Linux的磁盘分区和挂载 3、创建逻辑卷和逻辑卷的扩容 1、VMware虚拟机Ubuntu20.04系统磁盘扩容 通过下图可以看出我们的根磁盘一共有20G的大小,现在我们把它扩容为30G 注:如果你的虚拟机有快照是无…