Implementation:Online ml River Drift DummyDriftDetector
| Knowledge Sources | |
|---|---|
| Domains | Online_Learning, Concept_Drift, Drift_Detection, Baseline |
| Last Updated | 2026-02-08 16:00 GMT |
Overview
A baseline drift detector that generates pseudo drift signals either at fixed intervals or with random probability based on a sigmoid function.
Description
DummyDriftDetector provides two strategies for generating drift signals independent of actual data characteristics. The fixed mode triggers drift every t_0 samples with an optional warm-up period to avoid synchronized resets in ensembles. The random mode uses a sigmoid function to define drift probability, reaching 0.5 at t_0 and approaching 1.0 at t_0 + w/2. The dynamic_cloning parameter enables different seeds and warm-up periods for each clone, preventing synchronized behavior in ensemble settings. This detector is useful as a baseline or for simulating periodic model refreshes.
Usage
Use DummyDriftDetector as a baseline to evaluate whether actual drift detectors provide value beyond periodic resets. Also useful in ensemble methods to implement periodic model refreshes without actual drift detection, or for ablation studies to separate drift detection impact from other algorithm components.
Code Reference
Source Location
- Repository: Online_ml_River
- File: river/drift/dummy.py
Signature
class DummyDriftDetector(base.DriftDetector):
def __init__(
self,
trigger_method: str = "fixed",
t_0: int = 300,
w: int = 0,
dynamic_cloning: bool = False,
seed: int | None = None,
):
...
Import
from river import drift
I/O Contract
| Parameter | Type | Description |
|---|---|---|
| trigger_method | str (default: "fixed") | "fixed" or "random" trigger strategy |
| t_0 | int (default: 300) | Reference point for triggers |
| w | int (default: 0) | Warm-up period (fixed) or probability width (random) |
| dynamic_cloning | bool (default: False) | Change seed/w on each clone |
| seed | int (optional) | Random seed for reproducibility |
Usage Examples
import random
from river import drift
rng = random.Random(42)
data = [rng.gauss(0, 1) for _ in range(1000)]
# Fixed triggers every 500 samples
ptrigger = drift.DummyDriftDetector(t_0=500, seed=42)
for i, v in enumerate(data):
ptrigger.update(v)
if ptrigger.drift_detected:
print(f"Drift detected at instance {i}.")
# Output:
# Drift detected at instance 499.
# Drift detected at instance 999.
# Random triggers with sigmoid probability
rtrigger = drift.DummyDriftDetector(
trigger_method="random",
t_0=500,
w=100,
dynamic_cloning=True,
seed=42
)
for i, v in enumerate(data):
rtrigger.update(v)
if rtrigger.drift_detected:
print(f"Drift detected at instance {i}.")
# Use in ensemble to avoid synchronized resets
from river import forest
model = forest.ARFClassifier(
drift_detector=drift.DummyDriftDetector(
trigger_method="fixed",
t_0=500,
w=100,
dynamic_cloning=True
)
)