r-io suiter-io suitesupervision docs
← Supervision
Supervision / Strategy 07 · unchecked by default

Drift detection

The other strategies say how far the process is from its threshold; this one says where it is heading. It watches the curves they draw and raises the same category early when a curve keeps rising, before it reaches 1. Two classic change detection tests are offered: CUSUM and Page-Hinkley.

implemented byDriftDetectionStrategy · gind-npm-strategy-supervision-drift-detection
01 · Curves watched

The values of the others, not its own

Computed last — the strategy declares itself computed after the others. It receives the values they found now and the history of the points, rebuilt from the values per strategy without the strategies computed last: a drift never feeds on its own warnings.

The window — only the points of the last minutes (10 by default) count, so a curve which stopped rising long ago no longer warns. A curve which already reached 1 has raised its own alert: the drift says nothing more on it and does not cover its real value.

02 · Tests

CUSUM and Page-Hinkley

CUSUM S = max(0, S + (xᵢ − xᵢ₋₁) − δ × minutes between the points)
Page-Hinkley m = Σ (xᵢ − mean of x₁…xᵢ − δ × minutes), statistic = m − min(m)
category = statistic / alarm level (1 at the alarm level)

CUSUM sums the rises of the curve, each one less the drift allowed for the time between the points, and never goes below 0: it warns when the curve keeps climbing step after step, and forgets the rises when the curve goes down.

Page-Hinkley measures how far the curve went above its running mean: it reacts to a shift of level. The allowed drift is per minute, so the result does not depend on how often the supervision computes.

Example: a Wrong curve rising by 0.2 per minute (a projected end slipping away) gives, with δ = 0.05, a CUSUM of 0.15 per minute: the alarm level 0.5 is reached after about 3.5 minutes, while the curve is still at 0.7. Rises slower than 0.05 per minute are noise.

03 · Parameters

In the supervision box

ParameterDefault
MethodCUSUM
Allowed drift0.05 per minute
Alarm level0.5
Minimal points3
Window10 min
Curves watchedUncovered, Failing, Obsolete, Wrong (not Improvable)
Parameters of the drift detection strategy
The method chosen, with the explanation of its row.
04 · Watch points

Good to know

Jumps are not drifts

A curve which jumps from 0 to 1 in one point is caught by its own strategy; the drift is for curves which slide towards their threshold.

Points on change

The history keeps a point only when a value changes: a flat curve has few points, which is why the minimal number of points is small.

gind-detection-engine-drift-detection-strategy/…/DriftDetectionStrategy.javaSeries of the window, CUSUM, Page-Hinkley.
gind-webapp-r-iota/…/supervision/SupervisionEngine.javaStrategies computed after the others, history without their own values.
Supervision / Stratégie 07 · décochée par défaut

Drift detection

Les autres stratégies disent à quelle distance du seuil se trouve le processus ; celle-ci dit vers où il va. Elle observe les courbes qu’elles dessinent et lève la même catégorie en avance quand une courbe monte sans cesse, avant qu’elle atteigne 1. Deux tests classiques de détection de changement sont proposés : CUSUM et Page-Hinkley.

implémentée parDriftDetectionStrategy · gind-npm-strategy-supervision-drift-detection
01 · Courbes observées

Les valeurs des autres, pas les siennes

Calculée en dernier — la stratégie se déclare calculée après les autres. Elle reçoit les valeurs qu’elles viennent de trouver et l’historique des points, reconstruit à partir des valeurs par stratégie sans les stratégies calculées en dernier : une dérive ne se nourrit jamais de ses propres alertes.

La fenêtre — seuls les points des dernières minutes (10 par défaut) comptent : une courbe qui a cessé de monter depuis longtemps ne prévient plus. Une courbe qui a déjà atteint 1 a levé sa propre alerte : la dérive ne dit plus rien sur elle et ne masque pas sa vraie valeur.

02 · Tests

CUSUM et Page-Hinkley

CUSUM S = max(0, S + (xᵢ − xᵢ₋₁) − δ × minutes entre les points)
Page-Hinkley m = Σ (xᵢ − moyenne de x₁…xᵢ − δ × minutes), statistique = m − min(m)
catégorie = statistique / niveau d’alarme (1 au niveau d’alarme)

CUSUM additionne les montées de la courbe, chacune diminuée de la dérive permise pour le temps écoulé entre les points, et ne descend jamais sous 0 : il prévient quand la courbe grimpe pas à pas, et oublie les montées quand la courbe redescend.

Page-Hinkley mesure de combien la courbe est montée au-dessus de sa moyenne courante : il réagit à un changement de niveau. La dérive permise est par minute : le résultat ne dépend pas de la fréquence des calculs de la supervision.

Exemple : une courbe Wrong qui monte de 0,2 par minute (une fin projetée qui recule) donne, avec δ = 0,05, un CUSUM de 0,15 par minute : le niveau d’alarme 0,5 est atteint au bout d’environ 3,5 minutes, alors que la courbe n’est qu’à 0,7. Les montées plus lentes que 0,05 par minute sont du bruit.

03 · Paramètres

Dans la boîte de supervision

ParamètreDéfaut
MéthodeCUSUM
Dérive permise0,05 par minute
Niveau d’alarme0,5
Points minimum3
Fenêtre10 min
Courbes observéesUncovered, Failing, Obsolete, Wrong (pas Improvable)
Paramètres de la stratégie de détection de dérive
La méthode choisie, avec l’explication de sa ligne.
04 · Points d’attention

Bon à savoir

Un saut n’est pas une dérive

Une courbe qui saute de 0 à 1 en un point est prise par sa propre stratégie ; la dérive est faite pour les courbes qui glissent vers leur seuil.

Des points au changement

L’historique ne garde un point que quand une valeur change : une courbe plate a peu de points, d’où un nombre minimal de points faible.

gind-detection-engine-drift-detection-strategy/…/DriftDetectionStrategy.javaSérie de la fenêtre, CUSUM, Page-Hinkley.
gind-webapp-r-iota/…/supervision/SupervisionEngine.javaStratégies calculées après les autres, historique sans leurs propres valeurs.