Back to models
Detector

CircularBinarySegmentation

Circular binary segmentation for multiple segment anomaly detection.

Quickstart

python
from sktime.detection.circular_binseg import CircularBinarySegmentation

estimator = CircularBinarySegmentation(anomaly_score=None, penalty=None, min_segment_length=5, max_interval_length=1000, growth_factor=1.5)

Parameters(5)

anomaly_scoreBaseIntervalScorer, optional, default=L2Cost()

The local anomaly score to use for anomaly detection. If a cost is given, it is converted to a local anomaly score using the LocalAnomalyScore class.

penaltynp.ndarray or float, optional, default=None

The penalty to use for anomaly detection. If the anomaly score is penalised (anomaly_score.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 penalty is created in predict based on the fitted score using the make_bic_penalty function.

min_segment_lengthint, default=5
Minimum length between two changepoints. Must be greater than or equal to 1.
max_interval_lengthint, default=1000

The maximum length of an interval to estimate a changepoint in. Must be greater than or equal to 2 * min_segment_length.

growth_factorfloat, default=1.5

The growth factor for the seeded intervals. Intervals grow in size according to interval_len = max(interval_len + 1, floor(growth_factor * interval_len)), starting at interval_len = min_interval_length. It also governs the amount of overlap between intervals of the same length, as the start of each interval is shifted by a factor of 1 + 1 / growth_factor. Must be a float in (1, 2].

Examples

>>> from sktime.detection.circular_binseg import CircularBinarySegmentation
>>> import numpy as np, pandas as pd
>>> rng = np. random. default_rng (42)
>>> X = pd. DataFrame (rng. standard_normal ((75, 1)))
>>> X. iloc [20: 30 ] += 10.0
>>> X. iloc [50: 55 ] += 20.0
>>> detector = CircularBinarySegmentation (penalty = 20.0)
>>> detector. fit_predict (X)

References

  1. [1 ] Olshen, A. B., Venkatraman, E. S., Lucito, R., & Wigler, M. (2004). Circular binary segmentation for the analysis of array-based DNA copy number data. Biostatistics, 5(4), 557-572.