1. Python和機器學習擴充套件異常檢測
1.1. 機器學習有助於大規模資料可觀測性和資料監控
-
1.1.1. 配備了機器學習的檢測器可以更靈活地應用到更多的資料表上,從而消除了隨著資料倉儲或資料湖的增長進行手動檢查和手動操作的需要
-
1.1.2. 機器學習檢測器可以實時學習和適應資料,並且可以捕獲到人眼看不到的複雜的季節模式
-
1.1.3. 使用機器學習中的一些概念,用更規整的方式來勾勒問題,從而提供大規模的資料可觀測性和資料信任
1.2. 構建一個完美的預測器是不可能的,而且對任何有趣的預測問題都是如此
1.3. 在假陽性和假陰性之間,或者在精確率和召回率之間,總要有所取捨
1.4. 真陽性
- 1.4.1. 當一個資料點確實有問題且我們的檢測器也同樣發出認為其“異常”的訊號時
1.5. 假陽性
-
1.5.1. 預測異常,但實際正常
-
1.5.2. 雖然發出了資料監控警報,但並沒有真正出現問題
-
1.5.3. 浪費了使用者的時間來對警報做出響應
-
1.5.4. 假陽性是我們檢測到異常但存疑的資料點實際上沒有異常的情況
-
1.5.5. 假陽性檢測就像狼來了,換句話說就是你的演算法給出了“異常”的結果,但資料點實際上沒有任何問題
-
1.5.5.1. “喊狼來了”的探測器
1.6. 真陰性
- 1.6.1. 當一個資料點一切正常且我們的檢測器也沒有檢測到它(即發出“不異常”的訊號)時
1.7. 假陰性
-
1.7.1. 預測正常,但實際異常
-
1.7.2. 確實存在問題,但沒有發出資料監控警報
-
1.7.3. 把一個真正的問題忽視了
-
1.7.4. 假陰性是資料點確實有問題但檢測器沒有檢測到的情況
-
1.7.5. 假陰性檢測就像一隻沉睡的警犬,也就是說你的演算法會讓問題無法被發現
-
1.7.5.1. “沉睡警犬型”的探測器
-
1.7.5.2. 過於保守的檢測器永遠不會發出異常檢測,這意味著當事情真的出錯時,它們也肯定會錯過
1.8. 異常檢測是一項無監督任務
-
1.8.1. 無監督學習是一種機器學習任務,在該任務中,最優行為在訓練時是不可知的
-
1.8.2. 你正在訓練的資料並沒有附加任何標籤
-
1.8.2.1. 你可能不得不把異常檢測稱為無監督學習,因為異常並沒有一個統一的基本事實
-
1.8.2.2. 沒有基本事實,你就無法得到錯誤訊號
> 1.8.2.2.1. 你無法得到預測結果和你應該預測的結果之間的差異
-
1.8.3. 對於任何給定的資料點,異常檢測器會發出“異常”或“非異常”的預測
-
1.8.4. 存疑的資料點要麼是真正的問題,要麼完全就不是問題
-
1.8.5. 即使是最訓練有素的異常檢測演算法也不可能完全避免假陽性和假陰性
-
1.8.5.1. 機器學習改進資料監控警報
-
1.8.5.2. 出於簡單的統計原因,兩者無法同時避免
-
1.8.5.3. 其實更少的假陽性會以更多的假陰性為代價,反之亦然
1.9. 提高精確率和召回率
-
1.9.1. 精確率(又稱查準率)被定義為做出正確預測的機率
-
1.9.1.1. 在所有做出的“陽性”預測中,有多少是正確的呢?
-
1.9.1.2. 具有高精確率的檢測器是“精確的”,因為當它預測事件異常時,往往是正確的
-
1.9.1.3. 精確率通常告訴我們發出陽性警報時正確的頻率
-
1.9.1.4. 具有高精確率的模型會輸出可信的警報,因為它們的高精確率保證了它們很少“喊狼來了”
> 1.9.1.4.1. 一個高精確率的模型是一個很少喊狼來了的模型
> 1.9.1.4.2. 它發出警報時,你最好相信它
-
1.9.2. 召回率(又稱查全率)被定義為實際異常被檢測到的機率
-
1.9.2.1. 在所有真正的異常中,我們捕捉到了多少呢?
-
1.9.2.2. 具有高召回率的檢測器能夠很好地“召回”,它捕獲實際上是真異常的機率很高
-
1.9.2.3. 召回率告訴我們對問題真正發出警報的數量
-
1.9.2.4. 具有高召回率的模型是可靠的,因為它們的高召回率保證了它們很少忽略真正存在的問題
> 1.9.2.4.1. 有良好召回率的模型就像一隻敬業的警犬
> 1.9.2.4.2. 你可以放心,這個模型會捕獲到所有真正的問題
-
1.9.3. 資料世界是由可量化的目標來執行的,在大多數情況下,我們需要一個單一的目標來進行最佳化,而不是兩個
-
1.9.3.1. 將精確率和召回率組合成一個被稱為F分數(F-score)的指標
-
1.9.3.2. Fβ被稱為加權F分數,因為不同的β值在計算中權衡精確率和召回率有所不同
-
1.9.3.3. Fβ分數表示:“我認為召回率是精確率重要程度的β倍。”
> 1.9.3.3.1. 當β = 1時,該等式認為兩個指標一樣重要
> 1.9.3.3.2. 當β > 1時,表示召回率比精確率更重要
> 1.9.3.3.2.1. 我更關心捕捉到所有的異常,而不是偶爾引起的錯誤警報
> 1.9.3.3.3. 設定β<1,精確率會更重要
> 1.9.3.3.3.1. 我更關心我的警報是真實的,而不是捕捉每一個真正的問題
-
1.9.4. Facebook Prophet是一種預測模型,用於大規模處理時間序列資料中的日、周、月和年的季節性關係
-
1.9.5. TensorFlow是用於各種任務(包括自然語言處理、計算機視覺和時間序列異常檢測)的流行機器學習庫
-
1.9.5.1. 對高階異常檢測演算法一些有用且記錄完備的實現
-
1.9.5.2. 在行業場景中更受歡迎
-
1.9.6. PyTorch
-
1.9.6.1. 在Facebook開發的另一個機器學習Python庫
-
1.9.6.2. 可實現與TensorFlow(由Google開發)類似的用例
-
1.9.6.3. 通常在行業中的學術領域具有較高的知名度
-
1.9.7. scikit-learn是另一個流行的機器學習軟體包
-
1.9.7.1. 有k鄰近(k-nearest neighbor)演算法和孤立森林(isolation forest)演算法的版本,這是兩種常用的聚類(clustering)方法
-
1.9.7.2. 用Python開發的
-
1.9.8. MLflow
-
1.9.8.1. 由Databricks的建立者開發的一種流行的實驗跟蹤開源工具
-
1.9.8.2. 實驗跟蹤是指在開發和生產中管理機器學習模型的過程
-
1.9.8.3. 實驗跟蹤是管理機器學習模型開發和訓練的過程,包括超引數比較、依賴項檢查、管理和編排訓練作業、儲存模型快照和收集日誌等任務
-
1.9.8.4. 主要是一個實驗跟蹤和再現軟體
-
1.9.8.5. 開發異常檢測軟體的一個重要方面是保證程式碼在不同機器上的執行是相同的
> 1.9.8.5.1. 不會希望在本地解決了一個錯誤(bug),但在生產環境中卻無法應用
-
1.9.9. TensorBoard
-
1.9.9.1. TensorFlow的視覺化工具包
-
1.9.9.2. 無須使用TensorFlow建模即可使用該軟體
1.10. 檢測新鮮度事件
-
1.10.1. 越長的中斷就越有可能是真實的事件,但誰也無法保證
-
1.10.2. 弱相關性會讓一個好的模型足夠有效但並不完美
1.11. F分數
-
1.11.1. F分數是分類準確性指標,旨在兼顧最佳化精確率和召回率
-
1.11.2. 對於統計學家來說該分數的定義是模型精確率和召回率的調和平均值
-
1.11.3. F1分數旨在平衡精確率和召回率,它認為精確率和召回率同等重要
-
1.11.4. 對於導彈探測系統來說,假陽性比假陰性要好。這意味著召回率比精確率更重要
-
1.11.5. 當β=1時,這個方程與F1分數方程相同
-
1.11.5.1. 當β=1時,這個方程與F1分數方程相同
-
1.11.6. 當召回率更重要時,我們應該預期F2分數高於F1分數
1.12. 模型的準確率重要嗎
-
1.12.1. 準確率並不像檢測器的平均正確率那麼簡單,而且對於不同的應用程式來說,其定義也不應該相同
-
1.12.2. 根據設定的閾值來繪製精確率、召回率和F1分數,則會發現一些重要的資訊
-
1.12.2.1. 具有低閾值的激進檢測器具有最佳的召回率
> 1.12.2.1.1. 它們可以更快地發出警報,從而發現更多真正的問題
- 1.12.2.2. 更保守一些的檢測器具有更好的精確率
> 1.12.2.2.1. 它們只對可能是真實的嚴重異常發出警報
- 1.12.3. 任何關於模型準確率的討論,如果沒有某種基準事實與模型預測進行比較,都是不完整的
2. 異常檢測演算法
2.1. 近乎實時地檢測問題
2.2. 向需要了解情況的人發出警報
2.3. 提供資訊以幫助防止未來發生當機
2.4. 規則定義
-
2.4.1. 規則定義為某些指標值設定了明確的切分點,並確定了相對於閾值的異常值
-
2.4.2. 只有當大多數資料點都在閾值範圍內時,這種方法才能被稱為“異常”檢測
-
2.4.3. 規則定義具有令人難以置信的可擴充套件性,可用於定義極為明確的服務級別協議、資料正常執行時間保證等
2.5. 自迴歸模型
-
2.5.1. 自迴歸適用於時間序列的異常檢測,其中資料點使用時間戳物件進行排序
-
2.5.2. 時間戳物件進行排序。自迴歸模型從以前的時間步長獲取資料,將它們輸入迴歸(線性)模型,並使用該輸出來預測下一個時間戳的資料將在哪裡
-
2.5.3. 偏離自迴歸預測太遠的資料點會被標記為異常
-
2.5.4. 自迴歸移動平均(ARMA)檢測演算法和ARIMA檢測演算法
2.6. 指數平滑
-
2.6.1. 指數平滑法可以從時間序列中消除趨勢和季節性,以便人們可以使用更簡單的方法(例如,ARIMA)進行後續分析
-
2.6.2. Holt-Winters是一個用於時間序列預測的著名季節性模型,並且還有豐富的分類系統
-
2.6.2.1. 累加性(additive)
-
2.6.2.2. 累乘性(multiplicative)
-
2.6.2.3. 阻尼法(damped,又稱衰減法)
-
2.6.2.4. 非阻尼法(nondamped)
2.7. 聚類
- 2.7.1. 聚類技術[如k近鄰演算法或孤立森林演算法]透過將相似的資料點放入同一個資料桶中,並提醒你注意那些“和桶中資料差異較大的資料點”來發現異常
2.8. 超引數調優
-
2.8.1. 有些引數透過資料的使用和訓練過程才能獲得
-
2.8.2. 被稱為超引數的其他引數則不是透過學習過程獲得的,反而超引數可以以特定方式去幫助模型的學習和推斷過程
2.9. 整合模型框架
- 2.9.1. 整合模型框架充分利用了聚類、指數平滑和自迴歸節點等各種方法的優點,將它們組合成一個前饋神經網路,並使用多數投票整合演算法將它們的預測結合起來
3. 資料質量監控器
3.1. 在為資料系統構建資料質量監控器時,重要的是要區分,你是在使用來自資料倉儲的結構化整體資料,還是在使用現代資料湖生態系統中的複雜資料
3.2. 主要區別
-
3.2.1. 你必須考慮的入口點數量
-
3.2.1.1. 資料湖系統往往具有大量的入口點,這意味著應該假設從不同來源輸入的資料具有高度的異構性
-
3.2.1.2. 要警惕“一刀切”的建模方法
-
3.2.1.3. 另一種方法是使用整合模型架構,或者簡單地為每個用例使用單獨的模型
-
3.2.2. 要如何收集並儲存後設資料
-
3.2.3. 你會如何訪問該後設資料
3.3. 直接從資料湖中收集的後設資料可能需要經過不同級別的預處理後,才能指望異常檢測演算法從它們當中獲得有價值的資訊
3.4. 型別可能需要強制(隱式)轉換,模式可能需要對齊,而你可能會發現在執行檢測器的訓練任務之前,自己在資料中獲得了全新的增強特徵