基于指数平滑模型与ARIMA模型在苹果股价的预测应用

一、项目背景

股票投资已经随着人们生活水平的逐步提高而变得普遍,更多的人开始逐渐关注并参与到股票投资市场中来。股票具有高收益的同时也伴随着较高的风险,我们知道,股票价格的变动受很多因素的影响,因此对于股票价格预测的研究具有非常大的价值,而如果使用对股价影响的因素去建立回归模型并不现实,因为股票价格的变动实则是具有一定的随机性的,且涉及的因素多不胜数,但股票价格的变动具有一定的趋向性,是一个典型的时间序列,时间序列分析是经济研究领域的一个非常重要的方法,它不仅可以描述历史数据随着时间变化所呈现的规律,而且还可以用于经济领域的一些研究和预测。时间序列预测法在股票市场种常用来对股票价格的变化趋势进行预测,从而为投资者提供合理的决策依据。本文基于苹果公司2000年到2020年的股价数据,使用两种时间序列分析模型来对股价进行预测,希望能得到改股票的大约发展趋势。

二、模型介绍

1、指数平滑模型

指数平滑法实际上是一种特殊的加权移动平均法。它拥有以下几个特点: 第一,指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映市场实际的变化。权数之间按等比级数减少,此级数之首项为平滑常数a,公比为(1- a)。第二,指数平滑法对于观察值所赋予的权数有伸缩性,可以取不同的a 值以改变权数的变化速率。如a取小值,则权数变化较迅速,观察值的新近变化趋势较能迅速反映于指数移动平均值中。因此,运用指数平滑法,可以选择不同的a 值来调节时间序列观察值的均匀程度(即趋势变化的平稳程度)。指数平滑法有几种不同形式:一次指数平滑法针对没有趋势和季节性的序列,二次指数平滑法针对有趋势但没有季节性的序列,三次指数平滑法针对有趋势也有季节性的序列。在本次项目中所使用的数据是具有趋势性的股票数据,因此将会在模型中使用二次指数平滑模型,下面将介绍一次指数平滑模型与二次指数平滑模型。

一次指数平滑法

一次指数平滑法的递推公式为:
在这里插入图片描述

其中0≤a≤1,其中, s_(i-1) 是时间步长i(理解为第i个时间点)上经过平滑后的值, x_i 是这个时间步长上的实际数据.a可以是0和1之间的任意值,它控制着新旧信息之间的平衡:当 a接近1,就只保留当前数据点;当 a 接近0时,就只保留前面的平滑值(整个曲线都是平的)。递推关系式:
在这里插入图片描述

二次指数平滑法

二次指数平滑在此基础上将趋势作为一个额外考量,保留了趋势的详细信息。即我们保留并更新两个量的状态:平滑后的信号和平滑后的趋势。公式如下:
在这里插入图片描述

第二个等式描述了平滑后的趋势。当前趋势的未平滑“值”t_i是当前平滑值s_i和上一个平滑值s_(i-1)的差;也就是说,当前趋势告诉我们在上一个时间步长里平滑信号改变了多少。要想使趋势平滑,我们用一次指数平滑法对趋势进行处理,并使用参数β(理解:对t_i的处理类似于一次平滑指数法中的s_i,即对趋势也需要做一个平滑,临近的趋势权重大)。

2、ARIMA模型

ARIMA模型全称为自回归移动平均模型,由AR自回归模型、I差分、MA移动平均模型三部分组合而成。

自回归模型AR

自回归模型描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测。自回归模型必须满足平稳性。自回归模型需要先确定一个阶数p,表示用几期的历史值来预测当前值。p阶自回归模型可以表示为:
在这里插入图片描述

I差分

将不平稳的时间序列转化为平稳的时间序列,或弱平稳时间序列。

移动平均模型MA

移动平均模型能有效地消除预测中的随机波动, 关注的是自回归模型中的误差项的累加,q阶自回归过程的公式定义如下:
在这里插入图片描述

三、获取数据

数据的获取主要是从pandas_datareader模块下的雅虎财经接口get_data_yahoo进行便捷数据获取。获取之前需要使用datetime函数来设置要获取的时间区间。

from pandas_datareader.data import get_data_yahoo
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt 
%matplotlib
start=datetime(2000,1,1)
end=datetime(2020,1,1)
stock_data=get_data_yahoo('AAPL',start,end)

观察数据的前五行

stock_data.head()

在这里插入图片描述
观察数据可得,获取的股票数据共有六个变量。分别是最高价,最低价,开盘价,收盘价,成交量与调整后的收盘价,在本次项目中,我们需要的是预测股票的收盘价格,因此通过切片获得目标变量,然后再查看数据

stock_data=stock_data['Close']
stock_data.head()

在这里插入图片描述

四、数据探索

在获取了数据之后,我们需要对数据进行一定的探索,首先来观察数据是否存在缺失值

stock_data.isnull().sum()

在这里插入图片描述
然后再来观察数据的分布情况

stock_data.describe()

在这里插入图片描述
可以看到获取的数据共有5032条,并且没有缺失值,下面通过可视化的操作更加直观的观察数据。

stock_data.plot()

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值