Praktik terbaik untuk menggunakan API Detektor Anomati Multivariat

Artikel ini akan memberikan panduan seputar praktik yang direkomendasikan untuk diikuti saat menggunakan API Detektor Anomali multivariat (MVAD). Dalam tutorial ini, Anda akan:

  • Penggunaan API: Pelajari cara menggunakan MVAD tanpa kesalahan.
  • Rekayasa Data: Pelajari cara terbaik untuk mengolah data Anda sehingga MVAD bekerja dengan akurasi yang lebih baik.
  • Jebakan Umum: Pelajari cara menghindari jebakan umum yang ditemui pelanggan.
  • FAQ: Pelajari jawaban atas pertanyaan yang sering diajukan.

Penggunaan API

Ikuti petunjuk di bagian ini untuk menghindari kesalahan saat menggunakan MVAD. Jika Anda masih menemui kesalahan, lihat daftar lengkap kode galat untuk mengetahui penjelasan dan tindakan yang diperlukan.

Parameter input

Parameter yang Diperlukan

Ketiga parameter ini diperlukan dalam permintaan pelatihan dan inferensi API:

  • source - Tautan ke file zip Anda yang terletak di Azure Blob Storage dengan Tanda Tangan Akses Bersama (SAS).
  • startTime - Waktu mulai data yang digunakan untuk pelatihan atau inferensi. Jika lebih awal dari tanda waktu paling awal aktual dalam data, tanda waktu paling awal aktual tersebut akan digunakan sebagai titik awal.
  • endTime - Waktu akhir data yang digunakan untuk pelatihan atau inferensi yang harus lebih lambat dari atau sama dengan startTime. Jika endTime lebih lambat dari tanda waktu terbaru aktual dalam data, tanda waktu terbaru aktual akan digunakan sebagai titik akhir. Jika endTime sama denganstartTime, itu berarti inferensi dari satu titik data tunggal yang sering digunakan dalam skenario streaming.

Parameter opsional untuk pelatihan API

Parameter lain untuk pelatihan API bersifat opsional:

  • slidingWindow - Berapa banyak titik data yang digunakan untuk menentukan anomali. Bilangan bulat antara 28 dan 2.880. Nilai default-nya adalah 300. Jika slidingWindow adalah k untuk pelatihan model, setidaknya k poin harus dapat diakses dari file sumber selama inferensi untuk mendapatkan hasil yang valid.

    MVAD mengambil segmen titik data untuk memutuskan apakah titik data selanjutnya adalah anomali. Panjang segmen adalah slidingWindow. Harap ingat dua hal saat memilih nilai slidingWindow:

    1. Properti data Anda: apakah itu berkala dan laju pengambilan sampel. Ketika data Anda berkala, Anda dapat mengatur panjang 1 - 3 siklus sebagai slidingWindow. Ketika data Anda berada pada frekuensi tinggi (granularitas kecil) seperti tingkat menit atau tingkat kedua, Anda dapat menetapkan nilai yang relatif lebih tinggi dari slidingWindow.
    2. Trade-off antara waktu pelatihan/inferensi dan dampak performa potensial. slidingWindow yang lebih besar dapat menyebabkan waktu pelatihan/inferensi yang lebih lama. Tidak ada jaminanslidingWindow yang lebih besar akan menghasilkan peningkatan akurasi. slidingWindow yang kecil dapat menyebabkan model sulit untuk bertemu dengan solusi yang optimal. Misalnya, sulit untuk mendeteksi anomali ketika hanya slidingWindow yang memiliki dua poin.
  • alignMode - Cara menyelaraskan beberapa variabel (seri waktu) pada tanda waktu. Ada dua opsi untuk parameter ini, Inner dan Outer, nilai default-nya adalah Outer.

    Parameter ini sangat penting ketika ada ketidakselarasan antara urutan tanda waktu dari variabel tersebut. Model perlu menyelaraskan variabel ke urutan tanda waktu yang sama sebelum pemrosesan lebih lanjut.

    Inner berarti model akan melaporkan hasil deteksi hanya pada tanda waktu ketika setiap variabel memiliki nilai, yaitu persimpangan semua variabel. Outer berarti model akan melaporkan hasil deteksi hanya pada tanda waktu ketika variabel apa pun memiliki nilai, yaitu persimpangan semua variabel.

    Berikut adalah contoh untuk menjelaskan nilai alignModel yang berbeda.

    Variabel-1

    timestamp nilai
    2020-11-01 1
    2020-11-02 2
    20201104 4
    2020-11-05 5

    Variabel-2

    timestamp nilai
    2020-11-01 1
    2020-11-02 2
    2020-11-03 3
    20201104 4

    Inner menggabungkan dua variabel

    timestamp Variabel-1 Variabel-2
    2020-11-01 1 1
    2020-11-02 2 2
    20201104 4 4

    Outer menggabungkan dua variabel

    timestamp Variabel-1 Variabel-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-03 nan 3
    20201104 4 4
    2020-11-05 5 nan
  • fillNAMethod - Cara mengisi nan di tabel yang digabungkan. Mungkin ada nilai yang hilang dalam tabel yang digabungkan dan nilai tersebut harus ditangani dengan benar. Kami menyediakan beberapa metode untuk mengisinya. Opsinya adalah Linear, Previous, Subsequent, Zero, dan Fixed serta nilai default-nya adalah Linear.

    Opsi Metode
    Linear Mengisi nilai nan menurut interpolasi linear
    Previous Menyebarkan nilai terakhir yang valid untuk mengisi kesenjangan. Contoh: [1, 2, nan, 3, nan, 4] ->[1, 2, 2, 3, 3, 4]
    Subsequent Gunakan nilai valid berikutnya untuk mengisi kesenjangan. Contoh: [1, 2, nan, 3, nan, 4] ->[1, 2, 3, 3, 4, 4]
    Zero Mengisi nilai nan dengan 0.
    Fixed Isi nilai nan dengan nilai valid tertentu yang harus disediakan dalam paddingValue.
  • paddingValue - Nilai padding digunakan untuk mengisi nan ketika fillNAMethod da nFixed harus disediakan dalam kasus tersebut. Dalam kasus lain, ini bersifat opsional.

  • displayName - Ini adalah parameter opsional yang digunakan untuk mengidentifikasi model. Misalnya, Anda dapat menggunakannya untuk menandai parameter, sumber data, dan metadata lainnya tentang model dan data inputnya. Nilai default-nya adalah untaian kosong.

Input skema data

MVAD mendeteksi anomali dari sekelompok metrik, dan kami menyebut setiap metrik sebagai variabel atau deret waktu.

  • Anda dapat mengunduh sampel file data dari Microsoft untuk memeriksa skema yang diterima dari: https://aka.ms/AnomalyDetector/MVADSampleData

  • Setiap variabel harus memiliki dua dan hanya dua bidang, timestamp dan value, dan harus disimpan dalam file nilai yang dipisahkan koma (CSV).

  • Nama kolom file CSV harus tepat timestamp dan value peka huruf besar/kecil.

  • timestamp Nilai harus sesuai dengan ISO 8601; value bisa berupa bilangan bulat atau desimal dengan sejumlah angka di belakang koma. Contoh yang baik dari isi file CSV:

    timestamp nilai
    2019-04-01T00:00:00Z 5
    2019-04-01T00:01:00Z 3.6
    2019-04-01T00:02:00Z 4
    ... ...

    Catatan

    Jika tanda waktu Anda memiliki jam, menit, dan/atau detik, pastikan tanda waktu dibulatkan dengan benar sebelum memanggil API.

    Misalnya, jika frekuensi data Anda seharusnya menjadi satu poin data setiap 30 detik, tetapi Anda melihat tanda waktu seperti "12:00:01" dan "12:00:28", itu adalah sinyal kuat bahwa Anda harus memproses tanda waktu terlebih dahulu ke nilai baru seperti "12:00:00" dan "12:00:30".

    Untuk detailnya, lihat bagian "Ringkasan tanda waktu" di dokumen praktik terbaik.

  • Nama file csv akan digunakan sebagai nama variabel dan harus unik. Misalnya, "temperature.csv" dan "humidity.csv".

  • Variabel untuk pelatihan dan variabel untuk inferensi harus konsisten. Misalnya, jika Anda menggunakan series_1, series_2, series_3, series_4, dan series_5 untuk pelatihan, Anda harus menyediakan variabel yang sama persis untuk inferensi.

  • File CSV harus dikompresi ke dalam file zip dan diunggah ke kontainer blob Azure. File zip dapat bernama apa pun yang Anda inginkan.

Struktur folder

Kesalahan umum dalam persiapan data adalah folder tambahan dalam file zip. Misalnya, asumsikan nama file zip adalah series.zip. Kemudian setelah mendekompresi file ke folder baru./series, jalur yang benar ke file CSV adalah ./series/series_1.csv dan jalur yang salah bisa jadi ./series/foo/bar/series_1.csv.

Contoh pohon direktori yang benar setelah mendekompresi file zip di Windows

.
└── series
    ├── series_1.csv
    ├── series_2.csv
    ├── series_3.csv
    ├── series_4.csv
    └── series_5.csv

Contoh pohon direktori yang tidak benar setelah mendekompresi file zip di Windows

.
└── series
    └── series
        ├── series_1.csv
        ├── series_2.csv
        ├── series_3.csv
        ├── series_4.csv
        └── series_5.csv

Rekayasa Data

Sekarang Anda dapat menjalankan kode Anda dengan MVAD API tanpa kesalahan. Apa yang bisa dilakukan untuk meningkatkan akurasi model Anda?

Kualitas data

  • Ketika model mempelajari pola normal dari data historis, data pelatihan harus mewakili keadaan normal keseluruhan sistem. Sulit bagi model untuk mempelajari jenis pola ini jika data pelatihan penuh dengan anomali. Ambang empiris tingkat abnormal adalah 1% dan di bawah untuk akurasi yang baik.
  • Secara umum, rasio nilai data pelatihan yang hilang harus di bawah 20% . Terlalu banyak data yang hilang mungkin mengakibatkan nilai yang terisi secara otomatis (biasanya nilai linier atau nilai konstan) dianggap sebagai pola normal. Itu dapat mengakibatkan poin data nyata (tidak hilang) terdeteksi sebagai anomali. Namun, ada beberapa kasus saat rasio tinggi yang hilang dapat diterima. Misalnya, jika Anda memiliki dua variabel (rangkaian waktu) dalam grup menggunakan Outer mode untuk meratakan tanda waktu. Satu variabel memiliki granularitas satu menit,sedangkan yang lain memiliki granularitas per jam. Kemudian variabel waktu per jam pada dasarnya memiliki setidaknya 59/60 = 98,33% kehilangan poin data. Dalam kasus seperti itu, tidak masalah untuk mengisi variabel waktu per jam menggunakan satu-satunya nilai yang tersedia jika variabel tidak terlalu berfluktuasi.

Kuantitas data

  • Model MVAD yang mendasari memiliki jutaan parameter. Model ini perlu jumlah titik data minimum untuk mempelajari serangkaian parameter yang optimal. Aturan empirisnya adalah Anda perlu menyediakan 15,000 atau lebih poin data (tanda waktu) per variabel untuk melatih model untuk akurasi yang baik. Secara umum, semakin banyak data pelatihan, semakin baik akurasinya. Namun, dalam kasus ketika Anda tidak dapat memperoleh data sebanyak itu, kami masih mendorong Anda untuk bereksperimen dengan lebih sedikit data dan melihat apakah akurasi yang dikompromikan masih dapat diterima.

  • Setiap kali Anda memanggil API inferensi, Anda perlu memastikan bahwa file data sumber berisi cukup poin data. Umumnya slidingWindow + jumlah poin data yang sangat membutuhkan hasil inferensi. Misalnya, dalam kasus streaming ketika setiap kali Anda ingin menyimpulkan pada SATUtanda waktu baru, file data hanya dapat berisi poin data slidingWindow plus SATU terkemuka; maka Anda dapat melanjutkan dan membuat file zip lain dengan jumlah poin data yang sama (slidingWindow + 1) tetapi memindahkan SATU langkah ke sisi "kanan" dan mengirimkan untuk pekerjaan inferensi lain.

    Apa pun di luar itu atau "sebelum" jendela geser terkemuka tidak akan mempengaruhi hasil inferensi sama sekali dan hanya dapat menyebabkan penurunan kinerja. Apa pun di bawah ini dapat menyebabkan kesalahan NotEnoughInput.

Pembulatan tanda waktu

Dalam kelompok variabel (rangkaian waktu), setiap variabel dapat dikumpulkan dari sumber independen. Tanda waktu dari variabel yang berbeda mungkin tidak konsisten satu sama lain dan dengan frekuensi yang diketahui. Berikut contoh sederhana.

Variabel-1

timestamp nilai
12:00:01 1,0
12:00:35 1.5
12:01:02 0.9
12:01:31 2.2
12:02:08 01/03/2021

Variabel-2

timestamp nilai
12:00:03 2.2
12:00:37 2.6
12:01:09 1,4
12:01:34 1,7
12:02:04 2,0

Kami memiliki dua variabel yang dikumpulkan dari dua sensor yang mengirim satu poin data setiap 30 detik. Namun, sensor tidak mengirim poin data pada frekuensi yang tepat, melainkan terkadang lebih awal atau lebih akhir. Karena MVAD akan mempertimbangkan korelasi antara variabel yang berbeda, tanda waktu harus selaras dengan benar sehingga metrik dapat dengan benar mencerminkan kondisi sistem. Dalam contoh di atas, tanda waktu variabel 1 dan variabel 2 harus benar-benar 'dibulatkan' ke frekuensi sebelum perataan.

Mari kita lihat apa yang terjadi jika mereka tidak diproses sebelumnya. Jika kita mengatur alignMode menjadi Outer (berarti gabungan dari dua set), tabel gabungan akan menjadi

timestamp Variabel-1 Variabel-2
12:00:01 1,0 nan
12:00:03 nan 2.2
12:00:35 1.5 nan
12:00:37 nan 2.6
12:01:02 0.9 nan
12:01:09 nan 1,4
12:01:31 2.2 nan
12:01:34 nan 1,7
12:02:04 nan 2,0
12:02:08 01/03/2021 nan

nan menunjukkan nilai yang hilang. Jelas, tabel gabungan tidak seperti yang Anda harapkan. Variabel 1 dan variabel 2 interleave, dan model MVAD tidak dapat mengekstrak informasi tentang korelasi di antara variabel tersebut. Jika kita atur alignMode menjadi Inner, tabel gabungan akan kosong karena tidak ada tanda waktu yang sama pada variabel 1 dan variabel 2.

Oleh karena itu, tanda waktu variabel 1 dan variabel 2 harus diproses sebelumnya (dibulatkan ke tanda waktu 30 detik terdekat) dan rangkaian waktu baru adalah

Variabel-1

timestamp nilai
12:00:00 1,0
12:00:30 1.5
12:01:00 0.9
12:01:30 2.2
12:02:00 01/03/2021

Variabel-2

timestamp nilai
12:00:00 2.2
12:00:30 2.6
12:01:00 1,4
12:01:30 1,7
12:02:00 2,0

Sekarang tabel gabungan lebih masuk akal.

timestamp Variabel-1 Variabel-2
12:00:00 1,0 2.2
12:00:30 1.5 2.6
12:01:00 0.9 1,4
12:01:30 2.2 1,7
12:02:00 01/03/2021 2,0

Nilai variabel yang berbeda pada tanda waktu dekat selaras dengan baik, dan model MVAD sekarang dapat mengekstrak informasi korelasi.

Jebakan umum

Selain tabel kode galat, kami telah mempelajari beberapa jebakan umum saat menggunakan API MVAD dari pelanggan seperti Anda. Tabel ini akan membantu Anda menghindari masalah ini.

Pitfall Consequence Penjelasan dan solusi
Tanda waktu dalam data pelatihan dan/atau data inferensi tidak dibulatkan untuk menyelaraskan dengan frekuensi data masing-masing dari setiap variabel. Tanda waktu dari hasil inferensi tidak seperti yang diharapkan: baik tanda waktu terlalu sedikit atau terlalu banyak. Lihat Pembulatan Tanda Waktu.
Terlalu banyak poin data anomali dalam data pelatihan Akurasi model berdampak negatif karena memperlakukan poin data anomali sebagai pola normal selama pelatihan. Secara empiris, menjaga tingkat abnormal pada atau di bawah 1% akan membantu.
Data pelatihan terlalu sedikit Akurasi model dikompromikan. Secara empiris, pelatihan model MVAD membutuhkan 15.000 atau lebih poin data (tanda waktu) per variabel untuk menjaga akurasi yang baik.
Menganggap semua poin data dengan isAnomaly=true sebagai anomali Terlalu banyak positif palsu Anda harus menggunakan isAnomaly dan severity (atau score) untuk menyaring anomali yang tidak parah dan (opsional) menggunakan pengelompokan untuk memeriksa durasi anomali untuk menekan kebisingan acak. Lihat bagian FAQ di bawah untuk mengetahui perbedaan antara severity and score.
Sub-folder dimasukkan ke dalam file data untuk pelatihan atau inferensi. File data csv di dalam sub-folder diabaikan selama pelatihan dan/atau inferensi. Tidak ada sub-folder yang diizinkan berbentuk file zip. Lihat Struktur folder untuk penjelasan lebih lanjut.
Terlalu banyak data dalam file data inferensi: misalnya, mengompresi semua data historis dalam file zip data inferensi Anda mungkin tidak melihat kesalahan apa pun tetapi Anda akan mengalami kinerja yang menurun ketika Anda mencoba mengunggah file zip ke Azure Blob serta ketika Anda mencoba menjalankan inferensi. Lihat Kuantitas Data untuk penjelasan lebih lanjut.
Membuat sumber daya Anomaly Detector di wilayah Azure yang belum mendukung MVAD dan memanggil MVAD API Anda akan mendapatkan kesalahan "sumber daya tidak ditemukan" saat memanggil API MVAD. Selama tahap pratinjau, MVAD hanya tersedia di wilayah terbatas. Silakan tandai Apa yang baru dalam Detektor Anomali untuk tetap mengikuti perkembangan peluncuran wilayah MVAD. Anda juga dapat mengajukan GitHub atau menghubungi kami di AnomalyDetector@microsoft.com untuk meminta wilayah tertentu.

FAQ

Bagaimana cara kerja jendela geser MVAD?

Mari kita gunakan dua contoh untuk mempelajari cara kerja jendela geser MVAD. Misalkan Anda telah menetapkan slidingWindow = 1.440, dan data input Anda berada pada granuralitas satu menit.

  • Skenario streaming: Anda ingin memprediksi apakah poin data SATU di "2021-01-02T00:00:00Z" adalah anomali. startTime dan endTime Anda akan bernilai sama ("2021-01-02T00:00:00Z"). Sumber data inferensi Anda, bagaimanapun, harus berisi setidaknya 1.440 + 1 tanda waktu. Karena, MVAD akan mengambil jarak antar baris data sebelum poin data target ("2021-01-02T00:00:00Z") untuk menentukan apakah target tersebut merupakan anomali. Panjang jarak antar baris data yang dibutuhkan adalah slidingWindow atau 1.440 dalam kasus ini. 1\.440 = 60 * 24, jadi data input Anda harus dimulai dari paling lambat "2021-01-01T00:00:00Z".

  • Skenario Batch: Anda memiliki beberapa poin data target untuk diprediksi. endTime Anda akan lebih besar dari startTime. Inferensi dalam skenario seperti itu dilakukan dengan cara "jendela bergerak". Misalnya, MVAD akan menggunakan data dari 2021-01-01T00:00:00Z hingga 2021-01-01T23:59:00Z (inklusif) untuk menentukan apakah data pada 2021-01-02T00:00:00Z termasuk anomali. Misalnya, MVAD akan lanjut dan menggunakan data dari 2021-01-01T00:01:00Z hingga 2021-01-02T00:00:00Z (inklusif) untuk menentukan apakah data pada 2021-01-02T00:01:00Z termasuk anomali. Ini bergerak dengan cara yang sama (mengambil 1.440 poin data untuk dibandingkan) sampai tanda waktu terakhir yang ditentukan oleh endTime (atau tanda waktu terbaru yang sebenarnya). Oleh karena itu, sumber data inferensi Anda harus berisi data mulai dari startTime - slidingWindow dan idealnya berisi total ukuran slidingWindow + (endTime - startTime).

Mengapa hanya menerima file zip untuk pelatihan dan inferensi?

Kami menggunakan file zip karena dalam skenario batch, kami berharap ukuran data pelatihan dan inferensi akan sangat besar dan tidak dapat dimasukkan ke dalam badan permintaan HTTP. Hal ini memungkinkan pengguna untuk melakukan inferensi batch pada data historis baik untuk validasi model atau analisis data.

Namun, mungkin menyebabkan ketidaknyamanan untuk streaming inferensi dan data berfrekuensi tinggi. Kami berencana untuk menambahkan API baru yang dirancang khusus untuk streaming inferensi yang memungkinkan pengguna meneruskan data di badan permintaan.

Apa perbedaan antara severity dan score?

Biasanya kami sarankan Anda menggunakan severity sebagai filter untuk menyaring 'anomali' yang tidak begitu penting bagi bisnis Anda. Tergantung pada skenario dan pola data Anda, anomali yang kurang penting sering memiliki nilai severity yang relatif lebih rendah atau nilai tinggi yang berdiri sendiri (terputus-putus) seperti pakuseverity acak.

Dalam kasus ketika Anda telah menemukan kebutuhan aturan yang lebih canggih daripada ambang batas terhadap severity atau durasi nilai tinggi terus severity menerus, Anda mungkin ingin menggunakan untuk score membangun filter yang lebih kuat. Memahami bagaimana MVAD digunakan score untuk menentukan anomali dapat membantu:

Kami mempertimbangkan apakah poin data termasuk anomali dari perspektif global dan lokal. Jika score pada tanda waktu lebih tinggi dari ambang batas tertentu, maka tanda waktu ditandai sebagai anomali. Jika score lebih rendah dari ambang batas tetapi relatif lebih tinggi dalam suatu segmen, itu juga ditandai sebagai anomali.

Langkah berikutnya