python时间序列分析模块,用python实现ARIMA时间序列预测实例

  python时间序列分析模块,用python实现ARIMA时间序列预测实例

  如果某个观测序列通过序列预处理可以判断为平稳非白噪声序列,那么可以用ARMA模型对该序列进行建模。建模的基本步骤如下:

  (1)求该观测序列的样本自相关系数(ACF)和样本偏自相关系数(PACF)的值。

  (2)根据样本的自相关系数和偏自相关系数的性质,选择合适的ARMA(p,Q)模型进行拟合。

  (3)估计模型中位置参数的值。

  (4)检查模型的有效性。如果模型未能通过测试,转到步骤(2)并重新选择模型进行拟合。

  (5)模型优化。如果拟合模型通过测试,它仍会转向(2)。充分考虑各种情况,建立多个试衣模型,从所有通过测试的试衣模型中选择最佳模型。

  (6)利用拟合模型,预测序列的未来趋势。

  二、代码实现

  1.画出序列图,检查数据的大概分布。

  trainSeting.head()

  Out[36]:

  日期

  2017-10-01 126.4

  2017-10-02 82.4

  2017-10-03 78.1

  2017-10-04 51.1

  2017-10-05 90.9

  名称:销售,数据类型:float64

  plt.plot(训练设置)

  2.稳定性试验

  用于ADF验证

  adf_test的返回值

  测试统计:它代表测试统计。

  p值:代表p值检验的概率。

  滞后:使用滞后k,autolag=AIC将自动选择滞后。

  使用的观察次数:样本数

  临界值(5%):显著性水平为临界值5%。

  (1)假设有单位根,即不稳定;

  (2)显著性水平,1%:严格拒绝原假设;5%:拒绝原假设,10%以此类推。

  (3)看P值和显著性水平A,如果P值小于显著性水平,则拒绝原假设,认为序列稳定;如果大于,就不能拒绝,就认为不稳定。

  (4)看检验统计和临界值。如果检验统计量小于临界值,拒绝原假设,认为序列是稳定的;如果大于,就不能拒绝,就认为不稳定。

  #滚动统计

  定义滚动_统计(时间序列):

  #确定滚动统计数据

  rol mean=PD . rolling _ mean(time series,window=12)

  rol STD=PD . rolling _ STD(time series,window=12)

  #绘图滚动统计:

  orig=plt.plot(时间序列,颜色=蓝色,标签=原始)

  mean=plt.plot(rolmean,color=red ,label=滚动平均值)

  std=plt.plot(rolstd,color=black ,label=Rolling Std )

  plt.legend(loc=best )

  plt.title(滚动平均标准偏差)

  plt.show(block=False)

  ##ADF测试

  从statsmodels.tsa.stattools导入adfuller

  def adf_test(时间序列):

  滚动_统计(时间序列)#绘图

  打印(增强迪基-富勒试验的结果:)

  dftest=adfuller(时间序列,自动标记=AIC )

  df输出=pd。Series(dftest[0:4],index=[测试统计, p值, #Lags Used , Number of Observations Used])

  对于键,值在dftest[4]中。项目():

  output[ critical value(% s) % key]=value #增加以下重要级别的临界值。

  打印(df输出)

  Adf _ test (train setting) #从结果可以看出p值为0.10970.1,所以不能排斥H0,认为这个序列不是平稳序列。

  返回的结果如下

  增强迪基-富勒试验的结果:

  测试统计?-5.718539e 00

  p值?7.028398e-07

  #使用的滞后?0.000000e 00

  使用的观察次数6.200000e 01

  临界值(1%)?-3.540523e 00

  临界值(5%)?-2.909427e 00

  临界值(10%)?-2.592314e 00

  数据类型:float64

  从上面可以看出,p值小于0.05,可以认为是平稳时间序列。

  3.白噪声测试

  acorr _ ljungbox (x,lags=none,boxpierce=false)函数测试没有自相关。

  Lag是延迟周期的数量。如果是整数,则是包含的延迟周期数。如果是列表或数组,所有的时滞都包含在列表中最大的时滞中。

  当boxpierce为True时,意味着除了返回LB统计信息外,还将返回Box和pierce的Q统计信息。

  返回值:

  Lbvalue:测试的统计数据。

  P值:基于卡方分布的P统计量

  bpvalue:((optionsal),float或array)-Box-Pierce测试的测试统计

  bppvalue:((可选),float或array)-基于卡方分布的盒-皮尔斯测试的p值

  从statsmodels.stats.diagnostic导入acorr_ljungbox

  定义测试_随机(ts,滞后):

  p_value=acorr_ljungbox(ts,lags=lag) #lags可自定义

  返回p值

  随机测试(训练,[6,12])

  出[62]:(数组([13.28395274,14.89281684]),数组([0.03874194,0.24735042])

  从上面的分析结果中可以看到,延迟6阶的p值为0.030.05,因此可以拒绝原假设,认为该序列不是白噪声序列。

  4、确定ARMA的阶数

  (1)利用自相关图和偏自相关图

  ####自相关图高级通信功能高级通信功能和偏相关图聚氯化铝铁

  将statsmodels.api作为钐导入

  def acf_pacf_plot(ts_log_diff):

  sm。图形。运输安全管理局。plot _ ACF(ts _ log _ diff,lags=40)# ARIMA q

  sm。图形。运输安全管理局。plot _ pacf(ts _ log _ diff,lags=40) #ARIMA

  acf_pacf_plot(训练设置)#查看数据的自相关图和偏自相关图

  (2)借助AIC、BIC统计量自动确定

  ##借助AIC、BIC统计量自动确定

  从statsmodels.tsa.arima_model导入ARMA

  def proper_model(data_ts,maxLag):

  init_bic=float(inf )

  init_p=0

  init_q=0

  init_properModel=无

  对于np.arange(maxLag)中的p:

  对于np.arange(maxLag)中的问:

  model=ARMA(data_ts,order=(p,q))

  尝试:

  results_ARMA=model.fit(disp=-1,method=css )

  除了:

  继续

  bic=结果_ARMA.bic

  if bic init_bic:

  init_p=p

  init_q=q

  init_properModel=results_ARMA

  初始化bic=bic

  返回初始化bic,初始化p,初始化q,初始化正确模型

  固有_模型(训练设置,40)

  #在统计模型包里还有更直接的函数:

  将statsmodels.tsa.stattools导入为标准时间

  order=ST . ARMA _ order _ select _ IC(ts _ log _ diff 2,max_ar=5,max_ma=5,ic=[aic , bic , hqic])

  订单。bic _最小订单

  我们常用的是美国化学师学会(美国化学家协会)准则,AIC鼓励数据拟合的优良性但是尽量避免出现过度拟合(过度拟合)的情况。所以优先考虑的模型应是美国化学师学会(美国化学家协会)值最小的那一个模型。

  为了控制计算量,我们限制阿肯色州最大阶不超过5、马最大阶不超过5。但是这样带来的坏处是可能为局部最优。

  时间序列是待输入的时间序列,是熊猫。系列类型,最大值ar、最大值妈是p、q值的最大备选值。

  订单。bic _最小订单返回以比克准则确定的阶数,是一个元组类型

  返回值如下:

  订单。bic _最小订单

  Out[13]: (1,0)

  5、建模

  从上述结果中可以看到,可以选择AR(1)模型

  ################################模型######################################

  # AR模型,q=0

  #RSS是残差平方和

  #显示为-1代表不输出收敛过程的信息,真的代表输出

  从statsmodels.tsa.arima_model导入阿里马

  模型=ARIMA(训练设置,顺序=(1,0,0)) #第二个参数代表使用了二阶差分

  results_AR=model.fit(disp=-1)

  plt.plot(训练设置)

  PLT。绘图(results _ ar。拟合值,color=red) #红色线代表预测值

  PLT。标题( RSS:%。4f % sum((results _ ar。安装值-列车设置)* * 2))#残差平方和

  6、预测未来走势

  ############################预测未来走势##########################################

  #预测方法会自动进行差分还原,当然仅限于支持的一阶和2阶差分

  forecast_n=12 #预测未来12个天走势

  预测_AR=结果_AR.forecast(forecast_n)

  预测_AR=预测_AR[0]

  打印(预测_AR)

  打印(预测_ ARIMA _日志)

  [90.49452199 84.05407353 81.92752342 81.22536496 80.99352161 80.91697003

  80.89169372 80.88334782 80.88059211 80.87968222 80.87938178 80.87928258]

  ##将预测的数据和原来的数据绘制在一起,为了实现这一目的,我们需要增加数据索引,使用开源库箭头:

  导入箭头

  定义获取日期范围(开始,限制,级别=天,格式=YYYY-MM-DD ):

  start=arrow.get(开始,格式)

  result=(list(map(lambda dt:dt。格式(格式),箭头.箭头.范围(级别,开始,限制=限制))))

  日期解析2=lambda日期:PD。日期时间。strptime(日期, %Y-%m-%d )

  返回映射(日期解析2,结果)

  # 预测从2017-12-03开始,也就是我们训练数据最后一个数据的后一个日期

  new _ index=get _ date _ range( 2017-12-03 ,forecast_n)

  预测_ ARIMA _日志=pd .系列(forecast_AR,copy=True,index=new_index)

  打印(forecast_ARIMA_log.head())

  ##绘图如下

  plt.plot(训练设置,标签=原始,颜色=蓝色)

  plt.plot(预测阿里马日志,标签=预测,颜色=红色)

  plt.legend(loc=best )

  计划标题(“预测”)

  以上利用python实现稳定时间序列的建模方法就是边肖分享的全部内容。希望能给你一个参考和支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • ,,Python中利用LSTM模型进行时间序列预测分析的实现
  • 时间序列adf检验怎么判断平稳性,
  • python时间序列模型,python时间序列预测代码
  • 用python实现ARIMA时间序列预测实例,python时间序列预测的方法
  • 时间序列模型用于哪种预测,时间序列预测模型实验报告
  • 时间序列分析难不难,时间序列分析问题
  • python最简单的时间序列预测,python 时间序列模型
  • 基于lstm的时间序列预测,基于cnn的时间序列预测模型
  • Eviews时间序列模型,时间序列回归模型步骤
  • 时间序列分析基于r期末考试,时间序列分析选择题
  • 时间序列预测的基本前提,简述常用的几种时间序列预测方法
  • 时间序列的多元线性回归模型,时间序列的经典线性回归模型的基本假定是什么
  • adf检验 python,如果时间序列zt经过adf检验
  • stata时间序列数据处理,时间序列数据怎么用stata做回归分析
  • 时间序列分析及其应用-基于R语言实例(原书第4版),时间序列分析r语言答案
  • 留言与评论(共有 条评论)
       
    验证码: