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.
Jawaban:
Saya pikir pendekatan yang mirip dengan kontrol proses statistik , dengan diagram kontrol dll. Mungkin berguna di sini.
sumber
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/
sumber
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.
sumber