Skip to main content

中值绝对偏差聚合 median_absolute_deviation

Median Absolute Deviation Aggregation

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

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

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

实例

假设我们的数据代表一到五星级的产品评价。这种评论通常被概括为一种均值,这很容易理解,但并不能描述评论的可变性。估计中值绝对偏差可以深入了解评论之间的差异。

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

GET reviews/_search
{
"size": 0,
"aggs": {
"review_average": {
"avg": {
"field": "rating"
}
},
"review_variability": {
"median_absolute_deviation": {
"field": "rating"
}
}
}
}

由此得出的绝对偏差中值2告诉我们,评级存在相当大的可变性。审查人员必须对此产品有不同的意见。

{
...
"aggregations": {
"review_average": {
"value": 3.0
},
"review_variability": {
"value": 2.0
}
}
}

近似值 Approximation

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

资源使用与TDigest分位数近似精度之间的权衡,以及因此该聚合的中值绝对偏差近似精度,由压缩参数控制。较高的压缩设置以较高的内存使用率为代价提供更精确的近似。

GET reviews/_search
{
"size": 0,
"aggs": {
"review_variability": {
"median_absolute_deviation": {
"field": "rating",
"compression": 100
}
}
}
}

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

Script

此度量聚合支持脚本。在我们上面的例子中,产品评论的比例是一到五。如果我们想将它们修改为1到10的比例,我们可以使用脚本。

提供inline script,请执行以下操作:

GET reviews/_search
{
"size": 0,
"aggs": {
"review_variability": {
"median_absolute_deviation": {
"script": {
"lang": "painless",
"source": "doc['rating'].value * params.scaleFactor",
"params": {
"scaleFactor": 2
}
}
}
}
}
}

要提供存储的脚本,请执行以下操作:

GET reviews/_search
{
"size": 0,
"aggs": {
"review_variability": {
"median_absolute_deviation": {
"script": {
"id": "my_script",
"params": {
"field": "rating"
}
}
}
}
}
}

Missing value

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

让我们乐观一点,假设一些评论家非常喜欢这款产品,以至于忘记给它打分。我们会给他们五星

GET reviews/_search
{
"size": 0,
"aggs": {
"review_variability": {
"median_absolute_deviation": {
"field": "rating",
"missing": 5
}
}
}
}