章节大纲

  • 元控制器:元任务、元数据集与元模型


    简介

    元控制器预测模型提供指导,其目的是学习一系列预测任务中的规律模式,并利用这些学习到的模式来指导未来的预测任务。用户可以基于 Meta Controller 模块实现自己的元模型实例。

    元任务

    元任务实例是元学习框架中的基本元素。它保存可供元模型使用的数据。多个元任务实例可能共享同一个 Data Handler,由元数据集控制。用户应该使用 prepare_task_data() 来获取可以直接输入元模型的数据。

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

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

    数据处理方式不同:

    • 训练和测试之间的处理输入可能不同。

    • 训练时,训练任务中的 XyX_testy_test 是必需的(# PROC_MODE_FULL #),但在测试任务中不是必需的(# PROC_MODE_TEST #)。

    • 当元模型可以转移到其他数据集时,只有 meta_info 是必需的(# PROC_MODE_TRANSFER #)。

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

    __init__ 函数负责:

    • 存储任务。

    • 存储原始输入数据。

    • 处理元数据的输入数据。

      参数:

    • task (dict) – 待元模型增强的任务。

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

    get_meta_input() -> object

    返回处理过的 meta_info。


    元数据集

    元数据集控制元信息生成过程。它负责为训练元模型提供数据。用户应该使用 prepare_tasks 来检索元任务实例列表。

    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)

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

    • segments 表示划分数据的方式。

    • MetaTaskDataset__init__ 函数的职责是初始化任务。

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

    准备每个元任务中的数据,并为训练做好准备。

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

    Python
    # 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"])
    

    参数

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

      返回:

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

      返回类型:list


    元模型

    通用元模型

    元模型实例是控制工作流的部分。元模型的用法包括:

    1. 用户使用 fit 函数训练他们的元模型

    2. 元模型实例通过 inference 函数提供有用信息来指导工作流。

    class qlib.model.meta.model.MetaModel

    指导模型学习的元模型。

    “指导”一词可以根据模型学习的阶段分为两类:

    • 学习任务的定义:请参阅 MetaTaskModel 的文档。

    • 控制模型的学习过程:请参阅 MetaGuideModel 的文档。

    abstract fit(*args, **kwargs)

    元模型的训练过程。

    abstract inference(*args, **kwargs) -> object

    元模型的推理过程。

    返回:

    一些用于指导模型学习的信息。

    返回类型:object

    元任务模型

    此类元模型可能直接与任务定义交互。因此,元任务模型是它们要继承的类。它们通过修改基本任务定义来指导基本任务。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 训练器执行。

    返回:

    一个修改后的任务定义列表。

    返回类型:List[dict]

    元指导模型

    此类元模型参与基本预测模型的训练过程。元模型可以在基本预测模型的训练过程中指导它们,以提高其性能。

    class qlib.model.meta.model.MetaGuideModel

    此类元模型旨在指导基本模型的训练过程。元模型在基本预测模型的训练过程中与它们交互。

    abstract fit(*args, **kwargs)

    元模型的训练过程。

    abstract inference(*args, **kwargs)

    元模型的推理过程。

    返回:

    一些用于指导模型学习的信息。

    返回类型:object


    示例

    Qlib 提供了一个名为 DDG-DA 的 Meta Model 模块实现,该模块可适应市场动态。

    DDG-DA 包括四个步骤:

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

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

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

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

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