序列长度不匹配数据检查#

一种数据检查,用于检查多序列数据中一个或多个唯一序列的长度是否与其他序列不同。

模块内容#

类摘要#

MismatchedSeriesLengthDataCheck

检查多序列数据集中一个或多个唯一序列的长度是否与其他序列不同。

目录#

class evalml.data_checks.mismatched_series_length_data_check.MismatchedSeriesLengthDataCheck(series_id)[source]#

检查多序列数据集中一个或多个唯一序列的长度是否与其他序列不同。

目前主要用于堆叠数据

参数

series_id (str) – 数据集中 series_id 列的名称。

方法

name

返回描述数据检查的名称。

validate

检查多序列数据集中一个或多个唯一序列的长度是否与其他序列不同。

name(cls)#

返回描述数据检查的名称。

validate(self, X, y=None)[source]#

检查多序列数据集中一个或多个唯一序列的长度是否与其他序列不同。

目前主要用于堆叠数据

参数
  • X (pd.DataFrame, np.ndarray) – 需要检查的输入特征。必须包含 series_id 列。

  • y (pd.Series) – 目标变量。默认为 None。将被忽略。

返回值

如果数据集中存在序列长度不匹配,则返回包含 DataCheckWarning 的列表

如果给定的 series_id 不在数据集中,则返回包含 DataCheckError 的列表

返回类型

dict (DataCheckWarning, DataCheckError)

示例

>>> import pandas as pd

对于多序列时间序列数据集,理想情况下,每个 seriesID 都应具有相同数量的日期时间条目。如果它们不相同,则会发出警告,指示哪些 seriesID 的长度不匹配。

>>> X = pd.DataFrame(
...     {
...         "date": pd.date_range(start="1/1/2018", periods=20).repeat(5),
...         "series_id": pd.Series(list(range(5)) * 20, dtype="str"),
...         "feature_a": range(100),
...         "feature_b": reversed(range(100)),
...     },
... )
>>> X = X.drop(labels=0, axis=0)
>>> mismatched_series_length_check = MismatchedSeriesLengthDataCheck("series_id")
>>> assert mismatched_series_length_check.validate(X) == [
...      {
...         "message": "Series ID ['0'] do not match the majority length of the other series, which is 20",
...         "data_check_name": "MismatchedSeriesLengthDataCheck",
...         "level": "warning",
...         "details": {
...             "columns": None,
...             "rows": None,
...             "series_id": ['0'],
...             "majority_length": 20
...         },
...         "code": "MISMATCHED_SERIES_LENGTH",
...         "action_options": [],
...     }
... ]

如果 MismatchedSeriesLengthDataCheck 传入了无效的 series_id 列名,则会引发错误。

>>> X = pd.DataFrame(
...     {
...         "date": pd.date_range(start="1/1/2018", periods=20).repeat(5),
...         "series_id": pd.Series(list(range(5)) * 20, dtype="str"),
...         "feature_a": range(100),
...         "feature_b": reversed(range(100)),
...     },
... )
>>> X = X.drop(labels=0, axis=0)
>>> mismatched_series_length_check = MismatchedSeriesLengthDataCheck("not_series_id")
>>> assert mismatched_series_length_check.validate(X) == [
...      {
...         "message": "series_id 'not_series_id' is not in the dataset.",
...         "data_check_name": "MismatchedSeriesLengthDataCheck",
...         "level": "error",
...         "details": {
...             "columns": None,
...             "rows": None,
...             "series_id": "not_series_id",
...         },
...         "code": "INVALID_SERIES_ID_COL",
...         "action_options": [],
...     }
... ]

如果存在多个长度具有相同数量的序列(例如,两个序列长度为 20,两个序列长度为 19),此数据检查将把较长的长度视为多数长度(例如,在前面的示例中,长度 20 将是多数长度) >>> X = pd.DataFrame( … { … “date”: pd.date_range(start=”1/1/2018”, periods=20).repeat(4), … “series_id”: pd.Series(list(range(4)) * 20, dtype=”str”), … “feature_a”: range(80), … “feature_b”: reversed(range(80)), … }, … ) >>> X = X.drop(labels=[0, 1], axis=0) >>> mismatched_series_length_check = MismatchedSeriesLengthDataCheck(“series_id”) >>> assert mismatched_series_length_check.validate(X) == [ … { … “message”: “Series ID [‘0’, ‘1’] 的长度与多数序列长度(即 20)不匹配”, … “data_check_name”: “MismatchedSeriesLengthDataCheck”, … “level”: “warning”, … “details”: { … “columns”: None, … “rows”: None, … “series_id”: [‘0’, ‘1’], … “majority_length”: 20 … }, … “code”: “MISMATCHED_SERIES_LENGTH”, … “action_options”: [], … } … ]