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, Path 或 str, 可选) –
用于评估特征重要性的数据。对于每个项,数据集的最后
prediction_length
个时间步长将保留用于预测,并计算这些时间步长的预测准确性。从fit()
期间保留的新数据中可以获得更准确的特征重要性。data
中列和静态特征的名称和 dtypes 必须与用于训练预测器的train_data
匹配。如果提供的数据是 pandas.DataFrame,AutoGluon 将尝试将其转换为 TimeSeriesDataFrame。如果提供 str 或 Path,AutoGluon 将尝试加载该文件。
如果未提供
data
,则将使用训练期间提供的验证(调优)数据(或者如果tuning_data
未在fit()
中明确提供,则使用用于验证的保留数据)。model (str, 可选) – 您希望评估的模型的名称。默认情况下,将使用训练期间的最佳模型(验证得分最高)。
metric (str 或 TimeSeriesScorer, 可选) – 用于计算特征重要性的指标。如果为 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 (int 或 None, 默认 = 123) – 如果提供,则固定所有模型的随机数生成器种子。这保证了特征重要性结果的可复现性。
relative_scores (bool, 默认 = False) – 默认情况下,此方法将返回由于该特征导致的评估指标的预期平均**绝对**改进。如果为 True,则统计数据将基于**相对**(百分比)改进计算。
include_confidence_band (bool, 默认 = True) – 如果为 True,返回的 DataFrame 将包含另外两列,指定每个特征真实基础重要性值的置信区间。增加
subsample_size
和num_iterations
将缩小置信区间。confidence_level (float, 默认 = 0.99) – 此参数仅在
include_confidence_band=True
时考虑,可用于指定构建置信区间所使用的置信水平。例如,如果confidence_level
设置为 0.99,则返回的 DataFrame 将包含列p99_high
和p99_low
,表示真实特征重要性值在 99% 的时间内(99% 置信区间)将介于p99_high
和p99_low
之间。更一般地,如果confidence_level
= 0.XX,则包含 XX% 置信区间的列将命名为pXX_high
和pXX_low
。
- 返回值:
index:特征名称。‘importance’:估计的特征重要性得分。‘stddev’:特征重要性得分的标准差。如果为 NaN,则表示未进行足够多的
num_iterations
迭代。- 返回类型:
pd.DataFrame
包含 2 列的特征重要性得分