Browse Source

Treat dimensions as normal when we don't have enough/valid data. (#13005)

Ideally, we'd log such cases but this is not currently feasible because
we have to process thousands of dimensions per second.
vkalintiris 2 years ago
parent
commit
d36896ed06
1 changed files with 6 additions and 2 deletions
  1. 6 2
      ml/Dimension.cc

+ 6 - 2
ml/Dimension.cc

@@ -161,8 +161,10 @@ void PredictableDimension::addValue(CalculatedNumber Value, bool Exists) {
 
 std::pair<MLResult, bool> PredictableDimension::predict() {
     unsigned N = Cfg.DiffN + Cfg.SmoothN + Cfg.LagN;
-    if (CNs.size() != N)
+    if (CNs.size() != N) {
+        AnomalyBit = false;
         return { MLResult::MissingData, AnomalyBit };
+    }
 
     CalculatedNumber *TmpCNs = new CalculatedNumber[N * (Cfg.LagN + 1)]();
     std::memcpy(TmpCNs, CNs.data(), N * sizeof(CalculatedNumber));
@@ -172,8 +174,10 @@ std::pair<MLResult, bool> PredictableDimension::predict() {
     AnomalyScore = computeAnomalyScore(SB);
     delete[] TmpCNs;
 
-    if (AnomalyScore == std::numeric_limits<CalculatedNumber>::quiet_NaN())
+    if (AnomalyScore == std::numeric_limits<CalculatedNumber>::quiet_NaN()) {
+        AnomalyBit = false;
         return { MLResult::NaN, AnomalyBit };
+    }
 
     AnomalyBit = AnomalyScore >= (100 * Cfg.DimensionAnomalyScoreThreshold);
     return { MLResult::Success, AnomalyBit };