Link Search Menu Expand Document Documentation Menu

移动平均聚合

已弃用

moving_avg 聚合已被弃用,建议使用 moving_fn 聚合。

moving_avg 聚合是一个父管道聚合,它计算有序数据集中窗口(相邻子集)中包含的指标的平均值序列。

要创建 moving_avg 聚合,首先需要创建一个 histogramdate_histogram 聚合。然后,您可以选择性地将一个指标聚合嵌入到 histogram 聚合中。最后,将 moving_avg 聚合嵌入到 histogram 中,并将 buckets_path 参数设置为您想要跟踪的嵌入式指标。

窗口的大小是窗口中连续数据值的数量。在每次迭代中,算法会计算窗口中所有数据点的平均值,然后向前滑动一个数据值,排除前一个窗口的第一个值,并包含下一个窗口的第一个值。

例如,给定数据 [1, 5, 8, 23, 34, 28, 7, 23, 20, 19],窗口大小为 5 的移动平均值如下所示

(1 + 5 + 8 + 23 + 34) / 5 = 14.2
(5 + 8 + 23 + 34 + 28) / 5 = 19.6
(8 + 23 + 34 + 28 + 7) / 5 = 20
and so on ...

moving_avg 聚合通常应用于时间序列数据,以平滑噪声或短期波动,并识别趋势。指定较小的窗口大小以平滑小规模波动。指定较大的窗口大小以平滑高频波动或随机噪声,使低频趋势更明显。

有关移动平均值的更多信息,请参阅 Wikipedia

参数

moving_avg 聚合接受以下参数。

参数 必需/可选 数据类型 描述
buckets_path 必需 字符串 要聚合的桶路径。请参阅 桶路径
gap_policy 可选 字符串 应用于缺失数据的策略。有效值包括 skipinsert_zeros。默认值为 skip。请参阅 数据间隙
format 可选 字符串 一个 DecimalFormat 格式化字符串。在聚合的 value_as_string 属性中返回格式化输出。
window 可选 数值型 窗口中包含的数据点数量。默认值为 5
model 可选 字符串 要使用的加权移动平均模型。选项包括 ewmaholtholt_winterslinearsimple。默认值为 simple。请参阅 模型
settings 可选 对象 调整窗口的参数。请参阅 模型
predict 可选 数值型 要附加到结果末尾的预测值数量。默认值为 0

示例

以下示例使用 OpenSearch Dashboards 日志样本数据创建了一个间隔为一个月的日期直方图。sum 子聚合计算每个月的总字节数。最后,moving_avg 聚合根据这些总和计算每月字节数的移动平均值

GET opensearch_dashboards_sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "my_date_histogram": {                                
      "date_histogram": {
        "field": "@timestamp",
        "calendar_interval": "month"
      },
      "aggs": {
        "sum_of_bytes": {
          "sum": { "field": "bytes" }                 
        },
        "moving_avg_of_sum_of_bytes": {
          "moving_avg": {
            "buckets_path": "sum_of_bytes" 
          }
        }
      }
    }
  }
}

示例响应

聚合从第二个桶开始返回 moving_avg 值。第一个桶没有移动平均值,因为没有足够的先前数据点来计算它

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10000,
      "relation": "gte"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "my_date_histogram": {
      "buckets": [
        {
          "key_as_string": "2025-03-01T00:00:00.000Z",
          "key": 1740787200000,
          "doc_count": 480,
          "sum_of_bytes": {
            "value": 2804103
          }
        },
        {
          "key_as_string": "2025-04-01T00:00:00.000Z",
          "key": 1743465600000,
          "doc_count": 6849,
          "sum_of_bytes": {
            "value": 39103067
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 2804103
          }
        },
        {
          "key_as_string": "2025-05-01T00:00:00.000Z",
          "key": 1746057600000,
          "doc_count": 6745,
          "sum_of_bytes": {
            "value": 37818519
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 20953585
          }
        }
      ]
    }
  }
}

示例:预测

您可以使用 moving_avg 聚合来预测未来的桶。

以下示例将前一个示例的间隔缩短到一周,并在响应末尾附加五个预测的一周桶

GET opensearch_dashboards_sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "my_date_histogram": {
      "date_histogram": {
        "field": "@timestamp",
        "calendar_interval": "week"
      },
      "aggs": {
        "sum_of_bytes": {
          "sum": {
            "field": "bytes"
          }
        },
        "moving_avg_of_sum_of_bytes": {
          "moving_avg": {
            "buckets_path": "sum_of_bytes",
            "predict": 5
          }
        }
      }
    }
  }
}

响应包含五个预测。请注意,预测桶的 doc_count0

响应
{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10000,
      "relation": "gte"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "my_date_histogram": {
      "buckets": [
        {
          "key_as_string": "2025-03-24T00:00:00.000Z",
          "key": 1742774400000,
          "doc_count": 249,
          "sum_of_bytes": {
            "value": 1531493
          }
        },
        {
          "key_as_string": "2025-03-31T00:00:00.000Z",
          "key": 1743379200000,
          "doc_count": 1617,
          "sum_of_bytes": {
            "value": 9213161
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 1531493
          }
        },
        {
          "key_as_string": "2025-04-07T00:00:00.000Z",
          "key": 1743984000000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9188671
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 5372327
          }
        },
        {
          "key_as_string": "2025-04-14T00:00:00.000Z",
          "key": 1744588800000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9244851
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 6644441.666666667
          }
        },
        {
          "key_as_string": "2025-04-21T00:00:00.000Z",
          "key": 1745193600000,
          "doc_count": 1609,
          "sum_of_bytes": {
            "value": 9061045
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 7294544
          }
        },
        {
          "key_as_string": "2025-04-28T00:00:00.000Z",
          "key": 1745798400000,
          "doc_count": 1554,
          "sum_of_bytes": {
            "value": 8713507
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 7647844.2
          }
        },
        {
          "key_as_string": "2025-05-05T00:00:00.000Z",
          "key": 1746403200000,
          "doc_count": 1710,
          "sum_of_bytes": {
            "value": 9544718
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9084247
          }
        },
        {
          "key_as_string": "2025-05-12T00:00:00.000Z",
          "key": 1747008000000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9155820
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9150558.4
          }
        },
        {
          "key_as_string": "2025-05-19T00:00:00.000Z",
          "key": 1747612800000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9025078
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9143988.2
          }
        },
        {
          "key_as_string": "2025-05-26T00:00:00.000Z",
          "key": 1748217600000,
          "doc_count": 895,
          "sum_of_bytes": {
            "value": 5047345
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9100033.6
          }
        },
        {
          "key_as_string": "2025-06-02T00:00:00.000Z",
          "key": 1748822400000,
          "doc_count": 0,
          "moving_avg_of_sum_of_bytes": {
            "value": 8297293.6
          }
        },
        {
          "key_as_string": "2025-06-09T00:00:00.000Z",
          "key": 1749427200000,
          "doc_count": 0,
          "moving_avg_of_sum_of_bytes": {
            "value": 8297293.6
          }
        },
        {
          "key_as_string": "2025-06-16T00:00:00.000Z",
          "key": 1750032000000,
          "doc_count": 0,
          "moving_avg_of_sum_of_bytes": {
            "value": 8297293.6
          }
        },
        {
          "key_as_string": "2025-06-23T00:00:00.000Z",
          "key": 1750636800000,
          "doc_count": 0,
          "moving_avg_of_sum_of_bytes": {
            "value": 8297293.6
          }
        },
        {
          "key_as_string": "2025-06-30T00:00:00.000Z",
          "key": 1751241600000,
          "doc_count": 0,
          "moving_avg_of_sum_of_bytes": {
            "value": 8297293.6
          }
        }
      ]
    }
  }
}

模型

moving_avg 聚合支持五种模型,它们在移动窗口中对值的加权方式不同。

使用 model 参数指定要使用的模型。

模型 模型关键词 加权方式
简单 simple 窗口中所有值的未加权平均值。
线性 linear 使用线性权重衰减,对近期值给予更高的重要性。
指数加权移动平均 ewma 使用指数递减权重,对近期值给予更高的重要性。
Holt holt 使用第二个指数项来平滑长期趋势。
Holt-Winters holt_winters 使用第三个指数项来平滑周期性(季节性)效应。

使用 settings 对象设置模型的属性。下表显示了每种模型的可用设置。

模型 参数 允许的值 默认值 描述
simple 数值数组 窗口中所有值的算术平均值。
linear 数值数组 窗口中所有值的加权平均值,其中近期值权重更高。
ewma alpha [0, 1] 0.3 衰减参数。值越高,近期数据点权重越大。
holt alpha [0, 1] 0.3 水平分量的衰减参数。
  beta [0, 1] 0.1 趋势分量的衰减参数。
holt_winters alpha [0, 1] 0.3 水平分量的衰减参数。
  beta [0, 1] 0.3 趋势分量的衰减参数。
  gamma [0, 1] 0.3 季节性分量的衰减参数。
  type addmult add 定义季节性的建模方式:加法或乘法。
  period 整数 1 构成周期的桶数量。
  pad 布尔型 true 是否为 mult 类型模型中为 0 的值添加一个小的偏移量,以避免除以零错误。

有关这些模型及其参数的讨论,请参阅 Wikipedia

示例:Holt 模型

holt 模型通过 alphabeta 参数控制的指数衰减计算权重。

以下请求使用 Holt 模型计算每周总字节数据的移动平均值,其中 window 大小为 6alpha 值为 0.4beta 值为 0.2

GET opensearch_dashboards_sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "my_date_histogram": {
      "date_histogram": {
        "field": "@timestamp",
        "calendar_interval": "week"
      },
      "aggs": {
        "sum_of_bytes": {
          "sum": {
            "field": "bytes"
          }
        },
        "moving_avg_of_sum_of_bytes": {
          "moving_avg": {
            "buckets_path": "sum_of_bytes",
            "window": 6,
            "model": "holt",
            "settings": { "alpha": 0.4, "beta": 0.2 }
          }
        }
      }
    }
  }
}

移动平均值从第二个桶开始

响应
{
  "took": 7,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10000,
      "relation": "gte"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "my_date_histogram": {
      "buckets": [
        {
          "key_as_string": "2025-03-24T00:00:00.000Z",
          "key": 1742774400000,
          "doc_count": 249,
          "sum_of_bytes": {
            "value": 1531493
          }
        },
        {
          "key_as_string": "2025-03-31T00:00:00.000Z",
          "key": 1743379200000,
          "doc_count": 1617,
          "sum_of_bytes": {
            "value": 9213161
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 1531493
          }
        },
        {
          "key_as_string": "2025-04-07T00:00:00.000Z",
          "key": 1743984000000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9188671
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 4604160.2
          }
        },
        {
          "key_as_string": "2025-04-14T00:00:00.000Z",
          "key": 1744588800000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9244851
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 6806684.584000001
          }
        },
        {
          "key_as_string": "2025-04-21T00:00:00.000Z",
          "key": 1745193600000,
          "doc_count": 1609,
          "sum_of_bytes": {
            "value": 9061045
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 8341230.127680001
          }
        },
        {
          "key_as_string": "2025-04-28T00:00:00.000Z",
          "key": 1745798400000,
          "doc_count": 1554,
          "sum_of_bytes": {
            "value": 8713507
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9260724.7236736
          }
        },
        {
          "key_as_string": "2025-05-05T00:00:00.000Z",
          "key": 1746403200000,
          "doc_count": 1710,
          "sum_of_bytes": {
            "value": 9544718
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9657431.903375873
          }
        },
        {
          "key_as_string": "2025-05-12T00:00:00.000Z",
          "key": 1747008000000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9155820
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9173999.55240704
          }
        },
        {
          "key_as_string": "2025-05-19T00:00:00.000Z",
          "key": 1747612800000,
          "doc_count": 1610,
          "sum_of_bytes": {
            "value": 9025078
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9172040.511275519
          }
        },
        {
          "key_as_string": "2025-05-26T00:00:00.000Z",
          "key": 1748217600000,
          "doc_count": 895,
          "sum_of_bytes": {
            "value": 5047345
          },
          "moving_avg_of_sum_of_bytes": {
            "value": 9108804.964619776
          }
        }
      ]
    }
  }
}
剩余 350 字符

有问题?

想贡献?