大數據

Elastic:機器學習的實踐 – single metric job

簡介:

先前,使用 Elasticsearch 時與機器學習有關的主要問題之一是解決異常檢測的問題。基本上,異常檢測是一個統計問題,可以通過從輸入數據分佈的常見統計屬性中標記不規則性,以簡單的方式解決。 但是,我們可以使用基於機器學習的方法來解決該問題,例如基於聚類的異常檢測和基於支持向量機的異常檢測。 Elastic Stack 提供的機器學習功能可以涉及 Kibana 的數據可視化工具,作業管理,計劃程序以及來自Elasticsearch的統計任務的指標(metrics)聚合。 我們甚至可以使用Beats收集數據。 例如,使用Metricbeat 收集系統級資源使用情況統計信息。

文本作者:劉曉國,Elastic 公司社區佈道師。新加坡國立大學碩士,西北工業大學碩士,曾就職於新加坡科技,康柏電腦,通用汽車,愛立信,諾基亞,Linaro,Ubuntu,Vantiq 等企業。

如果你想一站式快速體驗 Elasticsearch 所有功能(免費提供機器學習、 X-pack 能力),開通 阿里雲 Elasticsearch 1核2G,即可首月免費試用。

什麼叫做異常

我們首先觀察一下如下的一個時間系列的圖:
image.png

我們首先看到綠色的那個統計圖,明顯地在2016年2月9號4點左右一個叫做 AAL 的航空公司的訂票數據明顯高於其它天的情況。那麼這顯然是一個異常的情況。但是如果這個規律是每週或每個月在某個固定的時間段都是這麼反覆出現,那麼這種情況也應該算是正常的情況。另外一個例子就是,我們生活在一個大城市裡,比如北京,每到週五晚上高峰期,出城的車輛非常多,明顯高於每週的其它工作日,這顯然是一個異常的情況,如果我們只拿一週的統計數據來說。然而如果是每週五都是這樣的,那麼這樣的高峰期也就顯得非常正常了。這個是需要機器來根據以往的數據來分析而的出來結論的。

另外一種情況是:

image.png

標如果某事物與總體中的其他事物截然不同,則該實體是異常的。
總體來說,如果我們說某個事情不正常,它是一下的一種或兩種:

• 當實體的行為突然發生重大變化時
• 當實體與總體中的其他實體完全不同時

在機器學習中,他會根據實際數據自動幫我們選擇適當的數據模型:

image.png

機器學習會自動分析數據選擇適當的模型,並在地概率事件發生時檢測出異常。大多數情況是第一種數據模型。

機器學習

機器學習是使用 Elasticsearch 集群中存在的數據,通過無監督的方法來構建數據模型。通過將(新的或替代的)數據與模型進行比較並識別數據中的異常模式或行為,它可以自動分析時間序列數據。在 Elasticsearch 的機器學習中,機器學習實習如下的功能:

• 異常檢測
• 異常打分 (分數介於0到100之間,分數越高,代表越不正常)

在我們覺得是否使用機器學習之前,需要驗證將使用的數據的適用性。在使用 Elasticsearch 機器學習之前,你必須考慮如下的三件事:

• 你的數據是否是一個時間系列的數據
• 數據需要包含對用例至關重要的關鍵性能指標(KPI)
• 數據的位置

事實上,你也可以通過機器學習的 API 接口來分析你的數據。這個工作並不一定小在 Kibana 中來完成。為了發現數據的異常,定義自己的數據的 KPI 是非常重要的一個環節。這些 KPI 指標,可以是:

• 在規定的一段時間裡,日誌的數量
• 在規定的一段時間裡,所收到的 404 響應值
• 在規定的一段時間裡,磁盤的使用量

IT組織選擇用於跟蹤和標記的 KPI 可以跨越各種指標,包括以下各項:

• 客戶:影響指標,例如應用程序響應時間或錯誤計數
• 可用性:面向指標,例如正常運行時間或平均維修時間(MTTR)
• 業務:面向指標,例如每分鐘訂單數,收入或活躍用戶數

定義了 KPI 後,將對此 KPI 進行分析(平均值,最大值,計數等)。 分析功能和KPI的組合將稱為檢測器。我們可以為數據定義 single metric 或 multi metric 的偵測器以檢查數據中的異常情況。

機器學習另外一個很重要的功能就是預測所分析時序數據的未來發展趨勢。一但我們建立了機器學習的作業之後,我們就可以進行預測。除了使用 Kibana 的界面進行預測之外,Elasticsearch 也提供 API 接口來實現。在使用這個功能時,你需要提供相應的時間段來進行預測。

機器學習分類:

image.png

機器學習是如何工作的

當將ML作業配置為運行時,ML會將所有這些片段排序在一起。 下圖顯示了此過程的簡化版本:

image.png

image.png

image.png

通常,每個 bucket span 都執行一次上述過程,但是要進行其他優化以最小化 I/O。 這些細節超出了本文章的範圍。 但是,關鍵要點在於,這種編排使 ML 可以聯機(即不脫機/批處理),並不斷學習新攝取的數據。 ML 也會自動處理此過程,因此用戶不必擔心實現這一切所需的複雜過程。

image.png

啟用白金功能

在繼續使用 Elasticsearch 中 的機器學習功能之前,請確保已安裝Platinum許可證。 如果下載了 Elasticsearch 軟件或使用了開源版本,它將是基本版本。我們必須激活30天試用許可證才能使用 Platinum 功能。

我們可以按照如下的步驟來啟動白金功能:

image.png

我們按照上面的三個步驟,選擇試用版,進而獲得白金版功能。

image.png

機器學習的作業

Kibana 7.0 支持四種類型的機器學習作業,如下所述:

  1. Single-metric jobs:數據分析僅在一個索引字段上執行
  2. Multi-metric jobs:可以對多個索引字段執行數據分析; 但是,每個字段都分別進行分析
  3. Advanced jobs:可以對多個索引字段執行數據分析。提供檢測器和影響者的完整配置設置
  4. Population jobs:對不常見數據(例如檢測總體中的異常值)的分佈行為的數據分析

在今天的練習中,我們來展示一個使用single-metric job的例子。

Sample 數據

在今天的機器學中,我們使用如下的方法下載我們的時序數據:

git clone https://github.com/liu-xiao-guo/machine_learning_data

等我們下載完數據後,我們運行一下的命令:

$./cf_rfem_hist_price_bulk_index.sh

它將會把我們所需要的數據讀入到Elasticsearch中。我們可以在Kibana中查找這個數據。

GET cf_rfem_hist_price/_count

顯示:

{
  "count" : 90,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  }
}

它顯示有90個數據。其中包括61個交易日和29個非交易日的數據。每一條數據的結構是:

"_source" : {
          "date" : "2018-12-26",
          "open" : 55.0803,
          "high" : 56.0999,
          "low" : 54.59,
          "close" : 55.89,
          "volume" : 27038,
          "change" : 0.971,
          "changePercent" : 1.768,
          "label" : "Dec 26, 18",
          "changeOverTime" : 0,
          "symbol" : "RFEM"
        }

這是一個股票代碼為RFEM的交易信息。這裡它含有每天的開盤價,最高價,最低價,閉市價,交易量等信息。

運行一個 single-metric 作業

基本上,single-metric 作業僅使用索引文檔中的一個字段作為分析檢測器。 下面介紹了針對 volume 字段運行 single-metric 作業的分步說明。

創建Index pattern

為了創建一個Index pattern,我們按照如下的步驟:
image.png

按照上面的1,2,3步驟:

image.png

輸入 cf_rfem_hist_price *,然後選擇 Next Step。

image.png

然後在 Time Filter field name 選擇 date,然後再選擇 Create index pattern。

image.png

這樣 cf_rfem_hist_price* index pattern 已創建,可以在機器學習作業中使用。

創建一個新的機器學習工作
要創建單指標機器學習作業,我們需要執行以下操作:

1、單擊左側工具欄上的機器學習按鈕,在以下屏幕截圖中顯示,右側窗格將顯示機器學習面板

image.png

2、從頂部菜單中,選擇 “Anomaly Detection”。 點擊 Create job 按鈕,如以下屏幕截圖所示:

image.png

3、該面板將讓我們選擇源數據,這些源數據來自於新的搜索,選定的索引或保存的搜索。 單擊cf_rfem_hist_price索引,如以下屏幕截圖所示:

image.png

4、有幾種作業類型可用於定義機器學習作業。 讓我們選擇一個 single metric 作業,如以下屏幕截圖所示:

image.png

5、選擇 Use full cf_rfem_hist_price* data
image.png

6、然後選擇 Next 按鈕

image.png

7、 single-metric 作業必須使用聚合。 由於我們的數據是每日記錄,而存儲段跨度(間隔)是一天,因此無論我們選擇 “Sum”,“Mean” 還是 “Median” 聚合,聚合都是相同的。我們選擇 volume 字段的 Sum 聚合用來檢查個異常。請注意這個也是我們之前談到的 KPI 指標。我們的目的是通過檢查 voume 的總和是否有異常的情況出現。

image.png

image.png

在上面,我們注意的一點是我們的 Bucket span 設置為15m,儘管我們的時序數據是每天一個數據。在實際的使用中可以根據自己的用例來進行調整。

8、點擊 Next 按鈕,這樣我們可以看到如下的畫面:

image.png

9、接下來選擇 Next:
image.png

10、填好 Job ID,然後選擇 Next 按鈕
image.png

11、上面顯示 Validation 信息。在這一步,如果有錯誤的話,它將會用紅色的字顯示錯誤信息。上面顯示一切都好。然後,我們選擇 Next 按鈕:

image.png

12、我們再選擇 Create job 按鈕:

image.png

13、我們選擇 View results:
image.png

在上面,在起始的部分,我們可以看見機器學習在學習,我們看不出有什麼特別的地方。經過一段時間的學習,它偵測出一個異常的情況。

14、恭喜你。你已經創建了一個 single-metric 的機器學習的作業!我們可以點擊下面的 Anomalies:

image.png

異常在上面的圖表中,以不同的顏色來表示的:

• Warning (blue): 分數低於25

• Minor (yellow): 分數介於25和50之間
• Major (orange): 分數介於50和75之間
• Critical (red): 分數介於75和100之間

我們可以在上面點擊 Severity threshold 選擇不同的級別來進行顯示。如下圖,它顯示的是隻有 Critical (分數高於75的)的異常:

image.png

顯然顯示有很多異常的情況。點擊最上面的那個January 10th 2019,我們可以看到詳細的信息:

image.png

上面顯示的實際值是304198,但是根據機器學習所預測的值應該在22499。顯然這是一個異常。對於銷售人員來說,他們可以根據這個情況來了解一下,為什麼會出現這麼一個異常的情況,是什麼原因造成交易量的突然增加。是有人背後操作嗎?

在上面的圖中,由於我們的時間長度並不長,所以在一個畫面中都顯示完成。我們時間上可以通過調整左右的按鈕來進行時間的選擇:

image.png

這樣我們可以專注查看我們所關心時間段的數據。
我們也可以針對我們的數據進行標註:

image.png

image.png

點擊上面的 Create 按鈕,我們就可以為這個事件進行標註:

image.png

我們也可以點擊右上角的那個 Forecast (預測)按鈕:

image.png

我們填入7天的預測。點擊 Run 按鈕:

image.png

這是最終預測後的結果。

關於機器學習的時間選擇

在上面的練習中,我們選擇了默認的15分鐘作為 bucket_span 來對我們的數據進行分析。將 bucket span 視為分析前的聚合間隔,即為了進行分析而聚合一部分數據的時間窗口。 bucket_span 的持續時間越短,分析就越精細,但是數據中產生噪聲偽像的可能性也就越高。下圖顯示了在三個不同時間間隔內聚合的同一數據集:

image.png

請注意,如果由於尖峰持續時間短(小於2分鐘)而在60分鐘間隔內聚集數據幾乎消失了,則在5分鐘間隔內聚集的版本中看到的突出異常。 實際上,在這60分鐘的間隔內,峰值似乎不再顯得異常。

聲明:

本文版權歸作者所有,未經許可不得擅自轉載或引用。


image.png

阿里雲Elastic Stack】100%兼容開源ES,獨有9大能力,提供免費 X-pack服務(單節點價值$6000)

相關活動


更多折扣活動,請訪問阿里雲 Elasticsearch 官網

阿里雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費
阿里雲 Logstash 2核4G首月免費
下載白皮書:Elasticsearch 八大經典場景應用


image.png

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *