TimeSeriesPredictor.feature_importance

TimeSeriesPredictor.feature_importance(data: TimeSeriesDataFrame | DataFrame | Path | str | None = None, model: str | None = None, metric: str | TimeSeriesScorer | None = None, features: List[str] | None = None, time_limit: float | None = None, method: Literal['naive', 'permutation'] = 'permutation', subsample_size: int = 50, num_iterations: int | None = None, random_seed: int | None = 123, relative_scores: bool = False, include_confidence_band: bool = True, confidence_level: float = 0.99)[source]

通过将每个特征替换为相同特征的打乱版本(也称为排列特征重要性)或通过分配代表特征中位数或众数的常数值,并计算模型预测性能的相对下降,来计算给定模型的特征重要性分数。

特征的重要性分数表示当模型对数据的扰动副本进行预测时,该特征的值在行之间随机打乱后导致的性能下降。特征分数为0.01表示当该特征被随机打乱或替换时,预测性能下降了0.01。特征的分数越高,它对模型性能的重要性就越大。

如果一个特征具有负分,这意味着该特征可能对最终模型有害,并且预期在移除该特征后训练的模型将获得更好的预测性能。请注意,计算特征重要性可能是一个计算成本高昂的过程,特别是如果模型使用了许多特征。在许多情况下,这可能比原始模型训练花费更长的时间。粗略地说,这将等于数据中的特征数量乘以num_iterations(或者,当method="naive"时为1)和在具有subsample_size的数据集上调用evaluate()时所需的时间。

Parameters:
  • data (TimeSeriesDataFrame, pd.DataFrame, Pathstr, 可选) –

    用于评估特征重要性的数据。数据集的最后 prediction_length 个时间步长,对于每个项目,将被保留用于预测,并且预测准确性将在这些时间步长上计算。从在 fit() 期间保留的新数据中可以获得更准确的特征重要性。

    如果在创建预测器时指定了 known_covariates_names,则 data 必须包含 known_covariates_names 中列出的列,且协变量值与目标时间序列对齐。此数据必须包含与 fit() 期间指定的列名相同的标签列。

    如果用于训练预测器的 train_data 包含过去的协变量或静态特征,则 data 也必须包含它们(具有相同的列名和数据类型)。

    如果提供的数据是 pandas DataFrame 的实例,AutoGluon 将尝试自动将其转换为 TimeSeriesDataFrame。如果传递的是 str 或 Path,data 将使用 str 值作为文件路径加载。

    如果未提供 data,则将使用训练期间提供的验证(调优)数据(或者如果未明确提供 tuning_data,则使用用于验证的保留数据)。

  • model (str, optional) – 您想要评估的模型的名称。默认情况下,将使用训练期间表现最佳的模型(具有最高验证分数)。

  • metric (strTimeSeriesScorer, 可选) – 用于计算特征重要性的指标。如果为 None,将使用初始化 TimeSeriesPredictor 时指定的 eval_metric

  • 特征 (列表[字符串], 可选) – 计算并返回特征重要性的特征名称列表。默认情况下,将返回所有特征的重要性。

  • method ({"permutation", "naive"}, default = "permutation") –

    用于计算特征重要性的方法。

    • naive: 通过将每个特征的值替换为常量值来计算特征重要性,并计算评估指标的相对改进。对于实值特征,常量值是中位数;对于分类特征,常量值是众数,这些值是从提供的data中的特征值中获得的。

    • permutation: 通过简单地打乱不同项目和时间步长的特征值来计算特征重要性。每个特征被打乱num_iterations次,并计算评估指标的相对改进。有关置换重要性的解释,请参阅https://explained.ai/rf-importance/

  • subsample_size (int, default = 50) – 从data中采样以计算特征重要性的项目数量。较大的值会增加特征重要性评分的准确性。运行时间与subsample_size成线性比例。

  • time_limit (float, optional) – 以秒为单位的时间限制,用于限制特征重要性的计算。如果为None,特征重要性将在没有提前停止的情况下计算。 如果 method="permutation",至少会评估一个完整的洗牌集。如果洗牌集评估所需的时间超过 time_limit,则无论time_limit如何,该方法都将返回洗牌集评估所需的时间长度。

  • num_iterations (int, optional) – 评估数据的不同迭代次数。如果 method="permutation",这将被解释为洗牌集的次数(等同于 TabularPredictor.feature_importance() 中的 num_shuffle_sets)。如果 method="naive",常量替换方法将重复 num_iterations 次,并且在每次迭代中都会取一个不同的大小为 subsample_size 的数据子样本。 默认情况下,method="naive" 为 1,method="permutation" 为 5。如果 method="naive" 且子样本大小大于 data 中的项目数,则该值将被忽略,因为额外的迭代将是多余的。 较大的值将提高重要性评估的质量。 通常建议在增加 num_iterations 之前增加 subsample_size。 运行时间与 num_iterations 成线性比例。

  • random_seed (intNone, 默认值 = 123) – 如果提供,将为所有模型固定随机数生成器的种子。这保证了特征重要性的结果可重复。

  • relative_scores (bool, default = False) – 默认情况下,此方法将返回由于该特征而导致的评估指标的预期平均绝对改进。如果为True,则统计信息将基于相对(百分比)改进进行计算。

  • include_confidence_band (bool, default = True) – 如果为True,返回的DataFrame将包括两列额外的列,用于指定每个特征的真实重要性值的置信区间。增加subsample_sizenum_iterations将缩小置信区间。

  • confidence_level (float, default = 0.99) – 此参数仅在 include_confidence_band=True 时被考虑,用于指定用于构建置信区间的置信水平。例如,如果 confidence_level 设置为 0.99,则返回的 DataFrame 将包括列 p99_highp99_low,这表示真实特征重要性将在 99% 的时间内(99% 置信区间)介于 p99_highp99_low 之间。更一般地,如果 confidence_level = 0.XX,则包含 XX% 置信区间的列将被命名为 pXX_highpXX_low

Returns:

index: 特征名称。 ‘importance’: 估计的特征重要性分数。 ‘stddev’: 特征重要性分数的标准差。如果为NaN,则表示使用的num_iterations不足。

Return type:

pd.DataFrame 包含2列的特征重要性分数