From 491afbe01ccc0d76099135a283f9c70ef62c901b Mon Sep 17 00:00:00 2001 From: Zachary Tong Date: Wed, 6 May 2015 16:13:11 -0400 Subject: [PATCH] Aggregations: Add Holt-Winters model to `moving_avg` pipeline aggregation Closes #11043 --- .../pipeline/movavg-aggregation.asciidoc | 115 ++++- .../images/reducers_movavg/triple.png | Bin 0 -> 98397 bytes .../reducers_movavg/triple_prediction.png | Bin 0 -> 93252 bytes .../reducers_movavg/triple_untruncated.png | Bin 0 -> 48762 bytes .../pipeline/movavg/MovAvgParser.java | 5 +- .../movavg/MovAvgPipelineAggregator.java | 23 +- .../pipeline/movavg/models/EwmaModel.java | 11 +- .../movavg/models/HoltLinearModel.java | 18 +- .../movavg/models/HoltWintersModel.java | 422 ++++++++++++++++++ .../pipeline/movavg/models/LinearModel.java | 5 +- .../pipeline/movavg/models/MovAvgModel.java | 133 ++++++ .../movavg/models/MovAvgModelModule.java | 9 +- .../movavg/models/MovAvgModelParser.java | 34 -- .../models/MovAvgModelParserMapper.java | 10 +- .../pipeline/movavg/models/SimpleModel.java | 5 +- .../models/TransportMovAvgModelModule.java | 1 + .../pipeline/moving/avg/MovAvgTests.java | 224 +++++++++- .../pipeline/moving/avg/MovAvgUnitTests.java | 288 +++++++++++- 18 files changed, 1204 insertions(+), 99 deletions(-) create mode 100644 docs/reference/images/reducers_movavg/triple.png create mode 100644 docs/reference/images/reducers_movavg/triple_prediction.png create mode 100644 docs/reference/images/reducers_movavg/triple_untruncated.png create mode 100644 src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltWintersModel.java delete mode 100644 src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParser.java diff --git a/docs/reference/aggregations/pipeline/movavg-aggregation.asciidoc b/docs/reference/aggregations/pipeline/movavg-aggregation.asciidoc index a4e207938490..6f998ffca98a 100644 --- a/docs/reference/aggregations/pipeline/movavg-aggregation.asciidoc +++ b/docs/reference/aggregations/pipeline/movavg-aggregation.asciidoc @@ -180,11 +180,11 @@ The default value of `alpha` is `0.5`, and the setting accepts any float from 0- [[single_0.2alpha]] -.Single Exponential moving average with window of size 10, alpha = 0.2 +.EWMA with window of size 10, alpha = 0.2 image::images/pipeline_movavg/single_0.2alpha.png[] [[single_0.7alpha]] -.Single Exponential moving average with window of size 10, alpha = 0.7 +.EWMA with window of size 10, alpha = 0.7 image::images/pipeline_movavg/single_0.7alpha.png[] ==== Holt-Linear @@ -223,13 +223,111 @@ to see. Small values emphasize long-term trends (such as a constant linear tren values emphasize short-term trends. This will become more apparently when you are predicting values. [[double_0.2beta]] -.Double Exponential moving average with window of size 100, alpha = 0.5, beta = 0.2 +.Holt-Linear moving average with window of size 100, alpha = 0.5, beta = 0.2 image::images/pipeline_movavg/double_0.2beta.png[] [[double_0.7beta]] -.Double Exponential moving average with window of size 100, alpha = 0.5, beta = 0.7 +.Holt-Linear moving average with window of size 100, alpha = 0.5, beta = 0.7 image::images/pipeline_movavg/double_0.7beta.png[] +==== Holt-Winters + +The `holt_winters` model (aka "triple exponential") incorporates a third exponential term which +tracks the seasonal aspect of your data. This aggregation therefore smooths based on three components: "level", "trend" +and "seasonality". + +The level and trend calculation is identical to `holt` The seasonal calculation looks at the difference between +the current point, and the point one period earlier. + +Holt-Winters requires a little more handholding than the other moving averages. You need to specify the "periodicity" +of your data: e.g. if your data has cyclic trends every 7 days, you would set `period: 7`. Similarly if there was +a monthly trend, you would set it to `30`. There is currently no periodicity detection, although that is planned +for future enhancements. + +There are two varieties of Holt-Winters: additive and multiplicative. + +===== "Cold Start" + +Unfortunately, due to the nature of Holt-Winters, it requires two periods of data to "bootstrap" the algorithm. This +means that your `window` must always be *at least* twice the size of your period. An exception will be thrown if it +isn't. It also means that Holt-Winters will not emit a value for the first `2 * period` buckets; the current algorithm +does not backcast. + +[[holt_winters_cold_start]] +.Holt-Winters showing a "cold" start where no values are emitted +image::images/reducers_movavg/triple_untruncated.png[] + +Because the "cold start" obscures what the moving average looks like, the rest of the Holt-Winters images are truncated +to not show the "cold start". Just be aware this will always be present at the beginning of your moving averages! + +===== Additive Holt-Winters + +Additive seasonality is the default; it can also be specified by setting `"type": "add"`. This variety is preferred +when the seasonal affect is additive to your data. E.g. you could simply subtract the seasonal effect to "de-seasonalize" +your data into a flat trend. + +The default value of `alpha`, `beta` and `gamma` is `0.5`, and the settings accept any float from 0-1 inclusive. +The default value of `period` is `1`. + +[source,js] +-------------------------------------------------- +{ + "the_movavg":{ + "moving_avg":{ + "buckets_path": "the_sum", + "model" : "holt_winters", + "settings" : { + "type" : "add", + "alpha" : 0.5, + "beta" : 0.5, + "gamma" : 0.5, + "period" : 7 + } + } +} +-------------------------------------------------- + + +[[holt_winters_add]] +.Holt-Winters moving average with window of size 120, alpha = 0.5, beta = 0.7, gamma = 0.3, period = 30 +image::images/reducers_movavg/triple.png[] + +===== Multiplicative Holt-Winters + +Multiplicative is specified by setting `"type": "mult"`. This variety is preferred when the seasonal affect is +multiplied against your data. E.g. if the seasonal affect is x5 the data, rather than simply adding to it. + +The default value of `alpha`, `beta` and `gamma` is `0.5`, and the settings accept any float from 0-1 inclusive. +The default value of `period` is `1`. + +[WARNING] +====== +Multiplicative Holt-Winters works by dividing each data point by the seasonal value. This is problematic if any of +your data is zero, or if there are gaps in the data (since this results in a divid-by-zero). To combat this, the +`mult` Holt-Winters pads all values by a very small amount (1*10^-10^) so that all values are non-zero. This affects +the result, but only minimally. If your data is non-zero, or you prefer to see `NaN` when zero's are encountered, +you can disable this behavior with `pad: false` +====== + +[source,js] +-------------------------------------------------- +{ + "the_movavg":{ + "moving_avg":{ + "buckets_path": "the_sum", + "model" : "holt_winters", + "settings" : { + "type" : "mult", + "alpha" : 0.5, + "beta" : 0.5, + "gamma" : 0.5, + "period" : 7, + "pad" : true + } + } +} +-------------------------------------------------- + ==== Prediction All the moving average model support a "prediction" mode, which will attempt to extrapolate into the future given the @@ -263,7 +361,7 @@ value, we can extrapolate based on local constant trends (in this case the predi of the series was heading in a downward direction): [[double_prediction_local]] -.Double Exponential moving average with window of size 100, predict = 20, alpha = 0.5, beta = 0.8 +.Holt-Linear moving average with window of size 100, predict = 20, alpha = 0.5, beta = 0.8 image::images/pipeline_movavg/double_prediction_local.png[] In contrast, if we choose a small `beta`, the predictions are based on the global constant trend. In this series, the @@ -272,3 +370,10 @@ global trend is slightly positive, so the prediction makes a sharp u-turn and be [[double_prediction_global]] .Double Exponential moving average with window of size 100, predict = 20, alpha = 0.5, beta = 0.1 image::images/pipeline_movavg/double_prediction_global.png[] + +The `holt_winters` model has the potential to deliver the best predictions, since it also incorporates seasonal +fluctuations into the model: + +[[holt_winters_prediction_global]] +.Holt-Winters moving average with window of size 120, predict = 25, alpha = 0.8, beta = 0.2, gamma = 0.7, period = 30 +image::images/pipeline_movavg/triple_prediction.png[] diff --git a/docs/reference/images/reducers_movavg/triple.png b/docs/reference/images/reducers_movavg/triple.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaf281c1bfef6a17d9b4be7d9e8135f0cfee0ce GIT binary patch literal 98397 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 literal 0 HcmV?d00001 diff --git a/docs/reference/images/reducers_movavg/triple_prediction.png b/docs/reference/images/reducers_movavg/triple_prediction.png new file mode 100644 index 0000000000000000000000000000000000000000..fb34881d1e3238d4abee430c503848abd7b12b8c GIT binary patch literal 93252 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

)^zc!G-{18Q3+p&yf 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 F@ITtfD=z>5 literal 0 HcmV?d00001 diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgParser.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgParser.java index b4f54fd4957a..261f811a7518 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgParser.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgParser.java @@ -27,7 +27,6 @@ import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorFactory; import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModel; -import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModelParser; import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModelParserMapper; import org.elasticsearch.search.aggregations.support.format.ValueFormat; import org.elasticsearch.search.aggregations.support.format.ValueFormatter; @@ -140,12 +139,12 @@ public class MovAvgParser implements PipelineAggregator.Parser { formatter = ValueFormat.Patternable.Number.format(format).formatter(); } - MovAvgModelParser modelParser = movAvgModelParserMapper.get(model); + MovAvgModel.AbstractModelParser modelParser = movAvgModelParserMapper.get(model); if (modelParser == null) { throw new SearchParseException(context, "Unknown model [" + model + "] specified. Valid options are:" + movAvgModelParserMapper.getAllNames().toString(), parser.getTokenLocation()); } - MovAvgModel movAvgModel = modelParser.parse(settings); + MovAvgModel movAvgModel = modelParser.parse(settings, pipelineAggregatorName, context, window); return new MovAvgPipelineAggregator.Factory(pipelineAggregatorName, bucketsPaths, formatter, gapPolicy, window, predict, movAvgModel); diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java index cc1e6682e70d..af2db7188468 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java @@ -117,21 +117,26 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { Double thisBucketValue = resolveBucketValue(histo, bucket, bucketsPaths()[0], gapPolicy); currentKey = bucket.getKey(); + // Default is to reuse existing bucket. Simplifies the rest of the logic, + // since we only change newBucket if we can add to it + InternalHistogram.Bucket newBucket = bucket; + if (!(thisBucketValue == null || thisBucketValue.equals(Double.NaN))) { values.offer(thisBucketValue); - double movavg = model.next(values); + // Some models (e.g. HoltWinters) have certain preconditions that must be met + if (model.hasValue(values.size())) { + double movavg = model.next(values); - List aggs = new ArrayList<>(Lists.transform(bucket.getAggregations().asList(), FUNCTION)); - aggs.add(new InternalSimpleValue(name(), movavg, formatter, new ArrayList(), metaData())); - InternalHistogram.Bucket newBucket = factory.createBucket(currentKey, bucket.getDocCount(), new InternalAggregations( - aggs), bucket.getKeyed(), bucket.getFormatter()); - newBuckets.add(newBucket); - - } else { - newBuckets.add(bucket); + List aggs = new ArrayList<>(Lists.transform(bucket.getAggregations().asList(), AGGREGATION_TRANFORM_FUNCTION)); + aggs.add(new InternalSimpleValue(name(), movavg, formatter, new ArrayList(), metaData())); + newBucket = factory.createBucket(currentKey, bucket.getDocCount(), new InternalAggregations( + aggs), bucket.getKeyed(), bucket.getFormatter()); + } } + newBuckets.add(newBucket); + if (predict > 0) { if (currentKey instanceof Number) { lastKey = ((Number) bucket.getKey()).longValue(); diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/EwmaModel.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/EwmaModel.java index b6ee7f8ddb6e..2f33855d50e5 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/EwmaModel.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/EwmaModel.java @@ -25,6 +25,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgParser; +import org.elasticsearch.search.internal.SearchContext; import java.io.IOException; import java.util.Collection; @@ -83,7 +84,7 @@ public class EwmaModel extends MovAvgModel { out.writeDouble(alpha); } - public static class SingleExpModelParser implements MovAvgModelParser { + public static class SingleExpModelParser extends AbstractModelParser { @Override public String getName() { @@ -91,15 +92,13 @@ public class EwmaModel extends MovAvgModel { } @Override - public MovAvgModel parse(@Nullable Map settings) { + public MovAvgModel parse(@Nullable Map settings, String pipelineName, SearchContext context, int windowSize) { - Double alpha; - if (settings == null || (alpha = (Double)settings.get("alpha")) == null) { - alpha = 0.5; - } + double alpha = parseDoubleParam(context, settings, "alpha", 0.5); return new EwmaModel(alpha); } + } public static class EWMAModelBuilder implements MovAvgModelBuilder { diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltLinearModel.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltLinearModel.java index a78a54864607..3a7fd963c431 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltLinearModel.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltLinearModel.java @@ -25,6 +25,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgParser; +import org.elasticsearch.search.internal.SearchContext; import java.io.IOException; import java.util.*; @@ -142,7 +143,7 @@ public class HoltLinearModel extends MovAvgModel { out.writeDouble(beta); } - public static class DoubleExpModelParser implements MovAvgModelParser { + public static class DoubleExpModelParser extends AbstractModelParser { @Override public String getName() { @@ -150,19 +151,10 @@ public class HoltLinearModel extends MovAvgModel { } @Override - public MovAvgModel parse(@Nullable Map settings) { - - Double alpha; - Double beta; - - if (settings == null || (alpha = (Double)settings.get("alpha")) == null) { - alpha = 0.5; - } - - if (settings == null || (beta = (Double)settings.get("beta")) == null) { - beta = 0.5; - } + public MovAvgModel parse(@Nullable Map settings, String pipelineName, SearchContext context, int windowSize) { + double alpha = parseDoubleParam(context, settings, "alpha", 0.5); + double beta = parseDoubleParam(context, settings, "beta", 0.5); return new HoltLinearModel(alpha, beta); } } diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltWintersModel.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltWintersModel.java new file mode 100644 index 000000000000..ef3c7354500d --- /dev/null +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/HoltWintersModel.java @@ -0,0 +1,422 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.search.aggregations.pipeline.movavg.models; + + +import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.common.Nullable; +import org.elasticsearch.common.ParseField; +import org.elasticsearch.common.io.stream.StreamInput; +import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.search.SearchParseException; +import org.elasticsearch.search.aggregations.AggregationExecutionException; +import org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgParser; +import org.elasticsearch.search.internal.SearchContext; + +import java.io.IOException; +import java.util.*; + +/** + * Calculate a triple exponential weighted moving average + */ +public class HoltWintersModel extends MovAvgModel { + + protected static final ParseField NAME_FIELD = new ParseField("holt_winters"); + + public enum SeasonalityType { + ADDITIVE((byte) 0, "add"), MULTIPLICATIVE((byte) 1, "mult"); + + /** + * Parse a string SeasonalityType into the byte enum + * + * @param text SeasonalityType in string format (e.g. "add") + * @return SeasonalityType enum + */ + @Nullable + public static SeasonalityType parse(String text) { + if (text == null) { + return null; + } + SeasonalityType result = null; + for (SeasonalityType policy : values()) { + if (policy.parseField.match(text)) { + if (result == null) { + result = policy; + } else { + throw new IllegalStateException("Text can be parsed to 2 different seasonality types: text=[" + text + + "], " + "policies=" + Arrays.asList(result, policy)); + } + } + } + if (result == null) { + final List validNames = new ArrayList<>(); + for (SeasonalityType policy : values()) { + validNames.add(policy.getName()); + } + throw new ElasticsearchParseException("Invalid seasonality type: [" + text + "], accepted values: " + validNames); + } + return result; + } + + private final byte id; + private final ParseField parseField; + + SeasonalityType(byte id, String name) { + this.id = id; + this.parseField = new ParseField(name); + } + + /** + * Serialize the SeasonalityType to the output stream + * + * @param out + * @throws IOException + */ + public void writeTo(StreamOutput out) throws IOException { + out.writeByte(id); + } + + /** + * Deserialize the SeasonalityType from the input stream + * + * @param in + * @return SeasonalityType Enum + * @throws IOException + */ + public static SeasonalityType readFrom(StreamInput in) throws IOException { + byte id = in.readByte(); + for (SeasonalityType seasonalityType : values()) { + if (id == seasonalityType.id) { + return seasonalityType; + } + } + throw new IllegalStateException("Unknown Seasonality Type with id [" + id + "]"); + } + + /** + * Return the english-formatted name of the SeasonalityType + * + * @return English representation of SeasonalityType + */ + public String getName() { + return parseField.getPreferredName(); + } + } + + + /** + * Controls smoothing of data. Alpha = 1 retains no memory of past values + * (e.g. random walk), while alpha = 0 retains infinite memory of past values (e.g. + * mean of the series). Useful values are somewhere in between + */ + private double alpha; + + /** + * Equivalent to alpha, but controls the smoothing of the trend instead of the data + */ + private double beta; + + private double gamma; + + private int period; + + private SeasonalityType seasonalityType; + + private boolean pad; + private double padding; + + public HoltWintersModel(double alpha, double beta, double gamma, int period, SeasonalityType seasonalityType, boolean pad) { + this.alpha = alpha; + this.beta = beta; + this.gamma = gamma; + this.period = period; + this.seasonalityType = seasonalityType; + this.pad = pad; + + // Only pad if we are multiplicative and padding is enabled + // The padding amount is not currently user-configurable...i dont see a reason to expose it? + this.padding = seasonalityType.equals(SeasonalityType.MULTIPLICATIVE) && pad ? 0.0000000001 : 0; + } + + + @Override + public boolean hasValue(int windowLength) { + // We need at least (period * 2) data-points (e.g. two "seasons") + return windowLength >= period * 2; + } + + /** + * Predicts the next `n` values in the series, using the smoothing model to generate new values. + * Unlike the other moving averages, HoltWinters has forecasting/prediction built into the algorithm. + * Prediction is more than simply adding the next prediction to the window and repeating. HoltWinters + * will extrapolate into the future by applying the trend and seasonal information to the smoothed data. + * + * @param values Collection of numerics to movingAvg, usually windowed + * @param numPredictions Number of newly generated predictions to return + * @param Type of numeric + * @return Returns an array of doubles, since most smoothing methods operate on floating points + */ + @Override + public double[] predict(Collection values, int numPredictions) { + return next(values, numPredictions); + } + + @Override + public double next(Collection values) { + return next(values, 1)[0]; + } + + /** + * Calculate a doubly exponential weighted moving average + * + * @param values Collection of values to calculate avg for + * @param numForecasts number of forecasts into the future to return + * + * @param Type T extending Number + * @return Returns a Double containing the moving avg for the window + */ + public double[] next(Collection values, int numForecasts) { + + if (values.size() < period * 2) { + // We need at least two full "seasons" to use HW + // This should have been caught earlier, we can't do anything now...bail + throw new AggregationExecutionException("Holt-Winters aggregation requires at least (2 * period == 2 * " + + period + " == "+(2 * period)+") data-points to function. Only [" + values.size() + "] were provided."); + } + + // Smoothed value + double s = 0; + double last_s = 0; + + // Trend value + double b = 0; + double last_b = 0; + + // Seasonal value + double[] seasonal = new double[values.size()]; + + int counter = 0; + double[] vs = new double[values.size()]; + for (T v : values) { + vs[counter] = v.doubleValue() + padding; + counter += 1; + } + + // Initial level value is average of first season + // Calculate the slopes between first and second season for each period + for (int i = 0; i < period; i++) { + s += vs[i]; + b += (vs[i] - vs[i + period]) / 2; + } + s /= (double) period; + b /= (double) period; + last_s = s; + last_b = b; + + // Calculate first seasonal + if (Double.compare(s, 0.0) == 0 || Double.compare(s, -0.0) == 0) { + Arrays.fill(seasonal, 0.0); + } else { + for (int i = 0; i < period; i++) { + seasonal[i] = vs[i] / s; + } + } + + for (int i = period; i < vs.length; i++) { + // TODO if perf is a problem, we can specialize a subclass to avoid conditionals on each iteration + if (seasonalityType.equals(SeasonalityType.MULTIPLICATIVE)) { + s = alpha * (vs[i] / seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + } else { + s = alpha * (vs[i] - seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + } + + b = beta * (s - last_s) + (1 - beta) * last_b; + + if (seasonalityType.equals(SeasonalityType.MULTIPLICATIVE)) { + seasonal[i] = gamma * (vs[i] / (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + } else { + seasonal[i] = gamma * (vs[i] - (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + } + + last_s = s; + last_b = b; + } + + double[] forecastValues = new double[numForecasts]; + int seasonCounter = (values.size() - 1) - period; + + for (int i = 0; i < numForecasts; i++) { + + // TODO perhaps pad out seasonal to a power of 2 and use a mask instead of modulo? + if (seasonalityType.equals(SeasonalityType.MULTIPLICATIVE)) { + forecastValues[i] = s + (i * b) * seasonal[seasonCounter % values.size()]; + } else { + forecastValues[i] = s + (i * b) + seasonal[seasonCounter % values.size()]; + } + + seasonCounter += 1; + } + + return forecastValues; + } + + public static final MovAvgModelStreams.Stream STREAM = new MovAvgModelStreams.Stream() { + @Override + public MovAvgModel readResult(StreamInput in) throws IOException { + double alpha = in.readDouble(); + double beta = in.readDouble(); + double gamma = in.readDouble(); + int period = in.readVInt(); + SeasonalityType type = SeasonalityType.readFrom(in); + boolean pad = in.readBoolean(); + + return new HoltWintersModel(alpha, beta, gamma, period, type, pad); + } + + @Override + public String getName() { + return NAME_FIELD.getPreferredName(); + } + }; + + @Override + public void writeTo(StreamOutput out) throws IOException { + out.writeString(STREAM.getName()); + out.writeDouble(alpha); + out.writeDouble(beta); + out.writeDouble(gamma); + out.writeVInt(period); + seasonalityType.writeTo(out); + out.writeBoolean(pad); + } + + public static class HoltWintersModelParser extends AbstractModelParser { + + @Override + public String getName() { + return NAME_FIELD.getPreferredName(); + } + + @Override + public MovAvgModel parse(@Nullable Map settings, String pipelineName, SearchContext context, int windowSize) { + + double alpha = parseDoubleParam(context, settings, "alpha", 0.5); + double beta = parseDoubleParam(context, settings, "beta", 0.5); + double gamma = parseDoubleParam(context, settings, "gamma", 0.5); + int period = parseIntegerParam(context, settings, "period", 1); + + if (windowSize < 2 * period) { + throw new SearchParseException(context, "Field [window] must be at least twice as large as the period when " + + "using Holt-Winters. Value provided was [" + windowSize + "], which is less than (2*period) == " + + (2 * period), null); + } + + SeasonalityType seasonalityType = SeasonalityType.ADDITIVE; + + if (settings != null) { + Object value = settings.get("type"); + if (value != null) { + if (value instanceof String) { + seasonalityType = SeasonalityType.parse((String)value); + } else { + throw new SearchParseException(context, "Parameter [type] must be a String, type `" + + value.getClass().getSimpleName() + "` provided instead", null); + } + } + } + + boolean pad = parseBoolParam(context, settings, "pad", seasonalityType.equals(SeasonalityType.MULTIPLICATIVE)); + + return new HoltWintersModel(alpha, beta, gamma, period, seasonalityType, pad); + } + } + + public static class HoltWintersModelBuilder implements MovAvgModelBuilder { + + private double alpha = 0.5; + private double beta = 0.5; + private double gamma = 0.5; + private int period = 1; + private SeasonalityType seasonalityType = SeasonalityType.ADDITIVE; + private boolean pad = true; + + /** + * Alpha controls the smoothing of the data. Alpha = 1 retains no memory of past values + * (e.g. a random walk), while alpha = 0 retains infinite memory of past values (e.g. + * the series mean). Useful values are somewhere in between. Defaults to 0.5. + * + * @param alpha A double between 0-1 inclusive, controls data smoothing + * + * @return The builder to continue chaining + */ + public HoltWintersModelBuilder alpha(double alpha) { + this.alpha = alpha; + return this; + } + + /** + * Equivalent to alpha, but controls the smoothing of the trend instead of the data + * + * @param beta a double between 0-1 inclusive, controls trend smoothing + * + * @return The builder to continue chaining + */ + public HoltWintersModelBuilder beta(double beta) { + this.beta = beta; + return this; + } + + public HoltWintersModelBuilder gamma(double gamma) { + this.gamma = gamma; + return this; + } + + public HoltWintersModelBuilder period(int period) { + this.period = period; + return this; + } + + public HoltWintersModelBuilder seasonalityType(SeasonalityType type) { + this.seasonalityType = type; + return this; + } + + public HoltWintersModelBuilder pad(boolean pad) { + this.pad = pad; + return this; + } + + @Override + public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { + builder.field(MovAvgParser.MODEL.getPreferredName(), NAME_FIELD.getPreferredName()); + builder.startObject(MovAvgParser.SETTINGS.getPreferredName()); + builder.field("alpha", alpha); + builder.field("beta", beta); + builder.field("gamma", gamma); + builder.field("period", period); + builder.field("type", seasonalityType.getName()); + builder.field("pad", pad); + builder.endObject(); + return builder; + } + } +} + diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/LinearModel.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/LinearModel.java index 24780a345c7c..c894f776ed4d 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/LinearModel.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/LinearModel.java @@ -26,6 +26,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgParser; +import org.elasticsearch.search.internal.SearchContext; import java.io.IOException; import java.util.Collection; @@ -70,7 +71,7 @@ public class LinearModel extends MovAvgModel { out.writeString(STREAM.getName()); } - public static class LinearModelParser implements MovAvgModelParser { + public static class LinearModelParser extends AbstractModelParser { @Override public String getName() { @@ -78,7 +79,7 @@ public class LinearModel extends MovAvgModel { } @Override - public MovAvgModel parse(@Nullable Map settings) { + public MovAvgModel parse(@Nullable Map settings, String pipelineName, SearchContext context, int windowSize) { return new LinearModel(); } } diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModel.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModel.java index 1fa30811f9c4..5f41b24531b4 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModel.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModel.java @@ -21,14 +21,31 @@ package org.elasticsearch.search.aggregations.pipeline.movavg.models; import com.google.common.collect.EvictingQueue; +import org.elasticsearch.common.Nullable; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.search.SearchParseException; +import org.elasticsearch.search.internal.SearchContext; import java.io.IOException; import java.util.Arrays; import java.util.Collection; +import java.util.Map; public abstract class MovAvgModel { + /** + * Checks to see this model can produce a new value, without actually running the algo. + * This can be used for models that have certain preconditions that need to be met in order + * to short-circuit execution + * + * @param windowLength Length of current window + * @return Returns `true` if calling next() will produce a value, `false` otherwise + */ + public boolean hasValue(int windowLength) { + // Default implementation can always provide a next() value + return true; + } + /** * Returns the next value in the series, according to the underlying smoothing model * @@ -90,6 +107,122 @@ public abstract class MovAvgModel { * @throws IOException */ public abstract void writeTo(StreamOutput out) throws IOException; + + /** + * Abstract class which also provides some concrete parsing functionality. + */ + public abstract static class AbstractModelParser { + + /** + * Returns the name of the model + * + * @return The model's name + */ + public abstract String getName(); + + /** + * Parse a settings hash that is specific to this model + * + * @param settings Map of settings, extracted from the request + * @param pipelineName Name of the parent pipeline agg + * @param context The parser context that we are in + * @param windowSize Size of the window for this moving avg + * @return A fully built moving average model + */ + public abstract MovAvgModel parse(@Nullable Map settings, String pipelineName, SearchContext context, int windowSize); + + + /** + * Extracts a 0-1 inclusive double from the settings map, otherwise throws an exception + * + * @param context Search query context + * @param settings Map of settings provided to this model + * @param name Name of parameter we are attempting to extract + * @param defaultValue Default value to be used if value does not exist in map + * + * @throws SearchParseException + * + * @return Double value extracted from settings map + */ + protected double parseDoubleParam(SearchContext context, @Nullable Map settings, String name, double defaultValue) { + if (settings == null) { + return defaultValue; + } + + Object value = settings.get(name); + if (value == null) { + return defaultValue; + } else if (value instanceof Double) { + double v = (Double)value; + if (v >= 0 && v <= 1) { + return v; + } + + throw new SearchParseException(context, "Parameter [" + name + "] must be between 0-1 inclusive. Provided" + + "value was [" + v + "]", null); + } + + throw new SearchParseException(context, "Parameter [" + name + "] must be a double, type `" + + value.getClass().getSimpleName() + "` provided instead", null); + } + + /** + * Extracts an integer from the settings map, otherwise throws an exception + * + * @param context Search query context + * @param settings Map of settings provided to this model + * @param name Name of parameter we are attempting to extract + * @param defaultValue Default value to be used if value does not exist in map + * + * @throws SearchParseException + * + * @return Integer value extracted from settings map + */ + protected int parseIntegerParam(SearchContext context, @Nullable Map settings, String name, int defaultValue) { + if (settings == null) { + return defaultValue; + } + + Object value = settings.get(name); + if (value == null) { + return defaultValue; + } else if (value instanceof Integer) { + return (Integer)value; + } + + throw new SearchParseException(context, "Parameter [" + name + "] must be an integer, type `" + + value.getClass().getSimpleName() + "` provided instead", null); + } + + /** + * Extracts a boolean from the settings map, otherwise throws an exception + * + * @param context Search query context + * @param settings Map of settings provided to this model + * @param name Name of parameter we are attempting to extract + * @param defaultValue Default value to be used if value does not exist in map + * + * @throws SearchParseException + * + * @return Boolean value extracted from settings map + */ + protected boolean parseBoolParam(SearchContext context, @Nullable Map settings, String name, boolean defaultValue) { + if (settings == null) { + return defaultValue; + } + + Object value = settings.get(name); + if (value == null) { + return defaultValue; + } else if (value instanceof Boolean) { + return (Boolean)value; + } + + throw new SearchParseException(context, "Parameter [" + name + "] must be a boolean, type `" + + value.getClass().getSimpleName() + "` provided instead", null); + } + } + } diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelModule.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelModule.java index 12a61d42d2a4..6233270edf7a 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelModule.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelModule.java @@ -31,23 +31,24 @@ import java.util.List; */ public class MovAvgModelModule extends AbstractModule { - private List> parsers = Lists.newArrayList(); + private List> parsers = Lists.newArrayList(); public MovAvgModelModule() { registerParser(SimpleModel.SimpleModelParser.class); registerParser(LinearModel.LinearModelParser.class); registerParser(EwmaModel.SingleExpModelParser.class); registerParser(HoltLinearModel.DoubleExpModelParser.class); + registerParser(HoltWintersModel.HoltWintersModelParser.class); } - public void registerParser(Class parser) { + public void registerParser(Class parser) { parsers.add(parser); } @Override protected void configure() { - Multibinder parserMapBinder = Multibinder.newSetBinder(binder(), MovAvgModelParser.class); - for (Class clazz : parsers) { + Multibinder parserMapBinder = Multibinder.newSetBinder(binder(), MovAvgModel.AbstractModelParser.class); + for (Class clazz : parsers) { parserMapBinder.addBinding().to(clazz); } bind(MovAvgModelParserMapper.class); diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParser.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParser.java deleted file mode 100644 index 43721e373095..000000000000 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParser.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.search.aggregations.pipeline.movavg.models; - - -import org.elasticsearch.common.Nullable; - -import java.util.Map; - -/** - * Common interface for parsers used by the various Moving Average models - */ -public interface MovAvgModelParser { - public MovAvgModel parse(@Nullable Map settings); - - public String getName(); -} diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParserMapper.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParserMapper.java index 2115f7e047b1..bfd0c15c1c0d 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParserMapper.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/MovAvgModelParserMapper.java @@ -32,19 +32,19 @@ import java.util.Set; */ public class MovAvgModelParserMapper { - protected ImmutableMap movAvgParsers; + protected ImmutableMap movAvgParsers; @Inject - public MovAvgModelParserMapper(Set parsers) { - MapBuilder builder = MapBuilder.newMapBuilder(); - for (MovAvgModelParser parser : parsers) { + public MovAvgModelParserMapper(Set parsers) { + MapBuilder builder = MapBuilder.newMapBuilder(); + for (MovAvgModel.AbstractModelParser parser : parsers) { builder.put(parser.getName(), parser); } movAvgParsers = builder.immutableMap(); } public @Nullable - MovAvgModelParser get(String parserName) { + MovAvgModel.AbstractModelParser get(String parserName) { return movAvgParsers.get(parserName); } diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/SimpleModel.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/SimpleModel.java index 68ffc3dd9aab..78055b063eb6 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/SimpleModel.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/SimpleModel.java @@ -25,6 +25,7 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgParser; +import org.elasticsearch.search.internal.SearchContext; import java.io.IOException; import java.util.Collection; @@ -63,7 +64,7 @@ public class SimpleModel extends MovAvgModel { out.writeString(STREAM.getName()); } - public static class SimpleModelParser implements MovAvgModelParser { + public static class SimpleModelParser extends AbstractModelParser { @Override public String getName() { @@ -71,7 +72,7 @@ public class SimpleModel extends MovAvgModel { } @Override - public MovAvgModel parse(@Nullable Map settings) { + public MovAvgModel parse(@Nullable Map settings, String pipelineName, SearchContext context, int windowSize) { return new SimpleModel(); } } diff --git a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/TransportMovAvgModelModule.java b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/TransportMovAvgModelModule.java index 41f90b94d844..7f5dd14005c7 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/TransportMovAvgModelModule.java +++ b/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/models/TransportMovAvgModelModule.java @@ -36,6 +36,7 @@ public class TransportMovAvgModelModule extends AbstractModule { registerStream(LinearModel.STREAM); registerStream(EwmaModel.STREAM); registerStream(HoltLinearModel.STREAM); + registerStream(HoltWintersModel.STREAM); } public void registerStream(MovAvgModelStreams.Stream stream) { diff --git a/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgTests.java b/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgTests.java index 0e0eb239ce01..3db9531a5372 100644 --- a/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgTests.java +++ b/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgTests.java @@ -35,21 +35,12 @@ import org.elasticsearch.search.aggregations.metrics.avg.Avg; import org.elasticsearch.search.aggregations.pipeline.BucketHelpers; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregationHelperTests; import org.elasticsearch.search.aggregations.pipeline.SimpleValue; -import org.elasticsearch.search.aggregations.pipeline.movavg.models.EwmaModel; -import org.elasticsearch.search.aggregations.pipeline.movavg.models.HoltLinearModel; -import org.elasticsearch.search.aggregations.pipeline.movavg.models.LinearModel; -import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModelBuilder; -import org.elasticsearch.search.aggregations.pipeline.movavg.models.SimpleModel; +import org.elasticsearch.search.aggregations.pipeline.movavg.models.*; import org.elasticsearch.test.ElasticsearchIntegrationTest; import org.hamcrest.Matchers; import org.junit.Test; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; import static org.elasticsearch.search.aggregations.AggregationBuilders.avg; @@ -79,6 +70,9 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { static int windowSize; static double alpha; static double beta; + static double gamma; + static int period; + static HoltWintersModel.SeasonalityType seasonalityType; static BucketHelpers.GapPolicy gapPolicy; static ValuesSourceMetricsAggregationBuilder metric; static List mockHisto; @@ -87,7 +81,7 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { enum MovAvgType { - SIMPLE ("simple"), LINEAR("linear"), EWMA("ewma"), HOLT("holt"); + SIMPLE ("simple"), LINEAR("linear"), EWMA("ewma"), HOLT("holt"), HOLT_WINTERS("holt_winters"); private final String name; @@ -124,9 +118,13 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { interval = 5; numBuckets = randomIntBetween(6, 80); - windowSize = randomIntBetween(3, 10); + period = randomIntBetween(1, 5); + windowSize = randomIntBetween(period * 2, 10); // start must be 2*period to play nice with HW alpha = randomDouble(); beta = randomDouble(); + gamma = randomDouble(); + seasonalityType = randomBoolean() ? HoltWintersModel.SeasonalityType.ADDITIVE : HoltWintersModel.SeasonalityType.MULTIPLICATIVE; + gapPolicy = randomBoolean() ? BucketHelpers.GapPolicy.SKIP : BucketHelpers.GapPolicy.INSERT_ZEROS; metric = randomMetric("the_metric", VALUE_FIELD); @@ -212,6 +210,15 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { break; case HOLT: values.add(holt(window)); + break; + case HOLT_WINTERS: + // HW needs at least 2 periods of data to start + if (window.size() >= period * 2) { + values.add(holtWinters(window)); + } else { + values.add(null); + } + break; } @@ -308,7 +315,79 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { return s + (0 * b) ; } + /** + * Holt winters (triple exponential) moving avg + * @param window Window of values to compute movavg for + * @return + */ + private double holtWinters(Collection window) { + // Smoothed value + double s = 0; + double last_s = 0; + // Trend value + double b = 0; + double last_b = 0; + + // Seasonal value + double[] seasonal = new double[window.size()]; + + double padding = seasonalityType.equals(HoltWintersModel.SeasonalityType.MULTIPLICATIVE) ? 0.0000000001 : 0; + + int counter = 0; + double[] vs = new double[window.size()]; + for (double v : window) { + vs[counter] = v + padding; + counter += 1; + } + + + // Initial level value is average of first season + // Calculate the slopes between first and second season for each period + for (int i = 0; i < period; i++) { + s += vs[i]; + b += (vs[i] - vs[i + period]) / 2; + } + s /= (double) period; + b /= (double) period; + last_s = s; + last_b = b; + + // Calculate first seasonal + if (Double.compare(s, 0.0) == 0 || Double.compare(s, -0.0) == 0) { + Arrays.fill(seasonal, 0.0); + } else { + for (int i = 0; i < period; i++) { + seasonal[i] = vs[i] / s; + } + } + + for (int i = period; i < vs.length; i++) { + if (seasonalityType.equals(HoltWintersModel.SeasonalityType.MULTIPLICATIVE)) { + s = alpha * (vs[i] / seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + } else { + s = alpha * (vs[i] - seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + } + + b = beta * (s - last_s) + (1 - beta) * last_b; + + if (seasonalityType.equals(HoltWintersModel.SeasonalityType.MULTIPLICATIVE)) { + seasonal[i] = gamma * (vs[i] / (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + } else { + seasonal[i] = gamma * (vs[i] - (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + } + + last_s = s; + last_b = b; + } + + int seasonCounter = (window.size() - 1) - period; + if (seasonalityType.equals(HoltWintersModel.SeasonalityType.MULTIPLICATIVE)) { + return s + (0 * b) * seasonal[seasonCounter % window.size()]; + } else { + return s + (0 * b) + seasonal[seasonCounter % window.size()]; + } + } /** @@ -522,6 +601,60 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { } } + @Test + public void HoltWintersValuedField() { + + SearchResponse response = client() + .prepareSearch("idx").setTypes("type") + .addAggregation( + histogram("histo").field(INTERVAL_FIELD).interval(interval) + .extendedBounds(0L, (long) (interval * (numBuckets - 1))) + .subAggregation(metric) + .subAggregation(movingAvg("movavg_counts") + .window(windowSize) + .modelBuilder(new HoltWintersModel.HoltWintersModelBuilder() + .alpha(alpha).beta(beta).gamma(gamma).period(period).seasonalityType(seasonalityType)) + .gapPolicy(gapPolicy) + .setBucketsPaths("_count")) + .subAggregation(movingAvg("movavg_values") + .window(windowSize) + .modelBuilder(new HoltWintersModel.HoltWintersModelBuilder() + .alpha(alpha).beta(beta).gamma(gamma).period(period).seasonalityType(seasonalityType)) + .gapPolicy(gapPolicy) + .setBucketsPaths("the_metric")) + ).execute().actionGet(); + + assertSearchResponse(response); + + InternalHistogram histo = response.getAggregations().get("histo"); + assertThat(histo, notNullValue()); + assertThat(histo.getName(), equalTo("histo")); + List buckets = histo.getBuckets(); + assertThat("Size of buckets array is not correct.", buckets.size(), equalTo(mockHisto.size())); + + List expectedCounts = testValues.get(MovAvgType.HOLT_WINTERS.toString() + "_" + MetricTarget.COUNT.toString()); + List expectedValues = testValues.get(MovAvgType.HOLT_WINTERS.toString() + "_" + MetricTarget.VALUE.toString()); + + Iterator actualIter = buckets.iterator(); + Iterator expectedBucketIter = mockHisto.iterator(); + Iterator expectedCountsIter = expectedCounts.iterator(); + Iterator expectedValuesIter = expectedValues.iterator(); + + while (actualIter.hasNext()) { + assertValidIterators(expectedBucketIter, expectedCountsIter, expectedValuesIter); + + Histogram.Bucket actual = actualIter.next(); + PipelineAggregationHelperTests.MockBucket expected = expectedBucketIter.next(); + Double expectedCount = expectedCountsIter.next(); + Double expectedValue = expectedValuesIter.next(); + + assertThat("keys do not match", ((Number) actual.getKey()).longValue(), equalTo(expected.key)); + assertThat("doc counts do not match", actual.getDocCount(), equalTo((long)expected.count)); + + assertBucketContents(actual, expectedCount, expectedValue); + } + } + @Test public void testPredictNegativeKeysAtStart() { @@ -572,6 +705,7 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { } } + @Test public void testSizeZeroWindow() { try { @@ -1070,6 +1204,55 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { } } + @Test + public void testHoltWintersNotEnoughData() { + try { + SearchResponse response = client() + .prepareSearch("idx").setTypes("type") + .addAggregation( + histogram("histo").field(INTERVAL_FIELD).interval(interval) + .extendedBounds(0L, (long) (interval * (numBuckets - 1))) + .subAggregation(metric) + .subAggregation(movingAvg("movavg_counts") + .window(10) + .modelBuilder(new HoltWintersModel.HoltWintersModelBuilder() + .alpha(alpha).beta(beta).gamma(gamma).period(20).seasonalityType(seasonalityType)) + .gapPolicy(gapPolicy) + .setBucketsPaths("_count")) + .subAggregation(movingAvg("movavg_values") + .window(windowSize) + .modelBuilder(new HoltWintersModel.HoltWintersModelBuilder() + .alpha(alpha).beta(beta).gamma(gamma).period(20).seasonalityType(seasonalityType)) + .gapPolicy(gapPolicy) + .setBucketsPaths("the_metric")) + ).execute().actionGet(); + } catch (SearchPhaseExecutionException e) { + // All good + } + + } + + @Test + public void testBadModelParams() { + try { + SearchResponse response = client() + .prepareSearch("idx").setTypes("type") + .addAggregation( + histogram("histo").field(INTERVAL_FIELD).interval(interval) + .extendedBounds(0L, (long) (interval * (numBuckets - 1))) + .subAggregation(metric) + .subAggregation(movingAvg("movavg_counts") + .window(10) + .modelBuilder(randomModelBuilder(100)) + .gapPolicy(gapPolicy) + .setBucketsPaths("_count")) + ).execute().actionGet(); + } catch (SearchPhaseExecutionException e) { + // All good + } + + } + private void assertValidIterators(Iterator expectedBucketIter, Iterator expectedCountsIter, Iterator expectedValuesIter) { if (!expectedBucketIter.hasNext()) { @@ -1088,6 +1271,8 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { SimpleValue countMovAvg = actual.getAggregations().get("movavg_counts"); if (expectedCount == null) { assertThat("[_count] movavg is not null", countMovAvg, nullValue()); + } else if (Double.isNaN(expectedCount)) { + assertThat("[_count] movavg should be NaN, but is ["+countMovAvg.value()+"] instead", countMovAvg.value(), equalTo(Double.NaN)); } else { assertThat("[_count] movavg is null", countMovAvg, notNullValue()); assertThat("[_count] movavg does not match expected ["+countMovAvg.value()+" vs "+expectedCount+"]", @@ -1098,6 +1283,8 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { SimpleValue valuesMovAvg = actual.getAggregations().get("movavg_values"); if (expectedValue == null) { assertThat("[value] movavg is not null", valuesMovAvg, Matchers.nullValue()); + } else if (Double.isNaN(expectedValue)) { + assertThat("[value] movavg should be NaN, but is ["+valuesMovAvg.value()+"] instead", valuesMovAvg.value(), equalTo(Double.NaN)); } else { assertThat("[value] movavg is null", valuesMovAvg, notNullValue()); assertThat("[value] movavg does not match expected ["+valuesMovAvg.value()+" vs "+expectedValue+"]", @@ -1106,17 +1293,24 @@ public class MovAvgTests extends ElasticsearchIntegrationTest { } private MovAvgModelBuilder randomModelBuilder() { + return randomModelBuilder(0); + } + + private MovAvgModelBuilder randomModelBuilder(double padding) { int rand = randomIntBetween(0,3); + // HoltWinters is excluded from random generation, because it's "cold start" behavior makes + // randomized testing too tricky. Should probably add dedicated, randomized tests just for HoltWinters, + // which can compensate for the idiosyncrasies switch (rand) { case 0: return new SimpleModel.SimpleModelBuilder(); case 1: return new LinearModel.LinearModelBuilder(); case 2: - return new EwmaModel.EWMAModelBuilder().alpha(alpha); + return new EwmaModel.EWMAModelBuilder().alpha(alpha + padding); case 3: - return new HoltLinearModel.HoltLinearModelBuilder().alpha(alpha).beta(beta); + return new HoltLinearModel.HoltLinearModelBuilder().alpha(alpha + padding).beta(beta + padding); default: return new SimpleModel.SimpleModelBuilder(); } diff --git a/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgUnitTests.java b/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgUnitTests.java index a25f84d1902a..0bd9711c7efd 100644 --- a/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgUnitTests.java +++ b/src/test/java/org/elasticsearch/search/aggregations/pipeline/moving/avg/MovAvgUnitTests.java @@ -28,6 +28,8 @@ import static org.hamcrest.Matchers.equalTo; import org.junit.Test; +import java.util.Arrays; + public class MovAvgUnitTests extends ElasticsearchTestCase { @Test @@ -259,7 +261,7 @@ public class MovAvgUnitTests extends ElasticsearchTestCase { MovAvgModel model = new HoltLinearModel(alpha, beta); int windowSize = randomIntBetween(1, 50); - int numPredictions = randomIntBetween(1,50); + int numPredictions = randomIntBetween(1, 50); EvictingQueue window = EvictingQueue.create(windowSize); for (int i = 0; i < windowSize; i++) { @@ -297,4 +299,288 @@ public class MovAvgUnitTests extends ElasticsearchTestCase { assertThat(Double.compare(expected[i], actual[i]), equalTo(0)); } } + + @Test + public void testHoltWintersMultiplicativePadModel() { + double alpha = randomDouble(); + double beta = randomDouble(); + double gamma = randomDouble(); + int period = randomIntBetween(1,10); + MovAvgModel model = new HoltWintersModel(alpha, beta, gamma, period, HoltWintersModel.SeasonalityType.MULTIPLICATIVE, true); + + int windowSize = randomIntBetween(period * 2, 50); // HW requires at least two periods of data + + EvictingQueue window = EvictingQueue.create(windowSize); + for (int i = 0; i < windowSize; i++) { + window.offer(randomDouble()); + } + + // Smoothed value + double s = 0; + double last_s = 0; + + // Trend value + double b = 0; + double last_b = 0; + + // Seasonal value + double[] seasonal = new double[windowSize]; + + int counter = 0; + double[] vs = new double[windowSize]; + for (double v : window) { + vs[counter] = v + 0.0000000001; + counter += 1; + } + + + // Initial level value is average of first season + // Calculate the slopes between first and second season for each period + for (int i = 0; i < period; i++) { + s += vs[i]; + b += (vs[i] - vs[i + period]) / 2; + } + s /= (double) period; + b /= (double) period; + last_s = s; + last_b = b; + + // Calculate first seasonal + if (Double.compare(s, 0.0) == 0 || Double.compare(s, -0.0) == 0) { + Arrays.fill(seasonal, 0.0); + } else { + for (int i = 0; i < period; i++) { + seasonal[i] = vs[i] / s; + } + } + + for (int i = period; i < vs.length; i++) { + s = alpha * (vs[i] / seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + b = beta * (s - last_s) + (1 - beta) * last_b; + + //seasonal[i] = gamma * (vs[i] / s) + ((1 - gamma) * seasonal[i - period]); + seasonal[i] = gamma * (vs[i] / (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + last_s = s; + last_b = b; + } + + int seasonCounter = (windowSize - 1) - period; + double expected = s + (0 * b) * seasonal[seasonCounter % windowSize];; + double actual = model.next(window); + assertThat(Double.compare(expected, actual), equalTo(0)); + } + + @Test + public void testHoltWintersMultiplicativePadPredictionModel() { + double alpha = randomDouble(); + double beta = randomDouble(); + double gamma = randomDouble(); + int period = randomIntBetween(1,10); + MovAvgModel model = new HoltWintersModel(alpha, beta, gamma, period, HoltWintersModel.SeasonalityType.MULTIPLICATIVE, true); + + int windowSize = randomIntBetween(period * 2, 50); // HW requires at least two periods of data + int numPredictions = randomIntBetween(1, 50); + + EvictingQueue window = EvictingQueue.create(windowSize); + for (int i = 0; i < windowSize; i++) { + window.offer(randomDouble()); + } + double actual[] = model.predict(window, numPredictions); + double expected[] = new double[numPredictions]; + + // Smoothed value + double s = 0; + double last_s = 0; + + // Trend value + double b = 0; + double last_b = 0; + + // Seasonal value + double[] seasonal = new double[windowSize]; + + int counter = 0; + double[] vs = new double[windowSize]; + for (double v : window) { + vs[counter] = v + 0.0000000001; + counter += 1; + } + + + // Initial level value is average of first season + // Calculate the slopes between first and second season for each period + for (int i = 0; i < period; i++) { + s += vs[i]; + b += (vs[i] - vs[i + period]) / 2; + } + s /= (double) period; + b /= (double) period; + last_s = s; + last_b = b; + + for (int i = 0; i < period; i++) { + // Calculate first seasonal + seasonal[i] = vs[i] / s; + } + + for (int i = period; i < vs.length; i++) { + s = alpha * (vs[i] / seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + b = beta * (s - last_s) + (1 - beta) * last_b; + + //seasonal[i] = gamma * (vs[i] / s) + ((1 - gamma) * seasonal[i - period]); + seasonal[i] = gamma * (vs[i] / (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + last_s = s; + last_b = b; + } + + int seasonCounter = (windowSize - 1) - period; + + for (int i = 0; i < numPredictions; i++) { + + expected[i] = s + (i * b) * seasonal[seasonCounter % windowSize]; + assertThat(Double.compare(expected[i], actual[i]), equalTo(0)); + seasonCounter += 1; + } + + } + + @Test + public void testHoltWintersAdditiveModel() { + double alpha = randomDouble(); + double beta = randomDouble(); + double gamma = randomDouble(); + int period = randomIntBetween(1,10); + MovAvgModel model = new HoltWintersModel(alpha, beta, gamma, period, HoltWintersModel.SeasonalityType.ADDITIVE, false); + + int windowSize = randomIntBetween(period * 2, 50); // HW requires at least two periods of data + + EvictingQueue window = EvictingQueue.create(windowSize); + for (int i = 0; i < windowSize; i++) { + window.offer(randomDouble()); + } + + // Smoothed value + double s = 0; + double last_s = 0; + + // Trend value + double b = 0; + double last_b = 0; + + // Seasonal value + double[] seasonal = new double[windowSize]; + + int counter = 0; + double[] vs = new double[windowSize]; + for (double v : window) { + vs[counter] = v; + counter += 1; + } + + + // Initial level value is average of first season + // Calculate the slopes between first and second season for each period + for (int i = 0; i < period; i++) { + s += vs[i]; + b += (vs[i] - vs[i + period]) / 2; + } + s /= (double) period; + b /= (double) period; + last_s = s; + last_b = b; + + for (int i = 0; i < period; i++) { + // Calculate first seasonal + seasonal[i] = vs[i] / s; + } + + for (int i = period; i < vs.length; i++) { + s = alpha * (vs[i] - seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + b = beta * (s - last_s) + (1 - beta) * last_b; + + //seasonal[i] = gamma * (vs[i] / s) + ((1 - gamma) * seasonal[i - period]); + seasonal[i] = gamma * (vs[i] - (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + last_s = s; + last_b = b; + } + + int seasonCounter = (windowSize - 1) - period; + double expected = s + (0 * b) + seasonal[seasonCounter % windowSize];; + double actual = model.next(window); + assertThat(Double.compare(expected, actual), equalTo(0)); + } + + @Test + public void testHoltWintersAdditivePredictionModel() { + double alpha = randomDouble(); + double beta = randomDouble(); + double gamma = randomDouble(); + int period = randomIntBetween(1,10); + MovAvgModel model = new HoltWintersModel(alpha, beta, gamma, period, HoltWintersModel.SeasonalityType.ADDITIVE, false); + + int windowSize = randomIntBetween(period * 2, 50); // HW requires at least two periods of data + int numPredictions = randomIntBetween(1, 50); + + EvictingQueue window = EvictingQueue.create(windowSize); + for (int i = 0; i < windowSize; i++) { + window.offer(randomDouble()); + } + double actual[] = model.predict(window, numPredictions); + double expected[] = new double[numPredictions]; + + // Smoothed value + double s = 0; + double last_s = 0; + + // Trend value + double b = 0; + double last_b = 0; + + // Seasonal value + double[] seasonal = new double[windowSize]; + + int counter = 0; + double[] vs = new double[windowSize]; + for (double v : window) { + vs[counter] = v; + counter += 1; + } + + + // Initial level value is average of first season + // Calculate the slopes between first and second season for each period + for (int i = 0; i < period; i++) { + s += vs[i]; + b += (vs[i] - vs[i + period]) / 2; + } + s /= (double) period; + b /= (double) period; + last_s = s; + last_b = b; + + for (int i = 0; i < period; i++) { + // Calculate first seasonal + seasonal[i] = vs[i] / s; + } + + for (int i = period; i < vs.length; i++) { + s = alpha * (vs[i] - seasonal[i - period]) + (1.0d - alpha) * (last_s + last_b); + b = beta * (s - last_s) + (1 - beta) * last_b; + + //seasonal[i] = gamma * (vs[i] / s) + ((1 - gamma) * seasonal[i - period]); + seasonal[i] = gamma * (vs[i] - (last_s + last_b )) + (1 - gamma) * seasonal[i - period]; + last_s = s; + last_b = b; + } + + int seasonCounter = (windowSize - 1) - period; + + for (int i = 0; i < numPredictions; i++) { + + expected[i] = s + (i * b) + seasonal[seasonCounter % windowSize]; + assertThat(Double.compare(expected[i], actual[i]), equalTo(0)); + seasonCounter += 1; + } + + } }