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) DataFrame[source]

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

特征的重要性得分表示当模型在扰动的数据副本上进行预测时(其中该特征的值在行间被随机洗牌),由此导致的性能下降。特征得分 0.01 表示当该特征被随机洗牌或替换时,预测性能下降了 0.01。特征得分越高,表示该特征对模型性能越重要。

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

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

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

    data 中列和静态特征的名称和 dtypes 必须与用于训练预测器的 train_data 匹配。

    如果提供的数据是 pandas.DataFrame,AutoGluon 将尝试将其转换为 TimeSeriesDataFrame。如果提供 strPath,AutoGluon 将尝试加载该文件。

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

  • model (str, 可选) – 您希望评估的模型的名称。默认情况下,将使用训练期间的最佳模型(验证得分最高)。

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

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

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

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

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

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

  • subsample_size (int, 默认 = 50) – 计算特征重要性时从 data 中采样的项数。值越大,特征重要性得分的准确性越高。运行时间与 subsample_size 成线性关系。

  • time_limit (float, 可选) – 限制计算特征重要性的时间(秒)。如果为 None,特征重要性将计算直到完成,没有提前停止。如果 method="permutation",则至少会评估 1 个完整的洗牌集。如果一个洗牌集评估花费的时间超过 time_limit,则该方法将花费一个洗牌集评估的时间返回,无论 time_limit 是多少。

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

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

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

  • include_confidence_band (bool, 默认 = True) – 如果为 True,返回的 DataFrame 将包含另外两列,指定每个特征真实基础重要性值的置信区间。增加 subsample_sizenum_iterations 将缩小置信区间。

  • confidence_level (float, 默认 = 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

返回值:

index:特征名称。‘importance’:估计的特征重要性得分。‘stddev’:特征重要性得分的标准差。如果为 NaN,则表示未进行足够多的 num_iterations 迭代。

返回类型:

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