DataWhale組隊(duì)學(xué)習(xí)之異常檢測(cè)task01

參考datawhale開源組織:https://github.com/datawhalechina/team-learning-data-mining/blob/master/AnomalyDetection/%E4%B8%80%E3%80%81%E6%A6%82%E8%BF%B0.md

1 什么是異常檢測(cè)悼嫉?

異常檢測(cè)(Outlier Detection)炫惩,顧名思義悯辙,是識(shí)別與正常數(shù)據(jù)不同的數(shù)據(jù),與預(yù)期行為差異大的數(shù)據(jù)犀变。

識(shí)別如信用卡欺詐惠桃,工業(yè)生產(chǎn)異常弟灼,網(wǎng)絡(luò)流里的異常(網(wǎng)絡(luò)侵入)等問題嗽上,針對(duì)的是少數(shù)的事件。

異常檢測(cè): 數(shù)據(jù)不平衡下的分類問題

1.1 異常的類別

點(diǎn)異常: 指的是少數(shù)個(gè)體實(shí)例是異常的伊约,大多數(shù)個(gè)體實(shí)例是正常的姚淆,例如正常人與病人的健康指標(biāo);
上下文異常:又稱上下文異常屡律,指的是在特定情境下個(gè)體實(shí)例是異常的腌逢,在其他情境下都是正常的,例如在特定時(shí)間下的溫度突然上升或下降超埋,在特定場(chǎng)景中的快速信用卡交易搏讶;
群體異常:指的是在群體集合中的個(gè)體實(shí)例出現(xiàn)異常的情況,而該個(gè)體實(shí)例自身可能不是異常霍殴,例如社交網(wǎng)絡(luò)中虛假賬號(hào)形成的集合作為群體異常子集媒惕,但子集中的個(gè)體節(jié)點(diǎn)可能與真實(shí)賬號(hào)一樣正常。

1.2 異常檢測(cè)任務(wù)分類

有監(jiān)督:訓(xùn)練集的正例和反例均有標(biāo)簽
無監(jiān)督:訓(xùn)練集無標(biāo)簽
半監(jiān)督:在訓(xùn)練集中只有單一類別(正常實(shí)例)的實(shí)例来庭,沒有異常實(shí)例參與訓(xùn)練

1.3 異常檢測(cè)場(chǎng)景

故障檢測(cè)
物聯(lián)網(wǎng)異常檢測(cè)
欺詐檢測(cè)
工業(yè)異常檢測(cè)
時(shí)間序列異常檢測(cè)
視頻異常檢測(cè)
日志異常檢測(cè)
醫(yī)療日常檢測(cè)
網(wǎng)絡(luò)入侵檢測(cè)

2妒蔚、異常檢測(cè)常用方法

2.1 傳統(tǒng)方法

2.1.1 基于統(tǒng)計(jì)學(xué)的方法

統(tǒng)計(jì)學(xué)方法對(duì)數(shù)據(jù)的正常性做出假定。它們假定正常的數(shù)據(jù)對(duì)象由一個(gè)統(tǒng)計(jì)模型產(chǎn)生月弛,而不遵守該模型的數(shù)據(jù)是異常點(diǎn)肴盏。統(tǒng)計(jì)學(xué)方法的有效性高度依賴于對(duì)給定數(shù)據(jù)所做的統(tǒng)計(jì)模型假定是否成立。

異常檢測(cè)的統(tǒng)計(jì)學(xué)方法的一般思想是:學(xué)習(xí)一個(gè)擬合給定數(shù)據(jù)集的生成模型尊搬,然后識(shí)別該模型低概率區(qū)域中的對(duì)象叁鉴,把它們作為異常點(diǎn)土涝。

即利用統(tǒng)計(jì)學(xué)方法建立一個(gè)模型佛寿,然后考慮對(duì)象有多大可能符合該模型。


image.png

2.1.2 線性模型

典型的如PCA方法但壮,Principle Component Analysis是主成分分析冀泻,簡(jiǎn)稱PCA。它的應(yīng)用場(chǎng)景是對(duì)數(shù)據(jù)集進(jìn)行降維蜡饵。降維后的數(shù)據(jù)能夠最大程度地保留原始數(shù)據(jù)的特征(以數(shù)據(jù)協(xié)方差為衡量標(biāo)準(zhǔn))弹渔。
PCA的原理是通過構(gòu)造一個(gè)新的特征空間,把原數(shù)據(jù)映射到這個(gè)新的低維空間里溯祸。PCA可以提高數(shù)據(jù)的計(jì)算性能肢专,并且緩解"高維災(zāi)難"舞肆。

2.1.3 基于相似度的方法

這類算法適用于數(shù)據(jù)點(diǎn)的聚集程度高、離群點(diǎn)較少的情況博杖。同時(shí)椿胯,因?yàn)橄嗨贫人惴ㄍǔP枰獙?duì)每一個(gè)數(shù)據(jù)分別進(jìn)行相應(yīng)計(jì)算,所以這類算法通常計(jì)算量大剃根,不太適用于數(shù)據(jù)量大哩盲、維度高的數(shù)據(jù)。
??基于相似度的檢測(cè)方法大致可以分為三類:

基于集群(簇)的檢測(cè)狈醉,如DBSCAN等聚類算法。
??聚類算法是將數(shù)據(jù)點(diǎn)劃分為一個(gè)個(gè)相對(duì)密集的“簇”,而那些不能被歸為某個(gè)簇的點(diǎn)唆貌,則被視作離群點(diǎn)缸浦。這類算法對(duì)簇個(gè)數(shù)的選擇高度敏感,數(shù)量選擇不當(dāng)可能造成較多正常值被劃為離群點(diǎn)或成小簇的離群點(diǎn)被歸為正常渣慕。因此對(duì)于每一個(gè)數(shù)據(jù)集需要設(shè)置特定的參數(shù)十兢,才可以保證聚類的效果,在數(shù)據(jù)集之間的通用性較差摇庙。聚類的主要目的通常是為了尋找成簇的數(shù)據(jù)旱物,而將異常值和噪聲一同作為無價(jià)值的數(shù)據(jù)而忽略或丟棄,在專門的異常點(diǎn)檢測(cè)中使用較少卫袒。
??聚類算法的優(yōu)缺點(diǎn):
(1)能夠較好發(fā)現(xiàn)小簇的異常宵呛;
(2)通常用于簇的發(fā)現(xiàn),而對(duì)異常值采取丟棄處理夕凝,對(duì)異常值的處理不夠友好宝穗;
(3)產(chǎn)生的離群點(diǎn)集和它們的得分可能非常依賴所用的簇的個(gè)數(shù)和數(shù)據(jù)中離群點(diǎn)的存在性;
(4)聚類算法產(chǎn)生的簇的質(zhì)量對(duì)該算法產(chǎn)生的離群點(diǎn)的質(zhì)量影響非常大码秉。
基于距離的度量逮矛,如k近鄰算法。
??k近鄰算法的基本思路是對(duì)每一個(gè)點(diǎn)转砖,計(jì)算其與最近k個(gè)相鄰點(diǎn)的距離须鼎,通過距離的大小來判斷它是否為離群點(diǎn)。在這里府蔗,離群距離大小對(duì)k的取值高度敏感晋控。如果k太小(例如1)姓赤,則少量的鄰近離群點(diǎn)可能導(dǎo)致較低的離群點(diǎn)得分赡译;如果k太大,則點(diǎn)數(shù)少于k的簇中所有的對(duì)象可能都成了離群點(diǎn)不铆。為了使模型更加穩(wěn)定蝌焚,距離值的計(jì)算通常使用k個(gè)最近鄰的平均距離裹唆。
??k近鄰算法的優(yōu)缺點(diǎn):
(1)簡(jiǎn)單;
(2)基于鄰近度的方法需要O(m2)時(shí)間只洒,大數(shù)據(jù)集不適用品腹;
(3)對(duì)參數(shù)的選擇敏感;
(4)不能處理具有不同密度區(qū)域的數(shù)據(jù)集红碑,因?yàn)樗褂萌珠撝滴杩裕荒芸紤]這種密度的變化。
基于密度的度量析珊,如LOF(局部離群因子)算法羡鸥。
??局部離群因子(LOF)算法與k近鄰類似,不同的是它以相對(duì)于其鄰居的局部密度偏差而不是距離來進(jìn)行度量忠寻。它將相鄰點(diǎn)之間的距離進(jìn)一步轉(zhuǎn)化為“鄰域”惧浴,從而得到鄰域中點(diǎn)的數(shù)量(即密度),認(rèn)為密度遠(yuǎn)低于其鄰居的樣本為異常值奕剃。
LOF(局部離群因子)算法的優(yōu)缺點(diǎn):
(1)給出了對(duì)離群度的定量度量衷旅;
(2)能夠很好地處理不同密度區(qū)域的數(shù)據(jù);
(3)對(duì)參數(shù)的選擇敏感纵朋。
2.2 集成方法
集成是提高數(shù)據(jù)挖掘算法精度的常用方法柿顶。集成方法將多個(gè)算法或多個(gè)基檢測(cè)器的輸出結(jié)合起來。其基本思想是一些算法在某些子集上表現(xiàn)很好操软,一些算法在其他子集上表現(xiàn)很好嘁锯,然后集成起來使得輸出更加魯棒。集成方法與基于子空間方法有著天然的相似性聂薪,子空間與不同的點(diǎn)集相關(guān)家乘,而集成方法使用基檢測(cè)器來探索不同維度的子集,將這些基學(xué)習(xí)器集合起來藏澳。

常用的集成方法有Feature bagging仁锯,孤立森林等。

**feature bagging **:

與bagging法類似翔悠,只是對(duì)象是feature业崖。

孤立森林:

孤立森林假設(shè)我們用一個(gè)隨機(jī)超平面來切割數(shù)據(jù)空間,切一次可以生成兩個(gè)子空間凉驻。然后我們繼續(xù)用隨機(jī)超平面來切割每個(gè)子空間并循環(huán)腻要,直到每個(gè)子空間只有一個(gè)數(shù)據(jù)點(diǎn)為止复罐。直觀上來講涝登,那些具有高密度的簇需要被切很多次才會(huì)將其分離,而那些低密度的點(diǎn)很快就被單獨(dú)分配到一個(gè)子空間了效诅。孤立森林認(rèn)為這些很快被孤立的點(diǎn)就是異常點(diǎn)胀滚。

用四個(gè)樣本做簡(jiǎn)單直觀的理解趟济,d是最早被孤立出來的,所以d最有可能是異常咽笼。


image.png

2.3 機(jī)器學(xué)習(xí)

在有標(biāo)簽的情況下顷编,可以使用樹模型(gbdt,xgboost等)進(jìn)行分類,缺點(diǎn)是異常檢測(cè)場(chǎng)景下數(shù)據(jù)標(biāo)簽是不均衡的剑刑,但是利用機(jī)器學(xué)習(xí)算法的好處是可以構(gòu)造不同特征媳纬。

3、異常檢測(cè)常用開源庫

Scikit-learn:

Scikit-learn是一個(gè)Python語言的開源機(jī)器學(xué)習(xí)庫施掏。它具有各種分類钮惠,回歸和聚類算法。也包含了一些異常檢測(cè)算法七芭,例如LOF和孤立森林素挽。

官網(wǎng):https://scikit-learn.org/stable/

PyOD

*Python Outlier Detection(PyOD)**是當(dāng)下最流行的Python異常檢測(cè)工具庫,其主要亮點(diǎn)包括:

包括近20種常見的異常檢測(cè)算法狸驳,比如經(jīng)典的LOF/LOCI/ABOD以及最新的深度學(xué)習(xí)如對(duì)抗生成模型(GAN)和集成異常檢測(cè)(outlier ensemble)
支持不同版本的Python:包括2.7和3.5+预明;支持多種操作系統(tǒng):windows,macOS和Linux
簡(jiǎn)單易用且一致的API耙箍,只需要幾行代碼就可以完成異常檢測(cè)撰糠,方便評(píng)估大量算法
使用JIT和并行化(parallelization)進(jìn)行優(yōu)化,加速算法運(yùn)行及擴(kuò)展性(scalability)辩昆,可以處理大量數(shù)據(jù)
? ——https://zhuanlan.zhihu.com/p/58313521

對(duì)于PyOD簡(jiǎn)單的嘗試

from __future__ import division
from __future__ import print_function

import os
import sys

sys.path.append(
    os.path.abspath(os.path.join(os.path.dirname("__file__"), '..')))

from pyod.models.lof import LOF
from pyod.utils.data import generate_data
from pyod.utils.data import evaluate_print
from pyod.utils.example import visualize

if __name__ == "__main__":
    contamination = 0.1  
    n_train = 200  
    n_test = 100  

    X_train, y_train, X_test, y_test = \
        generate_data(n_train=n_train,
                      n_test=n_test,
                      n_features=2,
                      contamination=contamination,
                      random_state=42)

    clf_name = 'LOF'
    clf = LOF()
    clf.fit(X_train)

   
    y_train_pred = clf.labels_  
    y_train_scores = clf.decision_scores_  

    y_test_pred = clf.predict(X_test)  
    y_test_scores = clf.decision_function(X_test)  

    print("\nOn Training Data:")
    evaluate_print(clf_name, y_train, y_train_scores)
    print("\nOn Test Data:")
    evaluate_print(clf_name, y_test, y_test_scores)

    visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,
              y_test_pred, show_figure=True, save_figure=False)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窗慎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卤材,更是在濱河造成了極大的恐慌遮斥,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扇丛,死亡現(xiàn)場(chǎng)離奇詭異术吗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帆精,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門较屿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卓练,你說我怎么就攤上這事隘蝎。” “怎么了襟企?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵嘱么,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我顽悼,道長(zhǎng)曼振,這世上最難降的妖魔是什么几迄? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮冰评,結(jié)果婚禮上映胁,老公的妹妹穿的比我還像新娘。我一直安慰自己甲雅,他們只是感情好解孙,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抛人,像睡著了一般妆距。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上函匕,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天娱据,我揣著相機(jī)與錄音,去河邊找鬼盅惜。 笑死中剩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抒寂。 我是一名探鬼主播结啼,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屈芜!你這毒婦竟也來了郊愧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤井佑,失蹤者是張志新(化名)和其女友劉穎属铁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躬翁,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焦蘑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盒发。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片例嘱。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宁舰,靈堂內(nèi)的尸體忽然破棺而出拼卵,到底是詐尸還是另有隱情,我是刑警寧澤蛮艰,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布腋腮,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏低葫。R本人自食惡果不足惜详羡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一仍律、第九天 我趴在偏房一處隱蔽的房頂上張望嘿悬。 院中可真熱鬧,春花似錦水泉、人聲如沸善涨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钢拧。三九已至,卻和暖如春炕横,著一層夾襖步出監(jiān)牢的瞬間源内,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工份殿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膜钓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓卿嘲,卻偏偏與公主長(zhǎng)得像颂斜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拾枣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容