【金融风险管理】python进行动态波动率的计算和时间序列的预测_python 已实现波动率计算-程序员宅基地

技术标签: 经验分享  python  数据分析  机器学习  【金融风险管理】  课程设计  

概述

根据前一篇文章算计算出来的股票对数收益率,我们在这一篇文章在前文的基础上,分别用朴素法(平均法)简单移动平均法5日简单移动平均法10日移动平均法15日移动平均法来一次指数平滑法二次指数平滑法三次指数平滑法来预测。并且用RMSEADF检验对数据进行平稳性检验。


一、数据整理

1.时间格式转换

先对数据进行整体的概览:
用python中的pandas库的to_datetime()来对时间进行一个格式的转换。

#format = '%Y/%m/%d'
df.index = df.Timestamp
df_ts = df.resample('D').sum()
df_ts
on

2.训练集和测试集

#2007 年 1 月- 2007 年 12 月用作训练数据,2007 年 9 月 – 2007 年 12 月用作测试数据。
train = df_ts['2007/1/4':'2007/12/28']
test = df_ts['2007/10/1':'2007/12/28']
all = df['Count']
date = df['Datetime']
train.tail()
#print(train)

注:由于在划分的时候,数据包含了一年中每一天,而实际的股票开盘日并非每一天都有,所以存在在部分空缺值,故在后面利用dropna()来进行删除空缺行,以便后文分析。

train2 = train[train.loc[:]!= 0].dropna()

3.原始股票对数收益率数据展示

train.Count.plot(figsize=(15,8), title= 'Logarithmic yield', fontsize=14)
test.Count.plot(figsize=(15,8), title= 'Logarithmic yield', fontsize=14)
plt.show()

在这里插入图片描述

二.朴素法

1.计算即可视化

如果数据集在一段时间内都很稳定,我们想预测第二天的价格,可以取前面一天的价格,预测第二天的值。这种假设第一个预测点和上一个观察点相等的预测方法就叫朴素法。简而言之,朴素法就是预测值等于实际观测到的最后一个值。 由于这种局限性,和数据过于理想化,故多数情况下难以适用。

#朴素法:假设第一个预测点和上一个观察点相等的预测方法
Pu_Su = np.asarray(train['Count'])#训练组数据
y_hat = test.copy()#测试组数据
y_hat['naive'] = Pu_Su[len(Pu_Su) - 1]#预测组数据

在这里插入图片描述

2.RMSE检测

# mean_squared_error()均方根值
rmse = sqrt(mean_squared_error(test['Count'], y_hat['naive']))
print("朴素法的RMSE:",rmse)

3.ADF平稳性检测

print("朴素法ADF检验")
adf_test(timeseries)

注:在这里先是def了一个函数adf_test用来ADF检测

三. 简单平均法

1.概述

简单平均法就是用过去所有的值的平均值来作为我们的预测值,也就是所谓的期望均值,简单易计算,但是由于方法简单,限制较少,对数据的敏感度较大,预测效果一般。

#简单平均法
y_hat_avg = test.copy()
y_hat_avg['avg_forecast'] = train['Count'].mean()

在这里插入图片描述

四.简单移动平均法

1.概述

移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。移动平均法根据预测时使用的各元素的权重不同,可以分为:简单移动平均和加权移动平均。

https://baike.baidu.com/item/%E7%A7%BB%E5%8A%A8%E5%B9%B3%E5%9D%87%E6%B3%95/10785547

2. 5日,10日,15日简单移动平均法

由于需要计算不同时间段的移动,需要用窗口函数rolling(window)

#利用窗口函数rolling()
#5日简单移动平均法
Five_y_hat_avg = train2.rolling(window=5).mean()
#print(Five_y_hat_avg)
#print(Five_y_hat_avg['Count'])
#10日简单移动平均法
Ten_y_hat_avg = train2.rolling(window=10).mean()
#print(Ten_y_hat_avg)
#15日简单移动平均法
Fifteen_y_hat_avg = train2.rolling(window=15).mean()

在这里插入图片描述

3.RMSE检验

#简单平均法的RMSE检测
rmse = sqrt(mean_squared_error(test['Count'], y_hat_avg['avg_forecast']))
print("简单移动平均法RMSE:",rmse)

4.ADF平稳性检验

print("5日简单移动平均ADF检验")
adf_test(Five_y_hat_avg2["Count"])

五.指数平滑法

1.概述

指数平滑法实际上是一种特殊的加权移动平均法。其特点是: 第一,指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映市场实际的变化。权数之间按等比级数减少,此级数之首项为平滑常数a,公比为(1- a)。第二,指数平滑法对于观察值所赋予的权数有伸缩性,可以取不同的a 值以改变权数的变化速率。如a取小值,则权数变化较迅速,观察值的新近变化趋势较能迅速反映于指数移动平均值中。因此,运用指数平滑法,可以选择不同的a 值来调节时间序列观察值的均匀程度(即趋势变化的平稳程度)。

  • 一次,二次,三次区别;
  • 1 一次平滑法针对没有趋势和季节性的序列
  • 2 二次平滑法针对有趋势但没有季节的序列(此次所选取的数据较为合适)
  • 3 三次平滑法针对有趋势和有季节性的序列

https://baike.baidu.com/item/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95/8726217

2.一次指数平滑法

y_hat_avg = test.copy()
fit = SimpleExpSmoothing(np.asarray(train['Count'])).fit(smoothing_level=0.6, optimized=False)
y_hat_avg['SES'] = fit.forecast(len(test))

在这里插入图片描述

2.二次指数平滑法

y_hat_avg = test.copy()
fit = Holt(np.asarray(train['Count'])).fit(smoothing_level=0.3, smoothing_slope=0.1)
y_hat_avg['Holt_linear'] = fit.forecast(len(test))

在这里插入图片描述

3.三次指数平滑法

y_hat_avg = test.copy()
fit1 = ExponentialSmoothing(np.asarray(train['Count']), seasonal_periods=7, trend='add', seasonal='add', ).fit()
y_hat_avg['Holt_Winter'] = fit1.forecast(len(test))

在二次和三次之前,先使用:

sm.tsa.seasonal_decompose(train['Count']).seasonal

将时间序列分解,从而得到以下图形:
在这里插入图片描述

从上到下依次是:原始数据、趋势数据、周期性数据、随机变量(残差值)

在这里插入图片描述

由于此数据主要来自于一年时间,季节性参数不好找。

总结

由于python第三方库的强大,在此次的运算中主要运用了,rolling(),to_datetime(),seasonal(),statsmodels.tsa.api

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_65157892/article/details/129450234

智能推荐

51单片机实现LCD1602的显示_pz51 lcd1602-程序员宅基地

文章浏览阅读1.3k次。51单片机实现LCD1602的显示_pz51 lcd1602

视频编解码(一):ffmpeg编码H.264帧类型判断_max_b_frames-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏29次。本文主要讲述ffmpeg编码过程中是如何设置I帧,B帧及P帧的,以及如何通过代码判断帧类型。之前看过很多网上的文章,讲述如何判断I帧,B帧,P帧,然而都是停留在H.264官方文档中的定义,如果不结合ffmpeg,就仿佛纸上谈兵,有点不切实际,而且很多文章将I帧与I Slice混为一谈,将I Slice当做I帧,这其实是错的。本文就结合ffmpeg讲解ffmpeg中是如何编码各种帧类型的,并纠正..._max_b_frames

杂谈---2013年,总结?吐槽?灌水?-程序员宅基地

文章浏览阅读678次。引言   最近看到不少猿友都纷纷总结起自己的2013年,LZ也赶赶热潮,对自己一年的收获与失去来个大阅兵,这确实有助于自己来年的规划。如果各位猿友不喜欢写博客,也应该以其它的方式对自己进行总结,相信总是有好处的。至于LZ,已经习惯了博客,因此就暂且采取这种方式了。不过LZ也只是让手指在键盘上随心而动,所以难免是水文一篇,各位猿友尽可一笑而过。 技术方面    既然是一个技术

SpringSecurity自定义登录验证成功与失败的结果处理_在spring security6.0中,如何不走savedrequestawareauthenti-程序员宅基地

文章浏览阅读1.2k次。需要自定义登录结果的场景当我们登录成功的时候,是由AuthenticationSuccessHandler进行登录结果处理,默认跳转到defaultSuccessUrl配置的路径对应的资源页面(一般是首页index.html)。当我们登录失败的时候,是由AuthenticationfailureHandler进行登录结果处理,默认跳转到failureUrl配置的路径对应的资源页面(一般是登录页login.html)。但是在web应用开发过程中需求是千变万化的,有时需要我们针对登录结果做个性化处理,比如_在spring security6.0中,如何不走savedrequestawareauthenticationsuccesshandler

记一次分析解决ANR过程_main" prio=5 tid=1 suspended-程序员宅基地

文章浏览阅读8.8k次。ANR即Application Not Responding,一直觉得只要在主线程中注意不要执行耗时操作就不会发生ANR,然而事实告诉我我还是too young too simple,sometimes naive 啊。以前也没遇到过ANR,没分析过ANR,问过同事,同事也说没弄过,没办法只能自己找资料了。ANR问题的分类InputDispatchingTimedOut 应用程序主线程在5秒内没_main" prio=5 tid=1 suspended

模型训练前后显卡占用对比、多卡训练GPU占用分析【一文读懂】_模型训练在0卡上消耗资源比1卡上少-程序员宅基地

文章浏览阅读2.5k次,点赞11次,收藏17次。本次博文简单记录,多卡训练任务中 ,各个 GPU 资源占用情况 ,内容较为基础,后续有新的心再继续补充:多卡训练任务中,主卡需要承担和其他卡之前的通信,可以看到 :实验一:0,1,2,3 四卡训练,0 号主卡多了 3个 通信 进程..._模型训练在0卡上消耗资源比1卡上少

随便推点

ArcSDE10.x创建企业级地理数据库报:The geodatabase system table could not be created.GDB_Items : Error (-51)_arcmap建立数据库gdb_tables_last_modified : error (-51)-程序员宅基地

文章浏览阅读8.7k次。环境ArcGIS10.x for Desktop、Oracle11g问题使用ArcGIS 10.x for Desktop的Create Enterprise Geodatabase工具创建企业级地理数据库,出现错误:Executing: EnableEnterpriseGeodatabase "Database Connections\Connection to 10.20.128.230.sd_arcmap建立数据库gdb_tables_last_modified : error (-51)

实践计算机系统要素—编译器(1)_计算机编译器是什么-程序员宅基地

文章浏览阅读898次。 2009.11.08 晚上 于浦东家中 每当有所收获,便欣喜若狂,每每这时都非常渴望能够将这份喜悦与大家一起分享。我读过计算机书籍不能算多,但也不少,给我冲击最大的有三本书,游戏编程大师技巧(3D版),道法自然,计算机系统要素,大师技巧让我感慨怎么能有人将游戏开发讲解的如此透彻,让人感觉直击理论本质;道法自然让我感觉到了软件工程和设计模式在实际中是如何被应用的,计算机系统要_计算机编译器是什么

若依前后端分离版导出功能_若依导出功能-程序员宅基地

文章浏览阅读5.1k次。官方文档写的导出功能,我写着报错,所以重新写了个导出功能_若依导出功能

Java-transient关键字_将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被-程序员宅基地

文章浏览阅读135次。一、初识transient关键字1、概念将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。2、实例public class Test { public static void main(String[] args) throws IOException, ClassNotFoundException { write();..._将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被

mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题_phpstrudy of select list is not in group by clause-程序员宅基地

文章浏览阅读144次。今日在用group by 分组的时候遇到了以上问题!看了sql语句一下午也没发现什么问题!百度吧,也没有结果,仔细检查了一下发现我用的是phpstudy新推出的面板,mysql默认的是8.0版本的我并未进行更改一直那么用了!没办法查mysql手册吧!原来是因为:MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQ..._phpstrudy of select list is not in group by clause and contains nonaggregate

mxnet.gluon.data.vision.datasets 各种自带数据集了解一下_visiondataset-程序员宅基地

文章浏览阅读483次。mxnet可以直接调用的数据集有:MNIST(手写数据集)、FashionMNIST(服装数据集,共10类)、CIFAR10(动物&交通工具,共10类)、CIFAR100(含各种各类的事物,共100类)vision.datasetsGluon provides pre-defined vision datasets functions in themxnet.gluon.data.vision.datasetsmodule.Dataset container.Classes.._visiondataset

推荐文章

热门文章

相关标签