Median Absolute Deviation Aggregation

    该单值聚合近似于其搜索结果的中值绝对偏差。

    中值绝对偏差是衡量变异性的指标。它是一个强大的统计量,这意味着它可用于描述可能具有异常值或可能不是正态分布的数据。对于此类数据,它可能比标准偏差更具描述性。

    它计算为每个数据点与整个样本中位数偏差的中位数。也就是说,对于随机变量X,中值绝对偏差是中值(|中值(X)-Xi |)。

    Example

    假设我们的数据代表一到五星级的产品评论。这些评论通常被概括为一种平均值,这很容易理解,但没有描述评论的可变性。估计绝对偏差的中位数可以提供对相互评估的评论量的深入了解。

    在这个例子中,我们有一个平均评级为3星的产品。让我们看一下它的评级中位数绝对偏差,以确定它们的变化程度

    1. GET reviews/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "review_average": {
    6. "avg": {
    7. "field": "rating"
    8. }
    9. },
    10. "review_variability": {
    11. "median_absolute_deviation": {
    12. "field": "rating" #@1
    13. }
    14. }
    15. }
    16. }

    @1: 评级必须是数字字段

    得到的中值绝对偏差为2表明评级存在相当大的可变性。审稿人必须对此产品有不同的看法。

    1. {
    2. ...
    3. "aggregations": {
    4. "review_average": {
    5. "value": 3.0
    6. },
    7. "review_variability": {
    8. "value": 2.0
    9. }
    10. }
    11. }

    Approximation 近似值

    计算中位数绝对偏差的简单实现将整个样本存储在内存中,因此该聚合计算出近似值。它使用TDigest数据结构来近似样本中位数和与样本中位数的偏差中位数。有关TDigests的近似特征的更多信息,请参阅百分位数(通常)近似值。

    资源使用与TDigest的分位数近似的准确性之间的折衷,以及因此该聚合的中值绝对偏差的近似的精确度,由压缩参数控制。较高的压缩设置可以以更高的内存使用量为代价提供更准确的近似值。有关TDigest压缩参数特性的更多信息,请参阅压缩。

    1. GET reviews/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "review_variability": {
    6. "median_absolute_deviation": {
    7. "field": "rating",
    8. "compression": 100
    9. }
    10. }
    11. }
    12. }

    此聚合的默认压缩值为1000.在此压缩级别,此聚合通常在精确结果的5%范围内,但观察到的性能将取决于样本数据。

    Script

    此度量标准聚合支持脚本。在上面的示例中,产品评论的范围为1到5。如果我们想将它们修改为1到10的范围,我们可以使用脚本。

    要提供内联脚本:

    1. GET reviews/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "review_variability": {
    6. "median_absolute_deviation": {
    7. "script": {
    8. "lang": "painless",
    9. "source": "doc['rating'].value * params.scaleFactor",
    10. "params": {
    11. "scaleFactor": 2
    12. }
    13. }
    14. }
    15. }
    16. }
    17. }

    要提供存储的脚本:

    1. GET reviews/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "review_variability": {
    6. "median_absolute_deviation": {
    7. "script": {
    8. "id": "my_script",
    9. "params": {
    10. "field": "rating"
    11. }
    12. }
    13. }
    14. }
    15. }
    16. }

    Missing value

    缺少的参数定义了应该如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。

    让我们保持乐观,并假设一些评论者非常喜欢这个产品,以至于他们忘了给它一个评级。我们将为他们分配五颗星

    1. GET reviews/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "review_variability": {
    6. "median_absolute_deviation": {
    7. "field": "rating",
    8. "missing": 5
    9. }
    10. }
    11. }
    12. }