99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FreeWheel基于機器學(xué)習(xí)的業(yè)務(wù)異常檢測實踐

jf_WZTOguxH ? 來源:鐘雨 ? 作者:鐘雨 ? 2022-10-28 14:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背 景

在公司運行過程中,尤其是對于偏重數(shù)據(jù)的互聯(lián)網(wǎng)公司,業(yè)務(wù)異常檢測是一個非常重要但又很容易被輕視的工作。一旦因為業(yè)務(wù)發(fā)生異常并且沒有被及時發(fā)現(xiàn),一定會對公司和客戶產(chǎn)生某種程度的損失,從而影響業(yè)務(wù)正常發(fā)展。很多公司都構(gòu)建了基于規(guī)則的報警平臺,并將其應(yīng)用于業(yè)務(wù)的異常檢測。但由于數(shù)據(jù)模式的快速變化,并且數(shù)據(jù)中存在著大量噪音,基于規(guī)則的異常檢測誤報率較高?;?a href="http://www.socialnewsupdate.com/v/tag/557/" target="_blank">機器學(xué)習(xí)人工智能的業(yè)務(wù)異常檢測可以獲得比傳統(tǒng)規(guī)則系統(tǒng)更高的準(zhǔn)確率和擴展性,但由于面臨諸如異常的定義較為模糊、缺少數(shù)據(jù)標(biāo)簽等諸多挑戰(zhàn),構(gòu)建一個實用的業(yè)務(wù)異常檢測系統(tǒng)需要算法工程師和數(shù)據(jù)開發(fā)工程師的精雕細(xì)琢才能完成。

FreeWheel 是一家數(shù)字廣告管理技術(shù)和服務(wù)提供商,創(chuàng)建于 2007 年,是一家專門提供電視及互聯(lián)網(wǎng)視頻廣告投放、監(jiān)測、預(yù)測、增值等關(guān)鍵解決方案的技術(shù)公司,主營業(yè)務(wù)為高端視頻媒體的廣告服務(wù)。為客戶提供穩(wěn)定可靠的廣告投放服務(wù)是 FreeWheel 的宗旨,為了提高服務(wù)質(zhì)量,對業(yè)務(wù)的異常檢測和預(yù)警非常關(guān)鍵。我們從 2020 年開始從零打造了基于機器學(xué)習(xí)的業(yè)務(wù)異常檢測系統(tǒng),覆蓋了 FreeWheel 核心業(yè)務(wù)指標(biāo),為客戶的廣告投放保駕護航。

本文介紹了 FreeWheel 基于機器學(xué)習(xí)的業(yè)務(wù)異常檢測實踐,提煉了從零開始構(gòu)建業(yè)務(wù)異常檢測系統(tǒng)面臨的問題和解決方案,文章介紹了常用的異常檢測算法,比較了不同算法模型的優(yōu)劣,介紹了可擴展的異常檢測系統(tǒng)是如何搭建的,希望對于從事相關(guān)工作的朋友能夠帶來幫助。

異常檢測概述

從應(yīng)用場景分,異常檢測包括指標(biāo)異常檢測、日志異常檢測、網(wǎng)絡(luò)異常檢測、用戶行為異常檢測(風(fēng)控、反作弊)等。從數(shù)據(jù)角度又可以分為新奇點檢測 (Novelty Detection) 和離群點檢測 (Outlier Detection)。

廣告業(yè)務(wù)異常檢測是以業(yè)務(wù)指標(biāo)為基礎(chǔ),多維度、多角度的異常檢測。一方面,業(yè)務(wù)指標(biāo)是連續(xù)采集的時間序列,通常認(rèn)為歷史序列是正常的,從中學(xué)習(xí)特定的模式,未來的指標(biāo)如果違反了這個模式,可以認(rèn)為出現(xiàn)了異常,從這個角度看,屬于新奇點檢測的范疇。另一方面,業(yè)務(wù)指標(biāo)在某幾個維度下的值一般會滿足某種分布,和多數(shù)正常值相比差別比較大的可能就是異常點,這屬于離群點檢測的范疇。受篇幅所限,本文主要關(guān)注新奇點檢測問題,離群點檢測的相關(guān)實踐將在后續(xù)分享。

異常檢測面臨諸多挑戰(zhàn),第一,正常和異常的邊界是非常模糊的,很多時候是“公說公有理,婆說婆有理”;第二,歷史數(shù)據(jù)里經(jīng)常包括很多噪音,甚至歷史數(shù)據(jù)中就存在著異常。第三,幾乎沒有標(biāo)注的異常標(biāo)簽;第四,正常數(shù)據(jù)的模式也不是一成不變的,會隨著時間的推移和業(yè)務(wù)的演進發(fā)生很大的變化。指標(biāo)異常檢測算法,包括無監(jiān)督、半監(jiān)督、監(jiān)督機器學(xué)習(xí)算法。其中以無監(jiān)督應(yīng)用最為廣泛。無監(jiān)督主要有基于統(tǒng)計模型的異常檢測(如 EVT),基于時間序列預(yù)測的異常檢測,基于隱變量重構(gòu)誤差的異常檢測(如 VAE),以及其他深度學(xué)習(xí)的衍生模型(如 AnomalyTransformer) 等。監(jiān)督的算法更偏向于傳統(tǒng)的機器學(xué)習(xí)和深度學(xué)習(xí)的分類模型,半監(jiān)督方法致力于解決標(biāo)簽數(shù)據(jù)不足的問題,提高監(jiān)督方法的學(xué)習(xí)效果。本文主要介紹我們從零到一的實踐經(jīng)驗和在生產(chǎn)環(huán)境中應(yīng)用較為成熟的算法模型,除此之外,基于監(jiān)督和半監(jiān)督方法的模型也很快投入生產(chǎn)環(huán)境,期待后面分享給大家。

業(yè)務(wù)指標(biāo)監(jiān)控

FreeWheel 監(jiān)控平臺目前有兩大指標(biāo)數(shù)據(jù)來源,Prometheus 和數(shù)據(jù)平臺。Prometheus 是目前主流的開源監(jiān)控解決方案,具有數(shù)據(jù)模型靈活、延遲低等特點,目前存儲 FreeWheel 絕大多數(shù)系統(tǒng)和應(yīng)用指標(biāo)和核心業(yè)務(wù)指標(biāo)。Prometheus 的核心業(yè)務(wù)指標(biāo)是從 Ad Server 直接采集而來,如請求量、廣告曝光量等,聚合粒度較粗。另一部分來源于 FreeWheel 數(shù)據(jù)平臺,通過對 AdServer 產(chǎn)生的廣告日志的實時處理,將更細(xì)粒度的指標(biāo)存入 Druid,其數(shù)據(jù)延遲為分鐘級。有了細(xì)粒度的數(shù)據(jù)后,我們可以基于我們關(guān)心的維度進行實時聚合,如廣告曝光量這個指標(biāo),根據(jù)客戶 ID 進行聚合,可以對每個客戶 ID 的廣告曝光量時間序列進行異常檢測和報警。

快速搭建 V1.0 系統(tǒng)

最早的時候,我們通過規(guī)則的方式對幾個關(guān)鍵的指標(biāo)配置了預(yù)警,比如,某個重要客戶的曝光量或者轉(zhuǎn)化率小于某個閾值就會觸發(fā)報警;比如針對所有的站點,若流量同環(huán)比小于 80%,就認(rèn)為可能有問題。這些規(guī)則確實起到了一定的作用,也檢測到了很多異常,但缺點也很明顯:第一是規(guī)則太多,不同客戶的業(yè)務(wù)和流量模式千差萬別,同一套閾值比較難以滿足需求;第二點是業(yè)務(wù)變化很快,閾值需要隨著業(yè)務(wù)變化不斷地調(diào)整,維護成本高;第三點,也是最大的痛點是誤報率大,需要耗費大量的人工處理報警。

為了從零開始快速搭建起基于機器學(xué)習(xí)的 V1.0 的異常檢測系統(tǒng),我們采用了簡單直接的做法,基于歷史數(shù)據(jù)訓(xùn)練回歸模型,預(yù)測未來的指標(biāo)和對應(yīng)的上下界,如果真實值超過了上下界,則檢測到異常并觸發(fā)報警,也就是基于時間序列預(yù)測的異常檢測。

66d7c578-567f-11ed-a3b6-dac502259ad0.png

(注:綠色實線時指標(biāo)的真實值,藍色虛線是指標(biāo)的預(yù)測值,橙色和紅色分別是上下屆,紅框標(biāo)注的是檢測到的異常)

第一版模型 ARIMA

首先,為了能快速上線第一個版本,我們嘗試了時間序列預(yù)測里最常用的 ARIMA 模型,ARIMA 是 Autoregressive Integrated Moving Average model 的縮寫。ARIMA 模型有三個超參數(shù) p,d,q,一般寫作 ARIMA(p,d,q) 中,AR 是“自回歸”,p 為自回歸項數(shù);MA 為“滑動平均”,q 為滑動平均項數(shù),d 為使之成為平穩(wěn)序列所做的差分階數(shù)。對于每一個時間序列,都需要確定最適合的超參數(shù) p,d,q,通常有一套成熟的策略進行人工選擇,如通過觀察差分之后的平穩(wěn)性確定 d,通過觀察 ACF 曲線和 PACF 曲線確定 q 和 p 等等。但是,對于數(shù)以萬計的時間序列來說,人工調(diào)整顯然不可行,這套經(jīng)驗策略也較難量化,因此我們采用類似網(wǎng)格搜索的方法確定超參數(shù),這一過程也被稱為自動定階。

周期性檢測

ARIMA 模型沒有考慮時間序列的季節(jié)性(也稱作周期性,下文統(tǒng)稱周期性)變化,但周期性是大多數(shù)跟流量相關(guān)的指標(biāo)必須要考慮的一個因素,并且不同的業(yè)務(wù)模式的流量周期是不一樣的,看下面的兩個例子。

67607648-567f-11ed-a3b6-dac502259ad0.png

如上圖所示,按小時粒度聚合的 2 個指標(biāo),其周期分別為 24 和 168,分別代表每天重復(fù)的模式和每周重復(fù)的模式。

我們需要給出最匹配這個時間序列的周期值,即周期性檢測。周期性檢測的方法有很多,第一種就是相似度檢測,假設(shè)周期為 T,將時間序列按照長度為 T 進行切分得到若干個分段,計算相鄰分段的相似度。第二種方法是分析 ACF 曲線,ACF 全稱是 Autocorrelation function,其表達了時間序列和自身偏移一定量之后的相關(guān)性。通過觀察 ACF 曲線的特點可以推斷出時間序列周期。除了這兩種方法外,周期性檢測還有快速傅里葉變換(FFT)、小波變換等方法。我們根據(jù)不同指標(biāo)的時間粒度、數(shù)據(jù)量和不同方法的計算復(fù)雜度、準(zhǔn)確性等,根據(jù)經(jīng)驗和實驗結(jié)果構(gòu)建了一個的選擇周期性檢測方法的決策樹,由最適合的一種或幾種方法,綜合計算出時間序列的周期。

Seasonal ARIMA

由于普通的 ARIMA 模型不能夠處理周期性,Seasonal ARIMA 模型引入了季節(jié)分量,可以更好地處理周期性,通常寫作 SARIMA(p,d,q)(P,D,Q,s) 。s 是時間序列的周期,P,D,Q 分別對應(yīng)季節(jié)分量的滑動平均項數(shù)、差分階數(shù)和滑動平均項數(shù)。

在訓(xùn)練數(shù)據(jù)的選取上,雖然歷史數(shù)據(jù)越多,模型擬合地會更好,但并不是越多越好,一方面,數(shù)據(jù)量增加會使得 ARIMA 模型擬合時間變長,另一方面,業(yè)務(wù)指標(biāo)的模式可能隨著時間而發(fā)生變化。以小時粒度指標(biāo),對于無周期的 ARIMA 模型,200~300 多個點即可取得比較好的效果,也就是 7~14 天左右的歷史數(shù)據(jù);對于周期性的 SARIMA 模型,5~10 個周期即可取得比較好的效果,對于呈現(xiàn)每周重復(fù)的模式,6 周左右的數(shù)據(jù)可以取得比較好的效果。

如何計算上下界

有了預(yù)測值之后,接下來我們需要得到判斷異常的上下界閾值,ARIMA 模型在輸出預(yù)測結(jié)果的同時,也輸出了置信區(qū)間。置信區(qū)間概率論里的一個概念,是基于區(qū)間估計的結(jié)果,在預(yù)測的場景下,代表預(yù)測結(jié)果會一定的概率出現(xiàn)在這個區(qū)間,這個概率就被稱為置信度。當(dāng)隨機變量符合正態(tài)分布時,95% 置信度的置信區(qū)間近似等于均值加減 2 倍標(biāo)準(zhǔn)差,而均值加減 3 倍標(biāo)準(zhǔn)差的置信度為 99.7%,這也就是常說的 2 倍標(biāo)準(zhǔn)差法和 3 倍標(biāo)準(zhǔn)差法。將置信區(qū)間作為判斷異常的上下界閾值時最適合不過的了,當(dāng)置信度越大時,置信區(qū)間越寬,超出上下界閾值的異常就越顯著,換句話說,業(yè)務(wù)指標(biāo)的異常就越嚴(yán)重。通過設(shè)置不同的置信度,我們可以探測到不同嚴(yán)重程度的異常。

在實際應(yīng)用時,由于我們的業(yè)務(wù)指標(biāo)通常時非負(fù)的,并不能滿足正態(tài)分布(或者高斯分布),因此 ARIMA 模型直接輸出的置信區(qū)間就不合適了。通過分析發(fā)現(xiàn),絕大多數(shù)業(yè)務(wù)指標(biāo)近似滿足從零處截斷的截斷正態(tài)分布(高斯分布),因此我們只需要取出 ARIMA 模型輸出的預(yù)測值和標(biāo)準(zhǔn)誤差,就可以利用截斷正態(tài)分布的累計分布函數(shù)和分位函數(shù)計算出置信區(qū)間。

V1.0 系統(tǒng)架構(gòu)

有了第一版的模型的結(jié)果,我們上線了異常檢測系統(tǒng) V1.0,架構(gòu)如下圖所示:

676f3c00-567f-11ed-a3b6-dac502259ad0.png

V1.0 系統(tǒng)的核心就是指標(biāo)預(yù)測服務(wù),指標(biāo)預(yù)測服務(wù)將需要預(yù)測的指標(biāo)的預(yù)測結(jié)果和報警上下界輸出到監(jiān)控平臺,通過在監(jiān)控平臺上對需要進行異常檢測到指標(biāo)配置報警規(guī)則,由監(jiān)控平臺實時檢查是否滿足報警要求,也就是超過上下界,從而觸發(fā)報警。指標(biāo)預(yù)測服務(wù)是基于 PySpark 實現(xiàn)的,由兩類定時任務(wù)構(gòu)成。第一類是周期性檢測和模型訓(xùn)練,頻率較低,大約每天執(zhí)行一次,負(fù)責(zé)將所有需要檢測的指標(biāo)和維度下的時間序列都進行周期性檢測、ARIMA 超參數(shù)選取和 ARIMA 模型訓(xùn)練,并將周期數(shù)、ARIMA 超參數(shù)和 ARIMA 模型參數(shù)進行保存。

第二類是預(yù)測任務(wù),基于 Spark 的并行計算能力,可以實現(xiàn)在較短時間能完成大量時間序列的預(yù)測工作。以小時級任務(wù)為例,每次預(yù)測任務(wù)都會預(yù)測時間序列未來 N 個小時(例如 N=24)的指標(biāo)值和上下界,并寫入數(shù)據(jù)庫;小時級任務(wù)可以配置每隔 M 個小時(例如 M=6)執(zhí)行一次,同時覆蓋之前的預(yù)測結(jié)果。這樣做的好處是既保證了預(yù)測數(shù)據(jù)的冗余,使得在預(yù)測任務(wù)失敗或者延誤的時候還有之前的預(yù)測結(jié)果可以使用,同時執(zhí)行預(yù)測任務(wù)的 executor 可以允許在按需申請的 spot instance ec2 上,節(jié)約了計算成本,由于 spot instance 的不可靠性,預(yù)測任務(wù)可能隨時失敗,只要重試即可。另一方面,配置 M

當(dāng)前的問題和優(yōu)化

對第一版的結(jié)果進行分析,我們發(fā)現(xiàn)有下面幾個問題會導(dǎo)致精確率(Precision)不足,誤報較多:

1) 區(qū)間太緊

首先是置信區(qū)間的問題,當(dāng)我們選好一個合適的置信度,如 99%,會發(fā)現(xiàn)對于多數(shù)時間序列都是合適的,但對于那些規(guī)律性比較強的時間序列來說,其模型的擬合度非常好,MAPE 能小于 5%,預(yù)測的標(biāo)準(zhǔn)誤差很低,因此置信區(qū)間會比較窄,如圖:

67bb3a9c-567f-11ed-a3b6-dac502259ad0.png

這就會導(dǎo)致如果指標(biāo)出現(xiàn)輕微的抖動,比如 +/-10%,就會被識別為異常,這顯然是我們不希望看到的。我們的改進有兩點,第一是對標(biāo)準(zhǔn)誤差進行放大,當(dāng)標(biāo)準(zhǔn)誤差 / 均值的比例小于一定的程度時,將標(biāo)準(zhǔn)誤差乘以一定的放大系數(shù),再計算置信區(qū)間;第二是利用預(yù)期的抖動比例進行干預(yù),將計算出來的置信區(qū)間和基于經(jīng)驗配置的容忍抖動比例(如 +/-20%)進行融合,這樣得出的上下界既能符合模型的擬合結(jié)果,也能在業(yè)務(wù)上看來不至于特別離譜。

67cb017a-567f-11ed-a3b6-dac502259ad0.png

2) 數(shù)據(jù)包含噪音

第二點,歷史數(shù)據(jù)中包含異常點,會對模型的擬合和預(yù)測產(chǎn)生一定的影響。例如如果前一天流量因為某些原因(如壓力測試)有一個很明顯的尖峰,那大概率 ARIMA 模型預(yù)測的今天同周期也會相應(yīng)地變高,從而導(dǎo)致對正常流量的誤判。我們從兩個方面解決這個問題,第一是模型啟動的時候,我們用一個規(guī)則去識別那些比較明顯的異常點;然后,當(dāng)我們的模型開始運行,異常點被檢測出來后,我們通過建立反饋機制修正模型的輸入數(shù)據(jù),將異常點的值修正為此前的預(yù)測值,后面模型的預(yù)測將不會收異常點的影響。當(dāng)然如果異常點識別錯了,反饋機制會帶來負(fù)面效應(yīng),處理這個異常報警的運營人員會對其進行標(biāo)記,從而避免這個問題。

3) 數(shù)據(jù)太稀疏

此外,我們發(fā)現(xiàn),有一大部分時間序列的數(shù)據(jù)非常稀疏,也就是其歷史上的取值經(jīng)常缺失,導(dǎo)致時序預(yù)測準(zhǔn)確度較差。針對這種情況,從業(yè)務(wù)的角度考慮,我們通過設(shè)置閾值跳過數(shù)據(jù)太稀疏或者歷史流量過少的的場景,減少誤報。

第二代系統(tǒng) (V2.0) V1.0 的不足

V1.0 異常檢測系統(tǒng)有幾個問題,首先在系統(tǒng)層面,隨著需要配置異常檢測報警的指標(biāo)越來越多,通過 Hard Code 的方式部署的指標(biāo)預(yù)測服務(wù)的擴展性問題就凸顯出來;另外,業(yè)務(wù)上希望對于指標(biāo)短時間抖動或者業(yè)務(wù)影響比較小的異常進行過濾,現(xiàn)有的架構(gòu)難以實現(xiàn)。在模型層面,ARIMA(SARIMA)模型在很多場景下預(yù)測誤差較大,基于這樣的預(yù)測結(jié)果計算的上下界會導(dǎo)致較多誤報警。

針對 V1.0 系統(tǒng)和模型的不足,我們設(shè)計了第二代異常檢測系統(tǒng) V2.0。

異常檢測系統(tǒng) V2.0 架構(gòu)

在第二版的異常檢測系統(tǒng)中,我們將異常檢測的工作從監(jiān)控平臺完全剝離出來,專注于優(yōu)化異常檢測算法和策略,進而提升異常檢測的效果。異常檢測系統(tǒng)將結(jié)果以異常得分的形式輸出給監(jiān)控平臺,由監(jiān)控平臺負(fù)責(zé)報警和運營操作。下面是系統(tǒng)整體的架構(gòu)圖。

680e998a-567f-11ed-a3b6-dac502259ad0.png

異常檢測系統(tǒng)包括元數(shù)據(jù)管理、模型訓(xùn)練、異常評估等幾個模塊。元數(shù)據(jù)理負(fù)責(zé)和監(jiān)控平臺同步異常檢測需求和配置信息,如要檢測的指標(biāo)、數(shù)據(jù)源、維度、過濾條件等,并生成對應(yīng)的時間序列元數(shù)據(jù)。模型訓(xùn)練和之前相似,不同的是從批任務(wù)變成了實時任務(wù),通過內(nèi)置的調(diào)度模塊,一方面要服務(wù)監(jiān)控平臺實時配置的需求,對于新增的時間序列要優(yōu)先進行訓(xùn)練,另一方面也要定期地對舊模型進行更新。

異常評估模塊

異常評估模塊也是一個長期運行的 Spark 應(yīng)用,內(nèi)置的調(diào)度模塊會調(diào)度每個任務(wù)的運行,同時考慮實時數(shù)據(jù)源依賴、數(shù)據(jù)完整性檢查、指標(biāo)歷史數(shù)據(jù)緩存、任務(wù)優(yōu)先級等,將適合的任務(wù)提交 Spark Job Group。每個 Spark Job Group 都包括指標(biāo)數(shù)據(jù)查詢、數(shù)據(jù)處理、并行的時間序列異常檢測和結(jié)果匯總與輸出等多個 Spark Job/Stage,其中最核心的是并行的時間序列異常檢測的 Stage,多個 Task 由 Spark 調(diào)度并行執(zhí)行。

異常評估模塊的另外一個關(guān)鍵點是對異常進行評估和打分 (0 到 1 之間的分?jǐn)?shù)),異常比較明顯或者對業(yè)務(wù)影響比較大的異常的得分更接近 1,不明顯的異常、噪音、對業(yè)務(wù)影響小的異常的得分更接近 0。相比 V1.0 異常檢測系統(tǒng),引入異常評估模塊后極大地提升了異常檢測的能力,一方面可以引入基于規(guī)則和策略的評估,另一方面可以直接基于無監(jiān)督或者監(jiān)督的機器學(xué)習(xí)模型給出異常打分。由于基于規(guī)則和策略的評估方法可解釋性更強,占線上多數(shù)場景都采用此方法;在一些特殊業(yè)務(wù)場景中,通過模型直接打分也取得了不錯的效果。

下面簡單介紹下我們的打分策略,首先,選取評估窗口,即同時評估最近的幾個時刻指標(biāo)值的異常情況,評估窗口數(shù)據(jù)的異常相比只評估點數(shù)據(jù)的異??梢詼p少噪音的影響,當(dāng)然,越新的數(shù)據(jù)權(quán)重越大。以流量指標(biāo)為例,我們綜合了以下幾個因素進行評估:是否超出上下界、相比預(yù)測值流量異常下降(或者上漲)的幅度,即重構(gòu)誤差、歷史流量大小,當(dāng)前所處時刻流量的相對大小、異常持續(xù)的時間、歷史上發(fā)生過類似異常的頻率等。

除了基于影響的評估之外,我們還構(gòu)建了根因分析系統(tǒng)對異常進行歸因分析,提供一站式業(yè)務(wù)運營解決方案,極大地提高了運營效率,同時消除由于業(yè)務(wù)上預(yù)期的“指標(biāo)異?!睂?dǎo)致的誤報警。對于可以簡單找到根因的異常,我們選擇直接在異常檢測階段進行消除,而不是導(dǎo)入根因分析系統(tǒng),來減少計算壓力。例如,程序化交易的流量異常下降,很可能是交易暫停,或者已經(jīng)達到預(yù)算等原因?qū)е碌摹?/p>

新的算法模型 預(yù)測模型

ARIMA(SARIMA)模型能夠較好地擬合大多數(shù)的時間序列,但在實際使用中有兩個比較突出的問題:一、對于不帶周期項的 ARIMA,其預(yù)測結(jié)果會有較為明顯的滯后現(xiàn)象,容易導(dǎo)致誤判;二、如果周期數(shù)過大,模型擬合的速度很慢,如對于小時粒度的數(shù)據(jù),當(dāng)周期為 168 時,其單線程擬合時間超過 5 分鐘。為了彌補 ARIMA 模型的不足,我們引入了 XGBoost、STL、SMA 和 EVT 等模型,不同的模型有各自的優(yōu)缺點和適合的應(yīng)用場景,下面我們先簡單介紹下這些模型。

XGBoost

XGBoost 是一個梯度提升決策樹(GBDT)的高效實現(xiàn),以極強的模型學(xué)習(xí)效果和性能著稱,可以解決 SARIMA 長周期預(yù)測性能無法滿足要求的問題。應(yīng)用到時間序列預(yù)測時,需要人工進行特征工程,我們選取了這么幾類特征:

第一類是時間序列的 lag(滯后算子),也就是要預(yù)測的時刻 T 的前面時刻的值,如 T-1,T-2…. lag 并不是越多越好,對于小時粒度的數(shù)據(jù),如果輸入是 5 周(840),那么約靠前的 lag 可能的價值就越低,我們根據(jù)周期的不同,選取的 lag 數(shù)也不一樣。如前序判斷為 24 周期,則選取 1~40 lag,和每 24 個周期選取同周期的 lag,如 t-48,t-96,等等。

第二類是時間特征,如星期幾、是否為周末、當(dāng)前小時等。

第三類是時間窗口統(tǒng)計特征,如最近 24 小時的平均值,工作日的平均值,周末的平均值,過去 7 天當(dāng)前小時的平均值,等等。

XGBoost 的擬合能力是非常強的,因此擺在我們面前很大的問題是如何避免過擬合,也就是雖然在訓(xùn)練數(shù)據(jù)上模型擬合地非常好,但在驗證數(shù)據(jù)上預(yù)測誤差較大。首先是從參數(shù)入手,包括使用 L2 正則,限制樹的深度、對訓(xùn)練數(shù)據(jù)進行采樣,預(yù)剪枝等參數(shù)都會起到一定的效果。此外,如果訓(xùn)練數(shù)據(jù)不足,過擬合是很難避免的,因此 XGBoost 只適用于時間序列歷史數(shù)據(jù)非常多的情況。

此外,另一種解決單一的時間序列訓(xùn)練數(shù)據(jù)量較少的方法,是通過對相同指標(biāo)不同維度的時間序列進行聚類,將相似的維度值對應(yīng)的時間序列放到一起訓(xùn)練模型,這樣可以增加訓(xùn)練數(shù)據(jù)量,緩解過擬合的問題。但這種方法擴展性較差,需要根據(jù)具體的指標(biāo)和維度對應(yīng)的時間序列的情況單獨調(diào)整。

STL

對于某些長周期的指標(biāo),我們面臨 SARIMA 擬合時間非常長,又沒有足夠的數(shù)據(jù)訓(xùn)練 XGboost 的情況,這時候時間序列分解派上用場了。時間序列分解是將時間序列分解為均值 (Mean) 、趨勢 (Trend) 、季節(jié) (Seasonality) 、循環(huán) (Cycle)、隨機誤差 (Random) 這幾個部分,分解方式通常包括乘法和加法。趨勢表示這個時間序列的長期趨勢,通常加上了均值,季節(jié)性(也叫周期性)指時間序列隨著時間的季節(jié)波動,通常是年、周、日等,循環(huán)指的是指標(biāo)在較長時間呈現(xiàn)出上下波動,通常會被合并到趨勢項中,稱作趨勢 - 循環(huán)項(trend-cycle)。

將時間序列的周期和趨勢分解開之后,我們可以通過更加簡單的模型,如 ARMA,去擬合趨勢,對于周期項,只需要簡單的重復(fù)即可,最后將趨勢的預(yù)測結(jié)果和周期相加即刻得到最終的預(yù)測結(jié)果。

6819c602-567f-11ed-a3b6-dac502259ad0.png

圖片來源于https://otexts.com/fpp2/stl.html

經(jīng)典的乘法和加法分解只能支持固定周期,且受歷史數(shù)據(jù)的異常點影響較大,STL(Seasonal and Trend decomposition using Loess) 分解則較好地解決了這兩種問題,我們選用 STL 分解結(jié)合 ARIMA 擬合趨勢的方法,較好地解決了長周期時間序列的預(yù)測問題。除了 STL 之外,還有 X11 和 SEATS 等分解方法。

SMA

在線上實際運行時,我們發(fā)現(xiàn)無論是 ARIMA、XGboost,還是 STL 分解,其模型訓(xùn)練時間都在分鐘級,預(yù)測時間都在秒級,對于那些時間序列數(shù)量巨大的業(yè)務(wù)指標(biāo)來說,顯然是非常不經(jīng)濟的。

同時我們發(fā)現(xiàn),這些業(yè)務(wù)指標(biāo)都有一個特點,對于多數(shù)時間序列,他們的模式是非常穩(wěn)定的,因此設(shè)計一種快速地算法解決這類問題可以極大地降低異常檢測的成本。

我們從常用的同環(huán)比出發(fā),設(shè)計一種結(jié)合周期的帶權(quán)移動平均方法(Seasonality Moving Average,簡稱 SMA),可以在毫秒級完成預(yù)測任務(wù)。預(yù)測值為同比(最近幾個周期同時刻)和環(huán)比(最近的數(shù)據(jù))的加權(quán)平均,以小時粒度指標(biāo),周期為 24 時為例:

6850f0e6-567f-11ed-a3b6-dac502259ad0.png

r(recent): 考慮最近的數(shù)據(jù)點數(shù)

α(alpha): 最近數(shù)據(jù)的權(quán)重

c(cycles): 考慮的周期數(shù)

o(offsets): 同周期前后偏離的點數(shù)

預(yù)測模型的評估

對于以上的時間序列預(yù)測模型,需要評估其預(yù)測的準(zhǔn)確程度,我們選用 SMAPE 作為預(yù)測模型準(zhǔn)確性的評估指標(biāo):

685bdd76-567f-11ed-a3b6-dac502259ad0.png

SMAPE 反映了模型擬合歷史數(shù)據(jù)的誤差,在模型擬合能力一定時,也反應(yīng)了該時間序列的可預(yù)測性,或者叫模式(pattern)的強弱。上面四種模型基本上可以滿足多數(shù)時間序列的異常檢測,但是對于周期性和模式都比較弱的時間序列來說,上述模型預(yù)測誤差都比較大,通常 SMAPE>70,會導(dǎo)致有較多的異常誤報。最初的做法是忽略這類時間序列的異常檢測,在一定程度上解決了異常檢測精準(zhǔn)率不足的問題,但也降低了召回率。

EVT

為了提升周期性和模式都比較弱的時間序列異常檢測的召回率,我們引入了極值理論(Extreme Value Theory,簡稱 EVT)。極值理論可以在數(shù)據(jù)分布位置的條件下,估計極值(極大值和極小值)的分布,從而估計正常數(shù)據(jù)合理的上下界。由于篇幅原因,本文不詳細(xì)描述具體算法實現(xiàn),大家感興趣可以閱讀論文(https://www.researchgate.net/publication/318919520)。論文作者考慮了概念漂移的問題,但沒有考慮數(shù)據(jù)的周期性。對于存在一定周期性的時間序列,我們在應(yīng)用極值理論模型的時候會先根據(jù)周期性進行數(shù)據(jù)采樣,對于同周期的數(shù)據(jù),采樣的概率更大,這樣更符合實際情況,對異常檢測的準(zhǔn)確率也更高。

模型對比

目前我們引入的模型有 ARIMA、XGBoost、STL-ARIMA、SMA、EVT 等,我們先來總結(jié)一下這些模型的特點:

686d0a56-567f-11ed-a3b6-dac502259ad0.png

模型選擇

隨著模型引入越來越多,我們需要一套方法為特定的時間序列選擇合適的模型。根據(jù)這些模型的特點,我們建立了一個決策樹,根據(jù)指標(biāo)的類型、周期性、歷史數(shù)據(jù)量、實時性、成本等因素,選擇合適的候選模型方案。

一個候選模型方案包括首選模型、若干個備選模型和保底模型。舉一個典型的例子,因為極低的成本,SMA 將被作為首選模型,首先用 SMA 擬合時間序列的歷史數(shù)據(jù),并給予設(shè)定好的驗證數(shù)據(jù)窗口,如最近 3 天,計算預(yù)測的 SMAPE 誤差,若 SMAPE 小于預(yù)設(shè)的閾值(如 50),則認(rèn)為 SMA 的擬合是有效的并將其作為模型選擇的結(jié)果,否則,將嘗試備選模型。假設(shè) ARIMA、XGBoost、STL-ARIMA 都可以做為備選模型,則分別嘗試對這三種模型進行擬合,在 SMAPE 小于閾值的模型中選擇最優(yōu)的作為模型選擇的結(jié)果。如果備選模型都不能滿足需求,則判斷有沒有保底模型,如果有保底模型(比如 EVT),則將其作為模型選擇的結(jié)果,否則這個時間序列被認(rèn)為是無效的。

總結(jié) & 未來展望

FreeWheel 業(yè)務(wù)異常檢測系統(tǒng)從上線至今已有兩年的時間,共接入了十幾種業(yè)務(wù)場景和幾十種指標(biāo),如針對不同客戶集成方式的流量監(jiān)控、程序化交易全生命周期的異常檢測及根因分析等,幫助 FreeWheel 和客戶主動發(fā)現(xiàn)廣告投放中的若干個 P1、P2 級別的嚴(yán)重問題,減少了客戶的損失,在維護客戶關(guān)系方面發(fā)揮了重大作用。下一步,我們會支持更多的業(yè)務(wù),尤其是針對 FreeWheel Marketplace 的業(yè)務(wù),發(fā)現(xiàn)和解決廣告需求側(cè)和供給側(cè)之間的匹配問題,以及客戶流量的廣告填充率不足的根因分析,幫助客戶提高廣告投放效果和利潤。

從算法和模型的角度,目前線上大多數(shù)模型都是基于時間序列預(yù)測、針對特定指標(biāo)和維度(時間序列)自動訓(xùn)練的小模型,其優(yōu)點是靈活性和擴展性好,成本低;缺點也比較明顯,不方便針對具體的業(yè)務(wù)優(yōu)化特征工程,包括多指標(biāo)協(xié)同、不同維度和標(biāo)簽之間的數(shù)據(jù)依賴等。因此,我們針對幾種特殊的業(yè)務(wù)場景,如程序化交易,開發(fā)了基于神經(jīng)網(wǎng)絡(luò)的大模型;除此之外,我們也對其他的無監(jiān)督、監(jiān)督和半監(jiān)督方法進行了研究和開發(fā),希望后面能分享給大家。

作者簡介

鐘雨,本科和研究生就讀于清華大學(xué),現(xiàn)任 FreeWheel 異常檢測團隊主任算法工程師,F(xiàn)reeWheel 業(yè)務(wù)異常檢測算法團隊負(fù)責(zé)人。曾供職于京東廣告數(shù)據(jù)團隊,Spark Contributor,具備豐富的大數(shù)據(jù)開發(fā)與調(diào)優(yōu)、數(shù)據(jù)挖掘和機器學(xué)習(xí)經(jīng)驗,在廣告大數(shù)據(jù)行業(yè)深耕多年。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標(biāo)題:從零開始構(gòu)建業(yè)務(wù)異常檢測系統(tǒng),F(xiàn)reeWheel面臨過的問題和解決方案

文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    機器學(xué)習(xí)異常檢測實戰(zhàn):用Isolation Forest快速構(gòu)建無標(biāo)簽異常檢測系統(tǒng)

    本文轉(zhuǎn)自:DeepHubIMBA無監(jiān)督異常檢測作為機器學(xué)習(xí)領(lǐng)域的重要分支,專門用于在缺乏標(biāo)記數(shù)據(jù)的環(huán)境中識別異常事件。本文深入探討
    的頭像 發(fā)表于 06-24 11:40 ?636次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>異常</b><b class='flag-5'>檢測</b>實戰(zhàn):用Isolation Forest快速構(gòu)建無標(biāo)簽<b class='flag-5'>異常</b><b class='flag-5'>檢測</b>系統(tǒng)

    提高IT運維效率,深度解讀京東云AIOps落地實踐異常檢測篇)

    基于深度學(xué)習(xí)對運維時序指標(biāo)進行異常檢測,快速發(fā)現(xiàn)線上業(yè)務(wù)問題 時間序列的異常檢測是實際應(yīng)用中的一
    的頭像 發(fā)表于 05-22 16:38 ?432次閱讀
    提高IT運維效率,深度解讀京東云AIOps落地<b class='flag-5'>實踐</b>(<b class='flag-5'>異常</b><b class='flag-5'>檢測</b>篇)

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】視覺實現(xiàn)的基礎(chǔ)算法的應(yīng)用

    : 一、機器人視覺:從理論到實踐 第7章詳細(xì)介紹了ROS2在機器視覺領(lǐng)域的應(yīng)用,涵蓋了相機標(biāo)定、OpenCV集成、視覺巡線、二維碼識別以及深度學(xué)習(xí)目標(biāo)
    發(fā)表于 05-03 19:41

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】機器人入門的引路書

    的限制和調(diào)控) 本書還有很多前沿技術(shù)項目的擴展 比如神經(jīng)網(wǎng)絡(luò)識別例程,機器學(xué)習(xí)圖像識別的原理,yolo圖像追蹤的原理 機器學(xué)習(xí)訓(xùn)練三大點: 先準(zhǔn)備一個基本的模型結(jié)構(gòu) 和訓(xùn)練時的反饋函
    發(fā)表于 04-30 01:05

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】+ROS2應(yīng)用案例

    的知識,還需要對ROS 2的節(jié)點通信和數(shù)據(jù)處理有一定的了解。通過實踐這一部分內(nèi)容,我掌握了如何在ROS 2中實現(xiàn)二維碼識別,這對于提高機器人的智能性和交互性具有重要意義。 地圖構(gòu)建:SLAM技術(shù)
    發(fā)表于 04-27 11:42

    【「# ROS 2智能機器人開發(fā)實踐」閱讀體驗】+內(nèi)容初識

    控制機器人沿著路徑行駛,同時實時檢測環(huán)境變化,調(diào)整路徑規(guī)劃和導(dǎo)航控制策略。書中提供了完整的導(dǎo)航系統(tǒng)搭建示例,包括代碼實現(xiàn)和參數(shù)配置,幫助讀者快速掌握導(dǎo)航系統(tǒng)的開發(fā)。 3. 案例分析與實踐 機器
    發(fā)表于 04-27 11:24

    如何設(shè)計基于AI的異常檢測解決方案

    汽車制造部門一直致力于在提高產(chǎn)品質(zhì)量和最小化運營費用之間實現(xiàn)平衡。基于 AI 的異常檢測是一種識別機器數(shù)據(jù)中的不規(guī)則模式以在潛在問題發(fā)生前預(yù)測這些問題的方法,它是對提高流程效率、減少停機時間和提高產(chǎn)品質(zhì)量感興趣的所有汽車制造商都
    的頭像 發(fā)表于 03-20 15:26 ?543次閱讀

    cmp在機器學(xué)習(xí)中的作用 如何使用cmp進行數(shù)據(jù)對比

    機器學(xué)習(xí)領(lǐng)域,"cmp"這個術(shù)語可能并不是一個常見的術(shù)語,它可能是指"比較"(comparison)的縮寫。 比較在機器學(xué)習(xí)中的作用 模型評估 :比較不同模型的性能是
    的頭像 發(fā)表于 12-17 09:35 ?882次閱讀

    什么是機器學(xué)習(xí)?通過機器學(xué)習(xí)方法能解決哪些問題?

    來源:Master編程樹“機器學(xué)習(xí)”最初的研究動機是讓計算機系統(tǒng)具有人的學(xué)習(xí)能力以便實現(xiàn)人工智能。因為沒有學(xué)習(xí)能力的系統(tǒng)很難被認(rèn)為是具有智能的。目前被廣泛采用的
    的頭像 發(fā)表于 11-16 01:07 ?965次閱讀
    什么是<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b>?通過<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b>方法能解決哪些問題?

    eda在機器學(xué)習(xí)中的應(yīng)用

    機器學(xué)習(xí)項目中,數(shù)據(jù)預(yù)處理和理解是成功構(gòu)建模型的關(guān)鍵。探索性數(shù)據(jù)分析(EDA)是這一過程中不可或缺的一部分。 1. 數(shù)據(jù)清洗 數(shù)據(jù)清洗 是機器學(xué)習(xí)中的首要任務(wù)之一。EDA可以幫助識別
    的頭像 發(fā)表于 11-13 10:42 ?902次閱讀

    基于機器學(xué)習(xí)的IWR6843AOP跌倒和姿態(tài)檢測實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于機器學(xué)習(xí)的IWR6843AOP跌倒和姿態(tài)檢測實現(xiàn).pdf》資料免費下載
    發(fā)表于 09-03 10:02 ?3次下載
    基于<b class='flag-5'>機器</b><b class='flag-5'>學(xué)習(xí)</b>的IWR6843AOP跌倒和姿態(tài)<b class='flag-5'>檢測</b>實現(xiàn)

    【「時間序列與機器學(xué)習(xí)」閱讀體驗】+ 鳥瞰這本書

    清晰,從時間序列分析的基礎(chǔ)理論出發(fā),逐步深入到機器學(xué)習(xí)算法在時間序列預(yù)測中的應(yīng)用,內(nèi)容全面,循序漸進。每一章都經(jīng)過精心設(shè)計,對理論知識進行了詳細(xì)的闡述,對實際案例進行了生動的展示,使讀者在理論與實踐
    發(fā)表于 08-12 11:28

    【「時間序列與機器學(xué)習(xí)」閱讀體驗】+ 簡單建議

    這本書以其系統(tǒng)性的框架和深入淺出的講解,為讀者繪制了一幅時間序列分析與機器學(xué)習(xí)融合應(yīng)用的宏偉藍圖。作者不僅扎實地構(gòu)建了時間序列分析的基礎(chǔ)知識,更巧妙地展示了機器學(xué)習(xí)如何在這一領(lǐng)域發(fā)揮巨
    發(fā)表于 08-12 11:21

    【《時間序列與機器學(xué)習(xí)》閱讀體驗】+ 了解時間序列

    收到《時間序列與機器學(xué)習(xí)》一書,彩色印刷,公式代碼清晰,非常精美。感謝作者,感謝電子發(fā)燒友提供了一個讓我學(xué)習(xí)時間序列及應(yīng)用的機會! 前言第一段描述了編寫背景: 由此可知,這是一本關(guān)于時間序列進行大數(shù)
    發(fā)表于 08-11 17:55

    【「時間序列與機器學(xué)習(xí)」閱讀體驗】全書概覽與時間序列概述

    如何通過根因分析技術(shù)獲得導(dǎo)致故障的維度和元素,包括基于時間序列異常檢測算法的根因分析、基于熵的根因分析、基于樹模型的根因分析、規(guī)則學(xué)習(xí)等。 ●第7章“智能運維的應(yīng)用場景”:介紹智能運維領(lǐng)域的應(yīng)用,包括
    發(fā)表于 08-07 23:03