EDDM¶
Early Drift Detection Method.
EDDM (Early Drift Detection Method) aims to improve the detection rate of gradual concept drift in DDM, while keeping a good performance against abrupt concept drift.
This method works by keeping track of the average distance between two errors instead of only the error rate. For this, it is necessary to keep track of the running average distance and the running standard deviation, as well as the maximum distance and the maximum standard deviation.
The algorithm works similarly to the DDM algorithm, by keeping track of statistics only. It works with the running average distance (\(p_i'\)) and the running standard deviation (\(s_i'\)), as well as \(p'_{max}\) and \(s'_{max}\), which are the values of \(p_i'\) and \(s_i'\) when \((p_i' + 2 * s_i')\) reaches its maximum.
Like DDM, there are two threshold values that define the borderline between no change, warning zone, and drift detected. These are as follows:
-
if \((p_i' + 2 * s_i') / (p'_{max} + 2 * s'_{max}) < \alpha\) -> Warning zone
-
if \((p_i' + 2 * s_i') / (p'_{max} + 2 * s'_{max}) < \beta\) -> Change detected
\(\alpha\) and \(\beta\) are set to 0.95 and 0.9, respectively.
Input: x
is an entry in a stream of bits, where 1 indicates error/failure and 0 represents correct/normal values.
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'\)
Parameters¶
-
warm_start
Type โ int
Default โ
30
The minimum required number of monitored errors/failures so change can be detected. Warm start parameter for the drift detector.
-
alpha
Type โ float
Default โ
0.95
Threshold for triggering a warning. Must be between 0 and 1. The smaller the value, the more conservative the detector becomes.
-
beta
Type โ float
Default โ
0.9
Threshold for triggering a drift. Must be between 0 and 1. The smaller the value, the more conservative the detector becomes.
Attributes¶
-
drift_detected
Whether or not a drift is detected following the last update.
-
warning_detected
Whether or not a drift is detected following the last update.
Examples¶
import random
from river import drift
rng = random.Random(42)
eddm = drift.binary.EDDM(alpha=0.8, beta=0.75)
data_stream = rng.choices([0, 1], k=1000)
data_stream = data_stream + rng.choices([0, 1], k=1000, weights=[0.3, 0.7])
print_warning = True
for i, x in enumerate(data_stream):
_ = eddm.update(x)
if eddm.warning_detected and print_warning:
print(f"Warning detected at index {i}")
print_warning = False
if eddm.drift_detected:
print(f"Change detected at index {i}")
print_warning = True
Warning detected at index 1059
Change detected at index 1278
Methods¶
update
Update the change detector with a single data point.
Parameters
- x โ 'bool'
Returns
BinaryDriftDetector: self
-
Early Drift Detection Method. Manuel Baena-Garcia, Jose Del Campo-Avila, Raรบl Fidalgo, Albert Bifet, Ricard Gavalda, Rafael Morales-Bueno. In Fourth International Workshop on Knowledge Discovery from Data Streams, 2006. ↩