Konsep

Dalam artikel ini, kami akan membahas konsep umum yang kami gunakan di Timeseries Insights API dan mencoba memberikan penjelasan yang intuitif tentang apa yang diwakili.

Acara

Peristiwa adalah titik data dan input mentah yang digunakan Timeseries Insights API. Secara konseptual, hal ini mewakili tindakan yang dilakukan oleh beberapa agen (misalnya transaksi oleh klien atau publikasi artikel berita) atau pengamatan (misalnya pembacaan sensor suhu, atau penggunaan CPU pada komputer).

Peristiwa berisi:

  • Kumpulan nilai di berbagai dimensi, yang mewakili properti yang mendeskripsikan peristiwa, seperti label atau pengukuran numerik.
  • Stempel waktu yang menunjukkan waktu saat peristiwa terjadi. Stempel waktu ini akan digunakan saat menggabungkan peristiwa untuk membentuk deret waktu.
  • ID grup.

Dimensi

Dimensi merepresentasikan jenis properti untuk peristiwa dalam set data dan domain nilai yang dapat digunakan. Dimensi dapat berupa:

  • Kategoris. Properti peristiwa pada dimensi ini dapat menyimpan salah satu dari nilai terbatas/terbatas, biasanya string. Contohnya meliputi: nama negara atau penerbit dalam set data dengan artikel berita, nama mesin dalam set data dengan data pemantauan produksi.
  • Numerik. Pengukuran atau properti numerik umum untuk suatu peristiwa. Contoh: jumlah kunjungan halaman untuk artikel berita, penggunaan CPU, atau jumlah error untuk data pemantauan produksi.

Set data

Set data adalah kumpulan peristiwa dengan nama unik dalam sebuah project. Kueri dilakukan dalam set data yang sama.

Grup

Peristiwa dapat dikelompokkan bersama dengan menentukan ID grup yang sama (lihat Event.groupId). Grup ini mirip dengan "sesi" aktivitas internet.

Biasanya, setiap data Peristiwa diberi ID grup unik. Kasus penggunaan ID grup juga mencakup, tetapi tidak terbatas pada:

  • ID peristiwa untuk peristiwa yang sama (dengan stempel waktu yang sama atau mirip) dari beberapa catatan Peristiwa, terutama jika properti yang berbeda dari peristiwa yang sama berasal dari sumber yang berbeda dan tidak digabungkan sebelum masuk ke sistem. Misalnya, beberapa sensor yang memantau perangkat yang sama masing-masing dapat menghasilkan kumpulan data peristiwa terpisah.
  • ID sesi untuk kumpulan peristiwa terkait (biasanya dengan stempel waktu dalam jangka waktu singkat). Contohnya adalah aktivitas dari sesi penjelajahan web. Contoh lain adalah entri log dari perjalanan taksi.
  • ID akun pengguna, sehingga semua catatan Peristiwa dengan ID grup yang sama adalah milik pengguna yang sama.

Tujuan grup ini adalah untuk menghitung korelasi antara (dimensi) peristiwa dari kelompok yang sama. Misalnya, jika set data Anda menyimpan data pemantauan (seperti CPU, RAM, dll.), grup dapat menyimpan semua data pemantauan dari satu proses. Pada akhirnya, kita bisa mendeteksi bahwa peningkatan CPU berhubungan dengan peristiwa lain, seperti update versi biner pada waktu sebelumnya.

Jika tidak yakin, atau jika tidak tertarik untuk menghitung jenis korelasi ini, setiap peristiwa harus memiliki ID grup yang unik secara global. Menghapus groupId memiliki efek yang serupa, dan groupId internal akan dihasilkan berdasarkan konten dan stempel waktu.

Slice

Slice adalah subset semua peristiwa dari set data yang memiliki beberapa nilai tertentu di beberapa dimensi. Untuk dimensi kategoris, nilai yang diberikan adalah nilai tetap tunggal; untuk dimensi numerik, nilai yang diberikan adalah rentang.

Sebagai contoh, mari kita anggap kita memiliki set data dengan penjualan dari retailer internasional dan setiap peristiwa adalah penjualan yang memiliki dimensi kategoris berikut: negara tempat penjualan terjadi, nama produk, nama perusahaan yang membuat produk. Contoh slice dalam hal ini adalah: semua penjualan untuk produk tertentu, semua penjualan dari negara tertentu untuk semua produk yang dibuat oleh perusahaan tertentu.

Deret waktu

Deret waktu yang kita gunakan adalah waktu terpisah, yang terdiri dari titik-titik pada interval waktu yang sama. Panjang interval waktu antara titik deret waktu yang berurutan disebut granularitas deret waktu.

Deret waktu dihitung dengan:

  • Untuk slice tertentu, kumpulkan semua peristiwa dalam interval waktu [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity].
  • Kelompokkan peristiwa ini, berdasarkan stempel waktu dan perinciannya. Peristiwa E ditetapkan ke titik yang dimulai pada waktu T jika E.eventTime berada dalam interval waktu [T, T + granularity].
  • Menggabungkan peristiwa untuk setiap titik dalam deret waktu berdasarkan dimensi numerik yang ditentukan sebagai metrik (TimeseriesParams.metric), yang mewakili nilai untuk titik tersebut. Agregasi dapat dilakukan dengan menghitung (jika tidak ada metric yang ditentukan, biasanya jika semua dimensi peristiwa bersifat kategoris), menjumlahkan, atau melakukan rata-rata (jika metric ditentukan).

Titik deret waktu

Setiap titik deret waktu memiliki waktu dan nilai yang terkait.

Waktu sebenarnya adalah interval dari panjang granularity dengan time sebagai waktu mulai.

Jika metric (TimeseriesParams.metric) ditentukan, hal tersebut harus berupa dimensi numerik. value titik digabungkan dari nilai dimensi dalam dimensi metric dari semua peristiwa dalam internal waktu, menggunakan TimeseriesParams.metricAggregationMethod.

Jika tidak ada metrik yang ditentukan, value titik adalah jumlah peristiwa dalam interval waktu.

Prakiraan

Proses memprediksi nilai mendatang untuk deret waktu tertentu. Perkiraan menggunakan bagian awal deret waktu sebagai data pelatihan untuk membangun model.

Cakrawala

Kami akan memperkirakan nilai deret waktu mulai dari waktu deteksi hingga cakrawala waktu (diberikan oleh kolom ForecastParams.horizonTime).

Secara intuitif, kolom ini memberi tahu kita berapa banyak perkiraan di masa depan. Meskipun kami sangat berfokus pada nilai titik deteksi saat mengklasifikasikan sebuah slice sebagai anomali, kami memungkinkan titik tambahan untuk diperkirakan karena dapat memberikan informasi yang berguna bagi pengguna.

Waktu deteksi dan titik deteksi

Waktu deteksi (ditentukan oleh QueryDataSetRequest.detectionTime) adalah titik waktu yang sedang kita analisis untuk setiap potensi anomali.

Titik deteksi adalah titik deret waktu pada waktu deteksi.

Penyimpangan yang diharapkan

Bergantung pada stabilitas dan prediktabilitas deret waktu, kita bisa menjadi kurang atau lebih yakin dengan perkiraan kita. Tingkat keyakinan tercermin di kolom EvaluatedSlice.expectedDeviation, yang menentukan deviasi absolut yang dapat diterima dari nilai yang kami perkirakan untuk waktu deteksi.

Anomali

Slice dapat dianggap sebagai anomali jika penyimpangan antara nilai yang diperkirakan dan nilai sebenarnya selama waktu deteksi lebih tinggi dari yang kami harapkan.

Kita menyebut skor anomali sebagai jarak deviasi yang sebenarnya dari deviasi yang diharapkan:

anomalyScore = (detectionPointActual - detectPointForecast) / ExpectedDeviation

Secara umum, skor yang lebih rendah dari 1,0 mencerminkan variasi yang umum mengingat sejarah irisan, sementara skor yang lebih tinggi dari 1,0 harus diperhatikan, dengan skor yang lebih tinggi menunjukkan anomali yang lebih parah.

Ambang batas derau

Skor anomali seperti yang ditentukan sebelumnya menunjukkan seberapa signifikan penyimpangan secara statistik dari normal. Namun, dalam banyak kasus, penyimpangan ini mungkin tidak penting karena perubahan pada nilai absolut mungkin bukan hal yang penting.

Misalnya, jika deret waktu memiliki semua nilainya yang didistribusikan secara seragam dalam rentang (9.9, 10.1), maka expectedDeviation akan menjadi ~0.1. Jika detectionPointForecast adalah 10.0 dan detectionPointActual adalah 10.3, anomalyScore akan menjadi 3.0.

Jika perubahan yang lebih besar dalam nilai absolut lebih penting bagi Anda, nilai minimum derau menawarkan cara untuk menghukum bagian yang memiliki perubahan yang lebih rendah dari batas tersebut dengan mengurangi skor anomali:

anomalyScore = (detectionPointActual - detectPointForecast) / (expectedDeviation + noiseThreshold)

Langkah selanjutnya