Deteksi Anomali Time Series dengan Python


10

Saya perlu menerapkan deteksi anomali pada beberapa dataset time-series. Saya belum pernah melakukan ini sebelumnya dan mengharapkan saran. Saya sangat nyaman dengan python, jadi saya lebih suka solusi diimplementasikan di dalamnya (sebagian besar kode saya adalah python untuk bagian lain dari pekerjaan saya).

Deskripsi data: Ini adalah data deret waktu bulanan yang baru saja mulai dikumpulkan dalam 2 tahun terakhir ini (yaitu hanya periode waktu 24-36). Pada dasarnya, ada beberapa metrik yang dipantau setiap bulan untuk beberapa klien.

time_period    client    metric    score
01-2013        client1   metric1   100
02-2013        client1   metric1   119
01-2013        client2   metric1   50
02-2013        client2   metric2   500
...

Inilah yang saya pikirkan: tarik data ke dalam kerangka data (panda), lalu hitung rata-rata 6 bulan bergulir untuk setiap pasangan klien / metrik. Jika nilai periode waktu saat ini melebihi beberapa ambang batas berdasarkan rata-rata 6 bulan, maka angkat bendera. Masalahnya agak sederhana. Saya hanya ingin memastikan saya mengambil pendekatan yang solid.

Setiap saran untuk menyempurnakan ide ini sedikit akan sangat dihargai. Saya tahu pertanyaannya agak abstrak, dan saya minta maaf untuk itu.


Saya tidak tahu cara python, tetapi pertanyaan ini penuh dengan ide-ide mengenai pendekatan umum: stats.stackexchange.com/questions/26688/…
rapaio

pypi.org/project/anomaly-detection Ini dibangun di perpustakaan untuk deteksi anomali dalam python yang mirip dengan deteksi anomali twitter. Karena kode deteksi anomali twitter dalam bahasa R. Masalah Anda adalah anomali kontekstual. Auto.arima model juga
saravanan saminathan

Jawaban:


1

Saya pikir pendekatan yang mirip dengan kontrol proses statistik , dengan diagram kontrol dll. Mungkin berguna di sini.


Saya akan membaca ini. Apakah metode ini baik untuk deret waktu dengan sejumlah kecil data (yaitu 24 bulan)?
Eric Miller

selesai membaca sebagian besar. Menurut metode ini, saya harus menghitung standar deviasi ke-3 untuk deret waktu dan grafik garis pada batas-batas ini. Jika suatu nilai pernah melampaui batas-batas ini, maka tandai. Ini adalah metode yang saya pertimbangkan.
Eric Miller

1

Ada banyak pilihan untuk deteksi anomali, dari standar deviasi menggunakan fungsi deviasi Pandas std, hingga metode Bayesian dan banyak metode pembelajaran mesin di antaranya seperti: pengelompokan, SVM, Proses Gaussian, jaringan saraf.

Lihatlah tutorial ini: https://www.datascience.com/blog/python-anomaly-detection

Dari perspektif Bayesian saya merekomendasikan Facebook Nabi. Ini memberikan hasil yang sangat canggih tanpa perlu menjadi ahli deret waktu. Ini memiliki opsi untuk bekerja pada bulan, hari dll, dan "interval ketidakpastian" membantu dengan anomali.

Akhirnya, saya merekomendasikan blog Uber ini tentang penggunaan Neural nets (LSTM) untuk deteksi anomali, memiliki wawasan yang sangat bagus: https://eng.uber.com/neural-networks/


0

Jika Anda bersedia mengasumsikan bahwa dataset Anda terdistribusi secara normal, maka Anda dapat memperkirakan kuantil dari distribusi ini dan melihat apakah itu berada di luar, misalnya 95%, 80%, dll. Saya tidak terlalu terbiasa dengan pustaka Python tapi saya yakin sudah ada fungsi yang dibangun untuk itu.


Ada tren naik untuk sebagian besar klien. Saya tidak yakin Anda bisa menyebut data secara acak.
Eric Miller

2
Maka tidak dalam hal ini. Saya percaya metode di bawah saya dan metode Anda akan bekerja dengan baik dalam situasi ini. Saya melakukan sesuatu yang mirip dengan ini sebelumnya: ambil rata-rata bergerak periode X bergulir, kurangi nilai metrik saat ini dari rata-rata bergerak. Temukan batas deviasi standar (atau gunakan input subjektif jika Anda kebetulan tahu dalam skenario ini) dari sisa ini dan apa pun di atas atau di bawah batas ini dapat dianggap anomali. Metode ini akan bekerja dengan baik jika klien tiba-tiba melihat peningkatan skor.
Kevin Pei
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.