首頁 > 軟體

詳解使用Python+Pycaret進行異常檢測

2022-03-04 13:01:14

概述

1.通過探索性異常檢測分析瞭解異常

2.設定 PyCaret 環境並嘗試準備任務的各種資料

3.比較效能並視覺化不同的異常檢測演演算法

介紹

異常檢測提供了在資料中發現模式、偏差和異常的途徑,這些模式、偏差和異常不限於模型的標準行為。異常檢測旨在確定資料中的異常情況。這些異常也被稱為資料集的異常值。

隨著資料呈指數級增長,分析資料並得出形成重要業務決策基礎的見解已成為一種普遍趨勢。我們不僅需要分析資料,還需要準確地解釋資料。找出異常並確定異常行為可以讓我們找到最佳解決方案。

異常檢測可以應用於各種領域。下面列出了其中一些。

  • 網路安全 — 監控網路流量並確定異常值
  • 欺詐檢測—— 可以識別信用卡欺詐
  • IT 部門 —發現並應對意外風險
  • 銀行業務—— 確定異常交易行為

許多機器學習演演算法可用於異常檢測,它在檢測和分類複雜資料集中的異常值方面起著至關重要的作用。

為什麼是PyCaret

PyCaret是一個開源、低程式碼的 Python 機器學習庫,支援多種功能,例如在幾行程式碼中就可以為部署建模的資料準備。

PyCaret 提供的一些的功能包括 -

  • 它是一個靈活的低程式碼庫,可以提高生產力,從而節省時間和精力。
  • PyCaret 是一個簡單易用的機器學習庫,使我們能夠在幾分鐘內執行 ML 任務。
  • PyCaret 庫允許自動化機器學習步驟,例如資料轉換、準備、超引數調整和標準模型比較。

學習目標

  • 執行探索性異常檢測分析
  • PyCaret 環境介紹
  • 建立和選擇最佳模型
  • 比較模型中的異常
  • 視覺化和解釋模型

PyCaret 安裝

在你的 jupyter notebook 中安裝最新版本的 Pycaret 並開始使用!

pip3 install pycaret

資料匯入

讓我們從 PyCaret 預先設定的資料集中匯入一個常見的異常檢測資料集,開始我們的動手專案。

匯入必要的庫

首先,匯入整個專案所需的必要庫。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

匯入資料集

from pycaret.datasets import get_data
all_datasets = get_data(‘index')

現在我們可以看到所有列出的具有預設機器學習任務的資料集。

我們只需要存取通過get_data()函數可以獲得的異常資料。

df = get_data(‘anomaly')
df.head()

探索和描述此資料集以查詢缺失值並獲得統計分佈。

df.describe()
df.info()

我們可以注意到資料集沒有任何缺失值。

探索性異常檢測分析

現在我們可以使用各種視覺化方法來解釋資料集中的異常值和異常。

我們可以從 Swarm 圖開始

Swarm 圖

使用melt()函數獲取資料集的Swarm圖。

plt.rcParams["figure.figsize"] = (10,8)
sns.swarmplot(x="variable", y="value", data=pd.melt(df))
plt.show()

這是我們所有列的Swarm圖

箱形圖

通過箱形圖視覺化資料集,這讓我們清楚地瞭解大部分資料所在的位置。

sns.boxplot(x="variable", y="value", data=pd.melt(df))
plt.show()

這些圖將幫助我們感知我們的模型是否能夠跟蹤它們。

散點圖

我們可以通過散點圖確定兩個特徵之間的線性關係。此處明確定義了Col1Col2之間的關係。

sns.scatterplot(data=df, x="Col1", y='Col2')

我們也可以嘗試不同的特徵。探索各種特徵如何相互關聯。

sns.scatterplot(data=df, x="Col3", y='Col4')

這些圖表明資料之間沒有線性關係。現在讓我們使用 Seaborn 成對分析所有特徵之間的關係。

sns.pairplot(df)

該成對圖確定了不同列之間的關係以及它們如何與直方圖一起以多種方式區分值。

通過這種方式,我們可以為我們的模型解釋多個維度的邊界。

df1 = df.melt(‘Col1', var_name='cols', value_name='vals')
g = sns.factorplot(x=」Col1", y=」vals」, hue='cols', data=df1)

異常檢測

為異常檢測設定 PyCaret 環境。為此,我們可以使用 Pycaret 的異常檢測模組,這是一個無監督的機器學習模組,用於識別資料中可能導致異常情況的異常值。

from pycaret.anomaly import *
setup = setup(df, session_id = 123)

指定對談 id,這會導致執行後進行處理。它會自動解釋多種型別的變數,並允許我們通過按ENTER進行確認。

觀察我們的資料集由 10 個特徵組成,每個特徵 1000 行。我們可以執行各種插補——數位和分類或歸一化資料。但是我們不需要在我們的資料集中進行這樣的轉換,所以讓我們繼續!

用幾行程式碼執行所有這些計算顯示了PyCaret庫的美妙之處。

模型建立

從模型庫中選擇最佳模型並建立用於異常檢測的模型。我們可以使用model()函數顯示模型列表。

models()

我們可以看到列出了許多流行的演演算法,例如隔離森林和 k 最近鄰。

隔離森林

使用create_model()函數建立隔離森林模型。隔離森林演演算法通過隨機選擇一個特徵,然後隨機選擇最大值和最小值之間的分割值來區分觀察。

iforest = create_model('iforest')
print(iforest)

因此,異常分數被確定為分離給定觀察所需的條件數量。

區域性異常因子

它是一種無監督異常檢測方法的演演算法,計算資料點相對於其鄰居的區域性密度偏差。

lof = create_model('lof')
print(lof)

K最近鄰

KNN 是一種非引數惰性學習演演算法,用於根據相似性和各種距離度量對資料進行分類。它提供了一種簡單而可靠的方法來檢測異常。

knn = create_model('knn')
print(knn)neighbours

比較模型中的異常

繼續我們的任務,我們現在可以觀察模型確定的異常情況。傳統上,我們必須手動設定不同的引數。

但是通過使用 PyCaret,我們可以通過分配的模型函數來分配結果。我們將從隔離森林模型開始。

iforest_results = assign_model(iforest)
iforest_results.head()

assign_model()函數返回一個檢測異常的資料框,異常值的存在標記為 1,非異常值標記為 0,以及異常分數。

同樣,我們也可以分配其他模型。所以可以進行比較。

lof_results = assign_model(lof)
lof_results.head()

比較上述模型我們可以看到,隔離森林已經將第二行視為異常,但區域性異常因子並未將其視為異常。但不同演演算法的異常得分不同。

對於 k 個最近鄰,預測分數與隔離森林的預測分數非常相似。

knn_results = assign_model(knn)
knn_results.head()

按每個模型過濾異常,這表明 iforest 模型將 1000 行中的 50 行視為異常。

iforest_anomaly=iforest_results[iforest_results['Anomaly']==1]
iforest_anomaly.shape

同樣,檢查LOF和KNN,我們可以看到它們都考慮了50個異常。必須使用不同的計算方法來查詢異常值。

lof_anomaly=lof_results[lof_results['Anomaly']==1]
lof_anomaly.shape
knn_anomaly=knn_results[knn_results['Anomaly']==1]
knn_anomaly.shape

根據以上結果,我們可以得出結論,1000 個異常中最有可能有 50 個。

驗證的一種方法是分析它們中的哪一個更適合於對模型標記為離群值的資料進行分析,並比較它們對測試資料的影響,或者進行分析,看看它們是否位於決策邊界內。

解釋和視覺化

視覺化是以創造性和獨立的方式解釋手頭資訊的最便捷方式。

讓我們首先從 PyCaret 庫外部建立視覺效果,這將突出 PyCaret 庫的好處,並使我們能夠了解plot_model函數如何更具互動性。

from yellowbrick.features import Manifold
dfr = iforest_results['Anomaly']
viz = Manifold(manifold="tsne")
viz.fit_transform(df, dfr)
viz.show()

我們可以看到,隔離森林在多個維度上確定的大多數異常通常來自不同的叢集。

現在在PyCaret 中為 KNN使用plot_model() 函數,它將為異常值建立一個 3D 圖,在其中我們可以看到為什麼某些特徵被視為異常。

plot_model(knn)

我們可以在任何維度上移動它以檢視和指出異常。這個 3D 繪圖有助於我們更好地檢視它。KNN 圖顯示大多數異常值是那些不屬於任何叢集的異常值。所以這很好!

其他兩個模型也可以這樣做。

plot_model(iforest)

很明顯,資料集被分成了四個不同的叢集,所以這些組之外的任何東西都肯定是異常的。

異常並不總是壞兆頭!有時它們在解釋結果或資料分析方面非常有用。這些可用於解決不同的資料科學用例。

接下來是第三種模式。線性離群因子,我們可以用一個不同的圖來實驗,創造一個2D圖。

我們可以放大這個二維圖來檢視哪些點被認為是異常值。

可以再次為配對圖建立另一個視覺效果,現在使用異常來檢視哪些點將被視為異常

sns.pairplot(lof_results, hue = "Anomaly")

最後,我們可以儲存模型。可以儲存任何合適的模型。這裡我們儲存了 iforest 模型。

save_model(iforest,'IForest_Model')

模型與範例資料和紀錄檔一起成功儲存。

章節附註

這標誌著我們關於異常檢測的動手專案的結束。我們已經討論了 PyCaret 庫的用例和實現,以及它如何用於異常檢測。PyCaret 是一個快速可靠的機器學習庫,通常被資料科學家用來解決複雜的業務問題。在建立可部署模型的同時,可以擴充套件該專案進行進一步的實驗和探索。

以上就是詳解使用Python+Pycaret進行異常檢測的詳細內容,更多關於Python Pycaret異常檢測的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com