Anomaly Formula: Regression Residual
What it does:
This rule fits a simple linear regression model to your historical usage data (excluding the latest value) and checks how far the latest value deviates from the predicted trend line. If the residual (difference between actual and predicted value) exceeds your defined threshold, and the direction matches your selected change type, it’s flagged as an anomaly.
When to use it:
Use this when you want to detect values that break away from a predicted trend. This is ideal for identifying trend-breaking behavior that’s not captured by static thresholds.
Mathematical Formula:
Let:
• H = Historical Values (excluding L)
• L = Latest Value
• T = Threshold
• Ŷ = Predicted Value from linear regression model based on H
• R = Residual = |L − Ŷ|
Anomaly Condition
R = |L − Ŷ| ≥ T
Direction Validation (based on Change Type):
• If Change Type = Increased, condition is valid only if L > Ŷ
• If Change Type = Decreased, condition is valid only if L < Ŷ
• If Change Type = Any, direction check is not required
Outcomes:
❌ Anomaly Detected → R ≥ T and direction matches Change Type
☑️ Skipped → R ≥ T, but direction does not match Change Type
✅ Normal → R < T
Examples:
Example 1
Change Type: Increased
Threshold: 10
History: 100, 110, 120, 130, 140
- If Latest Value = 145
Result: Normal ✅
Explanation:
Ŷ = 150 (predicted based on linear trend)
Residual = |145 − 150| = 5
Residual (5) < Threshold (10)
- If Latest Value = 170
Result: Anomaly Detected ❌
Explanation:
Ŷ = 150 → Residual = |170 − 150| = 20
Residual (20) ≥ Threshold (10)
- If Latest Value = 130
Result: Skipped ☑️
Explanation:
Ŷ = 150 → Residual = |130 − 150| = 20
Residual (20) ≥ Threshold (10)
But direction = Decrease → does not match “Increased”
Example 2
Change Type: Decreased
Threshold: 8
History: 200, 190, 180, 170, 160
- If Latest Value = 148
Result: Normal ✅
Explanation:
Ŷ = 150 → Residual = |148 − 150| = 2
Residual (2) < Threshold (8)
- If Latest Value = 135
Result: Anomaly Detected ❌
Explanation:
Ŷ = 150 → Residual = |135 − 150| = 15
Residual (15) ≥ Threshold (8)
- If Latest Value = 162
Result: Skipped ☑️
Explanation:
Ŷ = 150 → Residual = |162 − 150| = 12
Residual (12) ≥ Threshold (8)
But direction = Increase → does not match “Decreased”
Example 3
Change Type: Any
Threshold: 12
History: 10, 20, 30, 40, 50
- If Latest Value = 45
Result: Normal ✅
Explanation:
Ŷ = 60 → Residual = |55 − 60| = 5
Residual (5) < Threshold (12)
- If Latest Value = 75
Result: Anomaly Detected ❌
Explanation:
Ŷ = 60 → Residual = |75 − 60| = 15
Residual (15) ≥ Threshold (12)