AI模型评价

机器学习
宽客学院
标签: #<Tag:0x00007fb000a56fb0> #<Tag:0x00007fb000a56e48>

(iQuant) #1

在机器学习模型构建过程中,我们通常需要评价模型在训练集和验证集上的表现来判断模型的质量好坏,本文主要以随机森林模型为例介绍新增模型评价功能。

一、评价回归模型

我们以随机森林-回归模型为例,首先建立如下的模型训练可视化流程

image

如图所示,

  • 通过证券代码列表模块m1指定了抽取数据为2010-01-01至2013-01-01的A股数据
  • 通过自动标注模块m2我们计算了一个机器学习的目标,这里计算股票的未来5日收益率
  • 通过输入特征列表模块m3,利用表达式引擎输入我们关心的因子,并通过基础特征抽取模块m15和衍生特征抽取模块m16抽取这些因子值,在衍生特征抽取模块中我们选中“删除na值”
    image
  • 通过连接数据模块m7将因子数据和标注label连接在一起
  • 通过数据过滤模块m9,我们输入过滤表达式 date < ‘2012-01-01’ 将数据拆分为训练集与预测集,并勾选输出剩余数据,这样数据过滤模块下方左侧的接口输出数据就是训练集2010-01-01 到2011-12-31的数据,右侧的接口输出数据就是验证集2012-01-01到2013-01-01的数据。
    image
  • 将数据传给随机森林-回归模块m8,这个模块可以在左侧导航栏中找到,如下图所示

image

  • 我们将特征列表模块连接到随机森林-回归模块m8,表示特征列表中的因子对应的列参与模型训练

1、训练集数据评价

如下图(左)所示,我们将训练集的数据同时输入给m8模块的第一个接口和第四个接口, 然后在导航栏中找到回归-评估模块,连接到随机森林-回归模块的下端右侧输出接口
image image
如上图(右)所示,我们可以设置回归=评估模块中要评估的指标:

  • 可解释方差权重
  • 平均绝对误差
  • 均方误差权重
  • 均方对数误差权重
  • 均方绝对误差
  • 确定系数R方权重
    运行后就可以得到模型在训练集数据的上的表现,如下图所示:
    image

2、验证集数据评价

如果想评估验证集数据上模型的表现情况,可以如下图所示将验证集数据连接m8模块的第四个接口
image
重新运行,就可以得到模型在验证集数据的上的表现。

image

二、评价分类模型

我们以随机森林-分类模型为例,首先建立如下的模型训练可视化流程

image

这里的流程建立步骤与回归训练类似,只是训练模型变成了随机森林-分类,同时我们将自动标注模块中的标注计算方式做了改变,如下所示:

image

这里作为分类问题,可以简单将未来5日收益>0的情况标记为1,否则为0。股票数据按此规则被分为了2个类别。

1、训练集数据评价

如下图(左)所示,我们将训练集的数据同时输入给m8模块的第一个接口和第四个接口, 然后在导航栏中找到分类-评估模块,连接到随机森林-回归模块的下端右侧输出接口
imageimage
如上图(右)所示,我们可以设置回归=评估模块中要评估的指标:

  • 混淆矩阵
  • 正则化混淆矩阵
  • ROC曲线
  • 精准率-召回率曲线

运行后可以得到模型在训练集数据上的表现,结果如下图所示:
image
image
image
image
image

2、验证集数据评价

如果想评估验证集数据上模型的表现情况,可以如下图所示将验证集数据连接m8模块的第四个接口

image

运行后可以看到模型在验证集数据上的表现:

image
image
image
image
image

本文通过随机森林预测和分类两个模型为例,展示了模型评价功能的使用。 同样的用法也可以推广到平台上其它模型,例如梯度提升树-分类/回归,线性分类/回归,线性随机梯度下降分类/回归、K近邻分类/回归、支持向量机分类/回归等模型。此外,还要提醒大家在调优模型的同时也要思考一下模型的可解释性


(youknowwyq) #2

你好,请问深度学习的模型如何评价呢?


(iQuant) #3

您好,关于模型评估,建议参看机器学习教材。如果是在量化投资领域,最终可以通过回测曲线来辅助评估。


(达达) #4

训练的时候可以看训练的模型Loss变化,例如训练模块是m5

m5.plot_result()


(Aurora1024) #5

求问为什么画图时会报这个错哇?
ERROR: bigquant: module name: metrics_classification, module version: v1, trackeback: Traceback (most recent call last):
ValueError: The labels array needs to contain at least two labels for log_loss, got [1].

ValueError Traceback (most recent call last)
in ()
102 ROC_curve=True,
103 precision_recall_curve=True,
–> 104 max_size=30
105 )

ValueError: The labels array needs to contain at least two labels for log_loss, got [1].


(iQuant) #6

收到,已提交给策略工程师,会尽快为您回复。


(kobe) #7

应该是标注类别有问题,检查一下标注模块的结果是否是离散的分类值