檢測異常值的4種方法和R語言時間序列分解異常檢測
全文鏈接:http://tecdat.cn/?p=3232?
原文出處:拓端數(shù)據(jù)部落公眾號
檢測異常值的4種方法和R語言時間序列分解異常檢測
什么是異常值?
異常值是與其他觀測值有顯著差異的數(shù)據(jù)點(diǎn)。異常值會顯著扭曲特征分布和ML工作,因此我們需要觀察并形成處理它們的策略。
異常值是如何出現(xiàn)的?
這種觀察的出現(xiàn)可能是由以下原因引起的:
測量方法的差異,例如,傳感器的靈敏度發(fā)生了變化;
實(shí)驗(yàn)誤差,其中異常值可能是數(shù)據(jù)收集過程中錯誤的結(jié)果;
引入新方法;
數(shù)據(jù)收集階段或數(shù)據(jù)處理過程中的錯誤;
或觀測值中方差的指示符。
根據(jù)異常值的性質(zhì),您可以保留它們或排除它們,例如,在實(shí)驗(yàn)錯誤的情況下,您希望刪除它們。
異常值的類型有哪些?
有 3 種類型的異常值:
全局:也稱為點(diǎn)異常值。這一觀察結(jié)果遠(yuǎn)遠(yuǎn)超出了整個數(shù)據(jù)集的范圍。例如:在一個班級中,所有學(xué)生的年齡都是相同的,但有一個關(guān)于500歲學(xué)生的記錄。

2. 條件:根據(jù)上下文,觀察樣本被認(rèn)為是異常的。例如,由于全球經(jīng)濟(jì)危機(jī),一個國家的經(jīng)濟(jì)表現(xiàn)急劇下降,一段時間內(nèi)較低的利率成為常態(tài)。
?

3. 集合:一組彼此接近且具有接近異常值的觀測值。如果點(diǎn)的子集作為聚合值與整個數(shù)據(jù)集顯著偏離,但單個數(shù)據(jù)點(diǎn)的值本身在上下文或全局意義上都不是異常的:

為什么識別異常值很重要?
機(jī)器學(xué)習(xí)算法對值的范圍和分布很敏感。異常值可能會誤導(dǎo) ML 模型,導(dǎo)致訓(xùn)練時間延長、準(zhǔn)確性降低,最終導(dǎo)致結(jié)果更差。但是,并非所有ML工作都受到異常值的影響,對于某些算法,您可以安全地忽略它們。
異常值敏感算法:線性回歸、邏輯回歸、支持向量機(jī)
異常免疫算法:所有基于樹或復(fù)雜的算法
在業(yè)務(wù)方面,您應(yīng)該了解為什么存在異常值,并且您可以將其刪除。例如,如果您有一個表示人身高的要素,并且其中一個觀測值包含一個字符串,而不是一個字符串,其奇怪值如 = “abc cm”,并且由于高度不能包含此類值,因此可以安全地將其刪除。
如何檢測異常值?
您可以通過使用不同類型的視覺效果輕松發(fā)現(xiàn)異常值:
箱線圖

以下是箱線圖顯示的內(nèi)容:
中位數(shù)是位于排名序列中心的元素的值。請注意,中位數(shù)受異常值的影響較小,因此在中心顯示的是中位數(shù),而不是算術(shù)平均值。
前四分位數(shù)(Q3 或 75%)是分?jǐn)?shù),只有 25% 的值高于該分?jǐn)?shù)。下四分位數(shù)(Q1 或 25%)是低于該值的值,只有 25% 的值。
四分位間距 (IQR) 是 75% 和 25% 四分位數(shù)之間的差值。在此范圍內(nèi)有 50% 的值。例如,如果范圍很窄,則子組的成員在評估中是一致的。如果它是寬泛的,那么就沒有同質(zhì)的意見。
基于上述情況,您通??梢詸z測到高于“25% 百分位減去 1.5 x IQR”或低于“75% 百分位加 1.5 x IQR”的異常值,如上圖所示。
2. 直方圖

直方圖將數(shù)值數(shù)據(jù)聚合到稱為條柱的均勻間隔組中,并顯示每個條柱中值出現(xiàn)的頻率。條形圖是使用數(shù)字字段或百分比/比率字段創(chuàng)建的。直方圖有助于回答以下問題:值的分布是什么,它們在數(shù)據(jù)集中出現(xiàn)的頻率如何?
通過增加和減少條柱的數(shù)量,您可以影響數(shù)據(jù)分析的方式。雖然數(shù)據(jù)本身不會更改,但其外觀可能會更改。選擇正確數(shù)量的條柱對于正確解釋數(shù)據(jù)中的模式非常重要。太少的條柱可以隱藏一些模式,太多的條柱會夸大小的、可接受的數(shù)據(jù)更改的價值。正確的條柱數(shù)量將揭示在使用箱線圖時不可見的模式。
3.?散點(diǎn)圖

散點(diǎn)圖顯示兩個變量之間集合元素的分布。一個獨(dú)立參數(shù)的值沿 X 軸繪制,第二個從屬參數(shù)的值沿 Y 軸繪制。
散點(diǎn)圖上顯示的模式可用于查看不同類型的相關(guān)性。從點(diǎn)的一般聚類/相關(guān)線中顯著移除的點(diǎn)稱為異常值。
4.?Z 得分

z 得分也可以稱為標(biāo)準(zhǔn)分?jǐn)?shù),用于表示數(shù)據(jù)相對于均值的分布。此分?jǐn)?shù)表示低于或高于給定總體的標(biāo)準(zhǔn)差數(shù)。
z 的值可以在鐘形曲線上看到。其中 Z 得分的范圍從 -3 個標(biāo)準(zhǔn)差(正態(tài)分布曲線的最左邊角)到 +3 個標(biāo)準(zhǔn)差(正態(tài)分布曲線的最右邊角)。在大多數(shù)情況下,大于或小于 -+3 的值被標(biāo)識為異常值。
如何處理異常值?
在數(shù)據(jù)集中檢測到異常值后,您需要執(zhí)行以下 3 類操作:
刪除異常值。通常,如果您對數(shù)據(jù)應(yīng)該落在哪個范圍內(nèi)有很好的了解,例如人們的年齡,則可以刪除異常值,您可以安全地刪除超出該范圍的值。
更改異常值的值(例如,將值替換為平均值或最大值,例如90%百分位)
保留它。例如,如果 20%-40% 的數(shù)據(jù)是異常值,則不應(yīng)將其視為異常值,而應(yīng)進(jìn)一步研究它。
案例研究
我們最近有一個很棒的機(jī)會與一位客戶合作,要求構(gòu)建一個適合他們需求的異常檢測算法。業(yè)務(wù)目標(biāo)是準(zhǔn)確地檢測各種營銷數(shù)據(jù)的異常情況,這些數(shù)據(jù)包括跨多個客戶和Web源數(shù)千個時間序列的網(wǎng)站操作和營銷反饋。異常檢測算法,該算法基于時間并可從一個到多個時間序列進(jìn)行擴(kuò)展。
我們與許多教授數(shù)據(jù)科學(xué)的客戶合作,并利用我們的專業(yè)知識加速業(yè)務(wù)發(fā)展。
我們的客戶遇到了一個具有挑戰(zhàn)性的問題:按時間順序檢測每日或每周數(shù)據(jù)的時間序列異常。異常表示異常事件,可能是營銷域中的Web流量增加或IT域中的故障服務(wù)器。無論如何,標(biāo)記這些不尋常的事件確保業(yè)務(wù)順利運(yùn)行非常重要。其中一個挑戰(zhàn)是客戶處理的不是一個時間序列,而是需要針對這些極端事件進(jìn)行分析。
anomalize
這里有四個簡單步驟的工作要點(diǎn)。
第1步:安裝
install.packages("tidyverse")
第2步:加載
library(tidyverse)
第3步:收集時間序列數(shù)據(jù)
tidyverse\_cran\_downloads
##?#?A?tibble:?6,375?x?3
##?#?Groups:?package?\[15\]
##?date?count?package
##
##?1?2017-01-01?873.?tidyr
##?2?2017-01-02?1840.?tidyr
##?3?2017-01-03?2495.?tidyr
##?4?2017-01-04?2906.?tidyr
##?5?2017-01-05?2847.?tidyr
##?6?2017-01-06?2756.?tidyr
##?7?2017-01-07?1439.?tidyr
##?8?2017-01-08?1556.?tidyr
##?9?2017-01-09?3678.?tidyr
##?10?2017-01-10?7086.?tidyr
##?#?...?with?6,365?more?rows
第4步:異常化
使用功能及時發(fā)現(xiàn)異常情況。


異常檢測工作流程
其中包括:
用時間序列分解
用檢測異常
異常下限和上限轉(zhuǎn)換
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
PYTHON中用PROPHET模型對天氣時間序列進(jìn)行預(yù)測與異常檢測
左右滑動查看更多
01

02

03

04

時間序列分解
第一步是使用時間序列分解?!坝?jì)數(shù)”列被分解為“觀察”,“季節(jié)”,“趨勢”和“剩余”列。時間序列分解的默認(rèn)值是method = "stl",使用平滑器進(jìn)行季節(jié)性分解。
##?#?A?time?tibble:?6,375?x?6
##?#?Index:?date
##?#?Groups:?package?\[15\]
##?package?date?observed?season?trend?remainder
##
##?1?tidyr?2017-01-01?873.?-2761.?5053.?-1418.
##?2?tidyr?2017-01-02?1840.?901.?5047.?-4108.
##?3?tidyr?2017-01-03?2495.?1460.?5041.?-4006.
##?4?tidyr?2017-01-04?2906.?1430.?5035.?-3559.
##?5?tidyr?2017-01-05?2847.?1239.?5029.?-3421.
##?6?tidyr?2017-01-06?2756.?367.?5024.?-2635.
##?7?tidyr?2017-01-07?1439.?-2635.?5018.?-944.
##?8?tidyr?2017-01-08?1556.?-2761.?5012.?-695.
##?9?tidyr?2017-01-09?3678.?901.?5006.?-2229.
##?10?tidyr?2017-01-10?7086.?1460.?5000.?626.
##?#?...?with?6,365?more?rows

frequency并trend自動為您選擇。此外,可以通過輸入基于時間的周期(例如“1周”或“2個季度”)來更改選擇,可以確定有多少觀察屬于時間跨度。
異常檢測
下一步是對分解的數(shù)據(jù)執(zhí)行異常檢測。產(chǎn)生了三個新列:“remainder\_l1”(下限),“remainder\_l2”(上限)和“異?!保ㄊ?否標(biāo)志)。默認(rèn)方法是method = "iqr",在檢測異常時快速且相對準(zhǔn)確。
##?#?Groups:?package?\[15\]
##?package?date?observed?season?trend?remainder?remainder_l1
##
##?1?tidyr?2017-01-01?873.?-2761.?5053.?-1418.?-3748.
##?2?tidyr?2017-01-02?1840.?901.?5047.?-4108.?-3748.
##?3?tidyr?2017-01-03?2495.?1460.?5041.?-4006.?-3748.
##?4?tidyr?2017-01-04?2906.?1430.?5035.?-3559.?-3748.
##?5?tidyr?2017-01-05?2847.?1239.?5029.?-3421.?-3748.
##?6?tidyr?2017-01-06?2756.?367.?5024.?-2635.?-3748.
##?7?tidyr?2017-01-07?1439.?-2635.?5018.?-944.?-3748.
##?8?tidyr?2017-01-08?1556.?-2761.?5012.?-695.?-3748.
##?9?tidyr?2017-01-09?3678.?901.?5006.?-2229.?-3748.
##?10?tidyr?2017-01-10?7086.?1460.?5000.?626.?-3748.
##?#?...?with?6,365?more?rows,?and?2?more?variables:?remainder_l2?,
##?#?anomaly

現(xiàn)在嘗試另一個繪圖功能。它只適用于單個時間序列?!凹竟?jié)”消除每周的季節(jié)性。趨勢是平滑的。最后,檢測最重要的異常值。
tidyverse\_cran\_downloads?%>%
time_decompose(count,?method?=?"stl",?frequency?=?"auto",?trend?=?"auto")?%>%
anomalize(remainder,?method?=?"iqr",?alpha?=?0.05,?max_anoms?=?0.2)?%>%
plot\_anomaly\_decomposition()?+

異常下限和上限
最后一步是圍繞“觀察”值創(chuàng)建下限和上限。創(chuàng)建了兩個新列:“recomposed\_l1”(下限)和“recomposed\_l2”(上限)。
##?#?A?time?tibble:?6,375?x?11
##?#?Index:?date
##?#?Groups:?package?\[15\]
##?package?date?observed?season?trend?remainder?remainder_l1
##
##?1?tidyr?2017-01-01?873.?-2761.?5053.?-1418.?-3748.
##?2?tidyr?2017-01-02?1840.?901.?5047.?-4108.?-3748.
##?3?tidyr?2017-01-03?2495.?1460.?5041.?-4006.?-3748.
##?4?tidyr?2017-01-04?2906.?1430.?5035.?-3559.?-3748.
##?5?tidyr?2017-01-05?2847.?1239.?5029.?-3421.?-3748.
##?6?tidyr?2017-01-06?2756.?367.?5024.?-2635.?-3748.
##?7?tidyr?2017-01-07?1439.?-2635.?5018.?-944.?-3748.
##?8?tidyr?2017-01-08?1556.?-2761.?5012.?-695.?-3748.
##?9?tidyr?2017-01-09?3678.?901.?5006.?-2229.?-3748.
##?10?tidyr?2017-01-10?7086.?1460.?5000.?626.?-3748.
##?#?...?with?6,365?more?rows,?and?4?more?variables:?remainder_l2?,
##?#?anomaly?,?recomposed\_l1?,?recomposed\_l2

讓我們看一下“l(fā)ubridate”數(shù)據(jù)。我們可以plot\_anomalies()和設(shè)置time\_recomposed = TRUE。此功能適用于單個和分組數(shù)據(jù)。
time_decompose(count,?method?=?"stl",?frequency?=?"auto",?trend?=?"auto")?%>%
anomalize(remainder,?method?=?"iqr",?alpha?=?0.05,?max_anoms?=?0.2)?%>%
time_recompose()?%>%
#?繪制異常分解
plot\_anomalies(time\_recomposed?=?TRUE)?+
ggtitle("Lubridate?Downloads:?Anomalies?Detected")
預(yù)測
forecast是在執(zhí)行預(yù)測之前有效收集異常值的好方法。它使用基于STL的離群值檢測方法。它非???,因?yàn)樽疃嘤袃纱蔚鷣泶_定異常值帶。
結(jié)論
R軟件非常有效地用于檢測異常的許多傳統(tǒng)預(yù)測時間序列。但是,速度是一個問題,特別是在嘗試擴(kuò)展到多個時間序列時。
我們從中了解到所有軟件包的最佳組合:
分解方法:我們包括兩個時間序列分解方法:( "stl"使用Loess的傳統(tǒng)季節(jié)分解)和"twitter"(使用中間跨度的季節(jié)分解)。
異常檢測方法:我們包括兩種異常檢測方法:( "iqr"使用類似于3X IQR的方法forecast::tsoutliers())和"gesd"(使用Twitter使用的GESD方法AnomalyDetection)。
有問題歡迎下方留言!

點(diǎn)擊文末“閱讀原文”
獲取全文完整代碼數(shù)據(jù)資料。
本文選自《R語言時間序列分解和異常檢測方法應(yīng)用案例》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
R語言指數(shù)平滑法holt-winters分析谷歌Google Analytics博客用戶訪問時間序列數(shù)據(jù)
R語言O(shè)utliers異常值檢測方法比較
PYTHON中用PROPHET模型對天氣時間序列進(jìn)行預(yù)測與異常檢測
R語言用LOESS(局部加權(quán)回歸)季節(jié)趨勢分解(STL)進(jìn)行時間序列異常檢測
matlab使用分位數(shù)隨機(jī)森林(QRF)回歸樹檢測異常值
(數(shù)據(jù)挖掘)如何用大數(shù)據(jù)做用戶異常行為分析
R語言異常值檢測方法比較
時間序列分解和異常檢測方法應(yīng)用案例
matlab使用hampel濾波,去除異常值
Matlab中的偏最小二乘法(PLS)回歸模型,離群點(diǎn)檢測和變量選擇
R語言離群值處理分析
R語言線性回歸和時間序列分析北京房價影響因素可視化案例
R語言分布滯后線性和非線性模型(DLNM)分析空氣污染(臭氧)、溫度對死亡率時間序列數(shù)據(jù)的影響
Python面板時間序列數(shù)據(jù)預(yù)測:格蘭杰因果關(guān)系檢驗(yàn)Granger causality test藥品銷售實(shí)例與可視化
R語言從經(jīng)濟(jì)時間序列中用HP濾波器,小波濾波和經(jīng)驗(yàn)?zāi)B(tài)分解等提取周期性成分分析
R語言計(jì)量經(jīng)濟(jì)學(xué):工具變量法(兩階段最小二乘法2SLS)線性模型分析人均食品消費(fèi)時間序列數(shù)據(jù)和回歸診斷
R語言用標(biāo)準(zhǔn)最小二乘OLS,廣義相加模型GAM?,樣條函數(shù)進(jìn)行邏輯回歸LOGISTIC分類
R語言中實(shí)現(xiàn)廣義相加模型GAM和普通最小二乘(OLS)回歸
R語言中的偏最小二乘回歸PLS-DA
R語言中的偏最小二乘PLS回歸算法
偏最小二乘回歸(PLSR)和主成分回歸(PCR)
R語言用線性模型進(jìn)行預(yù)測:加權(quán)泊松回歸,普通最小二乘,加權(quán)負(fù)二項(xiàng)式模型,多重插補(bǔ)缺失值
R語言計(jì)量經(jīng)濟(jì)學(xué):虛擬變量(啞變量)在線性回歸模型中的應(yīng)用
PYTHON用時變馬爾可夫區(qū)制轉(zhuǎn)換(MRS)自回歸模型分析經(jīng)濟(jì)時間序列
R語言使用ARIMAX預(yù)測失業(yè)率經(jīng)濟(jì)時間序列數(shù)據(jù)
R語言經(jīng)濟(jì)學(xué):動態(tài)模型平均(DMA)、動態(tài)模型選擇(DMS)預(yù)測原油時間序列價格
R語言用向量自回歸(VAR)進(jìn)行經(jīng)濟(jì)數(shù)據(jù)脈沖響應(yīng)研究分析
R語言從經(jīng)濟(jì)時間序列中用HP濾波器,小波濾波和經(jīng)驗(yàn)?zāi)B(tài)分解等提取周期性成分分析
R語言計(jì)量經(jīng)濟(jì)學(xué)與有時間序列模式的機(jī)器學(xué)習(xí)預(yù)測
R語言使用灰色關(guān)聯(lián)分析(Grey Relation Analysis,GRA)中國經(jīng)濟(jì)社會發(fā)展指標(biāo)
R語言用向量自回歸(VAR)進(jìn)行經(jīng)濟(jì)數(shù)據(jù)脈沖響應(yīng)研究分析
R語言從經(jīng)濟(jì)時間序列中用小波濾波和經(jīng)驗(yàn)?zāi)J椒纸獾忍崛≈芷谛猿煞址治?/p>
R語言用向量自回歸(VAR)進(jìn)行經(jīng)濟(jì)數(shù)據(jù)脈沖響應(yīng)研究分析
R語言實(shí)現(xiàn)偏最小二乘回歸法 partial least squares (PLS)回歸
R語言中的block Gibbs吉布斯采樣貝葉斯多元線性回歸
R語言Lasso回歸模型變量選擇和糖尿病發(fā)展預(yù)測模型
R語言實(shí)現(xiàn)貝葉斯分位數(shù)回歸、lasso和自適應(yīng)lasso貝葉斯分位數(shù)回歸分析
Python貝葉斯回歸分析住房負(fù)擔(dān)能力數(shù)據(jù)集
Python用PyMC3實(shí)現(xiàn)貝葉斯線性回歸模型
?