时间序列初级模型

本文介绍了如何在R语言中实现简单移动平均(SMA)和指数移动平均(EMA)。通过自定义函数mySMA和myEMA展示了计算过程,并对比了R包TTR中的SMA和EMA函数。此外,还探讨了加权移动平均和趋势移动平均法在处理有趋势的时间序列数据时的重要性。文章提供了具体的代码示例和应用案例,帮助读者理解和应用这些时间序列分析方法。

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

手算时间序列

简单移动平均

简单移动平均道理很简单,不再赘述。
这里提及以下误差计算公式,此公式可以作为模型评估的标准。
在这里插入图片描述

我们先来自己实现一个计算简单移动平均的函数:

mySMA <- function (x, n) {
  sma <- c()
  sma[1:(n-1)] <- NA
  for (i in n:length(x)) {
    sma[i] <- mean(x[(i-n+1):i])
  }
  return(sma)
}

> x = c(2, 3, 3, 4, 2, 3, 3, 5, 2, 3)
> mySMA(x, n = 4)
 [1]   NA   NA   NA 3.00 3.00 3.00 3.00 3.25 3.25 3.25

R 语言中的 TTR 包提供的 SMA 函数也可以实现简单移动平均的计算。首先确保 R 语言解释器的版本在 4.2.0以上(在 RStudio 中键入 R.version 中可查看 R 解释器的版本)。进入 https://cran.r-project.org/web/packages/TTR/index.html ,下载系统对应的 xts, zoo, curl 和 TTR 包所需要的包,并在 RStudio -> Tools -> Installs Packages 中选择下载的包进行安装。随后通过 library(xts) , library(zoo), library(curl)library(TTR) 导入相应的包。

例如对于数据 2 , 3 , 3 , 4 , 2 , 3 , 3 , 5 , 2 , 3 2, 3, 3, 4, 2, 3, 3, 5, 2, 3 2,3,3,4,2,3,3,5,2,3 。 假设当前观测值只受到过去4期数值影响,可以通过如下的方法计算:

> x = c(2, 3, 3, 4, 2, 3, 3, 5, 2, 3)
> SMA(x, n = 4)
 [1]   NA   NA   NA 3.00 3.00 3.00 3.00 3.25 3.25 3.25

加权移动平均法

在这里插入图片描述

趋势移动平均法

简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。
在这里插入图片描述
这里我放一个例题方便理解一下:
在这里插入图片描述

指数移动平均

首先我要讲一下指数移动平均的优势特点(为什么要引出指数移动平均?)
在这里插入图片描述

一次指数平滑法

在这里插入图片描述
这里提及一个小细节,关于α的取值问题
在这里插入图片描述

老样子,我们先来试着自己实现一下指数移动平均:

myEMA <- function (price,n){
  ema <- c()
  ema[1:(n-1)] <- NA
  ema[n]<- mean(price[1:n])
  beta <- 2/(n+1)
  for (i in (n+1):length(price)){
    ema[i]<-beta * price[i] + 
      (1-beta) * ema[i-1]
  }
  return(ema)
}
> x = c(2, 3, 3, 4, 2, 3, 3, 5, 2, 3)
> myEMA(x, n = 4)
 [1]       NA       NA       NA 3.000000 2.600000
 [6] 2.760000 2.856000 3.713600 3.028160 3.016896

再来试试 TTR 包提供的指数移动平均:

> EMA(x, n=4)
 [1]       NA       NA       NA 3.000000 2.600000
 [6] 2.760000 2.856000 3.713600 3.028160 3.016896

二次指数平滑法

在这里插入图片描述
在这里插入图片描述

三次指数平滑法

在这里插入图片描述
最后附上R语言进行以上时间序列分析的包和内置函数
R语言关于SMA,EMA,DEMA,WMA函数的理解
ps.SMA是简单移动平均;EMA是一次指数移动平均;DEMA是二次指数平滑;WMA是加权平均法。(其中DEMA是否可以高次指数平滑,仍需探究)

### 时间序列预测中的混合模型 #### 方法论概述 时间序列预测中的混合模型通常指的是结合两种或更多不同类型的模型来提高预测性能的方法。这些模型可以是统计学上的(如ARIMA)、机器学习的(如XGBoost),或者是基于深度学习的技术(如LSTM)。通过组合多个模型的优点,混合模型能够提供更稳健和精确的时间序列预测。 对于特定的应用场景,比如企业级预测精度的需求,在实践中经常采用的是将传统的时间序列分解技术与现代机器学习算法相结合的方式[^1]。例如,Holt-Winters指数平滑法作为一种经典的时间序列分析工具被广泛应用于短期销售量、库存水平等方面的预测;而当它与其他高级建模策略联合使用时,则能显著提升整体表现。 #### 实现方式 一种常见的实现方式是在预处理阶段利用简单的线性回归或其他基础模型捕捉数据的主要趋势成分之后,再引入复杂的非参数化方法去拟合残差部分。这样做的好处是可以减少复杂度较高的组件所需承担的工作负荷,并使得最终集成后的系统更加易于解释和维护。 另一种流行的方案就是应用堆叠泛化(Stacked Generalization),即先训练一组初级分类器/回归器作为基底层(Base Layer), 然后再构建一个次级元学习者(Meta-Learner) 来综合所有底层估计的结果给出最终输出。这种方法不仅适用于静态特征空间下的监督学习任务, 对于动态变化的时间序列同样有效。 ```python from statsmodels.tsa.holtwinters import ExponentialSmoothing as HWES import xgboost as xgb # 假设我们有一个名为dataframe的时间序列DataFrame对象 model_holts_winter = HWES(dataframe['value'], seasonal='mul', trend='add').fit() residuals = dataframe['value'] - model_holts_winter.fittedvalues dtrain = xgb.DMatrix(residuals.values.reshape(-1, 1)) params = {'objective': 'reg:squarederror'} bst = xgb.train(params=params, dtrain=dtrain) def predict_combined_model(new_data_point): hw_prediction = model_holts_winter.predict(start=len(dataframe), end=len(dataframe)+len(new_data_point)-1) residual_pred = bst.predict(xgb.DMatrix((new_data_point-hw_prediction).reshape(-1, 1))) final_predictions = hw_prediction + residual_pred return final_predictions ``` #### 案例研究 在一个实际的企业环境中实施上述提到的混合模型可能涉及以下几个方面: - **需求评估**:确定业务目标并识别哪些因素会影响所关心的关键绩效指标(KPI)。 - **数据准备**:收集历史记录以及其他潜在影响变量的数据集,并对其进行清洗整理以便后续加工处理。 - **模型开发**:选择合适的初始模型进行初步探索性数据分析(EDA),随后设计更为精细的复合结构用于进一步改进准确性。 - **验证测试**:运用诸如k-fold交叉验证这样的手段确保新创建出来的解决方案具备良好的泛化能力。 - **部署上线**:一旦完成内部调试并通过必要的审批流程后就可以正式投入使用了。 在这个过程中,可能会遇到各种挑战,例如如何有效地管理计算资源以支持大规模运算操作,怎样调整超参数使各组成部分之间达到最佳平衡等等。然而只要遵循科学严谨的研发路径加上持续不断的迭代优化就有可能获得满意的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值