확장 통계 집계
확장 통계 집계 (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의 차이에 주목하세요.