Scikit Learn - Deteksi Anomali

Di sini, kita akan mempelajari tentang apa itu deteksi anomali di Sklearn dan bagaimana penggunaannya dalam identifikasi titik data.

Deteksi anomali adalah teknik yang digunakan untuk mengidentifikasi titik data dalam dataset yang tidak cocok dengan data lainnya. Ini memiliki banyak aplikasi dalam bisnis seperti deteksi penipuan, deteksi intrusi, pemantauan kesehatan sistem, pengawasan, dan pemeliharaan prediktif. Anomali, yang juga disebut pencilan, dapat dibagi menjadi tiga kategori berikut -

  • Point anomalies - Ini terjadi ketika contoh data individu dianggap sebagai anomali terhadap sisa data.

  • Contextual anomalies- Jenis anomali semacam itu adalah spesifik konteks. Ini terjadi jika contoh data anomali dalam konteks tertentu.

  • Collective anomalies - Ini terjadi ketika kumpulan contoh data terkait adalah seluruh kumpulan data anomali daripada nilai individual.

Metode

Dua metode yaitu outlier detection dan novelty detectiondapat digunakan untuk deteksi anomali. Penting untuk melihat perbedaan di antara mereka.

Deteksi pencilan

Data pelatihan berisi pencilan yang jauh dari data lainnya. Pencilan seperti itu didefinisikan sebagai observasi. Itulah alasannya, penduga pendeteksi pencilan selalu berusaha menyesuaikan dengan wilayah yang memiliki data pelatihan paling terkonsentrasi sambil mengabaikan pengamatan yang menyimpang. Ini juga dikenal sebagai deteksi anomali tanpa pengawasan.

Deteksi baru

Ini berkaitan dengan pendeteksian pola yang tidak teramati dalam pengamatan baru yang tidak termasuk dalam data pelatihan. Di sini, data pelatihan tidak tercemar oleh pencilan. Ini juga dikenal sebagai deteksi anomali semi-supervised.

Ada sekumpulan alat ML, yang disediakan oleh scikit-learn, yang bisa digunakan untuk deteksi pencilan serta deteksi kebaruan. Alat-alat ini pertama kali mengimplementasikan pembelajaran objek dari data secara tanpa pengawasan dengan menggunakan metode fit () sebagai berikut:

estimator.fit(X_train)

Sekarang, pengamatan baru akan diurutkan sebagai inliers (labeled 1) atau outliers (labeled -1) dengan menggunakan metode predict () sebagai berikut -

estimator.fit(X_test)

Estimator akan terlebih dahulu menghitung fungsi penilaian mentah dan kemudian metode prediksi akan menggunakan nilai ambang pada fungsi penilaian mentah tersebut. Kita dapat mengakses fungsi penilaian mentah ini dengan bantuanscore_sample metode dan dapat mengontrol ambang dengan contamination parameter.

Kami juga bisa mendefinisikan decision_function metode yang mendefinisikan pencilan sebagai nilai negatif dan inlier sebagai nilai non-negatif.

estimator.decision_function(X_test)

Algoritme Sklearn untuk Deteksi Pencilan

Mari kita mulai dengan memahami apa itu amplop elips.

Pas dengan amplop elips

Algoritma ini mengasumsikan bahwa data reguler berasal dari distribusi yang diketahui seperti distribusi Gaussian. Untuk deteksi outlier, Scikit-learn menyediakan sebuah objek bernamacovariance.EllipticEnvelop.

Objek ini cocok dengan perkiraan kovarian yang kuat untuk data, dan dengan demikian, cocok dengan elips ke titik data pusat. Ini mengabaikan titik-titik di luar mode pusat.

Parameter

Tabel berikut berisi parameter yang digunakan oleh sklearn. covariance.EllipticEnvelop metode -

Sr Tidak Parameter & Deskripsi
1

store_precision - Boolean, opsional, default = True

Kami dapat menentukannya jika perkiraan presisi disimpan.

2

assume_centered - Boolean, opsional, default = False

Jika kita menetapkannya False, itu akan menghitung lokasi dan kovarian yang kuat secara langsung dengan bantuan algoritma FastMCD. Di sisi lain, jika disetel ke True, itu akan menghitung dukungan lokasi yang kuat dan covarian.

3

support_fraction - float in (0., 1.), opsional, default = Tidak ada

Parameter ini memberitahu metode berapa banyak proporsi poin yang akan disertakan dalam mendukung perkiraan MCD mentah.

4

contamination - float in (0., 1.), opsional, default = 0.1

Ini memberikan proporsi pencilan dalam kumpulan data.

5

random_state - int, instance RandomState atau Tidak Ada, opsional, default = tidak ada

Parameter ini mewakili seed dari bilangan acak semu yang dihasilkan yang digunakan saat mengacak data. Berikut adalah pilihannya -

  • int - Dalam hal ini, random_state adalah benih yang digunakan oleh generator bilangan acak.

  • RandomState instance- Dalam hal ini, random_state adalah generator bilangan acak.

  • None - Dalam hal ini, generator nomor acak adalah instance RandonState yang digunakan oleh np.random.

Atribut

Tabel berikut berisi atribut yang digunakan oleh sklearn. covariance.EllipticEnvelop metode -

Sr Tidak Atribut & Deskripsi
1

support_ - seperti larik, bentuk (n_sampel,)

Ini mewakili topeng pengamatan yang digunakan untuk menghitung perkiraan lokasi dan bentuk yang kuat.

2

location_ - seperti larik, bentuk (n_features)

Ini mengembalikan perkiraan lokasi kuat.

3

covariance_ - seperti larik, bentuk (n_features, n_features)

Ini mengembalikan matriks kovarians yang diperkirakan kuat.

4

precision_ - seperti larik, bentuk (n_features, n_features)

Ini mengembalikan matriks invers semu yang diperkirakan.

5

offset_ - mengapung

Ini digunakan untuk menentukan fungsi keputusan dari skor mentah. decision_function = score_samples -offset_

Implementation Example

import numpy as np^M
from sklearn.covariance import EllipticEnvelope^M
true_cov = np.array([[.5, .6],[.6, .4]])
X = np.random.RandomState(0).multivariate_normal(mean = [0, 0], cov=true_cov,size=500)
cov = EllipticEnvelope(random_state = 0).fit(X)^M
# Now we can use predict method. It will return 1 for an inlier and -1 for an outlier.
cov.predict([[0, 0],[2, 2]])

Output

array([ 1, -1])

Hutan Isolasi

Dalam kasus set data berdimensi tinggi, satu cara efisien untuk deteksi pencilan adalah dengan menggunakan forest acak. Scikit-learn menyediakanensemble.IsolationForestmetode yang mengisolasi pengamatan dengan memilih fitur secara acak. Setelah itu, secara acak memilih nilai antara nilai maksimum dan minimum dari fitur yang dipilih.

Di sini, jumlah pemisahan yang diperlukan untuk mengisolasi sampel setara dengan panjang jalur dari simpul akar ke simpul akhir.

Parameter

Tabel berikut berisi parameter yang digunakan oleh sklearn. ensemble.IsolationForest metode -

Sr Tidak Parameter & Deskripsi
1

n_estimators - int, opsional, default = 100

Ini mewakili jumlah penduga dasar dalam ansambel.

2

max_samples - int atau float, opsional, default = "auto"

Ini mewakili jumlah sampel yang akan diambil dari X untuk melatih setiap penduga dasar. Jika kita memilih int sebagai nilainya, itu akan menarik sampel max_samples. Jika kita memilih float sebagai nilainya, itu akan menarik sampel max_samples ∗ .shape [0]. Dan, jika kita memilih auto sebagai nilainya, itu akan menarik max_samples = min (256, n_samples).

3

support_fraction - float in (0., 1.), opsional, default = Tidak ada

Parameter ini memberitahu metode berapa banyak proporsi poin yang akan disertakan dalam mendukung perkiraan MCD mentah.

4

contamination - auto atau float, opsional, default = auto

Ini memberikan proporsi pencilan dalam kumpulan data. Jika kita set default yaitu auto, maka akan menentukan threshold seperti pada kertas aslinya. Jika diatur ke float, kisaran kontaminasi akan berada dalam kisaran [0,0.5].

5

random_state - int, instance RandomState atau Tidak Ada, opsional, default = tidak ada

Parameter ini mewakili seed dari bilangan acak semu yang dihasilkan yang digunakan saat mengacak data. Berikut adalah pilihannya -

  • int - Dalam hal ini, random_state adalah benih yang digunakan oleh generator bilangan acak.

  • RandomState instance- Dalam hal ini, random_state adalah generator bilangan acak.

  • None - Dalam hal ini, generator nomor acak adalah instance RandonState yang digunakan oleh np.random.

6

max_features - int atau float, opsional (default = 1.0)

Ini mewakili jumlah fitur yang akan diambil dari X untuk melatih setiap penduga dasar. Jika kita memilih int sebagai nilainya, itu akan menarik fitur max_features. Jika kita memilih float sebagai nilainya, itu akan menarik sampel max_features * X.shape [].

7

bootstrap - Boolean, opsional (default = False)

Opsi defaultnya adalah False yang berarti pengambilan sampel akan dilakukan tanpa penggantian. Dan di sisi lain, jika disetel ke True, berarti setiap pohon cocok di subset acak dari data pelatihan yang diambil sampelnya dengan penggantian.

8

n_jobs - int atau None, opsional (default = None)

Ini mewakili jumlah pekerjaan yang akan dijalankan secara paralel fit() dan predict() metode keduanya.

9

verbose - int, opsional (default = 0)

Parameter ini mengontrol verbositas proses pembangunan pohon.

10

warm_start - Bool, opsional (default = False)

Jika warm_start = true, kita dapat menggunakan kembali solusi panggilan sebelumnya agar sesuai dan dapat menambahkan lebih banyak estimator ke ensembel. Tapi jika disetel ke false, kita perlu menyesuaikan dengan hutan baru.

Atribut

Tabel berikut berisi atribut yang digunakan oleh sklearn. ensemble.IsolationForest metode -

Sr Tidak Atribut & Deskripsi
1

estimators_ - daftar DecisionTreeClassifier

Menyediakan koleksi dari semua sub-estimator yang dipasang.

2

max_samples_ - integer

Ini memberikan jumlah sebenarnya dari sampel yang digunakan.

3

offset_ - mengapung

Ini digunakan untuk menentukan fungsi keputusan dari skor mentah. decision_function = score_samples -offset_

Implementation Example

Skrip Python di bawah ini akan digunakan sklearn. ensemble.IsolationForest metode untuk menyesuaikan 10 pohon pada data yang diberikan

from sklearn.ensemble import IsolationForest
import numpy as np
X = np.array([[-1, -2], [-3, -3], [-3, -4], [0, 0], [-50, 60]])
OUTDClf = IsolationForest(n_estimators = 10)
OUTDclf.fit(X)

Output

IsolationForest(
   behaviour = 'old', bootstrap = False, contamination='legacy',
   max_features = 1.0, max_samples = 'auto', n_estimators = 10, n_jobs=None,
   random_state = None, verbose = 0
)

Faktor Pencilan Lokal

Algoritma Local Outlier Factor (LOF) adalah algoritma lain yang efisien untuk melakukan deteksi outlier pada data berdimensi tinggi. Scikit-learn menyediakanneighbors.LocalOutlierFactormetode yang menghitung skor, disebut faktor pencilan lokal, yang mencerminkan derajat anomitas pengamatan. Logika utama dari algoritma ini adalah untuk mendeteksi sampel yang memiliki kepadatan yang jauh lebih rendah daripada tetangganya. Itulah mengapa ini mengukur deviasi kepadatan lokal dari titik data yang diberikan dengan tetangganya.

Parameter

Tabel berikut berisi parameter yang digunakan oleh sklearn. neighbors.LocalOutlierFactor metode

Sr Tidak Parameter & Deskripsi
1

n_neighbors - int, opsional, default = 20

Ini mewakili jumlah tetangga yang digunakan secara default untuk kueri kneighbours. Semua sampel akan digunakan jika.

2

algorithm - opsional

Algoritme mana yang akan digunakan untuk menghitung tetangga terdekat.

  • Jika Anda memilih ball_tree, itu akan menggunakan algoritma BallTree.

  • Jika Anda memilih kd_tree, itu akan menggunakan algoritma KDTree.

  • Jika Anda memilih brute, itu akan menggunakan algoritma pencarian brute force.

  • Jika Anda memilih auto, itu akan menentukan algoritma yang paling sesuai berdasarkan nilai yang kita berikan ke metode fit ().

3

leaf_size - int, opsional, default = 30

Nilai parameter ini dapat mempengaruhi kecepatan konstruksi dan permintaan. Ini juga mempengaruhi memori yang dibutuhkan untuk menyimpan pohon. Parameter ini diteruskan ke algoritma BallTree atau KdTree.

4

contamination - auto atau float, opsional, default = auto

Ini memberikan proporsi pencilan dalam kumpulan data. Jika kita set default yaitu auto, maka akan menentukan threshold seperti pada kertas aslinya. Jika diatur ke float, kisaran kontaminasi akan berada dalam kisaran [0,0.5].

5

metric - string atau callable, default

Ini mewakili metrik yang digunakan untuk perhitungan jarak.

6

P - int, opsional (default = 2)

Ini adalah parameter untuk metrik Minkowski. P = 1 ekivalen dengan menggunakan jarak_ manhattan yaitu L1, sedangkan P = 2 ekivalen dengan menggunakan jarak_ euclidean yaitu L2.

7

novelty - Boolean, (default = False)

Secara default, algoritme LOF digunakan untuk deteksi outlier tetapi dapat digunakan untuk deteksi kebaruan jika kita menetapkan novelty = true.

8

n_jobs - int atau None, opsional (default = None)

Ini mewakili jumlah pekerjaan yang akan dijalankan secara paralel untuk metode fit () dan predict () keduanya.

Atribut

Tabel berikut berisi atribut yang digunakan oleh sklearn.neighbors.LocalOutlierFactor metode -

Sr Tidak Atribut & Deskripsi
1

negative_outlier_factor_ - larik numpy, bentuk (n_sampel,)

Memberikan LOF yang berlawanan dari sampel pelatihan.

2

n_neighbors_ - integer

Ini memberikan jumlah sebenarnya dari tetangga yang digunakan untuk kueri tetangga.

3

offset_ - mengapung

Ini digunakan untuk menentukan label biner dari skor mentah.

Implementation Example

Skrip Python yang diberikan di bawah ini akan digunakan sklearn.neighbors.LocalOutlierFactor metode untuk membangun kelas NeighboursClassifier dari array apa pun yang sesuai dengan kumpulan data kami

from sklearn.neighbors import NearestNeighbors
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
LOFneigh = NearestNeighbors(n_neighbors = 1, algorithm = "ball_tree",p=1)
LOFneigh.fit(samples)

Output

NearestNeighbors(
   algorithm = 'ball_tree', leaf_size = 30, metric='minkowski',
   metric_params = None, n_jobs = None, n_neighbors = 1, p = 1, radius = 1.0
)

Example

Sekarang, kita bisa bertanya dari pengklasifikasi yang dibangun ini adalah titik lemari ke [0.5, 1., 1.5] dengan menggunakan skrip python berikut -

print(neigh.kneighbors([[.5, 1., 1.5]])

Output

(array([[1.7]]), array([[1]], dtype = int64))

SVM Satu Kelas

SVM Satu-Kelas, yang diperkenalkan oleh Schölkopf et al., Adalah Deteksi Outlier tanpa pengawasan. Ini juga sangat efisien dalam data dimensi tinggi dan memperkirakan dukungan dari distribusi dimensi tinggi. Ini diterapkan diSupport Vector Machines modul di Sklearn.svm.OneClassSVMobyek. Untuk menentukan frontier, diperlukan kernel (yang paling banyak digunakan adalah RBF) dan parameter skalar.

Untuk pemahaman yang lebih baik, mari menyesuaikan data kita dengan svm.OneClassSVM objek -

Contoh

from sklearn.svm import OneClassSVM
X = [[0], [0.89], [0.90], [0.91], [1]]
OSVMclf = OneClassSVM(gamma = 'scale').fit(X)

Sekarang, kita bisa mendapatkan score_samples untuk input data sebagai berikut -

OSVMclf.score_samples(X)

Keluaran

array([1.12218594, 1.58645126, 1.58673086, 1.58645127, 1.55713767])