Latar Belakang Masalah: Saya sedang mengerjakan proyek yang melibatkan file log mirip dengan yang ditemukan di ruang pemantauan TI (untuk pemahaman terbaik saya tentang ruang TI). File log ini adalah data deret waktu, disusun dalam ratusan / ribuan baris berbagai parameter. Setiap parameter bersifat numerik (float) dan ada nilai non-sepele / non-kesalahan untuk setiap titik waktu. Tugas saya adalah memonitor file-file log tersebut untuk pendeteksian anomali (paku, jatuh, pola yang tidak biasa dengan beberapa parameter tidak sinkron, aneh 1/2 / dll. Perilaku turunan, dll.).
Pada tugas yang sama, saya telah mencoba Splunk dengan Prelert, tetapi saya sedang mengeksplorasi opsi open-source saat ini.
Kendala: Saya membatasi diri untuk Python karena saya tahu betul, dan ingin menunda beralih ke R dan kurva belajar yang terkait. Kecuali jika tampaknya ada dukungan luar biasa untuk R (atau bahasa / perangkat lunak lain), saya ingin tetap menggunakan Python untuk tugas ini.
Juga, saya bekerja di lingkungan Windows untuk saat ini. Saya ingin melanjutkan ke sandbox di Windows pada file log berukuran kecil tetapi dapat pindah ke lingkungan Linux jika diperlukan.
Sumber: Saya telah memeriksa yang berikut dengan jalan buntu sebagai hasilnya:
Python atau R untuk mengimplementasikan algoritma pembelajaran mesin untuk deteksi penipuan . Beberapa info di sini bermanfaat, tetapi sayangnya, saya kesulitan menemukan paket yang tepat karena:
"AnomalyDetection" Twitter ada di R, dan saya ingin tetap menggunakan Python. Selanjutnya, port Python pyculiarity tampaknya menyebabkan masalah dalam menerapkan di lingkungan Windows untuk saya.
Skyline, upaya saya berikutnya, tampaknya telah cukup banyak dihentikan (dari masalah github ). Saya belum merenungkan hal ini, mengingat betapa sedikitnya dukungan yang ada untuk online.
scikit-belajar saya masih menjelajahi, tetapi ini tampaknya jauh lebih manual. Pendekatan down-in-the-weeds OK bagi saya, tetapi latar belakang saya dalam alat pembelajaran lemah, jadi ingin sesuatu seperti kotak hitam untuk aspek teknis seperti algoritma, mirip dengan Splunk + Prelert.
Definisi Masalah dan Pertanyaan: Saya mencari perangkat lunak open-source yang dapat membantu saya dengan mengotomatisasi proses deteksi anomali dari file log time-series dalam Python melalui paket atau pustaka.
- Apakah hal-hal seperti itu ada untuk membantu tugas langsung saya, atau mereka imajiner dalam pikiran saya?
- Adakah yang bisa membantu dengan langkah konkret untuk membantu saya mencapai tujuan saya, termasuk dasar-dasar atau konsep latar belakang?
- Apakah ini komunitas StackExchange terbaik untuk ditanyakan, atau apakah Stats, Math, atau bahkan Security atau Stackoverflow adalah pilihan yang lebih baik?
EDIT [2015-07-23] Perhatikan bahwa pembaruan terbaru untuk kemewahan sepertinya diperbaiki untuk lingkungan Windows! Saya belum mengkonfirmasi, tetapi harus menjadi alat lain yang bermanfaat bagi masyarakat.
EDIT [2016-01-19] Pembaruan kecil. Saya tidak punya waktu untuk mengerjakan ini dan melakukan penelitian, tetapi saya mengambil langkah mundur untuk memahami dasar-dasar masalah ini sebelum melanjutkan penelitian dengan rincian spesifik. Sebagai contoh, dua langkah konkret yang saya ambil adalah:
Dimulai dengan artikel Wikipedia untuk deteksi anomali [ https://en.wikipedia.org/wiki/Anomaly_detection ], memahami sepenuhnya, dan kemudian bergerak naik atau turun dalam hierarki konsep artikel Wikipedia lainnya yang terhubung, seperti [ https: // en.wikipedia.org/wiki/K-nearest_neighbors_algorithm ], dan kemudian ke [ https://en.wikipedia.org/wiki/Machine_learning ].
Menjelajahi teknik dalam survei besar yang dilakukan oleh Chandola et al 2009 "Anomaly Detection: A Survey" [ http://www-users.cs.umn.edu/~banerjee/papers/09/anomaly.pdf ] dan Hodge et al 2004 "Sebuah Survei Metodologi Deteksi Outlier" [ http://eprints.whiterose.ac.uk/767/1/hodgevj4.pdf ].
Setelah konsep dipahami dengan lebih baik (saya berharap untuk bermain-main dengan contoh mainan saat saya pergi untuk mengembangkan sisi praktis juga), saya berharap untuk memahami alat Python open source yang lebih cocok untuk masalah saya.
Jawaban:
Deteksi Anomali atau Deteksi Kejadian dapat dilakukan dengan berbagai cara:
Cara Dasar
Turunan! Jika penyimpangan sinyal Anda dari masa lalu & masa depannya tinggi, kemungkinan besar Anda memiliki suatu peristiwa. Ini dapat diekstraksi dengan menemukan penyilangan nol besar dalam turunan dari sinyal.
Jalan Statistik
Yang dimaksud dengan segala sesuatu adalah perilaku dasar yang biasa. jika sesuatu menyimpang dari berarti itu adalah suatu peristiwa. Harap dicatat bahwa mean dalam deret waktu tidak sepele dan tidak konstan tetapi berubah sesuai dengan perubahan deret waktu sehingga Anda perlu melihat "moving average" daripada rata-rata. Ini terlihat seperti ini:
Kode Moving Average dapat ditemukan di sini . Dalam terminologi pemrosesan sinyal, Anda menerapkan filter "Low-Pass" dengan menerapkan moving average.
Anda dapat mengikuti kode di bawah ini:
Cara Probabilistik
Mereka lebih canggih khusus untuk orang yang baru belajar Mesin. Filter Kalman adalah ide bagus untuk menemukan anomali . Pendekatan probabilistik yang lebih sederhana menggunakan "Estimasi Maximum-Likelihood" juga bekerja dengan baik tetapi saran saya adalah tetap dengan ide rata-rata bergerak. Ini bekerja dalam praktik dengan sangat baik.
Saya harap saya bisa membantu :) Semoga Sukses!
sumber
h2o memiliki modul deteksi anomali dan secara tradisional kode tersedia dalam R. Namun di luar versi 3 ia memiliki modul serupa yang tersedia dalam python juga, dan karena h2o adalah open source, mungkin sesuai dengan tagihan Anda.
Anda dapat melihat contoh kerja di sini
sumber
Saya baru-baru ini mengembangkan toolbox: Py thon O utlier D etection toolbox ( PyOD ). Lihat GitHub .
Ini dirancang untuk mengidentifikasi objek-objek terpencil dalam data dengan pendekatan yang tidak diawasi dan diawasi. PyOD ditampilkan untuk:
Berikut ini beberapa tautan penting:
Github : https://github.com/yzhao062/Pyod
PyPI : https://pypi.org/project/pyod/
Dokumentasi : https://pyod.readthedocs.io
Notebook Jupyter Interaktif : https://mybinder.org/v2/gh/yzhao062/Pyod/master
Jika Anda menggunakan PyOD dalam publikasi ilmiah, kami sangat menghargai kutipan untuk makalah berikut
Saat ini sedang ditinjau di JMLR (pembelajaran perangkat lunak jalur open-source pembelajaran mesin). Lihat pracetak .
Pendahuluan cepat
PyOD toolkit terdiri dari tiga kelompok fungsi utama: (i) algoritma deteksi pencilan; (ii) kerangka kerja ensemble outlier dan (iii) fungsi utilitas deteksi outlier.
Algoritma Deteksi Perorangan :
Kerangka Kerja Kombinasi Detektor Outlier / Skor :
Fungsi Utilitas untuk Deteksi Outlier :
Perbandingan semua model yang diterapkan tersedia di bawah ini: ( Gambar , Kode , Notebook Jupyter ):
Jika Anda tertarik, silakan periksa Github ( https://github.com/yzhao062/Pyod ) untuk informasi lebih lanjut.
sumber
Saya saat ini di panggung yang sama seperti Anda. Saya menemukan opsi terbaik untuk deteksi anomali, melakukan penelitian.
Apa yang saya temukan adalah saya pikir paling cocok dengan kebutuhan Anda dan lebih baik dibandingkan dengan apa yang Anda lihat. yaitu, TwitterAnomalyDetection, SkyLine.
Yang saya temukan lebih baik adalah NAB NAB (Numenta Anomaly Benchmark). Ini juga memiliki dukungan komunitas yang sangat baik dan bagi Anda poin plus adalah open source & dikembangkan dengan python. Anda dapat menambahkan algoritma Anda di dalamnya.
Dalam hal algoritma, saya menemukan LOF atau CBLOF adalah opsi yang baik.
jadi, periksa sekali. Ini dapat membantu Anda. https://github.com/numenta/nab
Jika Anda menemukan opsi yang lebih baik. tolong beritahu aku. Saya juga di jalan yang sama.
Keberuntungan terbaik !!
sumber
Mungkin ini membantu karena Anda menyebutkan tentang kondisi stabil: https://github.com/twitter/AnomalyDetection
https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series
sumber
Saya berasumsi fitur yang Anda gunakan untuk mendeteksi ketidaknormalan adalah satu baris data dalam logfile. Jika demikian, Sklearn adalah teman baik Anda dan Anda dapat menggunakannya sebagai kotak hitam. Periksa tutorial SVM satu kelas dan deteksi Baru .
Namun, jika fitur Anda adalah seluruh file log, Anda harus meringkasnya terlebih dahulu ke beberapa fitur dengan dimensi yang sama, dan kemudian menerapkan deteksi Novealty.
sumber
Masih ada versi Skyline yang aktif dan dikembangkan, untuk berjaga-jaga seandainya seseorang mendarat di sini dan tertarik.
https://github.com/earthgecko/skyline
https://earthgecko-skyline.readthedocs.io/en/latest
Saya adalah pemelihara proyek saat ini dan sekarang jauh lebih maju daripada versi Etsy asli, dalam hal kinerja, UI, penanganan musiman yang lebih baik dan memiliki fungsi tambahan dari database anomali, menghitung korelasi dan kemampuan untuk sidik jari dan belajar bukan pola anomali.
sumber
Karena Anda memiliki deret waktu multivarian, saya akan menerapkan LSTM-RNN yang memodelkan dinamika sistem Anda berdasarkan data pelatihan, yang biasanya semi-diawasi (hanya kelas normal yang disertakan). Ini berarti Anda melatih model Anda untuk mempelajari apa yang "normal". Selama pengujian, Anda menguji kondisi normal dan anomali untuk melihat seberapa baik model membedakan mereka.
Keuntungan dari jaringan saraf adalah mereka "mempelajari" korelasi silang antara sinyal input sendiri; Anda tidak perlu menjelajahinya secara manual. LSTM-RNNs, khususnya, adalah pilihan ideal ketika datang ke pemodelan deret waktu hanya karena kemampuan mereka untuk menyimpan memori dari input sebelumnya, mirip dengan model ruang keadaan dalam Control Theory (jika Anda melihat analoginya).
Dalam Python, hampir sepele untuk mengimplementasikan LSTM-RNN menggunakan Keras API (di atas backend Tensorflow). Jaringan ini belajar memperkirakan sinyal yang diinginkan dengan jumlah input yang berubah-ubah, yang kemudian Anda bandingkan dengan nilai terukur aktual. Jika ada penyimpangan "besar", Anda mendapat anomali (mengingat bahwa modelnya cukup akurat)!
sumber