从零学习量化交易49循环神经网络股票预测结果评估2

(1)打开Spyder软件,在目录D:\zwPython\zwrk\1_Quant_TensorFlow,新建文件

# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 15:22:24 2025
循环神经网络预测股票效果评价
@author: Administrator
"""

import sys, os
sys.path.append("topqt/")

import numpy as np
import pandas as pd
import tushare as ts
import plotly as py
import plotly.figure_factory as pyff

import math
import arrow
import ffn
import pypinyin
import pandas_datareader as pdr
import matplotlib.pyplot as plt

import zsys2025  # 20250213
import ztools2025 as zt
import ztools_str as zstr
import ztools_data2025 as zdat
import ztools_draw2025 as zdr
import ztools_tq2025 as ztq  # 20250213
import zai_keras2025 as zks

import tensorflow as tf
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense, Input, Dropout
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.utils import plot_model
from tensorflow.keras.callbacks import TensorBoard

import tensorlayer as tl


#
#------------------------------------

#1
print('\n#1,set.sys')
pd.set_option('display.width', 450)    
pd.set_option('display.float_format', zt.xfloat3)    

#2
print('\n#2,读取数据')
#fss='data/df_rnn010.csv'
fss='tmp1/rnn001_48.csv'
df=pd.read_csv(fss)
zt.prx('df',df.tail())
#

#3 
print('\n#3 acc准确度分析')
print('\nky0=10')
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=10,fgDebug=True)

print('\nky0=5')
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=5,fgDebug=True)

#4
print('\n#4 acc准确度分类分析')
x1,x2=df['y'].value_counts(),df['y_pred'].value_counts()
zt.prx('x1',x1);zt.prx('x2',x2)
#


'''
for xk in range(1,4):
    print('\nxk#,',xk)
    df2=df[df.y_pred==xk]
    dacc,df2x,a10=ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)
'''

#
for xk in range(1,4):
    print('\nxk#,',xk)
    df2 = df[df.y_pred==xk]
    
    # 调试代码,检查筛选后的数据
    print(f"df2 行数: {len(df2)}")
    if len(df2) == 0:
        print(f"df2 为空,xk = {xk},跳过此次循环")
        continue
    
    dacc,df2x,a10 = ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)

(2)程序输出结果

runfile('D:/zwPython/zwrk/1_Quant_TensorFlow/49-RecurrentNeuralNetworkStockPredictionAnaEvaluation-2.py', wdir='D:/zwPython/zwrk/1_Quant_TensorFlow')
Reloaded modules: zsys2025, ztools2025, zsys, ztools_str, ztools, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_data2025, zpd_talib2025, ztools_draw2025, ztools_tq2025, zai_keras2025, zai_tools2025

#1,set.sys

#2,读取数据

 df
       open  high   low  close  ...  price_next  price_change  ktype  y_pred
94939 4.390 4.510 4.380  4.510  ...       4.580       102.921      3       1
94940 4.490 4.490 4.420  4.430  ...       4.580       102.691      3       1
94941 4.440 4.530 4.420  4.500  ...       4.580       102.461      3       1
94942 4.490 4.510 4.460  4.480  ...       4.590       102.227      3       1
94943 4.490 4.530 4.490  4.520  ...       4.590       101.774      3       1

[5 rows x 28 columns]

#3 acc准确度分析

ky0=10
ky0=10; n_df9,94944,n_dfk,14653
acc: 15.43%;  MSE:2.85, MAE:1.51,  RMSE:1.69, r2score:-4.45, @ky0:10.00

ky0=5
ky0=5; n_df9,94944,n_dfk,14653
acc: 15.43%;  MSE:2.85, MAE:1.51,  RMSE:1.69, r2score:-4.45, @ky0:5.00

#4 acc准确度分类分析

 x1
3.000    64961
2.000    16967
1.000    13016
Name: y, dtype: int64

 x2
1    92097
3     2847
Name: y_pred, dtype: int64

xk#, 1
df2 行数: 92097
ky0=5; n_df9,92097,n_dfk,12648
acc: 13.73%;  MSE:2.91, MAE:1.55,  RMSE:1.71, r2score:-4.58, @ky0:5.00

xk#, 2
df2 行数: 0
df2 为空,xk = 2,跳过此次循环

xk#, 3
df2 行数: 2847
ky0=5; n_df9,2847,n_dfk,2005
acc: 70.43%;  MSE:0.68, MAE:0.43,  RMSE:0.83, r2score:-0.36, @ky0:5.00

(3)程序代码注释

# -*- coding: utf-8 -*-
"""
Created on Mon Feb 17 15:22:24 2025
循环神经网络预测股票效果评价
@author: Administrator
"""

# 导入 sys 和 os 模块
# sys 模块用于与 Python 解释器进行交互,可修改模块搜索路径等
# os 模块用于与操作系统进行交互,如文件和目录操作
import sys, os
# 将 'topqt/' 目录添加到 Python 的模块搜索路径中
# 这样在后续导入自定义模块时,Python 会去该目录下查找
sys.path.append("topqt/")

# 导入 numpy 库,用于高效的数值计算和数组操作
import numpy as np
# 导入 pandas 库,用于数据处理和分析,提供了 DataFrame 等数据结构
import pandas as pd
# 导入 tushare 库,可用于获取金融数据,如股票行情等
import tushare as ts
# 导入 plotly 库,用于创建交互式可视化图表
import plotly as py
# 导入 plotly 的 figure_factory 模块,可用于创建特定类型的图表
import plotly.figure_factory as pyff

# 导入 math 模块,提供基本的数学函数
import math
# 导入 arrow 库,用于处理日期和时间
import arrow
# 导入 ffn 库,用于金融数据分析和绩效评估
import ffn
# 导入 pypinyin 库,用于将中文转换为拼音
import pypinyin
# 导入 pandas_datareader 库,可从多种数据源读取数据
import pandas_datareader as pdr
# 导入 matplotlib.pyplot 模块,用于创建静态可视化图表
import matplotlib.pyplot as plt

# 导入自定义模块 zsys2025,可能包含系统相关的配置信息
import zsys2025  # 20250213
# 导入自定义模块 ztools2025 并别名化为 zt,可能包含通用工具函数
import ztools2025 as zt
# 导入自定义模块 ztools_str,可能包含字符串处理工具函数
import ztools_str as zstr
# 导入自定义模块 ztools_data2025 并别名化为 zdat,可能包含数据处理工具函数
import ztools_data2025 as zdat
# 导入自定义模块 ztools_draw2025 并别名化为 zdr,可能包含绘图工具函数
import ztools_draw2025 as zdr
# 导入自定义模块 ztools_tq2025 并别名化为 ztq,可能包含与 tushare 相关的工具函数
import ztools_tq2025 as ztq  # 20250213
# 导入自定义模块 zai_keras2025 并别名化为 zks,可能包含与 Keras 相关的工具函数
import zai_keras2025 as zks

# 导入 tensorflow 库,用于构建和训练深度学习模型
import tensorflow as tf
# 从 tensorflow.keras.models 模块导入 Sequential 和 load_model 函数
# Sequential 用于构建顺序模型,load_model 用于加载已保存的模型
from tensorflow.keras.models import Sequential, load_model
# 从 tensorflow.keras.layers 模块导入 Dense、Input 和 Dropout 层
# Dense 是全连接层,Input 用于定义输入层,Dropout 用于防止过拟合
from tensorflow.keras.layers import Dense, Input, Dropout
# 从 tensorflow.keras.optimizers 模块导入 RMSprop 优化器,用于优化模型参数
from tensorflow.keras.optimizers import RMSprop
# 从 tensorflow.keras.utils 模块导入 plot_model 函数,用于可视化模型结构
from tensorflow.keras.utils import plot_model
# 从 tensorflow.keras.callbacks 模块导入 TensorBoard 回调函数,用于记录训练日志
from tensorflow.keras.callbacks import TensorBoard

# 导入 tensorlayer 库,是一个基于 TensorFlow 的深度学习库
import tensorlayer as tl

#
#------------------------------------

# 1. 设置系统相关参数
print('\n#1,set.sys')
# 设置 pandas 显示数据的宽度为 450 个字符,避免数据显示时因宽度不足而截断
pd.set_option('display.width', 450)    
# 设置 pandas 显示浮点数的格式,使用自定义函数 zt.xfloat3 进行格式化
pd.set_option('display.float_format', zt.xfloat3)    

# 2. 读取数据
print('\n#2,读取数据')
# 注释掉的文件路径,可能是之前尝试读取的文件
#fss='data/df_rnn010.csv'
# 定义要读取的 CSV 文件路径
fss='tmp1/rnn001_48.csv'
# 使用 pandas 的 read_csv 函数读取 CSV 文件,并将数据存储在 DataFrame 对象 df 中
df=pd.read_csv(fss)
# 调用自定义函数 zt.prx 打印 DataFrame 对象 df 的最后几行信息,方便查看数据情况
zt.prx('df',df.tail())

# 3. 整体准确度分析
print('\n#3 acc准确度分析')
# 输出提示信息,表示下面进行 ky0 = 10 时的准确度分析
print('\nky0=10')
# 调用自定义函数 ztq.ai_acc_xed2ext 进行准确度分析
# df.y 是真实值,df.y_pred 是预测值,ky0 = 10 是一个参数,可能与准确度计算的阈值有关
# fgDebug = True 表示开启调试模式,可能会输出更多详细信息
# 函数返回三个值:dacc(可能是准确度相关的指标)、dfx(可能是处理后的 DataFrame)、a10(可能是一个特定的统计量)
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=10,fgDebug=True)

# 输出提示信息,表示下面进行 ky0 = 5 时的准确度分析
print('\nky0=5')
# 再次调用自定义函数 ztq.ai_acc_xed2ext 进行准确度分析,将 ky0 参数改为 5
dacc,dfx,a10=ztq.ai_acc_xed2ext(df.y,df.y_pred,ky0=5,fgDebug=True)

# 4. 准确度分类分析
print('\n#4 acc准确度分类分析')
# 对 DataFrame 对象 df 中的 'y' 列和 'y_pred' 列进行值计数
# x1 存储 'y' 列中每个唯一值的出现次数
# x2 存储 'y_pred' 列中每个唯一值的出现次数
x1,x2=df['y'].value_counts(),df['y_pred'].value_counts()
# 调用自定义函数 zt.prx 分别打印 x1 和 x2 的信息,方便查看每个类别出现的频率
zt.prx('x1',x1);zt.prx('x2',x2)

# 以下代码块被注释掉,可能是之前的代码或者测试代码
'''
for xk in range(1,4):
    print('\nxk#,',xk)
    df2=df[df.y_pred==xk]
    dacc,df2x,a10=ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)
'''

# 遍历 xk 从 1 到 3,对每个类别进行准确度分析
for xk in range(1,4):
    # 输出当前处理的类别编号
    print('\nxk#,',xk)
    # 筛选出 DataFrame 对象 df 中 'y_pred' 列等于当前 xk 值的行,并存储在新的 DataFrame 对象 df2 中
    df2 = df[df.y_pred==xk]
    
    # 调试代码,打印筛选后 DataFrame 对象 df2 的行数,方便查看每个类别下的数据量
    print(f"df2 行数: {len(df2)}")
    # 如果筛选后的数据为空,输出提示信息并跳过本次循环
    if len(df2) == 0:
        print(f"df2 为空,xk = {xk},跳过此次循环")
        continue
    
    # 调用自定义函数 ztq.ai_acc_xed2ext 对筛选后的数据进行准确度分析
    # df2.y 是筛选后数据的真实值,df2.y_pred 是筛选后数据的预测值,ky0 = 5 是准确度计算的阈值
    # fgDebug = True 表示开启调试模式,可能会输出更多详细信息
    dacc,df2x,a10 = ztq.ai_acc_xed2ext(df2.y,df2.y_pred,ky0=5,fgDebug=True)

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/907105
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2分钟前
下一篇 47秒前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注