操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    X3

    B1

    100

    那么我們能接觸到的原始數據就是:

    時間

    實體

    業務指標

    業務指標

    2018-01

    X

    A

    400

    2018-01

    X

    B

    200

    這個數據粒度是比較粗的,這就意味著許多落實到每筆發生業務的算法無法被實現,這主要是由于傳統行業的數據有較嚴的權限管控。

    可以看到,數據的主要維度有:時間、實體、業務指標。可以看做是一個時間序列數據。

    基本預處理后的數據

    為什么說是基本的預處理呢,因為這部分的預處理內容不會對數據信息進行刪減和改造,往往是擴展出不同維度出來。這些預處理后的數據也是傳統非現場審計的業務人員主要用來執行審計工作的數據:

    注意,缺失值的填補往往是具有業務意義的,所以最好和客戶業務人員對接一下。缺失值填補有三種方法:

    單指標算法

    首先從簡單的單指標算法開始講起吧!單指標算法顧名思義就是只涉及到一個指標的算法,這類算法使用的數據只有兩個維度:時間、實體。

    Z-Score 算法

    標準分數( Score,又稱z-score,中文稱為Z-分數或標準化值)在統計學中是一種無因次值,就是一種純數字標記,是借由從單一(原始)分數中減去母體的平均值,再依照母體(母集合)的標準差分割成不同的差距,按照z值公式,各個樣本在經過轉換后,通常在正、負五到六之間不等。

    目標

    我們通過和業務人員的交流發現,現在存在的大部分案例的表現都是極大極小的指標量(比如說某個月某業務發生實體的指標量遠超其它實體,那么這個實體多半就是出現問題了),所以尋找極大極小值就成了一個目標。這里面異常檢測的邏輯是:偏離樣本平均水平的數據我們認為是異常。其實這是異常檢測最基本的邏輯,基本上所有異常檢測的算法都是基于這個假設的。

    而尋找偏離均值的極大極小值也是一門不簡單的學問。設置最大最小閾值是一個簡單有效的方式,但是不智能。比如說我們觀察了某指標之后,發現歷史數據都是處在100以內的范圍,那么我們可以設置閾值到了100,超過100的數據我們就認為是一個異常值;看起來很美好,但是實際上指標數據都是動態變化的,比如說到了新的一年,該指標出現了集體增長,我們又需要不斷調整閾值嗎?所以,一個自適應的智能算法才能解決這個問題。

    理想很豐滿:一個簡單有效的算法

    如果沒有數據分析經驗的人可能看到定義就頭疼,但是我保證你一定學過正態分布吧!Z分數實際上就是假設數據大致符合正態分布,那么理論上95.44%的數據都會集中在±2倍標準差區間內,99.7%的數據都會集中在±3倍標準差區間內。那么我們就可以定義在±2倍標準差區間以外的數據可能是極大極小值,是有審計監測的價值的,而在±3倍標準差區間以外的數據尤其值得注意。

    而經過Z分數處理之后,數據會被scale為標準差為1、均值為0的數據,所以我們可以據此設計閾值,例如:

    看看這個算法,經典、簡單、有豐富的實踐基礎,有沒有!

    現實很骨感:超大值和超小值能直接把均值標準差拉偏特別多

    想象一份均值為1000的數據,突然塞入了一個的數據,均值和標準差會被直接拉高特別多,那么在計算Z分數時就會出現發現除了那個超大值,其他值都是正常值(但實際上可能還是有些小幅偏離平均水平的異常值有審計風險)。

    解決方案1:先用箱型圖剔除超大值和超小值。箱型圖其實也是一個簡單高效的異常監測方法,可以作為Z分數之前的極端異常值排查步驟,找到那些嚴重拉偏數據集統計特征的數據點。

    解決方案2:使用 Z-score算法替代Z-score算法。這個算法使用中位數替代均值來進行計算,有效的避免了超極端異常值對Z分數帶來的影響。(參考資料:)

    現實很骨感:超大型機構總是極大值的所屬者、超小型機構總是極小值的所屬者

    如果把所有數據一起進行Z分數的計算,你會發現被預警的實體總是一些大業務量的實體,因為這些實體的業務體量著實比較大,這是由各個實體本身的業務體量決定的。

    可能你們會想到,將每個實體自己的數據放在一起做Z分數,那么不就可以避免這種情況了嗎?確實如此,但是一個實體的數據量往往只有十幾二十個,參考價值肯定不如和其它實體放在一起比較。那么我們就想,有沒有什么方法可以對機構按體量進行分組呢?當然是有的,那么久引入了一個概念:

    對標組

    何謂對標組呢?就是給實體分組,找到和他們對標的其它實體。比如說,體量超大的可以作為一組,他們彼此就是對方的對標組。對標組的劃分方法可以分為以下幾種:

    從數據出發:使用聚類算法(如k-means)進行分組

    從機構關系出發:按照企業組織架構進行分組(比如A1和A2都屬于A這個父實體,那么可以把A1和A2放到一組里面)

    實現:Z分數

    Z-score的計算公式是,其中是數據集中的一個數據值,是數據集的均值,是數據集的標準差,而則是該數據值對應的Z分數。我們在項目中使用的是 Learn中模塊的scale函數excel算相關系數矩陣,以下是我找到的一些實現方式:

    Excel:How to a Z-Score Using Excel

    :

    df['z_score']?=?(df['x']?-?df['x'].mean())?/?df['x'].std()

    Learn:, or mean and

    Spark:

    : Z-

    實現:k-means

    K-means是一個經典的聚類算法在此就不贅述算法原理(延伸閱讀:: k-平均算法),我們在項目中使用的是 Learn中模塊的類,以下是我找到的一些實現方式:

    Learn:..

    Spark:K-means

    :

    注意點1:我們都知道k-means的聚類結果受到初始點的影響,在保守一些的行業,頻繁出現不同的聚類結果是經不住考驗的,所以客戶要求我們將聚類結果固定下來。由于固定初始點可能會導致聚類結果不準確,我們就使用多次聚類并投票決定使用哪種聚類結果,最多票的聚類結果。

    注意點2:如何確定k也是一個技術活,我們將k按照機構層級控制在一定范圍內,如一級機構k的取值范圍可以是3-5,然后再使用輪廓系數進行評價,選出最優的k。(延伸閱讀:: ()、..)

    算法效果

    奧卡姆剃刀原則告訴我們:"簡單的就是最好的。",Z分數算法作為單變量異常檢測中最常用的算法之一,即簡單又高效excel算相關系數矩陣,向不懂算法的業務人員來說也易于理解。實際上這個算法在我們項目中也是主力,業務人員認為這種算法適用范圍廣、效果清晰顯著。

    如果你正想找一個單變量異常檢測的算法,你一定要考慮一下Z分數。但是注意也不要以為這個算法可以通殺所有數據集,Z分數算法的應用往往受限于數據集,所以如何靈活使用各種技巧讓數據集適用于這個算法是難點。

    多指標算法

    與單指標算法不同,多指標算法的前提假設是一個或多個指標與指標有關系,我們找到這種關系之后,偏離該關系過多的點我們將之定義為。這樣的關系可以分為兩種,一種是回歸分析,另一種是簇分析。

    相關性分析

    應用多指標算法的基礎是一個或多個指標與指標有關系,如何證明這個關系是第一步。

    1. 業務關系

    最直觀且簡單的相關關系,就是業務人員總結的關系,這種關系是人為判斷的。舉個例子,根據邏輯和常識來說,菠菜銷售額和蔬菜銷售額是有一定關系的,因為一個是另一個的子集,并且菠菜銷售額占蔬菜銷售額的比例一般在時間維度上的變化是不大的。

    2.皮爾森相關系數

    在統計學中,皮爾森相關系數用于度量兩個變量X和Y之間的相關程度(線性相關),其值介于-1與1之間。

    可以看出,皮爾森相關系數對于線性相關的表現能夠很好的捕獲,但是對于非線性關系的相關性則表現較差。如果你的假設是線性關系,那么我推薦使用皮爾森相關系數來做相關性分析,以證明你的假設。因為皮爾森相關系數不僅具有標準的度量和上下限,更有計算簡單等優點。

    在我們這個項目中,皮爾森相關系數做出的貢獻是極大的,因為后期指標拆分之后量級有了指數的提升,皮爾森相關系數簡單計算的特性使得我們可以在短時間內快速找到兩兩指標之間的線性相關性。而且相關系數簡單的數學原理,也讓我們和業務人員解釋更加方便,相比之下,我們雖然引入了適用于更多情況的互信息值的指標,但是業務人員更喜歡用皮爾森相關系數來判斷相關關系。從中我們也可以看出來,算法并不是越復雜或者適用范圍越廣就越值得推崇,作為IT咨詢類的公司,我們在給出數字化解決方案的時候,往往要更多考慮客戶的切身需求,而不是一味地追求夠新、夠好。

    3. 互信息值

    線性關系清晰且簡單明了,可是數據不可能所有關系都是線性的,非線性的關系也是值得關注的,為了衡量指標與指標之間的非線性關系,我們引入了互信息( )這個概念?;バ畔碓从谛畔⒄?,是描述變量與變量之間的關系強弱的,這個關系不僅包括線性關系,還包括其他的非線性關系。通俗的說,互信息反映了一個變量變化另一個隨之變化的程度。(延伸閱讀:: 互信息)

    互信息值看起來是一個很棒的相關關系分析方式吧?其實也不然,互信息值的使用面臨兩個難題,第一就是計算過程復雜、第二就是結果是絕對量。相對復雜的原理和算法,給沒有信息論背景知識的PO或業務人員理解帶來了很大的不便。結果是絕對量也導致PO和業務人員不知道設置多少閾值來判斷哪些是關系比較強哪些是關系比較弱的指標對。

    為了解決絕對指標這個問題,我們使用了MIC系數,即最大信息系數 。與MI不同,MIC會對數據進行采樣,再進行計算,并且結果值是相對量。雖然計算復雜,但是MIC的結果易于比較,且結果更不容易受偶然因素或者影響,成為了除皮爾森相關系數外我們判斷相關關系的重要手段。

    實現:皮爾森相關系數

    兩個變量之間的皮爾遜相關系數定義為兩個變量之間的協方差和標準差的商:

    我們在項目中使用的是里面的corr函數和復雜的SQL查詢語句計算,以下是我找到的一些實現方法:

    Excel:函數

    :.corr()

    SciPy:scipy.stats.

    Spark:Basic :

    : the

    實現:互信息值

    一般地,兩個連續隨機變量 X 和 Y 的互信息可以定義為:

    我們在項目中使用的是 Learn里面的on方法計算的,我沒有找到其他一些計算方法,如果有可以在回復里補充~

    Learn:..on

    實現:最大信息系數MIC

    MIC的計算相對來說復雜許多,一言兩語沒有辦法講清楚,感興趣的朋友可以在這篇文章中稍微了解一下。MIC的實現也比較少,其中是做的比較好的一個,其提供了C、C++和的接口。

    :.MINE

    注意:中mic的計算是依賴于函數的,想要計算mic首先要執行之。具體使用方式可以參考文檔中的例子。

    線性模型 Model目標

    假設兩個指標已經證明了有線性相關性,那么使用線性模型來擬合當然合情合理。線性模型是簡單的回歸模型,在這里我們要使用它來完成對異常點的監測,這是一種基于回歸的異常檢測模型。這種方法的核心思想就是將數據擬合模型之后,找到偏離模型較多的點,這些點就是我們要找的不符合該線性關系的點。

    偏離的衡量:殘差

    對于回歸模型來說,衡量模型的表現常用的方法就是使用殘差,何為殘差?殘差在數理統計中是指實際觀察值與估計值(擬合值)之間的差?!皻埐睢碧N含了有關模型基本假設的重要信息。如果回歸模型正確的話, 我們可以將殘差看作誤差的觀測值。

    有了殘差這個工具并不會是一勞永逸了,因為殘差是絕對量,受量綱的影響比較大,那么對于較大的點和較小的點的殘差的公平對待是很難的,為了消除量綱的影響,我們要引入相對殘差的概念,何為相對殘差?相對殘差是一個概念,代表了去掉量綱比較殘差的一個指標,是殘差的衍生指標。我們對于不同的模型可能需要使用不同的相對殘差。在我們的實踐中,我們將相對殘差定義為:或。其實它們都代表了殘差和值的比值關系,反映這個殘差對于這個點的預測值影響的重要程度。

    多次建模

    因為統計或者實際發生異常業務的情況,會產生極大極小值,這些極大極小值不僅和其他點相離甚遠,甚至會將模型拉偏,因為這些點的存在,可能建模出來的線性模型中,一些正常的點擁有了大一些的殘差。如何解決這些極端值對建模過程帶來的影響成為了團隊需要解決的首要問題。

    其實有了單指標算法的經驗,我們第一反應就是先將極端異常值排除開來,然后再進行線性模型的建模。但是雙指標甚至是多指標的極端異常值,并不能通過箱型圖的方式排除,所以我們使用了多次建模的方式:第一次建模將拉偏模型的極端異常值用殘差排除,然后第二次建模才是真正的尋找一些沒那么夸張的異常點。

    那如何判斷第一次建模的時候哪些點是極端異常值呢?將所有點的相對殘差做一次Z-Score,找到±3σ以外的點,這些點就是極端異常值。這樣做避開了對于閾值判定的問題;如果模型沒有極端異常值,也不會因為做了這個步驟標記了不正確的極端異常值。

    所以整個建模過程如下所示:

    實現:線性回歸

    線性模型的基本實現是基于最小二乘法網上一抓一大把,在這里就不贅述了。我們在項目中使用的 learn中的模型,我找了一些實現方法如下:

    Learn:..

    Spark:

    :Add Trend Lines to a

    非線性關系模型推廣

    將線性模型換成曲線擬合回歸模型,使用相同的建模方式,即可捕獲非線性關系。我們在項目中,對于非線性的指標對,使用了隨機森林回歸模型替代線性模型。

    算法效果

    對于強線性相關的指標來說,線性模型這種異常檢測方法表現很好,并且線性模型可解釋性較高,也更符合人的直覺。但是實際上,在業務上沒有聯系的指標對往往都不是簡單的線性模型,即使使用了復雜的曲線擬合模型也能找到異常點,但在預警效果和可解釋性上都表現的較差。非線性關系的模型往往容易把握不好過擬合和欠擬合之間的關系,特別我們沒有確定的異常label,效果也很難衡量。有時候找到的點過多,有時候看起來和其他點偏離較多的點也抓不到。所以,我們認為線性關系之外的指標對,更適合用基于簇的異常檢測算法。

    局部異常因子算法 Local (LOF)

    提到異常檢測就不可能不提到LOF這個算法,這個算法可以說是基于密度的異常檢測最經典最具有普遍意義的算法。

    我們先來理解一下這個算法可以做什么,如上圖所示,對于C1集合的點,整體間距、密度、分散情況較為均勻一致,可以認為是同一簇;對于C2集合的點,同樣可認為是一簇。o1、o2點相對孤立,可以認為是異常點或離散點?,F在的問題是,如何實現算法的通用性,可以滿足C1和C2這種密度分散情況迥異的集合的異常點識別。LOF可以實現我們的目標。

    我本來打算把這個算法的實現詳細的講一下,因為這個算法太過經典了,但是我又不想讓整篇文章過于冗長讓讀者們失去興趣,所以如果有機會我會專門寫一篇LOF原理和實現的博客。如果你現在就想了解更多,可以看看這篇文章:LOF離群因子檢測算法及實現。

    目標

    其實我們的目標和上面算法的目標一樣,就是為了找到在簇與簇之間和之外的異常值。我們這里提到了簇,而在線性模型的時候卻說數據呈線性關系,你可能要覺得疑惑了。其實這兩個算法可以說是面向不同的目標的,有些指標對之間的關系并沒有函數關系,二維簇的形式存在。在形成簇的情況下,線性模型或者其他函數擬合的模型的表現都會很好,而LOF算法就是為這種情況設計的,會有較好的效果。

    LOF算法雖然是可以找到簇與簇之間和之外的異常點,但是這里你會發現簇之外的異常值其實和單指標算法的效果大部分是重疊的。所以這里LOF算法其實是為了找到那些隱藏在簇周圍的異常點。

    難點:怎么選擇K和閾值

    越是經典通用的算法,越是需要優秀的閾值設置辦法,算法之所以"通用",就是因為其有參數這個調控因子。然而LOF得分是一個相對量,LOF 計算結果對于多大的值定義為異常值沒有明確的規定。在一個平穩數據集中,可能 1.1 已經是一個異常值,而在另一個具有強烈數據波動的數據集中,即使 LOF 值為 2 可能仍是一個正常值。由于方法的局限性,數據集中的異常值界定可能存在差異所以我們面臨的問題是如何選擇一個好的k值和異常值閾值。

    想象一下,我們的目標是異常值的LOF值盡可能的與普通值的LOF值拉開差距,那么就需要我們LOF得分的集合的方差足夠大,這樣才能盡可能把普通和異常的差距拉大。所以我們不妨用一系列的k進行測試,然后找到使結果LOF分數方差最大的k。在我們的應用中,我們用的是k=[3, 10]。

    選擇到了最佳的k,那么又如何來確定LOF得分的閾值呢?其實有了上面算法的例子,我們很容易就可以聯想到使用統計方法來確定閾值:

    使用Z得分,三倍以外的作為異常值;

    使用四分位距的n倍作為閾值。

    實現

    因為這個算法很經典,所以我強烈建議有編程基礎的朋友按照算法的原理手動實現一遍,我曾經在課程練習上實現過一次,雖然說并不難,但是要做到利用矩陣計算提升運算效率是需要好好琢磨一番。在項目中我們使用的是 learn中的..。我試圖找到其在spark等分布式框架的穩定實現,但是沒有找到,我覺得有興趣的朋友可以試著自己實現以下。

    算法效果

    LOF的目標和效果可以說是一致的,我們的目標是找到那些簇周圍的異常值,而其確確實實找得到。想象在某個月份,某個指標在大多數實體中都有突升突降的情況發生,這種突升突降往往在單指標模型和線性模型的情況下被報出預警,而實際上有可能是政策上的一個調整,LOF算法則不會預警,反而那些沒有突升突降的實體可能會出現預警。所以LOF算法在這種情況的預警上是有很顯著效果的。

    可以預見的是,LOF算法不僅在雙指標上有這樣的表現,在單指標和在更高維數據上仍然有相當的效果,因為距離的度量在不同的維度下仍然有效。所以即使不是可視化的二維平面,我也強烈推薦你使用LOF來解決一些基于密度的異常值監測問題。

    總結

    異常檢測是一個很寬泛的主題,我沒有辦法在這篇文章里面覆蓋到所有的角落,我們在實際做這個項目的時候其實還用了一些規則性算法、一些類的算法,但是因為效果不穩定,和PO的預期也不相同,這里就不詳細說了。其實和線性模型是一樣的,核心思想都是將一個指標作為因變量而另一個作為自變量,用一個的函數去擬合。

    異常檢測同時也是個具體情況具體分析的應用場景,這篇文章并不是作為一篇介紹異常檢測技術的文章,而是一篇可以在你無計可施的時候可以為你提供思路上的幫助的文章,希望看到這篇博客的人可以在以后遇到這種問題的時候有這樣的經驗。

    附:參考書籍

    需要更多有關于異常檢測的幫助的話,Charu C. 的《 》是一本基本覆蓋了主流所有異常檢測算法的書,我們一致認為其可以作為異常檢測項目的參考書。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有