再次书接上回------

最后就是预测精度的检验啦

# 可以看到虽然趋于平稳的时间长度并不完全相同,但是平稳分布是一致的
# 我们下面利用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

令人失望的是,这个预测方法的精确度并没有很完善(哪怕是状态预测),各位大佬如果有更好的解决方法可以提出一下,谢谢指正!

89 views
Comments
登录后评论
Sign In