使用两种不同的方法估计几何布朗运动随机过程的参数

使用两种不同的方法估计几何布朗运动随机过程的参数

文章目录

  • 一、说明
  • 二. 随机过程
  • 三、马尔可夫过程
    • 3.1. 维纳进程
    • 3.2. 广义维纳过程
    • 3.3. 伊藤进程
  • 四、几何布朗运动 (GBM)
  • 五、用于估计GBM工艺参数的MLE方法
    • 5.1. 最大似然估计如何工作?
    • 5.2、将模型拟合到一组历史数据
  • 六、估算GBM工艺参数的财务方法
  • 七、结论

一、说明

称为几何布朗运动(又名随机游走)的随机过程是最常见和最普遍使用的过程,因为它简单且应用广泛。在本文中,我将展示如何使用两种不同的方法估计几何布朗运动过程的参数。

第一种方法是将随机过程(即几何布朗运动模型)拟合到一组历史数据中。第二种方法是简单地计算预期回报和历史数据的波动性。在第一种方法中,我们需要对参数的初始值做出假设。

二. 随机过程

随机过程只不过是一个数学定义的方程式,随着时间的推移可以产生一系列结果,这些结果本质上不是确定性的;也就是说,一个不遵循任何简单可辨别规则的方程式或过程(例如价格)将每年增加 X 个百分点,或者收入将增加 X 加 Y 个百分点的系数。

根据定义,随机过程是不确定的,可以将数字代入随机过程方程中,每次都获得不同的结果。例如,股票价格的路径本质上是随机的,人们无法可靠地预测确切的股票价格路径。

然而,价格随时间的演变被包裹在产生这些价格的过程中。这个过程是固定的和预先确定的,但结果不是。

因此,通过随机模拟,我们创建了多种价格路径,获得这些模拟的统计抽样,并根据用于生成时间序列的随机过程的性质和参数,对实际价格可能采取的潜在路径进行推断。

三、马尔可夫过程

在有效市场中,金融价格应呈现随机游走模式。更准确地说,假设价格遵循马尔可夫过程,这是一个独立于其历史的特定随机过程——未来价格的整个分布仅依赖于当前价格。过去是无关紧要的。

这些过程由以下组件构建,按复杂性递增的顺序进行描述。

3.1. 维纳进程

维纳过程描述了一个变量 Δz,其变化在区间 t 上测量,使其平均变化为零,方差与 Δt 成正比:
在这里插入图片描述
如果是一个标准的正态变量 N(0, 1),则可以写成
在这里插入图片描述
此外,增量 z 随时间变化是独立的。

3.2. 广义维纳过程

广义维纳过程描述了由维纳过程建立的变量 Δx,此外还有每单位时间的恒定趋势 a 和波动率 b:
在这里插入图片描述
一个特殊情况是马丁格尔,这是一个零漂移随机过程,a = 0,导致 E(Δx) = 0。这具有方便的属性,即对未来值的期望是当前值
在这里插入图片描述

3.3. 伊藤进程

伊藤过程描述了一个广义的维纳过程,其趋势和波动性取决于基础变量的当前值和时间:在这里插入图片描述

这是一个马尔可夫过程,因为分布仅取决于随机变量 x 的当前值以及时间。此外,这一过程中的创新具有正态分布。

四、几何布朗运动 (GBM)

伊藤过程的一个特殊例子是几何布朗运动 (GBM),对于变量 S 来说,它被描述为

在这里插入图片描述

该过程是几何的,因为趋势和波动率项与 S 的当前值成正比。股票价格通常就是这种情况,股票价格的回报率似乎比原始美元回报率更稳定。它也用于货币。

由于 ΔS/S 仅代表资本增值,从股息支付中抽象出来,μ年化增长率或漂移率,它代表资产的预期总回报率减去收入支付率,或股票的股息收益率。σ是年化波动率或冲击率,它代表资产所有回报的标准差。

这个模型特别重要,因为它是布莱克-斯科尔斯公式的基础过程。这种分布的关键特征是波动率与 S 成正比。

这确保了股价将保持正值。事实上,随着股价下跌,其方差减小,这使得它不太可能经历大幅下跌,从而将价格推至负值。

由于该模型的极限是
在这里插入图片描述

S 服从对数正态分布。这个过程意味着,在区间 T − t = τ 上,期末价格的对数分布为
在这里插入图片描述

其中 ε 是标准化正态变量。

对数正态分布是否比正态分布好得多取决于所考虑的跨度。如果地平线只有一天,那么对数正态与正态假设的选择并不重要。

鉴于典型的波动性,股价在一天内跌破零的可能性极小。另一方面,如果以年为单位来衡量地平线,则这两个假设确实会导致不同的结果。

对数正态分布更现实,因为它可以防止价格转为负值。在模拟中,该过程通过具有正态分布的小步长近似,均值和方差由下式给出
在这里插入图片描述

只需一个步骤 n = 1,分布必须是正态的。随着步长 n 的增加,分布趋向于对数正态分布。

虽然该模型对股票价格建模非常有用,但也有缺点。假定价格增量具有正态分布。在实践中,我们观察到价格变化的尾巴比正态分布更肥。

退货也可能出现变化差异。此外,随着时间间隔 Δt 的缩小,波动性也会缩小。这意味着在短时间间隔内不会发生大的不连续性。

实际上,一些资产会经历离散的跳跃,例如大宗商品。因此,可能必须改变随机过程以适应这些观察结果。

3.1. 股票价格遵循几何布朗运动过程的示例
考虑一只不支付股息、预期年回报率为 10% 、年波动率为 20% 的股票。如果当前价格为 100 美元,那么下周股价的变化过程是什么?如果当前价格为 10 美元怎么办?

股价的过程是
在这里插入图片描述
其中是从标准正态分布中随机抽取。如果间隔为一周,则 Δt = 1/52 = 0.01923。

趋势为 μΔt = 0.10 × 0.01923 = 0.001923,波动率为 σ√Δt = 0.20 × √0.01923 = 0.027735。

几何布朗运动过程为 S = $100(0.001923 + 0.027735× ε)

初始股价为 100 美元,这给出 S = 0.1923 + 2.7735。

初始股价为 10 美元,这给出 S = 0.01923 + 0.27735。趋势和波动性缩小了十倍。

现在,假设一周内的价格由 S = $100exp(R) 给出,其中 R 的年度期望值为 10%,波动率为 20%。为 S 构建 95% 置信区间。

对应于 95% 置信区间的标准正态偏差为 α_MIN = −1.96 和 α_MAX = 1.96。换句话说,我们在每条尾巴上有 2.5%。

R 的 95% 置信带的下限称为 R_MIN:

R_最小值 = μΔt − 1.96σ√Δt = 0.001923 − 1.96 × 0.027735 = −0.0524

R 的 95% 置信带的上限称为 R_MAX:

R_MAX = μΔt + 1.96σ√Δt = 0.001923 + 1.96 × 0.027735 = 0.0563。

这给出S_MIN = $100exp(−0.0524) = $94.89,S_MAX = $100exp(0.0563) = $105.79。

五、用于估计GBM工艺参数的MLE方法

最大似然估计,简称 MLE,是一种传统的概率方法,可以应用于属于任何分布的数据,即正态分布、泊松分布、伯努利分布等。有了关于数据分布的先验假设或知识,最大似然估计有助于找到最有可能发生的分布参数。

例如,假设我们有假设呈正态分布的数据,但我们不知道其均值和标准差参数。最大似然估计以迭代方式搜索可能生成分布的最可能的均值和标准差。

此外,最大似然估计可以应用于回归和分类问题。因此,最大似然估计只是一种搜索最合适参数的优化算法。

由于我们先验地知道数据分布,因此算法会迭代尝试找到其模式。这种方法非常通用,因此设计一个用户定义的 Python 函数来解决特定的机器学习问题非常重要。

5.1. 最大似然估计如何工作?

术语“可能性”可以定义为所考虑的参数可能生成数据的可能性。似然函数只是数据分布的联合概率函数。

最大似然函数是与最可能参数一起使用的优化似然函数。函数最大化是通过对似然函数相对于分布参数进行微分并单独设置为零来执行的。

如果我们回顾概率的基础知识,我们可以理解联合概率函数只是单个数据点的概率函数的乘积。对于大型数据集,实际上很难制定联合概率函数并根据参数对其进行微分。

因此,MLE引入了对数似然函数。最大化严格递增函数与最大化其对数形式相同。

通过似然函数或对数似然函数获得的参数是相同的。对数形式使大乘积函数能够转换为求和函数。

对各个似然函数求和并对其进行微分是很容易的。由于数学工作的这种简单性,最大似然估计可以解决具有数百万个数据点的庞大数据集!

对于每个问题,用户都需要制定模型和分布函数以得出对数似然函数。优化是使用 SciPy 库的“优化”模块执行的。

该模块有一个名为“最小化”的方法,可以最小化与输入参数相关的任何输入函数。在我们的例子中,MLE寻找最大化对数似然函数。

因此,我们将负对数似然作为“最小化”方法的输入函数提供。它根据每个输入参数对用户定义的负对数似然函数进行微分,并以迭代方式得出最佳参数。

通过 MLE 方法找到的参数称为最大似然估计。在续集中,我们通过一个示例讨论了最大似然估计的 Python 实现。

5.2、将模型拟合到一组历史数据

我们的估计日期是 2023 年 12 月 31 日。为了预测 2024 年的以色列通货膨胀率,我选择了来自以色列银行的消费者价格指数 (CPI) 数据集。该数据集基于 2018 年 12 月 31 日至 2023 年 12 月 31 日的消费者价格指数。

5 年的时间窗口通常是金融精算师的规范性、代表性和公认的时间窗口。

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from numpy import random as rn
from scipy import stats
import scipy.stats as si
import seaborn as sns
from scipy.stats import normimport pandas as pd
cpi = pd.read_csv('CPI_Total.csv')
cpi.head()

在这里插入图片描述

cpi.tail()
在这里插入图片描述

让我们选择μ的初始值,即年化增长率或漂移率,并σ年化波动率或冲击率

μ = a = 0.015
σ = b = 0.001

让我们重命名 CPI 列

df = cpi.copy()
df = df.rename(columns={"CPI": "S"})
df

在这里插入图片描述

现在,让我们为 ΔS 创建一个新列

df["S(t+1)-S(t)"] = 0.00
for i in range(0,len(df["DATE"])-1):df["S(t+1)-S(t)"][i] = df["S"][i+1]-df["S"][i]
df

在这里插入图片描述

现在,让我们为 μS 创建一个新列

df[“μS(t)”] = 0.00
for i in range(0,len(df[“DATE”])-1):
df[“μS(t)”][i] = μ*df[“S”][i]
df
在这里插入图片描述

现在,让我们为 ΔS - μS 创建一个新列

df[“S(t+1)-S(t)-μS(t)”] = 0.00
for i in range(0,len(df[“DATE”])-1):
df[“S(t+1)-S(t)-μS(t)”][i] = df[“S(t+1)-S(t)”][i]-df[“μS(t)”][i]
df
在这里插入图片描述

让我们创建一个名为 NORMDIST 的函数,该函数返回指定均值和标准差的正态概率密度函数(又称“概率质量函数”)。此函数在统计学中具有非常广泛的应用,包括假设检验。

def NORMDIST(x):
z = si.norm.pdf(x,mu,sigma)
return (z)
现在,让我们为似然函数创建一个新列

df[“pdf”] = 0.00
for i in range(0,len(df[“DATE”])-1):
mu = 0.00
sigma = σ*df[“S”][i]
x = df[“S(t+1)-S(t)-μS(t)”][i]
df[“pdf”][i] = si.norm.pdf(x,mu,sigma)
df
在这里插入图片描述

现在,让我们为对数似然函数创建一个新列

df[“ln(pdf)”] = 0.00
for i in range(0,len(df[“DATE”])-1):
df[“ln(pdf)”][i] = np.log(df[“pdf”][i])
df
在这里插入图片描述

现在,让我们总结一下对数似然列

df[“ln(pdf)”].sum()
-5498.5108982847005

现在,让我们找到使所有对数似然值之和最大化的μ和σ

from scipy.optimize import fmindef ImpliedBrownianMotion(c):df = cpi.copy()df = df.rename(columns={"CPI": "S"})df["S(t+1)-S(t)"] = 0.00df["μS(t)"] = 0.00df["S(t+1)-S(t)-μS(t)"] = 0.00df["pdf"] = 0.00df["ln(pdf)"] = 0.00for i in range(0,len(df["DATE"])-1):df["S(t+1)-S(t)"][i] = df["S"][i+1]-df["S"][i]df["μS(t)"][i] = c[0]*df["S"][i]df["S(t+1)-S(t)-μS(t)"][i] = df["S(t+1)-S(t)"][i]-df["μS(t)"][i]mu = 0.00sigma = c[1]*df["S"][i]x = df["S(t+1)-S(t)-μS(t)"][i]df["pdf"][i] = si.norm.pdf(x,mu,sigma)df["ln(pdf)"][i] = np.log(df["pdf"][i])f1 = df["ln(pdf)"].sum()val = -f1print("[μ, σ]=",c,", Object Function Value:", val)return(val)c = fmin(ImpliedBrownianMotion, [0.015,0.001])

在这里插入图片描述

μ = c[0]
σ = c[1]
print("The monthly drift rate obtained via the MLE approach is:", "{:.4%}".format(μ))
print("The monthly volatility rate obtained via the MLE approach is:", "
{:.4%}".format(σ))

通过MLE方法获得的月度波动率为:0.1792%
通过MLE方法获得的月度波动率为:0.3420%

六、估算GBM工艺参数的财务方法

我们的估计日期是 2023 年 12 月 31 日。为了预测 2024 年的以色列通货膨胀率,我选择了来自以色列银行的消费者价格指数 (CPI) 数据集。该数据集基于 2018 年 12 月 31 日至 2023 年 12 月 31 日的消费者价格指数。

5 年的时间窗口通常是金融精算师的规范性、代表性和公认的时间窗口。

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from numpy import random as rn
from scipy import stats
import scipy.stats as si
import seaborn as sns
from scipy.stats import normimport pandas as pd
cpi = pd.read_csv('CPI_Total.csv')
cpi.head()

在这里插入图片描述

cpi.tail()

在这里插入图片描述

让我们重命名 CPI 列

df1 = cpi.copy()
df1 = df1.rename(columns={"CPI": "Price"})
df1

在这里插入图片描述

现在,让我们为相对回报创建一个新列

df1["Return"] = 0.00
for i in range(0,len(df1["DATE"])-1):df1["Return"][i] = df1["Price"][i+1]/df1["Price"][i]-1
df1

在这里插入图片描述

要从一组时间序列数据中估计μ参数,可以通过将漂移率和设置为相对回报的平均值来找到 μ

mu = df1["Return"].mean()
print("The monthly drift rate as the average of all the relative returns is:", "{:.4%}".format(mu))

所有相对回报的平均月漂移率为:0.1764%

要从一组时间序列数据中估计σ参数,可以通过将漂移率和设置为所有相对回报的标准差来找到σ

sigma = df1["Return"].std()
print("The monthly volatility rate as the standard deviation of all the relative returns is:", "{:.4%}".format(sigma))

月波动率是所有相对回报的标准差为:0.3424%

七、结论

models = ['MLE','Finance','Initial Values']
drift_rate = [μ, mu, a]
volatility_rate = [σ, sigma, b]
compare_models = pd.DataFrame({ "Approaches": models, "drift rate": drift_rate, "volatility rate": volatility_rate })
compare_models

在这里插入图片描述

正如我在本文中所展示的,有几种方法可以估计 GBM 过程的参数。为了估计这些参数,可以将模型拟合到一组历史数据中,或者计算预期回报和历史数据的波动性,或者更确切地说,对这些值做出假设。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024全国青少年信息素养大赛图形化编程复赛真题大全

2024年全国青少年信息素养大赛图形化编程复赛全国结束了,经过了3次各个赛区(7月6日、13日、20日)图形化编程小低组、小高组整体来看,真题出的都比较有水平,2024年全国青少年信息素养大赛总决赛将在2024年8月16日~20日在…

MySQL面试篇章——MySQL索引

文章目录 MySQL 索引索引分类索引创建和删除索引的执行过程explain 查看执行计划explain 结果字段分析 索引的底层实现原理B-树B树哈希索引 聚集和非聚集索引MyISAM(\*.MYD,*.MYI)主键索引辅助索引(二级索引) InnoDB&a…

PRC gRPC 框架

概述 RPC主要目的在于让开发者,能够方便的调用远程服务器上的服务,而不需要关注底层的网络通信细节。其是一种进程间通信技术,允许程序在不同计算机上执行代码。 RPC技术主要用于分布式系统、微服务架构以及需要进行跨网络调用服务的应用中…

项目实战二 HIS项目

目标: 项目的操作流程: 开发体系 前端开发:负责页面的编写 HTML CSS JavaScript 后端开发:看不到 摸不着的功能 常用开发语言 PHP JAVA Python 框架 : 半成品 做好的功能模块 版本控制 Git 分布式版本控…

鼠标连点器:是什么?如何用?鼠标自动点击器好用吗?说明书详细版(国内外6款电脑鼠标连点器分享)值得收藏!

知识科普1:鼠标连点器是什么? ⭕答:鼠标连点器,又称为鼠标点击器或自动点击器,是一种能够模拟鼠标点击操作的计算机软件。 鼠标连点器可以根据用户设定的参数,自动进行连续的鼠标点击操作,从而…

SQL labs-SQL注入(三)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言: 盲注简述:是在没有回显得情况下采用的注入方式,分为布尔盲注和时间盲注。 布尔盲注:布尔仅有两种形式,ture&#…

【LLM】-05-提示工程-部署Langchain-Chat

目录 1、软硬件要求 1.1、软件要求 1.2、硬件要求 1.3、个人配置参考 2、创建cuda环境 3、下载源码及模型 4、配置文件修改 5、初始化知识库 5.1、训练自己的知识库 6、启动 7、API接口调用 7.1、使用openai 参考官方wiki,本文以Ubuntu20.04_x64&#xf…

微信小程序数组绑定使用案例(二)

一、数组事件绑定&#xff0c;事件传递数据 1.wxml <text>姓名&#xff1a;{{name}} </text> <block wx:for"{{list}}"><button bind:tap"nameClick2" data-name"{{item}}">修改:{{item}}</button> </block&…

想学习Python爬虫的宝子们可以看过来,从基础开始看这一篇文章就够了!

1. 预备知识 学习者需要预先掌握Python的数字类型、字符串类型、分支、循环、函数、列表类型、字典类型、文件和第三方库使用等概念和编程方法。 2. Python爬虫基本流程 a. 发送请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;Request包含&am…

单调栈(随缘复习到了,顺手刷了)

也是不知道为什么突然又复习到单调栈了&#xff0c;所以顺手刷了三道题&#xff0c;总结一下 P6503 [COCI2010-2011#3] DIFERENCIJA 思路&#xff1a;这题是要求每个子区间里面的最大值和最小值的差&#xff0c;我们一开始想的必然是纯暴力呀&#xff0c;但是一看这数据&#…

自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感…

MySQL聚合函数(DQL)

先看一下我的表内容和数据&#xff0c;再做接下来的例子和讲解 1.聚合函数的基本语法 SELECT 聚合函数&#xff08;表中的某个字段&#xff09;FROM 表名; 2. 常见的聚合函数 举例 1.统计该企业的数量 select count(idcard) from emp; 2.统计该企业员工的平均年龄 select…

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外&#xff0c; 自Spring3.1开始&#xff0c;Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中&#xff1b;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用&#xff0c;将某些数据写入到缓存中间件…

QSqlRelationalTableModel 增删改查

QSqlRelationalTableModel 可以作为关系数据表的模型类&#xff0c;适用于三范式设计的表&#xff0c;主表中自动加载外键表中的名称。本文实现QSqlRelationalTableModel 为模型类&#xff0c;实现增删改查。 目录 0.表准备 1. 构建表格数据 声明变量 表格、数据模型、选择…

全球价值链贸易核算matlab程序(TIVA与WWZ分解方法大全)以及区域表链接方法

数据来源&#xff1a;基础数据来源于世界银行、国家统计局时间范围&#xff1a;2007年数据范围&#xff1a;国家与行业层面样例数据&#xff1a; 包含内容&#xff1a; 全部数据下载链接&#xff1a;https://download.csdn.net/download/samLi0620/89567902

Redis的操作以及SpringCache框架

目录 一.什么是Redis&#xff1f; 二.Redis的相关知识&#xff1a; 三.如何操作Redis&#xff1f; 1&#xff0c;常用命令&#xff1a; 2.Spring Data Redis &#xff08;1&#xff09; pom.xml 配置&#xff1a; &#xff08;2&#xff09;配置Redis数据源&#xff1a; …

麒麟V10安装nginx、mysql报错缺少包:error while loading shared libraries libssl.so.10

背景 启动nginx报错&#xff1a;error while loading shared libraries libssl.so.10 解决 查看nginx启动文件所依赖的动态链接库&#xff08;即共享库或动态库&#xff09; ldd nginx-1.22.1/sbin/nginx离线安装compat-openssl10包 将依赖包麒麟v10安装openssl10依赖包上…

QT6.6+Opencv 4.6.0完成摄像头显示以及捕获照片的功能

效果图提前展示,想试试再往下看: 在网上找了很久QT的摄像头打开方式,成功了,但是捕获照片一直不成功,我不知道是不是qt6版本的原因:这个多媒体窗口我安装没有效果 QT += multimediawidgets之前使用过python的opencv,于是想到可以使用opencv来显示摄像头以及捕获照片。…

C++完整的学生管理系统

实现功能 添加、删除、修改学生为学生添加、删除、修改成绩将数据保存在students.txt和grades.txt里 效果图&#xff08;部分功能&#xff09; 添加学生 添加成绩 源代码 这里就不分多个文件了 编译时在连接器命令行加入以下命令 -stdc11 #include <ios…

极客天成NVFile全闪存储加速千卡AIGC大模型训练平台

01 中国AI算力核心产业现状 随着人工智能技术的快速发展和广泛应用&#xff0c;AI算力已成为推动数字经济和科技创新的关键基础设施。2024年&#xff0c;中国AI算力核心产业规模持续扩大&#xff0c;在全球AI发展格局中占据重要地位&#xff0c;中国AI算力核心产业规模达到约…