熱線電話:13121318867

登錄
首頁精彩閱讀R異常值檢測
R異常值檢測
2016-01-10
收藏

R異常值檢測

正常值 vs.異常值

異常值的定義是:和大多數樣本表現不一致的個體。

數據噪聲:就好比當你收聽一個信號不好的無線廣播時,你會聽到許多背景噪聲。

異常值和正常值圖中橙色區域的數據圍繞某個值上下波動并且沒有表現出確定的趨勢,我們稱之為白噪聲數據。

圖中紅圈中的數據是噪聲數據嗎?抑或是某種未發現趨勢的峰值呢?

一個好的算法可以檢測出異常值并將其剔除掉,AnomalyDetection包種的AnomalyDetectionTs函數可以很好地實現這個功能。

異常值檢測實例

本文案例采用的是維基百科的數據,我們可以利用R通過API接口下載某個特定詞項每日瀏覽量的數據。

本文的研究數據是:英文詞語fifa從2013-02-22至今每日瀏覽量的數據。

異常值檢測

應用上文提到的算法,我們可以繪制出原始的時間序列圖并標注出異常值的位置。異常值位置算法解析

算法中的參數max_anoms=0.01表示在最終結果中標注出0.01%的異常值;而參數direction=”pos”則表示檢測高于平均水平的異常值。

如下表所示,該算法不僅可以檢測出異常值,還會返回對應的平均水平值。

檢測異常值如果你想了解更多的關于該算法的數學原理,你可以搜索Generalized ESD和時間序列分解。

發現異常情況異常情況

上圖中黑色直線表示該時期內的瀏覽量呈遞減趨勢。有趣的是,位于直線上方用黑圈標注出來的兩個點并沒有被判定為異常值,這是因為該異常值檢測算法主要關注的是趨勢變化時的情況。黑圈中的點還是處于下降趨勢中,所以沒有被判定為異常值。相反地,2014-07-12的瀏覽量突然上升,突破前期的下降趨勢,因此該點被判定為異常值。

新聞核實

詞語fifa瀏覽量的異常值與國際足聯的新聞消息息息相關,第一組異常值出現在2014年世界杯期間(2014年6 – 7月),而第二組異常值出現在國際足聯丑聞事件期間(2015年5月)。

洛杉磯時報中展示了國際足聯丑聞事件進展的時間表,正如我們算法所檢測出的異常值,該丑聞事件有兩個重要的時間點:5月27日和28日。

附錄(R Code)

install.packages(“devtools”)

devtools::install_github(“petermeissner/wikipediatrend”)

devtools::install_github(“twitter/AnomalyDetection”)

install.packages(“Rcpp”)

library(wikipediatrend) ## Library containing API wikipedia access

library(AnomalyDetection)

library(ggplot2)

Download wiki webpage “fifa”

fifa_data = wp_trend(“fifa”, from=”2013-03-18”, lang = “en”)

Plotting data

ggplot(fifa_data, aes(x=date, y=count, color=count)) + geom_line()

Convert date variable

fifa_data<img alt=”date=as.POSIXct(fift_data”data-cke-saved-src=”https://chart.googleapis.com/chart?cht=tx&chl=date%20%3D%20as.POSIXct(fifa_data”>date)

Keep only desiered variables (date & page views)

fifa_data=fifa_data[,c(1,2)]

Apply anomaly detection

data_anomaly = AnomalyDetectionTs(fifa_data, max_anoms=0.01, direction=”pos”, plot=TRUE, e_value = T)

jpeg(“03_fifa_wikipedia_term_page_views_anomaly_detection.jpg”, width= 8.25, height= 5.25, units=”in”, res=500, pointsize = 4)

Plot original data + anomalies points

data_anomaly$plot

dev.off()

Calculate deviation percentage from the expected value

data_anomalyperc_diff=round(100*(data_anomalyexpected_value-data_anomalyanoms)/data_anomalyexpected_value)

Plot anomalies table

anomaly_table=data_anomaly$anoms

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢