终于把时间序列分析的关键点全讲清楚了!

本文探讨了时间序列数据的建模,包括趋势、季节性影响与无法解释的变化,以及如何通过自协方差和自相关函数理解序列特性。重点讲解了加法和乘法模型,并介绍了如何估计均值、方差和预测未来值。赠送《机器学习入门》书籍福利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编辑:机器学习研习院

我是小z。

今天给大家分享一篇时间序列的干货文章。

粉丝福利,文末送两本呼声比较高的《机器学习入门:基于数学原理的Python实战》~

时间序列的定义

一个时间序列过程(time series process)定义为一个随机过程,这是一个按时间排序的随机变量的集合,也就是将每一个时刻位置的点作为一个随机变量。 是索引集合(index set), 决定定义时序过程以及产生观测值的一个时间集合 。其中假定

  • 随机变量 的取值是连续的。

  • 时间索引集合 是离散且等距的。

在整个过程中,都采用以下符号

  • 随机变量(Random variables)用大写字母表示,即 ,同时随机变量的值是从一个分布中采样给出。而且可以为无限多个时间点 定义随机变量。

  • 观测(Observations)用小写字母表示,即 ,观测可以认为是随机变量的实现。但通常在实际中,我们的观测点是有限的,因此定义 个观测是 。

时间序列分析的目标

给定一组时间序列数据,通常会要求回答一个或多个有关它的问题。时间序列数据出现的主要问题类型取决于数据的上下文以及收集数据的原因,下面给出一些常见的目标:

  • 描述:描述时间序列的主要特征,例如:序列是递增还是递减;是否有季节性模式(例如,夏季较高,冬季较低);第二个解释变量如何影响时间序列的值?

  • 监控:检测时间序列行为何时发生变化,例如销售额突然下降,或者突然出现峰值。

  • 预测:从当前值预测时间序列的未来值,并量化这些预测中的不确定性,比如根据今天的气温预测未来几天的温度。

  • 回归:给定多个时间序列以及与这些序列对应的一个额外的值,找到其中的关系。

  • 分类:给定多个时间序列,将它们按照相似性进行分类。

  • ......

时间序列的建模

时间序列数据通常被分解为以下三个组成部分。

  • 趋势(Trend)- 趋势体现的是时间序列数据均值随时间的长期变化。如果趋势存在,它的形状通常会引起人们的兴趣,尽管它可能不是线性的。

  • 季节性影响(Seasonal effect)- 季节性影响是时间序列中以固定间隔重复的趋势。严格来说,季节性效应只是每年都会重复的效应,但在更一般的情况下,可以更广泛地使用该术语来表示任何定期重复的模式。

  • 无法解释的变化(Unexplained variation)- 无法解释的变化是在任何趋势和季节性变化被去除后时间序列中其余的变化。这种无法解释的变化可能是独立的,也可能表现出短期相关性。

因此,时间序列数据的简单模型可以用两种方式表示,分别为

加法模型(Additive):
乘法模型(Multiplicative):

其中 表示趋势, 表示季节, 表示无法解释的变化。在此教程中,给出了两个例子。即当趋势和季节性变化独立作用时,加法模型是合适的,而如果季节性效应的大小取决于趋势的大小,则需要乘法模型。当趋势和季节性变化独立作用时,加法模型是合适的,而如果季节性效应的大小取决于趋势的大小,则需要乘法模型,简单的示意图如下:

  • Example of additive model

a6fa60bd073f08a6e4f9ba9524f4be5a.png

时间序列的特性

(均值、方差、自协方差函数、自相关函数)

给定一个时间序列过程 和观测 ,通常我们会使用以下属性描述其特征。

  • 均值(Mean function)

对所有的 ,时间序列过程的均值函数(mean function)定义为

对于真实的数据,通常我们假定均值为一个常数,因此可以估计均值为

如果数据的平均值不是恒定的,例如由于趋势或季节性变化的存在,则应该用其他方法进行估计,这部分内容后面再讲。

  • 方差(Variance function)

对所有的 ,时间序列过程的方差函数(variance function)定义为

标准差函数定义为

对于真实的数据,通常我们假定方差也为一个常数,因此可以估计方差为

  • 自协方差和自相关函数(Autocovariance and autocorrelation functions)

回忆对任意的随机变量 和 ,协方差以及相关性测量通过以下定义给出

协方差:

相关性:

相关性是介于 -1 和 1 之间的协方差的缩放表现,其中 1 表示强正相关,0 表示独立性,-1 表示强负相关,但通常相关性指的是线性的相关性。

对于一个时间序列过程,定义随机变量 是在不同时间点的测量。它们之间的依赖关系由自协方差和自相关函数描述,添加“auto”前缀以表示两个随机变量测量具有相同的数量。

对于所有的 ,自协方差函数(autocovariance function (ACVF))定义为:

其中

对于所有的 ,自相关函数(autocorrelation function (ACF))定义为:

其中

以上定义都是理想的情况,也就是在时刻 和时刻 均有若干个采样数据,这样才能计算  或者 ,而真实的场景下这一条件却很难实现,因为通常在某一个时间点,只能获得1个采样点的数据。

为了计算真实数据的自协方差和自相关函数,通常假设数据中的依赖结构不随时间变化。也就是说我们假设

也就是说在这个假设下,影响协方差的唯一因素是两个时间序列中随机变量的距离 ,这个距离通常称为滞后lag

因此,唯一需要计算的是自协方差集合:

在这种情况下,自相关函数变为

以上计算方式的前提是假设数据中的依赖结构不随时间变化,协方差不依赖于具体的位置 ,只依赖于滞后 。

Estimating the autocorrelation function

对于时间序列数据,自协方差和自相关函数测量的是单个时间序列 与其滞后lag之间的协方差/相关性。这里给出,以及 时自协方差及自相关函数的计算过程。

lag=0

在滞后 0 (lag=0)处样本的自协方差函数定义为 ,它是 与 之间的协方差。根据上面的公式,计算方式为

因此,滞后 0 处的样本自协方差函数是样本方差。类似地,滞后0处的自相关性为

lag=1

在滞后 1(lag=1)处的样本自协方差函数是时间序列 和 协方差。它是序列与自身移动一个时间点序列的协方差,根据以上公式,协方差和自相关系数计算方式为

其中

是前个观测值;

是后 个观测值;

在实际应用中,通常假设前 n-1 个观测值的均值和方差等于最后 n-1 个观测值的均值和方差,这样可以简化上述表达式。此外,对于协方差公式,使用除数 n 而不是无偏 n-2。显然,当 n 很大时,改变除数对计算几乎没有实际影响。

lag=

时间序列的样本自协方差函数 (ACVF)定义为:

样本自相关函数 (ACF) 定义为

以下链接中找到有助于理解自协方差和自相关函数的交互式示例。

https://shiny.maths-stats.gla.ac.uk/gnapier/Time_Series_ACF/shiny.maths-stats.gla.ac.uk/gnapier/Time_Series_ACF/

Correlogram图的解释

Correlogram讲自相关函数的计算结果作为纵轴,将滞后 作为横轴的一种图。可以很直观的看出时间序列不同lag之间的相关性。Correlogram会告诉时间序列分析师很多关于时间序列的信息,包括趋势的存在、季节性变化和短期相关性。这里用一些例子来说明。

Example - purely random data

考虑由纯随机过程 生成的时间序列,它没有趋势、季节性或短期相关性。原始数据和自相关图如下所示:

434b0fa45a8e1e9e6b64f54d18217922.png

  • 当 时, ,因为它是序列与其自身的相关性,通常忽略该值。

  • 对于没有相关性的纯随机序列,通常在滞后 0 处等于 1,但在其他滞后处没有明显的相关性证据。

Example - short-term correlation

没有趋势或季节性但具有短期相关性的时间序列数据如下图所示,并且在前几个滞后时具有显着正的自相关,随后在较大滞后时值接近零。

996a7ad2746e430a402435d76ba0a152.png

Example - alternating data

没有趋势或季节性但在大值和小值之间交替的时间序列数据显示下图中,并且在奇数滞后时具有负自相关,在偶数滞后时具有正自相关。随着滞后的增加,自相关越来越接近于零。

b2391c9f2cb9c1c9ace3c6c0a8cc934c.png

Example - data with a trend

具有趋势的时间序列数据如下图所示,并且在滞后偏大时仍然具有正自相关。如果趋势随时间下降,则会观察到相同的相关图。

ccda5064ec1affabe3796c45cf4a7694.png

Example - data with a seasonal effect

具有季节性影响的时间序列数据如下图所示,并且在相关图中具有规则的季节性模式。

f210f5a5895aa4da465509e0d98c4245.png

Example - data with a trend and a seasonal effect

具有趋势和季节性影响的时间序列数据显示在下图中,并且在相关图中具有规则的季节性模式,由于趋势的存在,相关图通常具有正值。

41dcae3cc1c0bc1e6f4f95d278381c77.png

平稳性分析

严格平稳
strictly stationary or strongly stationary

严格平稳是一种非常苛刻的条件,给定时序过程 ,对于所有的 以及值 ,如果联合分布  与 相同,则该序列是严格平稳的。换句话说,换句话说,将序列的时间原点移动 对其联合分布没有影响。

当 ,严格平稳意味着对于所有的 ,都有  。这也说明时间序列的均值和方差为常数,即

和 , 当 ,严格平稳意味着对于所有的 ,都有

联合分布只取决于滞后

这反过来意味着理论协方差和相关函数只取决于滞后而不是原始位置。

严格平稳是非常严格的,而真实过程很少符合。一般只有纯粹的随机过程严格平稳,因此使用的更多的是弱平稳。

弱平稳

weakly stationary

给定时序过程  ,如果该时间序列过程是弱平稳的的,那么它需要满足以下条件:

  1. 均值是常数和有限的,即

  2. 方差是常数和有限的,即

  3. 自协方差和自相关函数仅取决于滞后 ,即 以及

严格平稳性和弱平稳性之间的区别在于,后者仅假设前两个矩(均值和方差)随时间是恒定的,而前者假设较高的矩也是恒定的。

Example

定义一个随机游走过程 ,,且

其中 是均为为 0 且方差为 的随机过程。那么 是非平稳的。因为

这说明方差是随时间 变化的。

作者:daydaymoyu
来源:https://zhuanlan.zhihu.com/p/424609116
参考:https://bookdown.org/gary_a_napier/time_series_lecture_notes/ChapterOne.html#time-series-modelling

最后,送书环节

粉丝福利,送两本机器学习入门:基于数学原理的Python实战》,这本书深入浅出地对机器学习算法的数学原理进行了严谨的推导;并利用Python3对各种机器学习算法进行复现,还利用介绍的算法在相应数据集上进行实战,内容很干!

0595d259cb43410ae5216cdcf575b6e6.png

为了提高中奖率(上次中奖率竟然超过10%),继续沿用好友送书,加我微信好友备注“抽奖”,即可参与(已经是好友的不用重复添加,发“抽奖”消息给我就可),12月1日22:00开奖,祝大家好运~

👇扫码加我好友👇

0ab0e65ec01b7d34310c277f386d516d.png

695400f538801b374d12aa1a81f80f40.gif

●用户留存分析,和几种方法。
●品牌知名度分析
<think>好的,用户现在问的是用例分析在规格说明书中的写法,需要详细讲解。之前他已经问过规格说明书怎么写,我给出了一个结构化的框架,其中提到了用例驱动描述。现在他想深入了解用例分析部分的具体写法。 首先,我需要确定用户的需求。可能他正在编写一份规格说明书,特别是功能需求部分,想通过用例分析来详细描述系统行为。用户可能不太清楚如何将用例分析转化为规格说明书中的内容,或者想确保自己正确应用了用例分析方法。 接下来,回顾之前的回答,我已经提到了用例驱动描述,并按模块分解功能,还给了图书管理系统的示例。现在需要更详细地展开,可能包括用例分析的步骤、用例模板、与面向对象设计的结合,以及如何将这些内容整合到规格说明书中。 用户可能需要具体的例子来理解如何编写用例描述,比如用例名称、参与者、前置条件、流程步骤等。同时,可能需要说明如何将用例转化为功能需求,或者如何与非功能需求结合。此外,用户可能对用例图的绘制和如何与UML图结合使用感兴趣。 还要注意用户提到的系统级指令,比如使用正确的LaTeX格式,但在这个回答中可能数学公式不多,不过如果有涉及性能指标或其他数值,可能需要用LaTeX。同时,结构要清晰,分步骤或分点说明。 另外,用户可能存在的深层需求是确保规格说明书足够详细,以便开发团队准确理解和实现需求,避免歧义。因此,需要强调用例分析的具体性和可验证性,比如如何定义成功和失败的场景,如何编写主流程和替代流程等。 最后,需要检查是否覆盖了用例分析的所有关键点,是否提供了足够的示例,以及是否指出了常见错误和解决方法。确保回答结构清晰,逐步引导用户完成用例分析在规格说明书中的编写。</think>以下是关于用例分析在规格说明书中的详细写作方法,结合结构说明和示例: --- ### **一、用例分析的核心作用** 用例分析是**连接用户需求与系统设计**的核心工具,通过场景化描述明确系统如何响应用户行为。在规格说明书中,用例需满足**完整性**(覆盖所有关键交互)和**可追溯性**(需求与测试用例对应)。 --- ### **二、用例分析的写作步骤** #### **1. 识别参与者(Actors)** - **定义**:与系统交互的角色(用户、外部系统)。 - **示例**: ```plaintext - 主要参与者:读者(借阅图书)、图书管理员(审核借阅请求) - 次要参与者:短信平台(发送逾期提醒) ``` #### **2. 定义用例模板** 每个用例需包含以下要素(以图书管理系统为例): | **要素** | **说明** | **示例** | |--------------------|-------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| | **用例名称** | 动词短语,描述交互目标 | 借阅图书 | | **参与者** | 主/次参与者列表 | 读者(主要)、图书管理员(次要) | | **前置条件** | 触发用例的前提 | 读者账号已登录且无逾期记录 | | **后置条件** | 用例完成后的系统状态 | 图书库存减少1,生成借阅记录 | | **主成功场景** | 用户与系统的标准交互流程(按步骤编号) | 1. 读者扫描图书ISBN码<br>2. 系统验证图书可借<br>3. 系统生成借阅记录并更新库存 | | **扩展场景** | 异常或分支流程(如“图书已借出”“用户存在逾期”) | 2a. 图书不可借:系统提示“该图书已被借出” | | **非功能约束** | 性能、安等要求 | 响应时间 ≤2秒,借阅记录需加密存储 | #### **3. 绘制用例图(UML Diagram)** - **作用**:可视化参与者与用例关系。 - **示例**: ```plaintext [读者] --(借阅图书) [读者] --(查询图书) [图书管理员] --(审核借阅请求) (借阅图书) <.. (短信平台) : <<extend>> 逾期时通知 ``` --- ### **三、规格说明书中的用例呈现** #### **1. 功能需求章节的用例描述** - **结构化模板**: ```plaintext **用例编号**: UC-001 **用例名称**: 借阅图书 **参与者**: 读者(主要)、图书管理员(次要) **前置条件**: - 读者已登录系统 - 读者账户无逾期记录 **主流程**: 1. 读者扫描图书ISBN码 2. 系统检查图书库存状态 a. 若图书可借,进入步骤3 b. 若图书不可借,提示错误(扩展场景UC-001a) 3. 系统生成借阅记录,更新库存 **后置条件**: - 图书库存量减1 - 读者账户关联借阅记录 **非功能需求**: - 响应时间 ≤2秒(95%置信度) - 借阅记录加密存储,使用$AES-256$算法 ``` #### **2. 与面向对象设计的结合** - **映射到类与方法**: ```plaintext - 类 `Book`: 属性 `ISBN`, `stock`;方法 `checkAvailability()` - 类 `BorrowRecord`: 方法 `createRecord(userId, ISBN)` ``` - **序列图示例**: ```plaintext 读者 -> 系统: 扫描ISBN 系统 -> Book: checkAvailability() Book --> 系统: 库存状态 系统 -> BorrowRecord: createRecord() 系统 -> Book: updateStock(-1) ``` --- ### **四、用例分析的常见错误与优化** | **错误类型** | **错误示例** | **优化方法** | |--------------------|---------------------------------------|------------------------------------------------| | **模糊的步骤描述** | “系统处理请求” | 明确具体操作,如“系统调用`PaymentService.verify()`” | | **忽略异常流程** | 未定义“用户输入无效ISBN”的处理逻辑 | 为每个主流程步骤添加扩展场景 | | **缺乏量化指标** | “系统响应要快” | 改为“搜索功能响应时间 ≤1.5秒(90%请求)” | --- ### **五、用例分析的验证方法** 1. **走查(Walkthrough)**:与用户确认用例是否覆盖实际场景。 2. **追踪矩阵**:建立用例与测试用例的对应关系(例如UC-001对应测试用例TC-001至TC-003)。 3. **原型验证**:通过界面原型模拟用例流程(如点击“借阅”按钮触发库存更新)。 --- ### **六、示例:完整的用例分析片段** ```plaintext **用例编号**: UC-002 **用例名称**: 归还图书 **参与者**: 读者(主要) **前置条件**: - 读者已登录系统 - 读者账户有未归还图书 **主流程**: 1. 读者扫描图书ISBN码 2. 系统验证该图书属于当前用户未归还记录 3. 系统计算是否逾期 a. 若逾期,进入扩展场景UC-002a(计算费用) 4. 系统更新库存,标记图书为“可借”状态 **扩展场景**: 3a. 逾期费用计算: - 系统根据规则计算费用:逾期天数 × ¥0.5/天 - 生成待支付订单 **非功能需求**: - 费用计算需在0.5秒内完成 - 使用$$ \text{费用} = \max(0, \text{逾期天数}) \times 0.5 $$ 公式 ``` --- 通过以上方法,用例分析可有效转化为规格说明书中的可执行需求,确保开发团队对系统行为达成一致理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值