- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
时间序列分解:从噪声中分离信号
分析时间序列数据有时可能具有挑战性。经常会发生很多事情——随着时间的推移而变化的趋势、重复的模式以及随机噪音。那么我们如何将这种复杂性分解为其核心组件呢?时间序列分解——将时间序列分为趋势、季节性和残差或噪声——帮助我们更好地理解时间序列数据。
在本文中,我们将学习如何将时间序列分解为其关键组成部分。我们将使用Python和每月销售数据的示例数据集来了解这些组件如何组合在一起。让我们开始吧!
什么是时间序列分解?
时间序列分解是一种用于将时间序列分解为其基本组成部分以更好地理解其底层结构的技术。
假设您正在分析几年的销售数据。您可能会注意到销售额呈上升趋势、节日期间的季节性高峰以及似乎不遵循任何模式的随机波动。分解有助于分离这些方面(趋势、季节性和残差),以便您可以单独分析它们。
时间序列分解是将时间序列分解为:
趋势:长期的基本方向
季节性:重复的模式或周期
残差(噪声):去除趋势和季节性后无法解释的变化
这样做可以让您回答以下问题:
我的数据是否存在持续的上升或下降趋势?
特定月份或季度是否存在可预测的模式?
我的数据中有多少是无法轻易解释的噪音?
现在让我们仔细看看不同的组件。
了解时间序列的组成部分
如前所述,时间序列可以被视为三个关键组成部分的组合:
趋势:趋势反映了数据随时间变化的总体方向。它可以是向上(增长)、向下(下降)或持平(稳定)。
例如,销售数据的增长趋势可能表明客户群不断增长,而下降趋势可能表明市场饱和或竞争。因此,识别趋势有助于回答大局问题。
季节性:季节性捕获数据中反复出现的模式或周期,通常由季节、假期甚至客户习惯等外部因素驱动。了解季节性可以帮助您为可预测的波动做好准备并做出明智的业务决策。
残差(噪声):残差是去除趋势和季节性后数据中随机的、不可预测的变化。它们代表了你无法用系统模式解释的“剩余物”。残差通常可用于识别异常。
分解方法
分解时间序列的方法主要有两种:加法分解和乘法分解。它们之间的选择取决于组件之间的关系。
1.加法分解?
在加性模型中,时间序列表示为:
这里,观测值(Y?t?)是趋势(T?t?)、季节性(S?t?)和残差(R?t?)的总和。
该方法假设各组成部分彼此独立,并且季节性的大小随时间保持恒定。无论趋势如何,当季节变化相对稳定时,它的效果最好。
当组件不依赖于系列级别时,请使用加法分解。
2.乘法分解
在乘法模型中,时间序列表示为:
假设各组成部分相互作用,并且季节性效应随趋势成比例增长或缩小。当季节性变化随趋势水平增加或减少时,乘法分解更合适。
当季节性影响随趋势水平变化时,请使用乘法分解。
综上所述,当数据变化恒定时,加法模型更加直观,而乘法模型可以更好地处理缩放效应。
Python中使用statsmodels进行时间序列分解
现在我们已经了解了时间序列分解的基础知识,让我们开始编码。为此,我们将使用statsmodelsPython库。
第1步:导入所需的库并生成示例数据
首先让我们导入所有必需的库和函数:
将numpy导入为np
将pandas导入为pd
将matplotlib.pyplot导入为plt
从statsmodels.tsa.seasonal导入seasonal_decompose
#生成数据集
np.随机.种子(42)
date_range=pd.date_range(start=2015-01-01,end=2024-12-31,freq=M)
趋势=np.linspace(200,1000,len(date_range))
季节性=100*np.sin(2*np.pi*(date_range.month/12))
噪声=np.random.normal(0,50,len(date_range))
销售额=趋势+季节性+噪音
data=pd.DataFrame({日期:date_range,销售:销售})
data.set_index(日期,inplace=True)
步骤2:分解时间序列
在这里,我们进行实际的分解。seasonal_decompose函数采用销售数据列data[“Sales”]并假设一个加法模型,该模型将时间序列表示为其组件的总和。
period?=12指定每月周期,假设数据具有年度季节性模式。结果在分解对象中,我们将趋势、季节性和残差分量提取到单独的变量中以供进一步分析。
#进行分解
分解=season_decompose(data[Sales],model=additive,period=12)
trend_component=分解.tren
文档评论(0)