训练时间序列预测模型 (GeoAI)

摘要

使用时空立方体中的时间序列数据训练基于深度学习的时间序列预测模型。 通过使用时间序列模型预测工具,可以使用经过训练的模型预测时空立方体每个位置的值。

时间序列数据可以遵循多种趋势并具有多个季节性等级。 根据数据中季节性的趋势和模式,基于统计方法的传统时间序列预测模型表现有所不同。 基于深度学习的模型具有很强的学习能力,可以在不同类型的时间序列中提供结果,前提是有足够的训练数据。

该工具使用各种基于深度学习的模型(如完全连接网络 (FCN)、长短期记忆 (LSTM)、InceptionTime、ResNet 和 ResCNN)训练时间序列预测模型。 这些模型支持多变量时间序列,模型从多个时间相关变量中学习以预测未来值。 训练得到的模型将保存为深度学习模型文件 (.dlpk) 并可通过使用时间序列模型预测工具来预测未来值。

了解有关时间序列预测模型的工作原理的详细信息。

使用情况

  • 必须为 ArcGIS AllSource 中的 Python 安装适当的深度学习框架。

    了解如何安装 ArcGIS 深度学习框架

  • 该工具接受由通过聚合点创建时空立方体通过已定义位置创建时空立方体通过多维栅格图层创建时空立方体子集化时空立方体工具创建的 netCDF 数据

  • 时间序列预测工具集中的其他预测工具相比,该工具使用基于深度学习的时间序列预测模型。 深度学习模型具有很强的学习能力,适用于遵循复杂趋势且难以用简单数学函数建模的时间序列。 但是,它们需要更多的训练数据来学习这些复杂趋势,并且在训练和推断过程中需要使用更多的计算资源。 使用 GPU 可以提高工具的性能。

  • 要使用 GPU 运行此工具,需将处理器类型环境设置为 GPU。 如果您具有多个 GPU,则改为指定 GPU ID 环境。

  • 该工具可用于建模单变量和多变量时间序列。 如果时空立方体中存在其他与预测变量相关的变量,可以将它们作为解释变量包括在内以改善预测结果。

  • 单变量时间序列预测仅需单步方法进行估计,此方法为默认方法。

  • 多变量时间序列预测可使用两种不同的方法,即单步预测和多步预测。 当选择多个解释训练变量时,多步参数将变为活动状态。

  • 在单步方法中,模型可以在每个时间步长使用用新数据进行更新,使其适合实时应用。 然而,由于模型在每个时间步长都会更新,预测误差会随着时间的推移而累积,导致长期预测不太准确。 当选择多步预测时,该模型会预测当前时间步长之后的多个未来数据点。 例如,如果目标是预测未来的 20 个时间步长,则该模型将一次生成 20 个连续的预测。 通过多步预测,模型可以更有效地捕捉时间序列的长期趋势和模式。 由于模型预测多个时间步长,误差积累的可能性降低,从而可以得到更准确的长期预测。 然而,由于模型一次性预测多个时间步长,它可能无法灵活适应数据的实时变化。 如何在这两种方法之间进行选择,取决于时间序列预测任务的具体要求和特性。

  • 序列长度参数会影响时间序列预测模型的结果,可以定义为使用过去多少个时间步长作为输入来预测下一个时间步长。 如果序列长度为 n,则模型将使用最后 n 个时间步长作为输入来预测下一个时间步长。 参数值不能大于在排除验证时间步长后剩余的输入时间步长总数。

  • 与在时空立方体的每个位置构建独立预测模型不同,该工具训练一个单一的全局预测模型,使用每个位置的训练数据。 在使用使用时间序列模型预测工具预测每个位置的未来值时,将使用此全局模型。

  • 将在内容栏中添加输出要素参数值,并根据最终预测的时间步长进行渲染。

  • 该工具的用例包括基于历史销售数据预测零售产品需求、预测疾病传播,或基于历史生产和天气数据预测风力发电。

  • 确定针对验证排除的时间步长数量非常重要。 排除的时间步长越多,用于估计验证 RMSE 的时间步长就越少。 如果排除的时间步长过少,则将使用少量数据来评估验证 RMSE,并且可能会产生误导。 排除尽可能多的时间步长,同时仍保持足够的时间步长来估计验证模型。 针对验证至少保留与要预测的时间步长数量相同的时间步长(如果时空立方体具有足够的时间步长以允许执行此操作)。

  • 有关运行此工具的要求以及您可能遇到的问题的信息,请参阅深度学习常见问题解答

参数

标注说明数据类型
输入时间序列数据

包含将用于预测未来时间步长的变量的 netCDF 立方体。 此文件必须具有 .nc 文件扩展名,并且必须使用通过聚合点创建时空立方体通过已定义要素创建时空立方体通过多维栅格图层创建时空立方体工具进行创建。

File
输出模型

将存储经训练模型的输出文件夹位置。 训练模型将保存为深度学习模型文件 (.dlpk)。

Folder
分析变量

数据集中将被预测到未来时间步长的数值变量。

String
序列长度:

在训练模型时将使用的先前时间步长数。 如果数据包含季节性(重复周期),请提供与一个季节对应的长度。

  • 如果未选中多步参数,则该参数的值应小于或等于排除为进行验证排除的时间步长数参数值之后的输入时间步长总数。
  • 如果未选中多步参数,则 1.5 倍的序列长度值应小于或等于排除为进行验证排除的时间步长数参数值之后的时间步长总数。

Long
解释训练变量
(可选)

来自将用于训练模型的数据的独立变量。 对于任何表示类或类别的变量,请选中分类复选框。

Value Table
最大新纪元
(可选)

应用于将训练模型的最大新纪元数。 默认值为 20。

Long
为进行验证排除的时间步长数
(可选)

为进行验证而排除的时间步长数。 例如,如果指定了值 14,则数据框中的最后 14 行将用作验证数据。 默认值为总时间步长数的 10%。 理想情况下,它不应少于输入时空立方体中总时间步长数的 5%。

  • 如果未选中多步参数,则此参数值应小于输入时空立方体中记录总数的 25%。
  • 如果选中多步参数,则此参数值应小于或等于序列长度参数值的一半。

Long
模型类型
(可选)

指定将用于训练模型的模型架构。

  • InceptionTime将用于训练模型的 InceptionTime 架构。 这是默认设置。
  • ResNet将用于训练模型的 ResNet 架构。
  • ResCNN将用于训练模型的 ResCNN 架构。
  • FCN将用于训练模型的 FCN 架构。
  • LSTM将用于训练模型的 LSTM 架构。
  • TimeSeriesTransformer将用于训练模型的 TimeSeriesTransformer 架构。
String
批量大小
(可选)

一次需要处理的样本数。 默认值为 64。

根据计算机 GPU,可以将此数值更改为 8、16、32、64 等。

Long
模型参数
(可选)

将用于每个模型的其他特定模型参数。 这些参数可用于调整模型的复杂性和大小。 有关模型架构、支持的模型参数及其默认值,请参阅时间序列预测模型的工作原理

Value Table
当模型不再改进时停止训练
(可选)

指定当模型验证损失在连续五个新纪元中没有改进时,是否停止训练。

  • 选中 - 当模型验证损失在连续五个新纪元中没有改进时,将停止训练。 这是默认设置。
  • 未选中 - 模型训练将继续进行,直到达到最大新纪元数。

Boolean
输出要素类
(可选)

时空立方体中所有位置的包含了预测值的输出要素类将存储为字段。 要素类将使用在验证数据集上训练的模型进行创建。 输出显示了最后时间步长的预测结果,并包含了在验证集上的时间序列预测的弹出图表。

Feature Class
输出立方体
(可选)

输出时空立方体(.nc 文件),包含输入时空立方体的值,并已替换相应验证时间步长的预测值。

File
多步
(可选)

指定是否使用单步或多步方法来训练多变量时间序列预测模型。

  • 选中 - 训练将使用多步方法。
  • 未选中 - 训练将使用传统的单步方法。 这是默认设置。

Boolean

arcpy.geoai.TrainTimeSeriesForecastingModel(in_cube, out_model, analysis_variable, sequence_length, {explanatory_variables}, {max_epochs}, {validation_timesteps}, {model_type}, {batch_size}, {arguments}, {early_stopping}, {out_features}, {out_cube}, {multistep})
名称说明数据类型
in_cube

包含将用于预测未来时间步长的变量的 netCDF 立方体。 此文件必须具有 .nc 文件扩展名,并且必须使用通过聚合点创建时空立方体通过已定义要素创建时空立方体通过多维栅格图层创建时空立方体工具进行创建。

File
out_model

将存储经训练模型的输出文件夹位置。 训练模型将保存为深度学习模型文件 (.dlpk)。

Folder
analysis_variable

数据集中将被预测到未来时间步长的数值变量。

String
sequence_length

在训练模型时将使用的先前时间步长数。 如果数据包含季节性(重复周期),请提供与一个季节对应的长度。

  • 如果 multistep 参数值为 False,则该参数的值应小于或等于排除 validation_timesteps 参数值之后的输入时间步长总数。
  • 如果 multistep 参数值为 True,则 1.5 倍的 sequence_length 值应小于或等于排除 validation_timesteps 参数值之后的时间步长总数。

Long
explanatory_variables
[explanatory_variables,...]
(可选)

来自将用于训练模型的数据的独立变量。 在任何表示类或类别的变量之后,使用 True 值。

Value Table
max_epochs
(可选)

应用于将训练模型的最大新纪元数。 默认值为 20。

Long
validation_timesteps
(可选)

为进行验证而排除的时间步长数。 例如,如果指定了值 14,则数据框中的最后 14 行将用作验证数据。 默认值为总时间步长数的 10%。 理想情况下,它不应少于输入时空立方体中总时间步长数的 5%。

  • 如果 multistep 参数值为 False,则此参数值应小于输入时空立方体中记录总数的 25%。
  • 如果 multistep 参数值为 True,则此参数值应小于或等于 sequence_length 参数值的一半。

Long
model_type
(可选)

指定将用于训练模型的模型架构。

  • InceptionTime将用于训练模型的 InceptionTime 架构。 这是默认设置。
  • ResNet将用于训练模型的 ResNet 架构。
  • ResCNN将用于训练模型的 ResCNN 架构。
  • FCN将用于训练模型的 FCN 架构。
  • LSTM将用于训练模型的 LSTM 架构。
  • TimeSeriesTransformer将用于训练模型的 TimeSeriesTransformer 架构。
String
batch_size
(可选)

一次需要处理的样本数。 默认值为 64。

根据计算机 GPU,可以将此数值更改为 8、16、32、64 等。

Long
arguments
[arguments,...]
(可选)

将用于每个模型的其他特定模型参数。 这些参数可用于调整模型的复杂性和大小。 有关模型架构、支持的模型参数及其默认值,请参阅时间序列预测模型的工作原理

Value Table
early_stopping
(可选)

指定当模型验证损失在连续五个新纪元中没有改进时,是否停止训练。

  • TRUE当模型验证损失在连续五个新纪元中没有改进时,将停止训练。 这是默认设置。
  • FALSE模型训练将继续进行,直到达到最大新纪元数。
Boolean
out_features
(可选)

时空立方体中所有位置的包含了预测值的输出要素类将存储为字段。 要素类将使用在验证数据集上训练的模型进行创建。 输出显示了最后时间步长的预测结果,并包含了在验证集上的时间序列预测的弹出图表。

Feature Class
out_cube
(可选)

输出时空立方体(.nc 文件),包含输入时空立方体的值,并已替换相应验证时间步长的预测值。

File
multistep
(可选)

指定是否使用单步或多步方法来训练多变量时间序列预测模型。

  • TRUE训练将使用多步方法。
  • FALSE训练将使用传统的单步方法。 这是默认设置。
Boolean

代码示例

TrainTimeSeriesForecastingModel 示例(独立脚本)

此示例展示了如何使用 TrainTimeSeriesForecastingModel 函数。

# Name: TrainTimeSeriesForecastingModel.py
# Description: Train a time series model on space-time cube data with
# different AI models.
  
# Import system modules                                                                                                                                                                                                                                                                                                                    
import arcpy
import os

# Set local variables
datapath  = "path_to_data_for_forecasting" 
out_path = "path_to_gdb_for_forecasting"

model_path = os.path.join(out_path, "model")
in_cube = os.path.join(datapath, "test_data")
out_features = os.path.join(out_path, "forecasted_feature.gdb", "forecasted")

# Run TrainTimeSeriesForecastingModel
arcpy.geoai.TrainTimeSeriesForecastingModel(
        in_cube,
        model_path,
        "CONSUMPTION",
        12,
        None,
        20,
        2,
        "InceptionTime",
        64,
        None,
        True,
        out_features
    )