polynomial_decomposer#

通过将多项式拟合到数据中来去除时间序列趋势的组件。

模块内容#

类摘要#

PolynomialDecomposer

通过将多项式和移动平均拟合到数据中来去除时间序列的趋势和季节性。

目录#

class evalml.pipelines.components.transformers.preprocessing.polynomial_decomposer.PolynomialDecomposer(time_index: str = None, degree: int = 1, period: int =-1, random_seed: int =0, **kwargs)[source]#

通过将多项式和移动平均拟合到数据中来去除时间序列的趋势和季节性。

Scikit-learn 的 PolynomialForecaster 用于生成目标数据的加性趋势部分。多项式

将在拟合期间拟合到数据中。该加性多项式趋势将在拟合期间被移除,以便 statsmodel 的 seasonal_decompose 可以通过使用序列推断周期性上的移动平均来确定数据的加性季节性。

例如,每日时间序列数据将生成数据第一周的移动平均,标准化平均值,并返回这 7 个在给定序列的整个长度上重复的平均值。这 7 个平均值会根据给定目标数据的长度重复多次,并被用作数据的季节性信号。

参数
  • time_index (str) – 指定 X 中提供 datetime 对象的列的名称。默认为 None。

  • degree (int) – 多项式的次数。如果为 1,则拟合线性模型;如果为 2,则拟合二次模型等。默认为 1。

  • period (int) – 时间序列数据中对应于一个周期性信号的条目数。例如,如果数据已知具有每周季节性信号,且数据是每日数据,则 period 应为 7。对于具有年度季节性信号的每日数据,period 应为 365。默认为 -1,此时使用 statsmodels 库的 freq_to_period 函数。 statsmodels/statsmodels

  • random_seed (int) – 随机数生成器的种子。默认为 0。

属性

hyperparameter_ranges

{ “degree”: Integer(1, 3)}

invalid_frequencies

[]

modifies_features

False

modifies_target

True

name

多项式分解器

needs_fitting

True

training_only

False

方法

clone

使用相同的参数和随机状态构建一个新组件。

default_parameters

返回此组件的默认参数。

describe

描述一个组件及其参数。

determine_periodicity

使用自相关方法确定季节性信号最可能显著周期的函数。

fit

拟合 PolynomialDecomposer 并确定季节性信号。

fit_transform

从目标变量中移除已拟合的趋势和季节性。

get_trend_dataframe

返回一个包含 4 列的数据帧列表:信号、趋势、季节性、残差。

inverse_transform

将已拟合的趋势和季节性加回目标变量。

is_freq_valid

确定给定字符串是否代表此分解器的有效频率。

load

从文件路径加载组件。

parameters

返回用于初始化组件的参数。

plot_decomposition

绘制目标信号的分解图。

save

将组件保存到文件路径。

set_period

根据目标的季节性设置组件的季节性周期的函数。

transform

通过移除多项式趋势和移动平均季节性来转换目标数据。

update_parameters

更新组件的参数字典。

clone(self)#

使用相同的参数和随机状态构建一个新组件。

返回

使用相同的参数和随机状态的此组件的新实例。

default_parameters(cls)#

返回此组件的默认参数。

我们的约定是 Component.default_parameters == Component().parameters。

返回

此组件的默认参数。

返回类型

dict

describe(self, print_name=False, return_dict=False)#

描述一个组件及其参数。

参数
  • print_name (bool, optional) – 是否打印组件名称

  • return_dict (bool, optional) – 是否以 {“name”: name, “parameters”: parameters} 格式的字典返回描述

返回

如果 return_dict 为 True,则返回字典;否则返回 None。

返回类型

None 或 dict

classmethod determine_periodicity(cls, X: pandas.DataFrame, y: pandas.Series, acf_threshold: float =0.01, rel_max_order: int =5)#

使用自相关方法确定季节性信号最可能显著周期的函数。

参数
  • X (pandas.DataFrame) – 时间序列问题的特征数据。

  • y (pandas.Series) – 时间序列问题的目标数据。

  • acf_threshold (float) – 用于确定周期的自相关函数阈值。低于此阈值的任何值都将被视为 0,不计入周期考量。默认为 0.01。

  • rel_max_order (int) – 用于确定周期的相对最大值的阶数。默认为 5。

返回

时间序列数据中,目标数据的季节性部分在其中

重复的整数条目数。如果时间序列数据是以天为单位,则这是目标季节性信号重复所需的天数。注意:目标数据可以包含多个季节性信号。此函数只会返回更强的那个。例如,如果目标同时具有每周和每年季节性,函数可能会返回“7”或“365”,具体取决于哪个季节性自相关性更强。如果未检测到周期,则返回 None。

返回类型

int

fit(self, X: pandas.DataFrame, y: pandas.Series = None) PolynomialDecomposer[source]#

拟合 PolynomialDecomposer 并确定季节性信号。

目前仅拟合多项式去趋势器。通过从信号中移除趋势并使用 statsmodels 的 seasonal_decompose() 来确定季节性。趋势和季节性目前都被假定为加性的。

参数
  • X (pd.DataFrame, optional) – 有条件地用于构建 datetime 索引。

  • y (pd.Series) – 要进行去趋势和去季节化的目标变量。

返回

self

引发
  • NotImplementedError – 如果输入数据的频率是“月度开始”。statsmodels decompose 不支持此频率,因为 freqstr “MS” 被错误地解释为毫秒。

  • ValueError – 如果 y 为 None。

  • ValueError – 如果目标数据没有 DatetimeIndex 且特征数据中没有 Datetime 特征

fit_transform(self, X: pandas.DataFrame, y: pandas.Series = None) tuple[pandas.DataFrame, pandas.Series]#

从目标变量中移除已拟合的趋势和季节性。

参数
  • X (pd.DataFrame, optional) – 忽略。

  • y (pd.Series) – 要进行去趋势和去季节化的目标变量。

返回

第一个元素是输入特征,未修改返回。

第二个元素是移除已拟合趋势的目标变量 y。

返回类型

pd.DataFrame, pd.Series 的 tuple

get_trend_dataframe(self, X: pandas.DataFrame, y: pandas.Series = None) list[pandas.DataFrame][source]#

返回一个包含 4 列的数据帧列表:信号、趋势、季节性、残差。

Scikit-learn 的 PolynomialForecaster 用于生成目标数据的趋势部分。statsmodel 的 seasonal_decompose 用于生成数据的季节性。

参数
  • X (pd.DataFrame) – 索引中包含时间序列数据的输入数据。

  • y (pd.Seriespd.DataFrame) – 作为 Series 提供用于单变量问题或作为 DataFrame 提供用于多变量问题的目标变量数据。

返回

每个 DataFrame 包含列“信号”、“趋势”、“季节性”和“残差”,

后三列的值是目标数据的分解元素。“信号”列仅仅是输入目标信号,但使用 datetime 索引进行了重新索引以匹配输入特征。

返回类型

pd.DataFrame 的 list

引发
  • TypeError – 如果 X 的索引中不包含时间序列数据。

  • ValueError – 如果 X 的时间序列索引没有推断的频率。

  • ValueError – 如果与去趋势器相关的预测器尚未拟合。

  • TypeError – 如果 y 未作为 pandas Series 或 DataFrame 提供。

inverse_transform(self, y_t: pandas.Series) tuple[pandas.DataFrame, pandas.Series][source]#

将已拟合的趋势和季节性加回目标变量。

多项式趋势被加回信号中,调用去趋势器的 inverse_transform()。然后,季节性被向前投影并加回信号中。

参数

y_t (pd.Series) – 目标变量。

返回

第一个元素是输入特征,未修改返回。

第二个元素是加回趋势和季节性的目标变量 y。

返回类型

pd.DataFrame, pd.Series 的 tuple

引发

ValueError – 如果 y 为 None。

classmethod is_freq_valid(cls, freq: str)#

确定给定字符串是否代表此分解器的有效频率。

参数

freq (str) – 要验证的频率。有关选项,请参见 pandas 文档:https://pandas.ac.cn/pandas-docs/stable/user_guide/timeseries.html#offset-aliases

返回

表示频率是否有效的布尔值。

static load(file_path)#

从文件路径加载组件。

参数

file_path (str) – 加载文件的位置。

返回

ComponentBase 对象

property parameters(self)#

返回用于初始化组件的参数。

plot_decomposition(self, X: pandas.DataFrame, y: Union[pandas.Series, pandas.DataFrame], show: bool =False) Union[tuple[matplotlib.pyplot.Figure, list], dict[str, tuple[matplotlib.pyplot.Figure]]]#

绘制目标信号的分解图。

参数
  • X (pd.DataFrame) – 索引中包含时间序列数据的输入数据。

  • y (pd.Seriespd.DataFrame) – 作为 Series 提供用于单变量问题或作为 DataFrame 提供用于多变量问题的目标变量数据。

  • show (bool) – 是否显示绘图。默认为 False。

返回

绘制了分解图的 figure 和 axes

被绘制在上面

(多序列) dict[str, (matplotlib.pyplot.Figure, list[matplotlib.pyplot.Axes])]: 一个将序列 ID 映射到绘制了分解图的 figure 和 axes 的字典

到绘制了分解图的 figure 和 axes

返回类型

(单序列) matplotlib.pyplot.Figure, list[matplotlib.pyplot.Axes]

save(self, file_path, pickle_protocol=cloudpickle.DEFAULT_PROTOCOL)#

将组件保存到文件路径。

参数
  • file_path (str) – 保存文件的位置。

  • pickle_protocol (int) – pickle 数据流格式。

set_period(self, X: pandas.DataFrame, y: pandas.Series, acf_threshold: float =0.01, rel_max_order: int =5)#

根据目标的季节性设置组件的季节性周期的函数。

参数
  • X (pandas.DataFrame) – 时间序列问题的特征数据。

  • y (pandas.Series) – 时间序列问题的目标数据。

  • acf_threshold (float) – 用于确定周期的自相关函数阈值。低于此阈值的任何值都将被视为 0,不计入周期考量。默认为 0.01。

  • rel_max_order (int) – 用于确定周期的相对最大值的阶数。默认为 5。

transform(self, X: pandas.DataFrame, y: pandas.Series = None) tuple[pandas.DataFrame, pandas.Series][source]#

通过移除多项式趋势和移动平均季节性来转换目标数据。

将已拟合的多项式去趋势器应用于目标数据,移除加性多项式趋势。然后,利用在 .fit() 函数中确定的第一个周期的季节性数据,推断要转换数据的季节性信号。此季节性信号也被假定为加性的并被移除。

参数
  • X (pd.DataFrame, optional) – 有条件地用于构建 datetime 索引。

  • y (pd.Series) – 要进行去趋势和去季节化的目标变量。

返回

输入特征未修改返回。目标变量 y 已去趋势和去季节化。

变量 y 已去趋势和去季节化。

返回类型

pd.DataFrame, pd.Series 的 tuple

引发

ValueError – 如果目标数据没有 DatetimeIndex 且特征数据中没有 Datetime 特征

update_parameters(self, update_dict, reset_fit=True)#

更新组件的参数字典。

参数
  • update_dict (dict) – 要更新的参数字典。

  • reset_fit (bool, optional) – 如果为 True,将把 _is_fitted 设置为 False。