HDDM_W¶
Drift Detection Method based on Hoeffdingโs bounds with moving weighted average-test.
HDDM_W is an online drift detection method based on McDiarmid's bounds. HDDM_W uses the Exponentially Weighted Moving Average (EWMA) statistic as estimator. It receives as input a stream of real predictions and returns the estimated status of the stream: STABLE, WARNING or DRIFT.
Input: value
must be a binary signal, where 1 indicates error. For example, if a classifier's prediction \(y'\) is right or wrong w.r.t the true target label \(y\):
-
0: Correct, \(y=y'\)
-
1: Error, \(y \neq y'\)
Implementation based on MOA.
Parameters¶
-
drift_confidence โ defaults to
0.001
Confidence to the drift
-
warning_confidence โ defaults to
0.005
Confidence to the warning
-
lambda_option โ defaults to
0.05
The weight given to recent data. Smaller values mean less weight given to recent data.
-
two_sided_test โ defaults to
False
If True, will monitor error increments and decrements (two-sided). By default will only monitor increments (one-sided).
Attributes¶
-
change_detected
Concept drift alarm. True if concept drift is detected.
-
warning_detected
Warning zone alarm. Indicates if the drift detector is in the warning zone. Applicability depends on each drift detector implementation. True if the change detector is in the warning zone.
Examples¶
>>> import random
>>> from river import drift
>>> rng = random.Random(42)
>>> hddm_w = drift.HDDM_W()
>>> # Simulate a data stream as a uniform distribution of 1's and 0's
>>> data_stream = rng.choices([0, 1], k=2000)
>>> # Change the data distribution from index 999 to 1500, simulating an
>>> # increase in error rate (1 indicates error)
>>> data_stream[999:1500] = [1] * 500
>>> # Update drift detector and verify if change is detected
>>> for i, val in enumerate(data_stream):
... in_drift, in_warning = hddm_w.update(val)
... if in_drift:
... print(f"Change detected at index {i}, input value: {val}")
Change detected at index 1014, input value: 1
Methods¶
SampleInfo
clone
Return a fresh estimator with the same parameters.
The clone has the same parameters but has not been updated with any data. This works by looking at the parameters from the class signature. Each parameter is either - recursively cloned if it's a River classes. - deep-copied via copy.deepcopy
if not. If the calling object is stochastic (i.e. it accepts a seed parameter) and has not been seeded, then the clone will not be idempotent. Indeed, this method's purpose if simply to return a new instance with the same input parameters.
reset
Reset the change detector.
update
Update the change detector with a single data point.
Parameters
- value (numbers.Number)
Returns
typing.Tuple[bool, bool]: tuple
References¶
-
Frรญas-Blanco I, del Campo-รvila J, Ramos-Jimenez G, et al. Online and non-parametric drift detection methods based on Hoeffdingโs bounds. IEEE Transactions on Knowledge and Data Engineering, 2014, 27(3): 810-823. ↩
-
Albert Bifet, Geoff Holmes, Richard Kirkby, Bernhard Pfahringer. MOA: Massive Online Analysis; Journal of Machine Learning Research 11: 1601-1604, 2010. ↩