概念理解
马尔科夫链定义通俗来讲,它假设某一时刻状态转移的概率只依赖于它的前一个状态。举例来讲,假如每天的天气是一个状态的话,那个今天是不是晴天只依赖于昨天的天气,而和前天的天气没有任何关系。
某一时刻状态转移的概率只依赖于它的前一个状态,那么我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就定了。
以上马尔科夫链是表示股市模型的,共有三种状态:牛市(Bull market), 熊市(Bear market)和横盘(Stagnant market)。每一个状态都以一定的概率转化到下一个状态。比如,牛市以0.025的概率转化到横盘的状态。这个状态概率转化图可以以矩阵的形式表示。
如果我们定义矩阵𝑃某一位置P(i,j)的值为P(j|i),即从状态i转化到状态j的概率,并定义牛市为状态0, 熊市为状态1, 横盘为状态2. 这样我们得到了马尔科夫链模型的状态转移矩阵为:
代码试验:
马尔科夫链模型状态转移矩阵的性质
假设当前股市的概率分布为:[0.3,0.4,0.3],即30%概率的牛市,40%概率的熊盘与30%的横盘。
import numpy as np
matrix = np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]], dtype=float)
vector1 = np.matrix([[0.3,0.4,0.3]], dtype=float)
for i in range(100):
vector1 = vector1*matrix
print("Current round:", i+1)
print(vector1)
输出:
从第60轮开始,状态概率分布就不变了,一直保持在[0.625 0.3125 0.0625],即62.5%的牛市,31.25%的熊市与6.25%的横盘。
更换[0.7,0.1,0.2]作为初始概率分布:
import numpy as np
matrix = np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]], dtype=float)
vector1 = np.matrix([[0.7,0.1,0.2]], dtype=float)
for i in range(100):
vector1 = vector1*matrix
print("Current round:" , i+1)
print(vector1)
输出:
这次采用了不同初始概率,最终状态的概率分布仍趋于同一个稳定的概率分布[0.625 0.3125 0.0625], 也就是说马尔科夫链模型的状态转移矩阵收敛到的稳定概率分布与我们的初始状态概率分布无关。
一个确定的状态转移矩阵P,它的n次幂Pn在当n大于一定的值的时候也是确定的:
import numpy as np
matrix = np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]], dtype=float)
for i in range(100):
vector1 = matrix*matrix
print("Current round:" , i+1)
print(matrix)
输出:
总结:
马尔可夫链是随机过程的一部分,简单来说,随机过程就是使用统计模型一些事物的过程进行预测和处理 。
过去所有的信息都已经被保存到了现在的状态,基于现在就可以预测未来。这句人生哲理的话也代表了马尔科夫链的思想,某一时刻状态转移的概率只依赖于它的前一个状态 ,我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就能够确定。