@@ -232,7 +232,7 @@ func (p *BaseSeasonalProvider) getPredictedSeries(
232232// moving avg of the previous period series + z score threshold * std dev of the series
233233// moving avg of the previous period series - z score threshold * std dev of the series
234234func (p * BaseSeasonalProvider ) getBounds (
235- series , predictedSeries * qbtypes.TimeSeries ,
235+ series , predictedSeries , weekSeries * qbtypes.TimeSeries ,
236236 zScoreThreshold float64 ,
237237) (* qbtypes.TimeSeries , * qbtypes.TimeSeries ) {
238238 upperBoundSeries := & qbtypes.TimeSeries {
@@ -246,8 +246,8 @@ func (p *BaseSeasonalProvider) getBounds(
246246 }
247247
248248 for idx , curr := range series .Values {
249- upperBound := p .getMovingAvg (predictedSeries , movingAvgWindowSize , idx ) + zScoreThreshold * p .getStdDev (series )
250- lowerBound := p .getMovingAvg (predictedSeries , movingAvgWindowSize , idx ) - zScoreThreshold * p .getStdDev (series )
249+ upperBound := p .getMovingAvg (predictedSeries , movingAvgWindowSize , idx ) + zScoreThreshold * p .getStdDev (weekSeries )
250+ lowerBound := p .getMovingAvg (predictedSeries , movingAvgWindowSize , idx ) - zScoreThreshold * p .getStdDev (weekSeries )
251251 upperBoundSeries .Values = append (upperBoundSeries .Values , & qbtypes.TimeSeriesValue {
252252 Timestamp : curr .Timestamp ,
253253 Value : upperBound ,
@@ -398,15 +398,16 @@ func (p *BaseSeasonalProvider) getAnomalies(ctx context.Context, orgID valuer.UU
398398 aggOfInterest := result .Aggregations [0 ]
399399
400400 for _ , series := range aggOfInterest .Series {
401- stdDev := p .getStdDev (series )
402- p .logger .InfoContext (ctx , "calculated standard deviation for series" , "anomaly_std_dev" , stdDev , "anomaly_labels" , series .Labels )
403401
404402 pastPeriodSeries := p .getMatchingSeries (ctx , pastPeriodResult , series )
405403 currentSeasonSeries := p .getMatchingSeries (ctx , currentSeasonResult , series )
406404 pastSeasonSeries := p .getMatchingSeries (ctx , pastSeasonResult , series )
407405 past2SeasonSeries := p .getMatchingSeries (ctx , past2SeasonResult , series )
408406 past3SeasonSeries := p .getMatchingSeries (ctx , past3SeasonResult , series )
409407
408+ stdDev := p .getStdDev (currentSeasonSeries )
409+ p .logger .InfoContext (ctx , "calculated standard deviation for series" , "anomaly_std_dev" , stdDev , "anomaly_labels" , series .Labels )
410+
410411 prevSeriesAvg := p .getAvg (pastPeriodSeries )
411412 currentSeasonSeriesAvg := p .getAvg (currentSeasonSeries )
412413 pastSeasonSeriesAvg := p .getAvg (pastSeasonSeries )
@@ -435,6 +436,7 @@ func (p *BaseSeasonalProvider) getAnomalies(ctx context.Context, orgID valuer.UU
435436 upperBoundSeries , lowerBoundSeries := p .getBounds (
436437 series ,
437438 predictedSeries ,
439+ currentSeasonSeries ,
438440 zScoreThreshold ,
439441 )
440442 aggOfInterest .UpperBoundSeries = append (aggOfInterest .UpperBoundSeries , upperBoundSeries )
0 commit comments