You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xh...@apache.org on 2019/04/23 22:39:37 UTC
[incubator-pinot] branch master updated: [TE] Add
upper/lower/current to HoltWinters baseline (#4151)
This is an automated email from the ASF dual-hosted git repository.
xhsun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 0086590 [TE] Add upper/lower/current to HoltWinters baseline (#4151)
0086590 is described below
commit 00865906cbd22130560fd1d78de503c34827e9e0
Author: Xiaohui Sun <xh...@linkedin.com>
AuthorDate: Tue Apr 23 15:39:32 2019 -0700
[TE] Add upper/lower/current to HoltWinters baseline (#4151)
* [TE] Add upper/lower/current to HoltWinters algorithm
* [TE] minor changes
* [TE] fix HoltWinters test
* [TE] imput with NaN when there is no data
---
.../detection/components/HoltWintersDetector.java | 31 +++++++++++++++++-----
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java
index 6f0b6e2..64949bc 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java
@@ -185,6 +185,10 @@ public class HoltWintersDetector implements BaselineProvider<HoltWintersDetector
DataFrame dfCurr = new DataFrame(dfInput).renameSeries(COL_VALUE, COL_CURR);
DataFrame dfBase = computePredictionInterval(dfInput, window.getStartMillis(), datasetConfig.getTimezone())
.renameSeries(COL_VALUE, COL_BASE);
+ // remove COL_CURR from baseline to use the smoothed value
+ if (dfBase.contains(COL_CURR)) {
+ dfBase.dropSeries(COL_CURR);
+ }
DataFrame df = new DataFrame(dfCurr).addSeries(dfBase);
df.addSeries(COL_DIFF, df.getDoubles(COL_CURR).subtract(df.get(COL_BASE)));
df.addSeries(COL_ANOMALY, BooleanSeries.fillValues(df.size(), false));
@@ -425,7 +429,10 @@ public class HoltWintersDetector implements BaselineProvider<HoltWintersDetector
}, COL_TIME).dropNull();
int size = forecastDF.size();
- double[] resultArray = new double[size];
+ double[] baselineArray = new double[size];
+ double[] currentArray = new double[size];
+ double[] upperBoundArray = new double[size];
+ double[] lowerBoundArray = new double[size];
long[] resultTimeArray = new long[size];
double[] errorArray = new double[size];
@@ -461,14 +468,26 @@ public class HoltWintersDetector implements BaselineProvider<HoltWintersDetector
lastGamma = params.getGamma();
ForecastResults result = forecast(y, params.getAlpha(), params.getBeta(), params.getGamma());
+ double predicted = result.getPredictedValue();
+ double error = result.getErrorBound();
- resultArray[k] = result.getPredictedValue();
- errorArray[k] = result.getErrorBound();
+ // if current value doesn't have data then impute with NaN
+ if (k < y.length) {
+ currentArray[k] = y[k];
+ } else {
+ currentArray[k] = Double.NaN;
+ }
+ baselineArray[k] = predicted;
+ errorArray[k] = error;
+ upperBoundArray[k] = predicted + error;
+ lowerBoundArray[k] = predicted - error;
}
- resultDF.addSeries(COL_TIME, LongSeries.buildFrom(resultTimeArray));
- resultDF.setIndex(COL_TIME);
- resultDF.addSeries(COL_VALUE, DoubleSeries.buildFrom(resultArray));
+ resultDF.addSeries(COL_TIME, LongSeries.buildFrom(resultTimeArray)).setIndex(COL_TIME);
+ resultDF.addSeries(COL_VALUE, DoubleSeries.buildFrom(baselineArray));
+ resultDF.addSeries(COL_CURR, DoubleSeries.buildFrom(currentArray));
+ resultDF.addSeries(COL_UPPER_BOUND, DoubleSeries.buildFrom(upperBoundArray));
+ resultDF.addSeries(COL_LOWER_BOUND, DoubleSeries.buildFrom(lowerBoundArray));
resultDF.addSeries(COL_ERROR, DoubleSeries.buildFrom(errorArray));
return resultDF;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org