Skip to content

CAPA

CAPA

class CAPA(segment_saving=None, segment_penalty=None, point_saving=None, point_penalty=None, min_segment_length=2, max_segment_length=1000, ignore_point_anomalies=False, find_affected_components=False)[source]

The collective and point anomaly (CAPA) detection algorithm.

An efficient implementation of the CAPA family of algorithms for anomaly detection. Supports both univariate data [1] (CAPA) and multivariate data with subset anomalies [2] (MVCAPA) by using the penalised saving formulation of the collective anomaly detection problem found in [2] and [3]. For multivariate data, the algorithm can also be used to infer the affected components for each anomaly given a suitable penalty array.

Parameters:
segment_savingBaseIntervalScorer, optional, default=L2Saving()

The saving to use for segment anomaly detection. If a cost is given, the saving is constructed from the cost. The cost must have a fixed parameter that represents the baseline cost. If a penalised saving is given, it must be constructed from PenalisedScore.

segment_penaltynp.ndarray or float, optional, default=None

The penalty to use for segment anomaly detection. If the segment saving is penalised (segment_saving.get_tag("is_penalised")) the penalty will be ignored. The different types of penalties are:

  • float: A constant penalty applied to the sum of scores across all variables in the data.

  • np.ndarray: A penalty array of the same length as the number of columns in the data, where element i of the array is the penalty for i+1 variables being affected by an anomaly. The penalty array must be positive and increasing (not strictly). A penalised score with a linear penalty array is faster to evaluate than a nonlinear penalty array.

  • None: A default constant penalty is created in predict based on the fitted score using the make_chi2_penalty function.

point_savingBaseIntervalScorer, optional, default=L2Saving()

The saving to use for point anomaly detection. Only savings with a minimum size of 1 are permitted. If a cost is given, the saving is constructed from the cost. The cost must have a fixed parameter that represents the baseline cost. If a penalised saving is given, it must be constructed from PenalisedScore.

point_penaltynp.ndarray or float, optional, default=None

The penalty to use for point anomaly detection. See the documentation for segment_penalty for details. For None input, the default is set using the make_linear_chi2_penalty function.

min_segment_lengthint, optional, default=2

Minimum length of a segment. This may be overridden by the min_size of the fitted segment_saving.

max_segment_lengthint, optional, default=1000

Maximum length of a segment.

ignore_point_anomaliesbool, optional, default=False

If True, detected point anomalies are not returned by predict. I.e., only segment anomalies are returned. If False, point anomalies are included in the output as segment anomalies of length 1.

find_affected_componentsbool, optional, default=False

If True, the affected components for each segment anomaly are returned in the "icolumns" key of the predict output. Only relevant for multivariate data in combination with a penalty array. The affected components are sorted from the highest to lowest evidence of an anomaly being present in the variable.

Attributes:
is_fitted

Whether fit has been called.

References

[1]

Fisch, A. T., Eckley, I. A., & Fearnhead, P. (2022). A linear time method for the detection of collective and point anomalies. Statistical Analysis and Data Mining: The ASA Data Science Journal, 15(4), 494-508.

[2] (1,2)

Fisch, A. T., Eckley, I. A., & Fearnhead, P. (2022). Subset multivariate collective and point anomaly detection. Journal of Computational and Graphical Statistics, 31(2), 574-585.

[3]

Tveten, M., Eckley, I. A., & Fearnhead, P. (2022). Scalable change-point and anomaly detection in cross-correlated data with an application to condition monitoring. The Annals of Applied Statistics, 16(2), 721-743.

Examples

>>> from sktime.detection.capa import CAPA
>>> import numpy as np, pandas as pd
>>> rng = np.random.default_rng(42)
>>> X = pd.DataFrame(rng.standard_normal((200, 1)))
>>> X.iloc[80:100] += 10.0
>>> detector = CAPA(min_segment_length=5, max_segment_length=100)
>>> detector.fit_predict(X)

Methods

change_points_to_segments(y_sparse[, start, end])

Convert an series of change point indexes to segments.

check_is_fitted([method_name])

Check if the estimator has been fitted.

clone()

Obtain a clone of the object with same hyper-parameters and config.

clone_tags(estimator[, tag_names])

Clone tags from another object as dynamic override.

create_test_instance([parameter_set])

Construct an instance of the class, using first test parameter set.

create_test_instances_and_names([parameter_set])

Create list of all test instances and a list of names for them.

dense_to_sparse(y_dense)

Convert the dense output from an detector to a sparse format.

fit(X[, y])

Fit to training data.

fit_predict(X[, y])

Fit to data, then predict it.

fit_transform(X[, y])

Fit to data, then transform it.

get_class_tag(tag_name[, tag_value_default])

Get class tag value from class, with tag level inheritance from parents.

get_class_tags()

Get class tags from class, with tag level inheritance from parent classes.

get_config()

Get config flags for self.

get_fitted_params([deep])

Get fitted parameters.

get_param_defaults()

Get object's parameter defaults.

get_param_names([sort])

Get object's parameter names.

get_params([deep])

Get a dict of parameters values for this object.

get_tag(tag_name[, tag_value_default, ...])

Get tag value from instance, with tag level inheritance and overrides.

get_tags()

Get tags from instance, with tag level inheritance and overrides.

get_test_params([parameter_set])

Return testing parameter settings for the estimator.

is_composite()

Check if the object is composed of other BaseObjects.

load_from_path(serial)

Load object from file location.

load_from_serial(serial)

Load object from serialized memory container.

predict(X)

Create labels on test/deployment data.

predict_points(X)

Predict changepoints/anomalies on test/deployment data.

predict_scores(X)

Return scores for predicted labels on test/deployment data.

predict_segments(X)

Predict segments on test/deployment data.

reset()

Reset the object to a clean post-init state.

save([path, serialization_format])

Save serialized self to bytes-like object or to (.zip) file.

segments_to_change_points(y_sparse)

Convert segments to change points.

set_config(**config_dict)

Set config flags to given values.

set_params(**params)

Set the parameters of this object.

set_random_state([random_state, deep, ...])

Set random_state pseudo-random seed parameters for self.

set_tags(**tag_dict)

Set instance level tag overrides to given values.

sparse_to_dense(y_sparse, index)

Convert the sparse output from an detector to a dense format.

transform(X)

Create labels on test/deployment data.

transform_scores(X)

Return scores for predicted labels on test/deployment data.

update(X[, y])

Update model with new data and optional ground truth labels.

update_predict(X[, y])

Update model with new data and create labels for it.