基于森林的预测 (时空模式挖掘)

摘要

使用随机森林算法的改编来预测时空立方体的每个位置的值,这是一种由 Leo Breiman 和 Adele Cutler 开发的监督机器学习方法。 使用时空立方体的每个位置上的时间窗口来对森林回归模型进行训练。

了解有关基于森林的预测工作原理的详细信息

插图

基于森林的预测工具图示
显示了使用“基于森林的预测”工具预测时间序列。

使用情况

  • 此工具接受通过聚合点创建时空立方体、通过已定义位置创建时空立方体以及通过多维栅格图层创建时空立方体子集时空立方体工具创建的 netCDF 文件。

  • 时间序列预测工具集中的其他预测工具相比,此工具最复杂,但包含的数据假设最少。 对于其复杂的形状和趋势难以使用简单的数学函数进行建模的时间序列,或者在不满足其他方法的假设时,建议使用此方法。 如果您的时空立方体具有与正在预测的变量相关的其他变量,也建议执行此操作。 这些变量可以作为解释变量包括在内以改进预测。

    此外,此工具是唯一允许您在不同地理范围内构建模型的预测工具。 无需在时空立方体的每个位置构建独立的预测模型,该工具允许您构建将每个位置用作训练数据的单个全局预测模型。 如果输入时空立方体的任意变量都有时间序列聚类结果,也可以为每个聚类建立不同的预测模型。

  • 模型比例参数可用于指定用于估计基于森林的模型的比例。 该参数具有以下三个选项:

    • 单个位置 - 将为时空立方体的每个位置独立估计不同的模型。 这是默认设置。
    • 整个立方体 - 将所有位置用作训练数据来估计单个模型。 共享模型将用于预测每个位置的未来值。
    • 时间序列聚类 - 将为时间序列聚类结果的每个聚类独立估计不同的模型。 在聚类变量参数中为变量提供时间序列聚类结果。 您必须对变量使用时间序列聚类工具。 您可以将任何变量用于时间序列聚类结果,包括分析变量。

    了解有关以不同比例估计模型的详细信息

  • 可以使用按位置评估预测工具来比较和合并多个预测的时空立方体。由此即可使用不同的预测工具和参数来创建多个预测立方体,并且该工具将使用“预测均方根误差 (RMSE)”或“验证 RMSE”值来识别每个位置的最佳预测。

  • 在预测未来值时,该工具将构建两个用于不同目的的模型。

    • 预测模型 - 通过使用时间序列的值构建森林并使用此森林预测未来时间步长的值,此模型用于预测时空立方体的值。 预测模型与时空立方体的值的拟合度将通过“预测 RMSE”值进行度量。
    • 验证模型 - 此模型用于验证预测模型并测试其预测值的准确性。 如果为为进行验证排除的时间步长数参数指定了大于 0 的数字,此模型将使用未排除的时间步长进行构建,并用于预测已排除的时间步长值。 这将允许您查看模型预测值的准确程度。 预测值与排除值的拟合度将通过“验证 RMSE”值进行度量。

    了解有关预测模型、验证模型和 RMSE 统计数据的详细信息

  • 输出要素参数值将添加到基于最终预测时间步进行渲染的内容窗格中。

  • 该工具会创建地理处理消息和弹出图表,以用于了解和可视化预测结果。 这些消息将包含有关时空立方体结构以及 RMSE 值和季节长度汇总统计数据的信息。 使用浏览导航工具单击要素以在弹出窗格中显示一个折线图,图中会显示该时空立方体的值、拟合的森林值、预测值和该位置的置信界限。

  • 您可以使用其他变量参数包括解释变量以改进预测。 如果提供了任何其他变量,则预测模型将为基于森林的多元预测。 每个解释变量都转换为每个时间窗内的时间滞后因素,用于训练森林模型。 这允许您估估算解释变量和分析变量之间的任何滞后(延迟)效应。 例如,大流行期间住院人数的增加可能会预测 14 天后的死亡人数,而住院人数可能无法预测未来 3 天的死亡人数。 时间滞后数等于时间步长窗口参数的值,因此时间窗必须比要捕获的任何滞后效应更宽。

    输出重要性表参数将创建一个表,显示每个位置最重要的因素,并包括一个时间滞后重要性条形图,显示所有位置的最重要因素的计数,按时间窗内的时间滞后进行排序。 这允许您查看哪些变量在预测分析变量的值时很重要,并在因素最重要时可视化相关的滞后。 例如,如果住院人数与 14 天后的死亡人数相关,则时间步长窗口应至少为 14 天,并且应在时间窗结束前大约 14 天观察到大量住院人数。

    在每个位置被视为重要的因素数量取决于重要性阈值参数值。 例如,如果使用了值 15,则每个位置的前 15% 的因素将包含在表格和图表中。

  • 可使用异常值选项参数检测每个位置的时间序列值中具有统计意义的异常值。

    了解有关检测时间序列异常值的详细信息

  • 如果您选择异常值选项参数的识别异常值选项,建议您为时间步长窗口参数提供一个值,而不是将该参数留空,并在每个位置估算一个不同的时间步长窗口。 对于每个位置,森林模型使用第一个时间步窗中的时间步来训练预测模型,并且仅在剩余时间步中检测异常值。 如果不同的位置排除了不同数量的时间步进行训练,则汇总统计数据(例如每个时间步或每个位置的平均、最小和最大异常值数)可能会产生误导。

  • 如果其他变量参数中包含任何解释变量,或者指定了模型比例参数的整个立方体时间序列聚类选项,则仅按值构建模型选项可用于预测方法参数。 此外,使用任何这些选项时,处理时间都会增加。

  • 确定针对验证排除的时间步长数是一项重要选择。排除的时间步长越多,则用于评估验证模型的时间步长越少。但是,如果排除的时间步长过少,则将使用少量数据来评估“验证 RMSE”,并且可能会产生误导。建议您排除尽可能多的时间步长,同时保持足够的时间步来估计验证模型。如果时空立方体具有足够的时间步长来执行此操作,则建议您至少保留与预测时间步长相同数量的验证时间步长。

参数

标注说明数据类型
输入时空立方体

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

File
分析变量

netCDF 文件中的数值变量,用于预测未来时间步长。

String
输出要素

时空立方体中所有位置的输出要素类,其中的预测值将存储为字段。 该图层显示对最后的时间步长的预测,并包含弹出图表,其中显示每个位置的时间序列、预测和 90% 的置信界限。

Feature Class
输出时空立方体
(可选)

新的时空立方体(.nc 文件),其中包含输入时空立方体的值,并追加了预测时间步长。可视化 3D 时空立方体工具可用于同时查看所有观测值和预测值。

File
预测时间步长数
(可选)

正整数,用于指定预测时间步长数。此值不能大于输入时空立方体中的时间步长数的百分之五十。默认值为一个时间步长。

Long
时间步长窗口
(可选)

对模型进行训练时将要使用的先前时间步长数。 如果数据显示季节性(重复周期),提供与一个季节相对应的时间步数。 此值不能大于输入时空立方体中的时间步长数的三分之一。 当使用单个位置模型比例时,如果未提供任何值,则将使用光谱密度函数为每个位置估计一个时间窗。 使用整个立方体或时间序列聚类模型比例时,如果未提供任何值,则将使用四分之一的时间步长数。

了解有关季节性和选择时间窗口的详细信息

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

为进行验证,在每个时间序列末尾排除的时间步长数。默认值为输入时间步长的 10%(向下舍入),且该值不能大于时间步长的 25%。要不排除任何时间步长,请提供值 0。

Long
树数
(可选)

要在森林模型中创建的树的数量。 增大树数通常将产生更加精确的模型预测,但是将增加模型计算的时间。 默认树数为 100,并且该值必须至少为 1 并且不大于 1,000。

Long
最小叶子大小
(可选)

保留叶所需的最小观察次数(即树上不再进一步拆分的的终端节点)。 对于非常大的数据,增大此数值将减少工具的运行时间。

Long
最大树深
(可选)

对树进行的最大分割数。 如果使用较大的最大深度,则将创建更多分割,这可能会增大过度拟合模型的可能性。 如果未提供任何值,则该工具将根据由模型创建的树数和时间步窗的大小确定一个值。

Long
每棵树的可用训练百分比 (%)
(可选)

将用于拟合预测模型的训练数据的百分比。 训练数据由使用时间窗口构建的相关解释变量和因变量组成。 其余所有的训练数据将用于优化预测模型的参数。 默认值为 100%。

Long
预测方法
(可选)

指定在每个位置训练森林模型时将如何表示解释变量和因变量。

要训练将用于预测的森林模型,必须使用时间窗创建一系列解释变量和因变量。 使用此参数可指定是否会对这些变量进行线性去除趋势,以及因变量将由其原始值还是由线性回归模型的残差表示。 该线性回归模型将时间窗口内的所有时间步长用作解释变量,并将以下时间步长用作因变量。 通过从因变量的原始值中基于线性回归减去预测值来计算残差。

如果在其他变量参数中提供了任何变量,或者如果为模型比例参数指定了整个立方体时间序列聚类,则选项将是唯一可用的预测方法。

  • 通过价值构建模型时间窗内的值不会被去除趋势,并且因变量将由其原始值表示。 如果提供了任何其他变量或模型比例不是单个位置,这将是唯一可用的预测方法,并且将是默认方法。
  • 去除趋势后通过价值构建模型时间窗内的值被线性去除趋势,并且因变量将以其去除趋势的值表示。 这是默认设置。
  • 通过残差构建模型时间窗内的值不会被去除趋势,并且将使用时间窗内的值作为解释变量的线性回归模型的残差来表示因变量。
  • 去除趋势后通过残差构建模型时间窗内的值被线性去除趋势,并且使用时间窗内被去除趋势的值作为解释变量的线性回归模型的残差来表示因变量。
String
异常值选项
(可选)

指定是否将识别具有统计意义的时间序列异常值。

  • 不会识别异常值。这是默认设置。
  • 识别异常值将使用广义 ESD 测试来识别异常值。
String
置信度级别
(可选)

指定时间序列异常值测试的置信度。

  • 90%测试置信度为 90%。这是默认设置。
  • 95%测试置信度为 95%。
  • 99%测试置信度为 99%。
String
最大异常值数

每个位置可以声明为异常值的最大时间步数。默认值对应于输入时空立方体的时间步数的 5%(向下舍入)(将始终使用至少为 1 的值)。该值不能超过时间步数的 20%。

Long
其他变量
(可选)

将用作解释变量以改进预测的输入时空立方体的其他变量。

String
重要性阈值 (%)
(可选)

被认为对预测分析变量最重要的因素的百分比。 例如,如果值为 20,则每个位置的前 20% 的因素将包含在重要性表中。 每个变量(分析变量和每个解释变量)在时间步长窗口中的每个时间步长表示为一个因素,因此每个位置的因素数量为时间窗口长度乘以变量数。 将因素数量乘以重要性阈值,确定每个预测模型的重要因素数量。 默认值为 10,且该值必须为介于 1 到 100 之间的整数。

Long
输出重要性表格
(可选)

包含每个位置最重要因素的输出表。 对于单个位置模型比例,时空立方体每个位置的每个重要因素都将表示为表中的一行,其中的字段包含变量名称和相关的时间滞后。 对于整个立方体和时间序列聚类模型比例,整个立方体或聚类模型中的所有位置将由一行表示。该表将包括一个图表,显示按时间滞后划分的所有位置的最重要因素。 该图表允许您可视化解释变量和被预测变量之间的滞后效应。

Table
模型比例
(可选)

指定将用于估计预测和验证模型的比例。

  • 单个位置将为每个位置估计不同的预测模型和验证模型。 这是默认设置。
  • 整个立方体将使用所有位置作为训练数据来估计单个预测模型和验证模型。
  • 时间序列聚类将为时间序列聚类结果的每个聚类估计一个预测和验证模型。 在聚类变量参数中为变量提供时间序列聚类结果。
String
聚类变量
(可选)

将用于将时空立方体的位置分组为区域的变量,并且将为每个区域估计不同的预测和验证模型。 该变量必须具有要使用的时间序列聚类结果。 聚类变量可以是时空立方体的任何变量,包括分析变量。

String

arcpy.stpm.ForestBasedForecast(in_cube, analysis_variable, output_features, {output_cube}, {number_of_time_steps_to_forecast}, {time_window}, {number_for_validation}, {number_of_trees}, {minimum_leaf_size}, {maximum_depth}, {sample_size}, {forecast_approach}, {outlier_option}, {level_of_confidence}, maximum_number_of_outliers, {other_variables}, {importance_threshold}, {output_importance_table}, {model_scale}, {cluster_variable})
名称说明数据类型
in_cube

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

File
analysis_variable

netCDF 文件中的数值变量,用于预测未来时间步长。

String
output_features

时空立方体中所有位置的输出要素类,其中的预测值将存储为字段。 该图层显示对最后的时间步长的预测,并包含弹出图表,其中显示每个位置的时间序列、预测和 90% 的置信界限。

Feature Class
output_cube
(可选)

新的时空立方体(.nc 文件),其中包含输入时空立方体的值,并追加了预测时间步长。可视化 3D 时空立方体工具可用于同时查看所有观测值和预测值。

File
number_of_time_steps_to_forecast
(可选)

正整数,用于指定预测时间步长数。此值不能大于输入时空立方体中的时间步长数的百分之五十。默认值为一个时间步长。

Long
time_window
(可选)

对模型进行训练时将要使用的先前时间步长数。 如果数据显示季节性(重复周期),提供与一个季节相对应的时间步数。 此值不能大于输入时空立方体中的时间步长数的三分之一。 当使用单个位置模型比例时,如果未提供任何值,则将使用光谱密度函数为每个位置估计一个时间窗。 使用整个立方体或时间序列聚类模型比例时,如果未提供任何值,则将使用四分之一的时间步长数。

Long
number_for_validation
(可选)

为进行验证,在每个时间序列末尾排除的时间步长数。默认值为输入时间步长的 10%(向下舍入),且该值不能大于时间步长的 25%。要不排除任何时间步长,请提供值 0。

Long
number_of_trees
(可选)

要在森林模型中创建的树的数量。 增大树数通常将产生更加精确的模型预测,但是将增加模型计算的时间。 默认树数为 100,并且该值必须至少为 1 并且不大于 1,000。

Long
minimum_leaf_size
(可选)

保留叶所需的最小观察次数(即树上不再进一步拆分的的终端节点)。 对于非常大的数据,增大此数值将减少工具的运行时间。

Long
maximum_depth
(可选)

对树进行的最大分割数。 如果使用较大的最大深度,则将创建更多分割,这可能会增大过度拟合模型的可能性。 如果未提供任何值,则该工具将根据由模型创建的树数和时间步窗的大小确定一个值。

Long
sample_size
(可选)

将用于拟合预测模型的训练数据的百分比。 训练数据由使用时间窗口构建的相关解释变量和因变量组成。 其余所有的训练数据将用于优化预测模型的参数。 默认值为 100%。

了解有关训练森林预测模型的详细信息

Long
forecast_approach
(可选)

指定在每个位置训练森林模型时将如何表示解释变量和因变量。

要训练将用于预测的森林模型,必须使用时间窗创建一系列解释变量和因变量。 使用此参数可指定是否会对这些变量进行线性去除趋势,以及因变量将由其原始值还是由线性回归模型的残差表示。 该线性回归模型将时间窗口内的所有时间步长用作解释变量,并将以下时间步长用作因变量。 通过从因变量的原始值中基于线性回归减去预测值来计算残差。

如果在其他变量参数中提供了任何变量,或者如果为模型比例参数指定了整个立方体时间序列聚类,则选项将是唯一可用的预测方法。

了解有关预测方法参数的详细信息

  • VALUE时间窗内的值不会被去除趋势,并且因变量将由其原始值表示。 如果提供了任何其他变量或模型比例不是单个位置,这将是唯一可用的预测方法,并且将是默认方法。
  • VALUE_DETREND时间窗内的值被线性去除趋势,并且因变量将以其去除趋势的值表示。 这是默认设置。
  • RESIDUAL时间窗内的值不会被去除趋势,并且将使用时间窗内的值作为解释变量的线性回归模型的残差来表示因变量。
  • RESIDUAL_DETREND时间窗内的值被线性去除趋势,并且使用时间窗内被去除趋势的值作为解释变量的线性回归模型的残差来表示因变量。
String
outlier_option
(可选)

指定是否将识别具有统计意义的时间序列异常值。

  • NONE不会识别异常值。这是默认设置。
  • IDENTIFY将使用广义 ESD 测试来识别异常值。
String
level_of_confidence
(可选)

指定时间序列异常值测试的置信度。

  • 90%测试置信度为 90%。这是默认设置。
  • 95%测试置信度为 95%。
  • 99%测试置信度为 99%。
String
maximum_number_of_outliers

每个位置可以声明为异常值的最大时间步数。默认值对应于输入时空立方体的时间步数的 5%(向下舍入)(将始终使用至少为 1 的值)。该值不能超过时间步数的 20%。

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

将用作解释变量以改进预测的输入时空立方体的其他变量。

String
importance_threshold
(可选)

被认为对预测分析变量最重要的因素的百分比。 例如,如果值为 20,则每个位置的前 20% 的因素将包含在重要性表中。 每个变量(分析变量和每个解释变量)在时间步长窗口中的每个时间步长表示为一个因素,因此每个位置的因素数量为时间窗口长度乘以变量数。 将因素数量乘以重要性阈值,确定每个预测模型的重要因素数量。 默认值为 10,且该值必须为介于 1 到 100 之间的整数。

Long
output_importance_table
(可选)

包含每个位置最重要因素的输出表。 对于单个位置模型比例,时空立方体每个位置的每个重要因素都将表示为表中的一行,其中的字段包含变量名称和相关的时间滞后。 对于整个立方体和时间序列聚类模型比例,整个立方体或聚类模型中的所有位置将由一行表示。该表将包括一个图表,显示按时间滞后划分的所有位置的最重要因素。 该图表允许您可视化解释变量和被预测变量之间的滞后效应。

Table
model_scale
(可选)

指定将用于估计预测和验证模型的比例。

  • INDIVIDUAL_LOCATION将为每个位置估计不同的预测模型和验证模型。 这是默认设置。
  • ENTIRE_CUBE将使用所有位置作为训练数据来估计单个预测模型和验证模型。
  • TIME_SERIES_CLUSTER将为时间序列聚类结果的每个聚类估计一个预测和验证模型。 在 cluster_variable 参数中为变量提供时间序列聚类结果。
String
cluster_variable
(可选)

将用于将时空立方体的位置分组为区域的变量,并且将为每个区域估计不同的预测和验证模型。 该变量必须具有要使用的时间序列聚类结果。 聚类变量可以是时空立方体的任何变量,包括分析变量。

String

代码示例

ForestBasedForecast 示例 1(Python 窗口)

以下 Python 脚本演示了如何使用 ForestBasedForecast 函数。


# Forecast four time steps using a random forest with detrending.
arcpy.stpm.ForestBasedForecast("CarTheft.nc","Cars_NONE_ZEROS", 
           "Analysis.gdb/Forecasts", "outForecastCube.nc", 4, 3, 
           5, 100, "", "", 100, "VALUE_DETREND", "", "", "", "",
           "", "", "INDIVIDUAL_LOCATION")
ForestBasedForecast 示例 2(独立脚本)

以下 Python 脚本演示了如何使用 ForestBasedForecast 函数来预测汽车盗窃数量。

# Forecast change in car thefts using a random forest.

# Import system modules.
import arcpy

# Set property to overwrite existing output, by default.
arcpy.env.overwriteOutput = True

# Set workspace.
workspace = r"C:\Analysis"
arcpy.env.workspace = workspace

# Forecast three time steps using a random forest based on change.
arcpy.stpm.ForestBasedForecast("CarTheft.nc","Cars_NONE_ZEROS","Analysis.gdb/Forecasts",
           "outForecastCube.nc", 4, 3, 5, 100, "", "", 100, "RESIDUAL", "IDENTIFY", 
           "90%", 4, None, 10, None, "INDIVIDUAL_LOCATION")

# Create a feature class visualizing the forecasts.
arcpy.stpm.VisualizeSpaceTimeCube3D("outForecastCube.nc", "Cars_NONE_ZEROS", "VALUE", 
           "Analysis.gdb/ForecastsFC")
ForestBasedForecast 示例 3(独立脚本)

以下 Python 脚本演示了如何使用 ForestBasedForecast 函数来预测 PM2.5,并使用其他变量来改进预测。


import arcpy
arcpy.env.workspace = "C:/Analysis"

# Forecast twelve time steps using a random forest.
# Use entire cube model scale and multiple other variables
# Create variable importance table with top 10% of most important variables
arcpy.stpm.ForestBasedForecast("air_quality_cities.nc", "PM25", 
           "Analysis.gdb/PM25_forecast", "PM25_forecast_cube.nc", 12, None,
           30, 100, None, None, 100, "VALUE", "NONE", "90%",15, 
           "CO;HUMIDITY;O3;PRESSURE;TEMPERATURE;WINDSPEED", 10, 
           "Analysis.gdb/pm25_importance", "ENTIRE_CUBE")
ForestBasedForecast 示例 4(独立脚本)

以下 Python 脚本演示了如何通过 ForestBasedForecast 函数使用具有相似人口的县聚类来预测县人口。


import arcpy
arcpy.env.workspace = "C:/Analysis"

# Run time series clustering to cluster counties by population value.
arcpy.stpm.TimeSeriesClustering("USA_County_Population_1969_2019.nc", 
           "POPULATION_SUM_ZEROS",
           "Analysis.gdb/USA_County_Population_TimeSeriesClustering",
           "VALUE", None, None, None, "CREATE_POPUP")

# Run forest-based forecast models on each time series cluster
arcpy.stpm.ForestBasedForecast("USA_County_Population_1969_2019.nc",
          "POPULATION_SUM_ZEROS", 
          "Analysis.gdb/USA_County_Population_ForestBasedForecast", 
          "USA_County_Population_ForestBasedForecast_cube.nc", 20, 
          None, 3, 100, None, None, 100, "VALUE", "NONE", "90%", 1,
          None, 10, None, "TIME_SERIES_CLUSTER", "POPULATION_SUM_ZEROS")