沈阳市于洪区建设局网站,英文网页,郑州网站建设的公司,有哪些网站可以做推广使用两种不同的方法估计几何布朗运动随机过程的参数 文章目录 一、说明二. 随机过程三、马尔可夫过程3.1. 维纳进程3.2. 广义维纳过程3.3. 伊藤进程 四、几何布朗运动 #xff08;GBM#xff09;五、用于估计GBM工艺参数的MLE方法5.1. 最大似然估计如何工作#xff1f;5.2、…使用两种不同的方法估计几何布朗运动随机过程的参数 文章目录 一、说明二. 随机过程三、马尔可夫过程3.1. 维纳进程3.2. 广义维纳过程3.3. 伊藤进程 四、几何布朗运动 GBM五、用于估计GBM工艺参数的MLE方法5.1. 最大似然估计如何工作5.2、将模型拟合到一组历史数据 六、估算GBM工艺参数的财务方法七、结论 一、说明
称为几何布朗运动又名随机游走的随机过程是最常见和最普遍使用的过程因为它简单且应用广泛。在本文中我将展示如何使用两种不同的方法估计几何布朗运动过程的参数。
第一种方法是将随机过程即几何布朗运动模型拟合到一组历史数据中。第二种方法是简单地计算预期回报和历史数据的波动性。在第一种方法中我们需要对参数的初始值做出假设。
二. 随机过程
随机过程只不过是一个数学定义的方程式随着时间的推移可以产生一系列结果这些结果本质上不是确定性的;也就是说一个不遵循任何简单可辨别规则的方程式或过程例如价格将每年增加 X 个百分点或者收入将增加 X 加 Y 个百分点的系数。
根据定义随机过程是不确定的可以将数字代入随机过程方程中每次都获得不同的结果。例如股票价格的路径本质上是随机的人们无法可靠地预测确切的股票价格路径。
然而价格随时间的演变被包裹在产生这些价格的过程中。这个过程是固定的和预先确定的但结果不是。
因此通过随机模拟我们创建了多种价格路径获得这些模拟的统计抽样并根据用于生成时间序列的随机过程的性质和参数对实际价格可能采取的潜在路径进行推断。
三、马尔可夫过程
在有效市场中金融价格应呈现随机游走模式。更准确地说假设价格遵循马尔可夫过程这是一个独立于其历史的特定随机过程——未来价格的整个分布仅依赖于当前价格。过去是无关紧要的。
这些过程由以下组件构建按复杂性递增的顺序进行描述。
3.1. 维纳进程
维纳过程描述了一个变量 Δz其变化在区间 t 上测量使其平均变化为零方差与 Δt 成正比 如果是一个标准的正态变量 N0 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 $1000.001923 0.027735× ε)
初始股价为 100 美元这给出 S 0.1923 2.7735。
初始股价为 10 美元这给出 S 0.01923 0.27735。趋势和波动性缩小了十倍。
现在假设一周内的价格由 S $100expR 给出其中 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.89S_MAX $100exp0.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(t1)-S(t)] 0.00
for i in range(0,len(df[DATE])-1):df[S(t1)-S(t)][i] df[S][i1]-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(t1)-S(t)-μS(t)”] 0.00 for i in range(0,len(df[“DATE”])-1): df[“S(t1)-S(t)-μS(t)”][i] df[“S(t1)-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(t1)-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(t1)-S(t)] 0.00df[μS(t)] 0.00df[S(t1)-S(t)-μS(t)] 0.00df[pdf] 0.00df[ln(pdf)] 0.00for i in range(0,len(df[DATE])-1):df[S(t1)-S(t)][i] df[S][i1]-df[S][i]df[μS(t)][i] c[0]*df[S][i]df[S(t1)-S(t)-μS(t)][i] df[S(t1)-S(t)][i]-df[μS(t)][i]mu 0.00sigma c[1]*df[S][i]x df[S(t1)-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][i1]/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 过程的参数。为了估计这些参数可以将模型拟合到一组历史数据中或者计算预期回报和历史数据的波动性或者更确切地说对这些值做出假设。