最后就是预测精度的检验啦
# 可以看到虽然趋于平稳的时间长度并不完全相同,但是平稳分布是一致的
# 我们下面利用10期数据检测预测精度
data_test = data.iloc[-10:]
_, data_test_states = Markov_forecast(data_test, conclude_P=False)
# 不需要计算转移概率矩阵
correct_count = {}
false_count = {}
for j in range(4):
# 初值定义
correct_count[price_datas[j]] = 0
false_count[price_datas[j]] = 0
for date in range(1, len(data_test_states)):
states = np.array(data_test_states[price_datas[j]])
state_list = np.array((1, 2, 3, 4))
P_matrix = P_all[price_datas[j]]
P_daily = np.linalg.matrix_power(P_matrix, date)
# n步转移概率矩阵等于一步转移概率矩阵^n
predicted_state = state_list[P_daily[:,j]==np.max(P_daily[:,j])][0]
# 找到最大值的位置, 并且选取出对应的状态
# 在某些状态下,该状态转向其他多个状态的概率是等价的,这里放宽要求,只要实际的状态
# 在预测的可能状态其中之一即可
if states[date] == predicted_state:
# 如果成功预测,正确计数+1
correct_count[price_datas[j]] += 1
else:
false_count[price_datas[j]] += 1
令人失望的是,这个预测方法的精确度并没有很完善(哪怕是状态预测),各位大佬如果有更好的解决方法可以提出一下,谢谢指正!