확장 통계 집계

확장 통계 집계 (Extended stats aggregation)

extended_stats 집계는 stats 집계를 더 포괄적으로 확장한 버전이에요. stats가 제공하는 기본 통계량에 더해 다음 항목까지 계산해요:

  • 제곱합 (Sum of squares)
  • 분산 (Variance)
  • 모분산 (Population variance)
  • 표본 분산 (Sampling variance)
  • 표준편차 (Standard deviation)
  • 모표준편차 (Population standard deviation)
  • 표본 표준편차 (Sampling standard deviation)
  • 표준편차 경계 (Standard deviation bounds): 상한(Upper), 하한(Lower), 모집단 상한(Population upper), 모집단 하한(Population lower), 표본 상한(Sampling upper), 표본 하한(Sampling lower)

표준편차와 분산은 모집단 통계량(population statistics)이에요. 즉 항상 각각 모표준편차와 모분산과 같아요.

std_deviation_bounds 객체는 평균을 기준으로 위아래로 지정된 표준편차 개수만큼의 범위를 정의해요(기본값은 2 표준편차). 이 객체는 항상 출력에 포함되지만, 정규 분포를 따르는 데이터에서만 의미가 있어요. 이 값을 해석하기 전에 데이터셋이 정규 분포를 따르는지 먼저 확인하세요.

출처: 문서

본문

파라미터

extended_stats 집계는 다음과 같은 파라미터를 받아요.

파라미터 필수/선택 데이터 타입 설명
field 필수 String 확장 통계를 반환할 필드의 이름이에요.
sigma 선택 Double (음수 아님) std_deviation_bounds 구간을 계산할 때 평균 위아래로 사용할 표준편차의 개수예요. 기본값은 2예요.
missing 선택 Numeric 필드 값이 없는 문서에 할당할 값이에요. 지정하지 않으면 누락 값이 포함된 문서는 확장 통계 계산에서 제외돼요.

예제

다음 예제 요청은 OpenSearch Dashboards e-커머스 샘플 데이터에서 taxful_total_price 필드의 확장 통계를 반환해요:

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "extended_stats_taxful_total_price": {
      "extended_stats": {
        "field": "taxful_total_price"
      }
    }
  }
}

예제 응답

응답에는 taxful_total_price 필드의 확장 통계가 담겨 있어요:

...
"aggregations" : {
  "extended_stats_taxful_total_price" : {
    "count" : 4675,
    "min" : 6.98828125,
    "max" : 2250.0,
    "avg" : 75.05542864304813,
    "sum" : 350884.12890625,
    "sum_of_squares" : 3.9367749294174194E7,
    "variance" : 2787.59157113862,
    "variance_population" : 2787.59157113862,
    "variance_sampling" : 2788.187974983536,
    "std_deviation" : 52.79764740155209,
    "std_deviation_population" : 52.79764740155209,
    "std_deviation_sampling" : 52.80329511482722,
    "std_deviation_bounds" : {
      "upper" : 180.6507234461523,
      "lower" : -30.53986616005605,
      "upper_population" : 180.6507234461523,
      "lower_population" : -30.53986616005605,
      "upper_sampling" : 180.66201887270256,
      "lower_sampling" : -30.551161586606312
    }
  }
 }
}

경계 정의하기 (Defining bounds)

sigma 파라미터를 음수가 아닌 값으로 설정하면 std_deviation_bounds 구간을 계산할 때 사용할 표준편차의 개수를 정의할 수 있어요.

예제: 경계 정의하기

std_deviation_bounds의 표준편차 개수를 3으로 설정해 봐요:

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "extended_stats_taxful_total_price": {
      "extended_stats": {
        "field": "taxful_total_price",
        "sigma": 3
      }
    }
  }
}

이렇게 하면 표준편차 경계가 달라져요:

{
...
  "aggregations": {
...
      "std_deviation_bounds": {
        "upper": 233.44837084770438,
        "lower": -83.33751356160813,
        "upper_population": 233.44837084770438,
        "lower_population": -83.33751356160813,
        "upper_sampling": 233.46531398752978,
        "lower_sampling": -83.35445670143353
      }
    }
  }
}

누락 값 처리 (Missing values)

집계 대상 필드의 값이 없는 문서에 특정 값을 할당해 줄 수 있어요. 자세한 내용은 누락 값 집계(Missing aggregations) 문서를 참고하세요.

다음 문서들을 인덱스에 넣어 예제 인덱스를 준비해 봐요:

POST _bulk
{ "create": { "_index": "students", "_id": "1" } }
{ "name": "John Doe", "gpa": 3.89, "grad_year": 2022}
{ "create": { "_index": "students", "_id": "2" } }
{ "name": "Jonathan Powers", "grad_year": 2025 }
{ "create": { "_index": "students", "_id": "3" } }
{ "name": "Jane Doe", "gpa": 3.52, "grad_year": 2024 }

예제: 누락 값을 대체하기

누락된 gpa 필드를 0으로 대체하면서 extended_stats를 계산해 봐요:

GET students/_search
{
  "size": 0,
  "aggs": {
    "extended_stats_gpa": {
      "extended_stats": {
        "field": "gpa",
        "missing": 0
      }
    }
  }
}

응답에서 gpa의 모든 누락 값이 0으로 대체된 것을 볼 수 있어요:

...
  "aggregations": {
    "extended_stats_gpa": {
      "count": 3,
      "min": 0,
      "max": 3.890000104904175,
      "avg": 2.4700000286102295,
      "sum": 7.4100000858306885,
      "sum_of_squares": 27.522500681877148,
      "variance": 3.0732667526245145,
      "variance_population": 3.0732667526245145,
      "variance_sampling": 4.609900128936772,
      "std_deviation": 1.7530735160353415,
      "std_deviation_population": 1.7530735160353415,
      "std_deviation_sampling": 2.147067797936705,
      "std_deviation_bounds": {
        "upper": 5.976147060680912,
        "lower": -1.0361470034604534,
        "upper_population": 5.976147060680912,
        "lower_population": -1.0361470034604534,
        "upper_sampling": 6.7641356244836395,
        "lower_sampling": -1.8241355672631805
      }
    }
  }
}

예제: 누락 값 무시하기

missing 파라미터를 지정하지 않고 extended_stats를 계산해 봐요:

GET students/_search
{
  "size": 0,
  "aggs": {
    "extended_stats_gpa": {
      "extended_stats": {
        "field": "gpa"
      }
    }
  }
}

OpenSearch는 필드 값이 없는 문서를 생략하고 확장 통계를 계산해요(기본 동작):

...
  "aggregations": {
    "extended_stats_gpa": {
      "count": 2,
      "min": 3.5199999809265137,
      "max": 3.890000104904175,
      "avg": 3.7050000429153442,
      "sum": 7.4100000858306885,
      "sum_of_squares": 27.522500681877148,
      "variance": 0.03422502293587115,
      "variance_population": 0.03422502293587115,
      "variance_sampling": 0.0684500458717423,
      "std_deviation": 0.18500006198883057,
      "std_deviation_population": 0.18500006198883057,
      "std_deviation_sampling": 0.2616295967044675,
      "std_deviation_bounds": {
        "upper": 4.075000166893005,
        "lower": 3.334999918937683,
        "upper_population": 4.075000166893005,
        "lower_population": 3.334999918937683,
        "upper_sampling": 4.228259236324279,
        "lower_sampling": 3.1817408495064092
      }
    }
  }
}

누락된 gpa 값을 포함한 문서는 이 계산에서 제외돼요. count의 차이에 주목하세요.

더 알아보기 (Learn more)