元控制器:元任务 & 元数据集 & 元模型

介绍

Meta ControllerForecast Model 提供指导,旨在学习一系列预测任务中的规律模式,并利用学习到的模式来指导即将到来的预测任务。用户可以根据 Meta Controller 模块实现自己的元模型实例。

元任务

一个Meta Task实例是元学习框架中的基本元素。它保存了可以用于Meta Model的数据。多个Meta Task实例可能共享同一个Data Handler,由Meta Dataset控制。用户应使用prepare_task_data()来获取可以直接输入到Meta Model中的数据。

class qlib.model.meta.task.MetaTask(task: dict, meta_info: object, mode: str = 'full')

单个元任务,元数据集包含它们的列表。它作为MetaDatasetDS中的一个组件。

数据处理是不同的

  • 处理后的输入在训练和测试之间可能有所不同

    • 在训练时,训练任务中的X、y、X_test、y_test是必需的(# PROC_MODE_FULL #) 但在测试任务中则不是必需的。(# PROC_MODE_TEST #)

    • 当元模型可以转移到其他数据集时,只需要元信息 (# PROC_MODE_TRANSFER #)

__init__(task: dict, meta_info: object, mode: str = 'full')

__init__ 函数负责

  • 存储任务

  • 存储原始输入数据

  • 处理输入数据以获取元数据

Parameters:
  • 任务 (字典) – 需要通过元模型增强的任务

  • meta_info (object) – 元模型的输入

get_meta_input() object

返回处理过的 meta_info

元数据集

Meta Dataset 控制元信息生成过程。它的职责是为训练Meta Model提供数据。用户应使用prepare_tasks来检索Meta Task实例的列表。

class qlib.model.meta.dataset.MetaTaskDataset(segments: Dict[str, Tuple] | float, *args, **kwargs)

一个在元级别获取数据的数据集。

元数据集负责

  • 输入任务(例如Qlib任务)并准备元任务

    • 元任务包含比普通任务更多的信息(例如,元模型的输入数据)

学习到的模式可以转移到其他元数据集。以下情况应得到支持

  • 一个在元数据集A上训练的元模型,然后应用于元数据集B

    • 一些模式在元数据集A和B之间共享,因此当元模型应用于元数据集B时,使用元数据集A上的元输入。

__init__(segments: Dict[str, Tuple] | float, *args, **kwargs)

元数据集在初始化时维护一个元任务列表。

分段表示数据划分的方式

__init__ 函数的职责 - 初始化任务

prepare_tasks(segments: List[str] | str, *args, **kwargs) List[MetaTask]

准备每个元任务中的数据并准备进行训练。

以下代码示例展示了如何从meta_dataset中检索元任务列表:

# get the train segment and the test segment, both of them are lists
train_meta_tasks, test_meta_tasks = meta_dataset.prepare_tasks(["train", "test"])
Parameters:

segments (Union[List[Text], Tuple[Text], Text]) – 用于选择数据的信息

Returns:

用于训练元模型的每个元任务的准备数据列表。对于多个段[seg1, seg2, … , segN],返回的列表将是[[seg1中的任务], [seg2中的任务], … , [segN中的任务]]。每个任务都是一个元任务

Return type:

列表

元模型

通用元模型

Meta Model 实例是控制工作流的部分。Meta Model 的使用包括: 1. 用户使用 fit 函数训练他们的 Meta Model。 2. Meta Model 实例通过 inference 函数提供有用信息来指导工作流。

class qlib.model.meta.model.MetaModel

指导模型学习的元模型。

单词 Guiding 可以根据模型学习的阶段分为两种类型 - 学习任务的定义:请参考 MetaTaskModel 的文档 - 控制模型的学习过程:请参考 MetaGuideModel 的文档

abstract fit(*args, **kwargs)

元模型的训练过程。

abstract inference(*args, **kwargs) object

元模型的推理过程。

Returns:

一些信息来指导模型学习

Return type:

对象

元任务模型

这种类型的元模型可以直接与任务定义交互。然后,Meta Task Model 是它们继承的类。它们通过修改基础任务定义来指导基础任务。函数 prepare_tasks 可用于获取修改后的基础任务定义。

class qlib.model.meta.model.MetaTaskModel

这种类型的元模型处理基础任务定义。元模型在训练后为训练新的基础预测模型创建任务。prepare_tasks直接修改任务定义。

fit(meta_dataset: MetaTaskDataset)

MetaTaskModel 预计会从 meta_dataset 中获取准备好的 MetaTask。 然后它将从元任务中学习知识。

inference(meta_dataset: MetaTaskDataset) List[dict]

MetaTaskModel 将在 meta_dataset 上进行推理 MetaTaskModel 预计会从 meta_dataset 中获取准备好的 MetaTask。 然后它将创建具有 Qlib 格式的修改任务,该任务可以由 Qlib 训练器执行。

Returns:

修改后的任务定义列表。

Return type:

列表[字典]

元指导模型

这种类型的元模型参与基础预测模型的训练过程。元模型可以在基础预测模型训练期间指导它们,以提高它们的性能。

class qlib.model.meta.model.MetaGuideModel

这种类型的元模型旨在指导基础模型的训练过程。元模型在基础预测模型的训练过程中与其进行交互。

abstract fit(*args, **kwargs)

元模型的训练过程。

abstract inference(*args, **kwargs)

元模型的推理过程。

Returns:

一些信息来指导模型学习

Return type:

对象

示例

Qlib 提供了 Meta Model 模块的实现,DDG-DA,它能够适应市场动态。

DDG-DA 包括四个步骤:

  1. 计算元信息并将其封装到Meta Task实例中。所有的元任务形成一个Meta Dataset实例。

  2. 基于元数据集的训练数据训练DDG-DA

  3. 进行DDG-DA的推理以获取指导信息。

  4. 将指南信息应用于预测模型以提高其性能。

上述示例可以在 examples/benchmarks_dynamic/DDG-DA/workflow.py 中找到。