揭示獨特模式:Elasticsearch 中 significant terms 聚合指南

作者:來自 Elastic?Alexander Dávila

了解如何使用 significant terms 聚合來發現你數據中的洞察。

更多閱讀:Elasticsearch:significant terms aggregation

Elasticsearch 擁有大量新功能,可以幫助你為你的使用場景構建最佳搜索解決方案。深入查看我們的示例 notebooks 了解更多信息,開始免費云試用,或立即在本地機器上體驗 Elastic。


在 Elasticsearch 中, significant terms 聚合不僅僅是找出最常見的詞項,而是發現數據集中統計上不尋常的值。這使我們能夠發現有價值的洞察和非顯而易見的模式。 significant terms 聚合的響應中包含兩個有用的參數:

  • bg_count(背景計數):在父數據集中找到的文檔數量
  • doc_count:在結果數據集中找到的文檔數量

例如,在一個手機銷售數據集中,我們可以像下面這樣對 iPhone 16 的銷售查找 significant terms:

GET phone_sales_analysis/_search
{"size": 0,"query": {"term": {"phone_model": {"value": "iPhone 16"}}},"aggs": {"significant_cities": {"significant_terms": {"field": "city_region","size": 1}}}
}

然后,響應會給出:

{"aggregations": {"significant_cities": {"doc_count": 122,"bg_count": 424,"buckets": [{"key": "Houston","doc_count": 12,"score": 0.1946481360617346,"bg_count": 14}]}}
}

Houston 并不是整個數據集中排名前十的城市,也不是 iPhone 16 的銷量最高城市。然而, significant terms 聚合顯示,與數據集的其余部分相比,iPhone 16 在這個城市的購買量不成比例地偏高。讓我們更深入地看看數據:

  • 在頂層:
    • doc_count: 122 — 查詢總共匹配了 122 個文檔
    • bg_count: 424 — 背景集(所有銷售文檔)包含 424 個文檔
  • 在 Houston 的 bucket 中:
    • doc_count: 12 — 在 122 個查詢結果中,Houston 出現了 12 次
    • bg_count: 14 — 在背景數據集的 424 個文檔中,Houston 出現了 14 次

這告訴我們,在總共 424 筆購買中,只有 14 筆發生在 Houston,占比為 3.3%。但如果我們只看 iPhone 16 的銷售,就會發現有 12 筆發生在 Houston,占比為 9.8%,是整體數據集的 3 倍,這就是 “significant”!

下面是這個分析在可視化中的表現:每個 city_region 的總銷量。

我們可以看到 Houston 有 14 筆銷售,在數據集中按銷量排名第 14。

現在,如果我們應用一個過濾器,僅查看 iPhone 16 的銷售,Houston 有 12 筆銷售,成為該型號銷量第 2 高的城市:

了解 significant terms 聚合

根據 Elastic 文檔, significant terms 聚合:

“(查找)在前景集和背景集之間受歡迎程度發生顯著變化的詞項。”

這意味著它使用統計指標將某個詞項在數據子集(前景集)中的頻率與在整個父數據集(背景集)中的頻率進行比較。這樣,評分反映的是統計顯著性,而不是某個詞項在數據中出現的次數。

significant terms 聚合與普通 terms 聚合的主要區別在于:

  • significant terms 比較的是數據的一個子集,而 terms 聚合只處理查詢結果數據集。

  • terms 聚合返回的是數據集中最常見的詞項,而 significant terms 會忽略常見詞項,找出讓數據子集獨特的詞項。

  • significant terms 對性能的影響可能更大,因為它需要從磁盤讀取數據,而不是像 terms 聚合那樣從內存中讀取。

實際應用(消費者行為分析)
?

為分析準備數據

在本次分析中,我們生成了一個合成的手機銷售數據集,包括價格、手機規格、購買者的人口統計信息和反饋。我們還基于用戶反饋生成了 embedding,方便后續運行語義查詢。我們使用的是 Elasticsearch 中開箱即用的 multilingual e5 small 模型。

在 Elasticsearch 中使用這個數據集的方法如下:

  1. 使用 Kibana 的 Upload data files 功能上傳 CSV 文件(可以從此處下載)。

  2. 設置一個名為 “embedding” 的語義字段,使用 multilingual-e5-small 模型,如本博客所示。

  3. 使用默認字段類型完成導入(除 purchase_date 和 user_feedback 外,其它字段為 keyword)。確保設置索引名為 phone_sales_analysis,以便能夠直接運行本文展示的查詢。

本次分析的主要目標是發現:“What's different about the iPhone 16 buyers versus other segments of the population? -?iPhone 16 的購買者與其他人群有何不同?”并以此為基礎做市場營銷的用戶分群。

以下是數據集中的一個示例文檔:

{"customer_type": "Returning","user_feedback": "I have to say, quality is great for the price. The battery life is really good.","upgrade_frequency": "2 years","storage_capacity": "256GB","occupation": "Technology & Data","color": "Phantom Black","gender": "Male","price_paid": 899,"previous_brand_loyalty": "Mixed","location_type": "Urban","phone_model": "Samsung Galaxy S24","city_region": "San Francisco Bay Area","@timestamp": "2024-03-15T00:00:00.000-05:00","income_bracket": "75000-100000","purchase_channel": "Online","feedback_sentiment": "positive","education_level": "Bachelor","embedding": "I have to say, quality is great for the price. The battery life is really good.","customer_id": "C001","purchase_date": "2024-03-15","age": 34,"trade_in_model": "iPhone 13"
}

理解人口統計模式

這里,我們將對總體人群進行分析,并將其與 iPhone 16 用戶的 significant terms 聚合中的有趣發現進行比較。

常規模式

為了理解常規的購買模式,我們可以在所有文檔上對不同字段進行聚合。為簡化起見,我們將重點分析購買手機人群的職業。這可以通過向 Elasticsearch 發送請求來完成。

GET phone_sales_analysis/_search
{"aggs": {"occupation_distribution": {"terms": {"size": 5,"field": "occupation"}}},"size": 0
}

這告訴我們,數據集中主要的職業(按記錄數量排序)是:

iPhone 16 用戶的模式

為了了解購買 iPhone 16 的人群有何不同,我們可以在相同字段上運行一個 terms 聚合,并添加一個過濾器,在查詢中篩選出這些人,如下所示:

GET phone_sales_analysis/_search
{"query": {"term": {"phone_model": "iPhone 16"}},"aggs": {"occupation_distribution": {"terms": {"size": 5,"field": "occupation"}}},"size": 0
}

所以,對于 iPhone 16 用戶來說,主要的職業是:

我們可以看到,iPhone 16 用戶的職業分布模式與其他手機型號的用戶不同。讓我們用 Kibana 來輕松可視化這些結果:

在這個圖表中,我們可以看到 iPhone 16 的趨勢與整體人群的趨勢不同。

我們可以跳過整個分析,直接運行一個 significant terms 聚合,看看是什么讓 iPhone 16 用戶與普通人群不同:

GET phone_sales_analysis/_search
{"query": {"term": {"phone_model": "iPhone 16"}},"aggs": {"occupation_distribution": {"significant_terms": {"size": 5,"field": "occupation"}}},"size": 0
}

簡而言之,我們得到了這個響應:

Values of occupations for the iPhone 16doc_countbg_count
occupation_distribution (top level)122424
Medical & Healthcare bucket4557

響應清楚地表明,與普通人群相比,iPhone 16 用戶中醫療和健康領域的人數異常(即具有顯著性!)。讓我們看看響應中的數字含義:

  • 頂層
    • doc_count: 122 — 查詢總共匹配了 122 個文檔
    • bg_count: 424 — 背景集(所有銷售文檔)包含 424 個文檔
  • 在醫療與健康(Medical & Healthcare)桶中:
    • doc_count: 45 — “Medical & Healthcare” 出現在 122 個查詢結果中的 45 個
    • bg_count: 57 — “Medical & Healthcare” 出現在背景數據集 424 個文檔中的 57 個

在 424 名買家中,有 57 人從事醫療和健康行業,占比 13.44%。但在 iPhone 16 買家中,有 45 人從事該行業,占比 36.88%。這意味著在 iPhone 16 用戶中,找到醫療和健康行業從業者的概率是普通人群的兩倍!

我們可以用同樣的方法分析其它字段(年齡、地點、收入等級等),以發現更多關于 iPhone 16 用戶獨特之處的信息。

消費者分群

我們可以使用 significant terms 聚合來提取產品、類別和客戶分群之間的關聯洞察。為此,我們先構建感興趣類別的父聚合,然后使用 significant terms 和普通 terms 子聚合,找出該類別中有趣的洞察,并與該職業大多數人使用的情況進行比較。

例如,來看一些職業領域的人們偏好什么:

  • 為了讓分析更清晰,我們把搜索范圍限制在 3 個職業領域:["Administrative & Support", "Technology & Data", "Medical & Healthcare"]
  • 在聚合方面,我們先對職業做 terms 聚合
  • 添加第一個子聚合:按手機型號的 terms 聚合 —— 找出各職業領域用戶購買的手機型號
  • 添加第二個子聚合:按手機型號的 significant terms 聚合 —— 找出各職業領域特別偏好的手機型號
GET phone_sales_analysis/_search
{"query": {"terms": {"occupation": ["Administrative & Support","Technology & Data","Medical & Healthcare"]}},"aggs": {"occupations": {"terms": {"size": 15,"field": "occupation"},"aggs": {"general_models": {"terms": {"field": "phone_model"}},"significant_models": {"significant_terms": {"field": "phone_model"}}}}},"size": 0
}

讓我們分解聚合結果:

職業:Administrative & Support

Terms 聚合:

Significant terms 聚合:

從這張表中,我們可以推斷該職業的趨勢與整體人群的趨勢沒有顯著差異。

職業:Technology & Data

Terms 聚合:

Significant terms 聚合

總文檔數:424

該職業中的文檔數:71

phone modeldoc_count (this model in this occupation)bg_count (this model in all the documents)% in all the documents% in this occupation
Google Pixel 812225.19%16.90%
OnePlus 119143.30%12.68%
OnePlus 12 Pro330.71%4.23%
Google Pixel 8 Pro9214.95%12.68%
Nothing Phone 2581.89%7.04%
Samsung Galaxy Z Fold5461.42%5.63%
OnePlus 128204.72%11.27%

職業:Medical & Healthcare

Terms 聚合:

Significant terms 聚合

總文檔數:424

該職業中的文檔數:57

phone modeldoc_count (this model in this occupation)bg_count (this model in all the documents)% in all the documents% in this occupation
iPhone 164512228.77%78.95%
iPhone 15 Pro Max3133.07%5.26%
iPhone 157409.43%12.28%

讓我們看看這些數據告訴我們什么故事:

  • 醫療和健康專業人士偏愛 iPhone 16,并且總體上非常傾向于使用 Apple 手機。
  • 技術和數據專業人士偏好高端 Android 手機,但不一定使用三星品牌。這個類別中 iPhone 也有較大趨勢。
  • 行政和支持類專業人士偏好三星和 Google 手機,但沒有明顯且獨特的趨勢。

Significant terms 聚合和混合搜索

混合搜索結合了文本搜索和語義搜索結果,提供更好的搜索體驗。在這種情況下, significant terms 聚合可以通過回答 “與所有文檔相比,這個數據集有什么特別之處?” 來為上下文感知搜索的結果提供洞察。

為演示此功能,我們來看當用戶談論 “good performance” 時,哪些手機型號出現頻率過高:

  • 構建一個語義查詢,尋找在 embedding 字段中與輸入 “good performance” 最接近的用戶反饋

  • 同時在 user_feedback 文本字段上使用相同詞項的文本搜索

  • 添加 significant terms 查詢,找出這些結果中比整個數據集中更頻繁出現的手機型號

GET phone_sales_analysis/_search
{"retriever": {"rrf": {"retrievers": [{"standard": {"query": {"bool": {"must": [{"match": {"user_feedback": {"query": "good performance","operator": "and"}}}]}}}},{"standard": {"query": {"semantic": {"field": "embedding","query": "good performance"}}}}],"rank_window_size": 20}},"aggs": {"Models": {"significant_terms": {"field": "phone_model"}}}
}

讓我們來看一個匹配文檔的示例:

這是我們得到的響應:

{"took": 388,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 20,"relation": "eq"},"max_score": 0.016393442,"hits": [...]},"aggregations": {"Models": {"doc_count": 20,"bg_count": 424,"buckets": [{"key": "iPhone 15","doc_count": 5,"score": 0.4125,"bg_count": 40}]}}
}

這告訴我們,雖然 iPhone 15 在 424 個總文檔中出現了 40 次(占 9.4%),但在與語義搜索 “good performance” 匹配的 20 個文檔中出現了 5 次(占 25%)。因此我們可以得出結論:在談論 “good performance” 時,出現 iPhone 15 的概率是隨機情況的 2.7 倍。

結論

significant terms 聚合通過將數據集與所有文檔進行比較,可以發現數據中的獨特細節。這能揭示數據中意想不到的關系,超越簡單的出現次數統計。我們可以在多種場景中應用 significant terms,開啟非常有趣的功能,例如:

  • 欺詐檢測中的模式發現 — 識別被盜信用卡的常見交易。

  • 用戶評價中的品牌質量洞察 — 發現收到不成比例差評的品牌。

  • 發現錯誤分類的文檔 — 識別屬于某類別(term 過濾器),但描述中使用該類別不常見詞匯的文檔(significant terms 聚合)。

原文:https://www.elastic.co/search-labs/blog/significant-terms-aggregation-elasticsearch

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88348.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pandas.DataFrame中axis參數

明確axis0與axis1的區別和聯系, 假設有一個 DataFrame:indexAB012134axis0(沿行方向): 操作會垂直向下進行,對每一列單獨處理。 例如:df.sum(axis0) 會對列 A 和列 B 分別求和,結果是…

深度學習 最簡單的神經網絡 線性回歸網絡

用最簡單的線性模型講清 神經網絡 訓練全流程,讓你 5 分鐘看懂AI 是怎么學會預測的 ?? 1 真實神經元結構 ?? 真實神經元包括: 樹突 接收其他神經元傳來的電信號(輸入)。 細胞核 負責整合輸入信號并產生動作電位。 軸突 傳導動作電位到下一個神經元。 突觸 釋放神經遞質…

k8s Mutating Admission Webhook 實現超賣

目錄 1.什么是 Mutating Admission Webhook? 2.如何用 Mutating Admission Webhook 實現超賣? 3.實現超賣 3.1 理解目標 3.2 前置準備 3.3 開發 Mutating Webhook 3.4 配置 Webhook Server TLS 認證 3.5 注冊 MutatingWebhookConfiguration 3.6…

為 Go-llm-cpp 接入 Web API 接口,創建 Chatbot 聊天機器人

接續上一篇,用 Go 打造本地 LLM 聊天機器人:整合 llm-go 與 go-llama.cpp,此篇開始建構前端與 API 接口 執行環境需求 ? ? Go 1.20 ? ? C toolchain(macOS: Xcode Command Line Tools / Linux: g) ? ? GGUF 格式…

Docker筆記-Docker Compose

Docker筆記-Docker Compose Compose 是用于定義和運行多容器 Docker 應用程序的工具,通過 Compose 您可以使用 YML 文件來配置應用 程序需要的所有服務。然后,使用一個命令,就可以從 YML 文件配置中創建并啟動所有服務。 Compose 使用的三個步…

n1 armbian 安裝桌面環境并啟用xrdp遠程登錄

armbian-config armbian-software201frpcrootarmbian:~# armbian-software [ STEPS ] Start selecting software [ Current system: ubuntu/noble ]... ──────────────────────────────────────────────────────────…

從傳統到智能:地質災害風險評估、易發性分析與災后重建;AI大語言模型DeepSeek、ChatGPT、GIS、Python和機器學習深度融合

地質災害是指全球地殼自然地質演化過程中,由于地球內動力、外動力或者人為地質動力作用下導致的自然地質和人類的自然災害突發事件。在降水、地震等自然誘因的作用下,地質災害在全球范圍內頻繁發生。我國不僅常見滑坡災害,還包括崩塌、泥石流…

便捷的電腦自動關機輔助工具

軟件介紹 本文介紹的軟件是一款電腦上實用的倒計時和關機助手。 軟件特性 這款關機助手十分貼心,它是一款無需安裝的小軟件,體積僅60KB,不用擔心占用電腦空間,打開即可直接使用。 操作方法 你只需設置好對應的關機時間&#x…

Fiddler-關于抓取Android手機包,安裝證書后頁面加載失敗,提示當前證書不可信存在安全風險的問題

Fiddler-關于抓取Android手機包,安裝證書后頁面加載失敗,提示當前證書不可信存在安全風險的問題Fiddler-關于抓取Android手機包,安裝證書后頁面加載失敗,提示當前證書不可信存在安全風險的問題原因解決方法Fiddler-關于抓取Androi…

Apache Spark 4.0:將大數據分析提升到新的水平

Apache Spark 4.0 帶來了 PySpark 畫圖、多態 UDTF、改進的 SQL 腳本和 Python API 更新,以增強實時分析和可用性。 Apache Spark 4.0 于 2025 年發布,它通過增強性能、可訪問性和開發者生產力的創新,重新定義了大數據處理。在 Databricks、A…

手機解壓軟件 7z:高效便捷的解壓縮利器

在當今數字化時代,手機已經成為人們生活和工作中不可或缺的工具。隨著文件傳輸和存儲需求的不斷增加,7z 文件格式因其高效的壓縮比而備受青睞。在手機上處理 7z 文件變得越來越重要,合適的解壓軟件能帶來諸多便利。首先,7z 文件格…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第六課——測試圖案的FPGA實現

(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程文件請關注…

Solidity——修改狀態變量注意事項和簡單優化建議

你的問題非常關鍵,涉及到 Solidity 合約部署時的初始化 gas 成本 和 運行時的存儲操作 gas 消耗。我們來詳細解答: 🚨 首先,你的代碼是非法的: contract MyContract {uint public myNumber;myNumber 1; // ? 不允許…

2023年全國青少年信息素養大賽Python編程小學組復賽真題+答案解析-海南賽區

2023年全國青少年信息素養大賽Python編程小學組復賽真題+答案解析-海南賽區 編程題 第1題 整數加8 題目描述 輸入一個整數,輸出這個整數加8的結果。 輸入描述 輸入一行一個正整數。 輸出描述 輸出求和的結果。 樣例1 輸入: 5 輸出: 13 題目解析 這是最基礎的輸入輸出與…

Qt基本組件詳解:按鈕、輸入框與容器控件

Qt基本組件詳解:按鈕、輸入框與容器控件目錄 按鈕類組件 QPushButtonQRadioButtonQCheckBox 輸入框組件 QLineEditQTextEdit 容器組件 QGroupBox 綜合應用示例思維導圖總結1. 按鈕類組件 1.1 QPushButton(普通按鈕) 功能:基礎交互…

Unity Universal Render Pipeline/Lit光照材質介紹

文章目錄前言參數介紹1、表面選項1.1 Worflow Mode工作流模式1.2 Surface Type 表面類型1.3 Blending Mode 混合模式1.4 Preserve Specular 保留鏡面光照(高光)1.5 Render Face 渲染面1.6 Alpha Clipping 透明度剪裁1.7 Receive Shadows 是否接收陰影2、…

uni-app ios離線推送,推送后點擊推送的鏈接進入程序后再次回到桌面,無法消除app的角標問題

問題現象: 解決方案: 1、用h5方法清理 h5地址:HTML5 API Reference 廢話不多說上代碼 /*** 清除應用角標(支持iOS和Android)* 使用H5方法清理推送角標*/clearAppBadge() {// #ifdef APP-PLUStry {plus.runtime.setBad…

遷移Oracle SH 示例 schema 到 PostgreSQL

接著上一篇文章:遷移Oracle HR 示例 schema 到 PostgreSQL中,本文做Oracle SH(Sales History)示例 schema的遷移,SH schema比HR schema更大更復雜,本次遷移的重點是: 分區表外部數據加載 使用…

1.1 ARMv8/ARMv9安全擴展

目錄1.1.1 ARM架構安全演進1.1.2 ARMv8安全特性異常級別(EL)安全模型關鍵安全擴展1.1.3 ARMv9安全創新機密計算架構(CCA)增強的隔離機制1.1.4 安全擴展的TF-A支持1.1.5 安全擴展配置示例1.1.1 ARM架構安全演進 ARM架構從v7到v9的安全演進路線: ARMv7:引…

更新用戶隱私協議后還是 ail api scope is not declared in the privacy agreement怎么辦??!

saveImageToPhotosAlbum:fail api scope is not declared in the privacy agreement昨天明明可以了,開了個會出來,又不行了,真要命啊啊啊啊啊啊啊啊啊啊(現在回想起來可能是因為我把發布的那個版本刪了,因為那個只是用來測試用的e…