Öğretici: Bir saat içinde Çok Değişkenli Anomali Algılamayı Öğrenme

Anomali Algılayıcısı Anomali Algılama (MVAD) ile çalışma, bir ölçüm grubundan gelen anomalileri kontrolsüz bir şekilde algılamaya yarayan gelişmiş bir AI aracıdır.

Genel olarak, MVAD kullanmak için şu adımları atabilirsiniz:

  1. Azure'Anomali Algılayıcısı MVAD destekleyen bir kaynak oluşturun.
  2. Verilerinizi hazırlayın.
  3. Bir MVAD modelini eğitin.
  4. Modelinizin durumunu sorgular.
  5. Eğitilen MVAD modeliyle anomalileri algılama.
  6. Çıkarım sonuçlarını alma ve yorumlama.

Bu öğreticide şunları bulacaksınız:

  • Verilerinizi doğru biçimde hazırlamayı anlama.
  • MVAD ile eğitip çıkarımları anlama.
  • Giriş parametrelerini ve çıkış çıkarım sonuçlarını yorumlamayı anlama.

1. MVAD Anomali Algılayıcısı bir kaynak oluşturma

Not

Önizleme aşamasında MVAD yalnızca sınırlı bölgelerde kullanılabilir. MVAD bölge dışarı Anomali Algılayıcısı güncel tutmak için lütfen Anomali Algılayıcısı'daki yeniler'e yer işareti ekleyin. Ayrıca bir sorun GitHub veya belirli bölgeler için istekte AnomalyDetector@microsoft.com bulunarak bizimle iletişime geçebilirsiniz.

2. Veri hazırlama

Ardından eğitim verilerinizi (ve çıkarım verilerinizi) hazırlamanız gerekir.

Giriş verileri şeması

MVAD bir ölçüm grubundan anomalileri algılar ve her ölçümü değişken veya zaman serisi olarak kabul ederiz.

  • Kabul edilen şemayı kontrol etmek için Microsoft'tan örnek veri dosyasını indirebilirsiniz: https://aka.ms/AnomalyDetector/MVADSampleData

  • Her değişkenin iki ve yalnızca iki alanı ( ve ) olmalı ve virgülle ayrılmış değerler timestamp value (CSV) dosyasında depolanmış olması gerekir.

  • CSV dosyasının sütun adları tam olarak ve timestamp büyük/büyük/büyük value harfe duyarlıdır.

  • Değerler ISO 8601 ile uyumlu olmalıdır; tamsayılar veya herhangi bir sayıda ondalık timestamp value basamağı olan ondalık sayılar olabilir. CSV dosyasının içeriğine iyi bir örnek:

    timestamp değer
    2019-04-01T00:00:00Z 5
    2019-04-01T00:01:00Z 3.6
    2019-04-01T00:02:00Z 4
    ... ...

    Not

    Zaman damgası saat, dakika ve/veya saniyeleri varsa, API'leri çağırmadan önce bunların düzgün bir şekilde yuvarlanmış olduğundan emin olun.

    Örneğin, veri sıklığınız her 30 saniyede bir veri noktası olacaksa ancak "12:00:01" ve "12:00:28" gibi zaman damgası görüyorsanız, zaman damgasını "12:00:00" ve "12:00:30" gibi yeni değerlere önceden işlemeniz gerektiğinin güçlü bir sinyalidir.

    Ayrıntılar için lütfen en iyi yöntemler belgesinin "Zaman damgası yukarı" bölümüne bakın.

  • Csv dosyasının adı değişken adı olarak kullanılır ve benzersiz olmalıdır. Örneğin, "temperature.csv" ve "humidity.csv".

  • Eğitim değişkenleri ve çıkarım değişkenleri tutarlı olmalıdır. Örneğin, eğitim için , , , ve kullanıyorsanız çıkarım için tam olarak series_1 series_2 aynı değişkenleri series_3 series_4 series_5 sağlasanız gerekir.

  • CSV dosyaları bir zip dosyası olarak sıkıştırılır ve bir Azure blob kapsayıcıya yüklenmeli. Zip dosyasında istediğiniz adı bulun.

Klasör yapısı

Veri hazırlamada sık yapılan bir hata, zip dosyasındaki ek klasörlerdir. Örneğin, zip dosyasının adının olduğunu series.zip varsayalım. Ardından, dosyaları yeni bir klasöre açtıktan sonra CSV dosyalarının doğru ./series yolu olur ve yanlış bir yol ./series/series_1.csv ./series/foo/bar/series_1.csv olabilir.

Dosyanın içinde zip dosyasının sıkıştırması açık olduktan sonra dizin ağacının doğru Windows

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

Dosyanın içinde zip dosyasının sıkıştırması açık olduktan sonra dizin ağacının yanlış Windows

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

Verileri sıkıştırma ve karşıya yükleme araçları

Bu bölümde, MVAD giriş verileriyle ilgili kendi uygulama mantığınıza eklemek için kopyalayıp düzenleyemezsiniz bazı örnek kod ve araçlar paylaşacağız.

NIX'te CSV * dosyalarını sıkıştırma

zip -j series.zip series/*.csv

Csv dosyalarını Windows

  • Tüm CSV dosyalarının bulunduğu klasöre gidin.
  • Size gereken tüm CSV dosyalarını seçin.
  • CSV dosyalarından birini sağ tıklatın ve öğesini Send to seçin.
  • Açılan Compressed (zipped) folder listeden seçin.
  • Zip dosyasını gereken şekilde yeniden adlandırın.

Python kodu & Azure Blob depolamaya veri Depolama

Azure Blob'a dosya yükleme hakkında bilgi edinmek için bu belgeye başvurabilirsiniz.

Veya aşağıdaki örnek koda başvurarak zipping ve uploading yapabilirsiniz. Bu bölümdeki Python kodunu kopyalayıp bir .py dosyası (örneğin, ) olarak kaydedebilir ve aşağıdaki gibi zipAndUpload.py komut satırlarını kullanarak çalıştırabilirsiniz:

  • python zipAndUpload.py -s "foo\bar" -z test123.zip -c {azure blob connection string} -n container_xxx

    Bu komut tüm CSV dosyalarını adlı foo\bar tek bir zip dosyasına sıkıştırır. test123.zip Blobu test123.zip kapsayıcınıza container_xxx yükler.

  • python zipAndUpload.py -s "foo\bar" -z test123.zip -c {azure blob connection string} -n container_xxx -r

    Bu komut yukarıdakiyle aynı şeyi yapar, ancak başarıyla karşıya yüklendikten sonra zip test123.zip dosyasını siler.

Bağımsız değişken:

  • --source-folder, -s , CSV dosyalarını içeren kaynak klasörün yolu
  • --zipfile-name, -z , zip dosyasının adı
  • --connection-string, -c , bağlantı dizesini blob'nize
  • --container-name, -n , kapsayıcının adı
  • --remove-zipfile, -r , if on, zip dosyasını kaldırın
import os
import argparse
import shutil
import sys

from azure.storage.blob import BlobClient
import zipfile


class ZipError(Exception):
    pass


class UploadError(Exception):
    pass


def zip_file(root, name):
    try:
        z = zipfile.ZipFile(name, "w", zipfile.ZIP_DEFLATED)
        for f in os.listdir(root):
            if f.endswith("csv"):
                z.write(os.path.join(root, f), f)
        z.close()
        print("Compress files success!")
    except Exception as ex:
        raise ZipError(repr(ex))


def upload_to_blob(file, conn_str, cont_name, blob_name):
    try:
        blob_client = BlobClient.from_connection_string(conn_str, container_name=cont_name, blob_name=blob_name)
        with open(file, "rb") as f:
            blob_client.upload_blob(f, overwrite=True)
        print("Upload Success!")
    except Exception as ex:
        raise UploadError(repr(ex))


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--source-folder", "-s", type=str, required=True, help="path to source folder")
    parser.add_argument("--zipfile-name", "-z", type=str, required=True, help="name of the zip file")
    parser.add_argument("--connection-string", "-c", type=str, help="connection string")
    parser.add_argument("--container-name", "-n", type=str, help="container name")
    parser.add_argument("--remove-zipfile", "-r", action="store_true", help="whether delete the zip file after uploading")
    args = parser.parse_args()

    try:
        zip_file(args.source_folder, args.zipfile_name)
        upload_to_blob(args.zipfile_name, args.connection_string, args.container_name, args.zipfile_name)
    except ZipError as ex:
        print(f"Failed to compress files. {repr(ex)}")
        sys.exit(-1)
    except UploadError as ex:
        print(f"Failed to upload files. {repr(ex)}")
        sys.exit(-1)
    except Exception as ex:
        print(f"Exception encountered. {repr(ex)}")

    try:
        if args.remove_zipfile:
            os.remove(args.zipfile_name)
    except Exception as ex:
        print(f"Failed to delete the zip file. {repr(ex)}")

3. MVAD Modeli Eğitma

Burada bir MVAD modeli eğitmek için örnek istek gövdesi ve Python'daki örnek kod ve yer alın.

// Sample Request Body
{
    "slidingWindow": 200,
    "alignPolicy": {
        "alignMode": "Outer",
        "fillNAMethod": "Linear", 
        "paddingValue": 0
    },
    // This could be your own ZIP file of training data stored on Azure Blob and a SAS url could be used here
    "source": "https://aka.ms/AnomalyDetector/MVADSampleData", 
    "startTime": "2021-01-01T00:00:00Z", 
    "endTime": "2021-01-02T12:00:00Z", 
    "displayName": "Contoso model"
}
# Sample Code in Python
########### Python 3.x #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{API key}',
}

params = urllib.parse.urlencode({})

try:
    conn = http.client.HTTPSConnection('{endpoint}')
    conn.request("POST", "/anomalydetector/v1.1-preview/multivariate/models?%s" % params, "{request body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

Yanıt kodu 201 başarılı bir isteği gösterir.

Giriş parametreleri

Gerekli parametreler

Bu üç parametre eğitim ve çıkarım API 'SI isteklerinde gereklidir:

  • source-Azure Blob 'da bulunan zip dosyanızın bağlantısı, paylaşılan erişim imzaları (SAS) ile Depolama.
  • startTime -Eğitim veya çıkarım için kullanılan verilerin başlangıç saati. Verilerdeki en eski zaman damgasından daha önce ise, gerçek en erken zaman damgası başlangıç noktası olarak kullanılır.
  • endTime -Eğitim veya çıkarım için kullanılan verilerin bitiş saati, daha sonra veya değerine eşit olmalıdır startTime . endTimeVerilerdeki gerçek en son zaman damgasından daha sonra ise, gerçek en son zaman damgası bitiş noktası olarak kullanılır. Şuna endTime eşitse startTime , akış senaryolarında sıklıkla kullanılan tek bir veri noktasının çıkarımı anlamına gelir.

Eğitim API 'SI için isteğe bağlı parametreler

Eğitim API 'SI için diğer parametreler isteğe bağlıdır:

  • slidingWindow -Anormallikleri belirlemede kaç veri noktası kullanılır. 28 ve 2.880 arasında bir tamsayı. Varsayılan değer 300 ' dir. slidingWindow k Model eğitimi için ise, k geçerli sonuçları almak için çıkarım sırasında en az noktaya, kaynak dosyadan erişilebilir olmalıdır.

    Bir sonraki veri noktasının bir anomali olup olmadığına karar vermek için MVAD, veri noktalarının bir kesimini alır. Segmentin uzunluğu slidingWindow . Lütfen bir değer seçerken iki şeyi aklınızda bulundurun slidingWindow :

    1. Verilerinizin özellikleri: düzenli ve örnekleme hızının olup olmadığı. Verileriniz periyodik olduğunda, 1-3 döngülerinin uzunluğunu olarak ayarlayabilirsiniz slidingWindow . Verileriniz, dakika düzeyi veya ikinci düzey gibi yüksek sıklığa (küçük ayrıntı düzeyi) sahip olduğunda görece daha yüksek bir değer ayarlayabilirsiniz slidingWindow .
    2. Eğitim/çıkarım süresi ve olası performans etkisi arasındaki denge. Daha büyük bir slidingWindow süre, eğitim/çıkarım süresine neden olabilir. Daha büyük slidingWindow s 'nin doğruluk kazanmasına neden olacağı garantisi yoktur. Küçük bir slidingWindow , modelin en iyi çözüme yakınsamasına neden olabilir. Örneğin, slidingWindow yalnızca iki noktaya sahip olduğunda bozukluklar tespit etmek zordur.
  • alignMode -Birden çok değişkeni (zaman serisi) zaman damgalarına hizalayın. Bu parametre için iki seçenek vardır Inner ve Outer , ve varsayılan değerdir Outer .

    Bu parametre, değişkenlerin zaman damgası dizileri arasında bir hatalı hizalanmış olduğunda kritik öneme sahiptir. Modelin, daha fazla işlemeden önce değişkenleri aynı zaman damgası dizisine hizalaması gerekir.

    Inner modelin algılama sonuçlarını yalnızca her değişkenin bir değere sahip olduğu zaman damgalarına, yani tüm değişkenlerin kesişimine göre raporalacağını belirtir. Outer modelin, her değişkenin bir değere sahip olduğu zaman damgalarına yönelik algılama sonuçlarını rapor edecek olduğu anlamına gelir, yani tüm değişkenlerin birleşimi.

    Farklı değerleri açıklamak için bir örnek aşağıda verilmiştir alignModel .

    Değişken-1

    timestamp değer
    2020-11-01 1
    2020-11-02 2
    2020-11-04 4
    2020-11-05 5

    Değişken-2

    timestamp değer
    2020-11-01 1
    2020-11-02 2
    2020-11-03 3
    2020-11-04 4

    Inner iki değişkene birleştirin

    timestamp Değişken-1 Değişken-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-04 4 4

    Outer iki değişkene birleştirin

    timestamp Değişken-1 Değişken-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-03 nan 3
    2020-11-04 4 4
    2020-11-05 5 nan
  • fillNAMethod -Birleştirilmiş tabloyu nasıl dolduracağı nan . Birleştirilmiş tabloda eksik değerler olabilir ve bunların düzgün şekilde işlenmesi gerekir. Bunları doldurmanız için birkaç yöntem sunuyoruz. Seçenekler,, Linear , Previous Subsequent ve, Zero Fixed varsayılan değerdir Linear .

    Seçenek Yöntem
    Linear nanDeğerleri doğrusal ilişkilendirmeden doldur
    Previous Boşlukları dolduracak son geçerli değeri yayar. Örnek: [1, 2, nan, 3, nan, 4] -> [1, 2, 2, 3, 3, 4]
    Subsequent Boşlukları doldurmanız için sonraki geçerli değeri kullanın. Örnek: [1, 2, nan, 3, nan, 4] -> [1, 2, 3, 3, 4, 4]
    Zero nanDeğerleri 0 ile doldur.
    Fixed nanDeğerleri, içinde sağlanması gereken belirtilen geçerli bir değer ile doldurur paddingValue .
  • paddingValue -Padding değeri nan , ne zaman olduğunu fillNAMethod Fixed ve bu durumda sağlanması gereken zamanı doldurmanız için kullanılır. Diğer durumlarda isteğe bağlıdır.

  • displayName - Bu, modelleri tanımlamak için kullanılan isteğe bağlı bir parametredir. Örneğin, parametreleri, veri kaynaklarını ve modelle ilgili diğer meta verileri ve giriş verilerini işaretlemek için bunu kullanabilirsiniz. Varsayılan değer boş bir dizedir.

4. Model durumunu al

Eğitim API'si zaman uyumsuz olduğu için eğitim API'sini çağıran modeli hemen elde etmeyebilirsiniz. Ancak, tüm modelleri listeleyecek API anahtarına göre veya belirli modelle ilgili bilgileri listeleyene model kimliğine göre modellerin durumunu sorguabilirsiniz.

Tüm modelleri listele

İstek URL'si ve istek üst bilgileri hakkında bilgi için bu sayfaya başvurabilirsiniz. Güncelleştirme zamanlarına göre sıra edilen yalnızca 10 model iade edeceğimize dikkat edin, ancak istek URL'sinde ve parametrelerini ayarerek diğer $skip $top modelleri ziyaret edin. Örneğin, istek URL'niz ise https://{endpoint}/anomalydetector/v1.1-preview/multivariate/models?$skip=10&$top=20 en son 10 modeli atlayıp sonraki 20 modeli geri döneceğiz.

Örnek yanıt:

{
    "models": [
         {
             "createdTime":"2020-12-01T09:43:45Z",
             "displayName":"DevOps-Test",
             "lastUpdatedTime":"2020-12-01T09:46:13Z",
             "modelId":"b4c1616c-33b9-11eb-824e-0242ac110002",
             "status":"READY",
             "variablesCount":18
         },
         {
             "createdTime":"2020-12-01T09:43:30Z",
             "displayName":"DevOps-Test",
             "lastUpdatedTime":"2020-12-01T09:45:10Z",
             "modelId":"ab9d3e30-33b9-11eb-a3f4-0242ac110002",
             "status":"READY",
             "variablesCount":18
         }
    ],
    "currentCount": 1,
    "maxCount": 50, 
    "nextLink": "<link to more models>"
}

Yanıt, , , ve 4 models currentCount alan maxCount nextLink içerir.

  • models oluşturma saati, son güncelleştirme zamanı, model kimliği, görünen ad, değişken sayıları ve her modelin durumunu içerir.
  • currentCount eğitilen çok değişkenli modellerin sayısını içerir.
  • maxCount , bu kaynak tarafından desteklenen en fazla model Anomali Algılayıcısı sayısıdır.
  • nextLink daha fazla model getirmek için kullanılabilir.

Model kimliğine göre modelleri al

Bu sayfa model kimliğine göre model bilgilerini sorgulamak için istek URL'sini açıklar. Örnek yanıt şu şekildedir

{
        "modelId": "45aad126-aafd-11ea-b8fb-d89ef3400c5f",
        "createdTime": "2020-06-30T00:00:00Z",
        "lastUpdatedTime": "2020-06-30T00:00:00Z",
        "modelInfo": {
          "slidingWindow": 300,
          "alignPolicy": {
            "alignMode": "Outer",
            "fillNAMethod": "Linear",
            "paddingValue": 0
          },
          "source": "<TRAINING_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS>",
          "startTime": "2019-04-01T00:00:00Z",
          "endTime": "2019-04-02T00:00:00Z",
          "displayName": "Devops-MultiAD",
          "status": "READY",
          "errors": [],
          "diagnosticsInfo": {
            "modelState": {
              "epochIds": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
              "trainLosses": [0.6291328072547913, 0.1671326905488968, 0.12354248017072678, 0.1025966405868533, 
                              0.0958492755889896, 0.09069952368736267,0.08686016499996185, 0.0860302299260931,
                              0.0828735455870684, 0.08235538005828857],
              "validationLosses": [1.9232804775238037, 1.0645641088485718, 0.6031560301780701, 0.5302737951278687, 
                                   0.4698025286197664, 0.4395163357257843, 0.4182931482799006, 0.4057914316654053, 
                                   0.4056498706340729, 0.3849248886108984],
              "latenciesInSeconds": [0.3398594856262207, 0.3659665584564209, 0.37360644340515137, 
                                     0.3513407707214355, 0.3370304107666056, 0.31876277923583984, 
                                     0.3283309936523475, 0.3503587245941162, 0.30800247192382812,
                                     0.3327946662902832]
            },
            "variableStates": [
              {
                "variable": "ad_input",
                "filledNARatio": 0,
                "effectiveCount": 1441,
                "startTime": "2019-04-01T00:00:00Z",
                "endTime": "2019-04-02T00:00:00Z",
                "errors": []
              },
              {
                "variable": "ad_ontimer_output",
                "filledNARatio": 0,
                "effectiveCount": 1441,
                "startTime": "2019-04-01T00:00:00Z",
                "endTime": "2019-04-02T00:00:00Z",
                "errors": []
              },
              // More variables
            ]
          }
        }
      }

Sorgulanan model hakkında daha ayrıntılı bilgi alırsınız. Yanıtta model, eğitim parametreleri ve tanılama bilgileriyle ilgili meta bilgiler yer almaktadır. Tanılama Bilgileri, eğitim ilerlemesini ayıklama ve izleme için yararlıdır.

  • epochIds , modelin toplam 100 dönem içinde kaç dönem eğitilmiş olduğunu gösterir. Örneğin, model hala eğitim durumunda ise bu, 50. eğitim dönemini tamamlamış ve yarı yolda epochId [10, 20, 30, 40, 50] olduğu anlamına geliyor olabilir.
  • trainLosses ve validationLosses iyileştirme ilerlemesi yakınsanıp yakınsanmaması durumunda iki kaybın kademeli olarak azaltıp azalmaması gerektiğini kontrol etmek için kullanılır.
  • latenciesInSeconds her dönem için zaman maliyetini içerir ve her 10 dönem için kaydedilir. Bu örnekte, 10. dönem yaklaşık 0,34 saniye sürer. Bu, eğitimin tamamlanma süresiyle ilgili tahminde yardımcı olabilir.
  • variableStates her değişkenle ilgili bilgileri özetler. Azalan düzende filledNARatio sıralandı. Her değişken için kullanılan veri noktası sayılarını ve kaç filledNARatio noktanın eksik olduğunu söyler. Genellikle mümkün olduğunca filledNARatio azaltmamız gerekir. Çok fazla eksik veri noktası, model doğruluğunu bozacak.
  • Veri işleme sırasındaki hatalar alanına errors dahil edilir.

5. MVAD ile çıkarım

Çıkarım gerçekleştirmek için, çıkarım verilerini, başlangıç saati ve bitiş saatlerini içeren zip dosyasına blob kaynağını sağlamanız gerekir.

Çıkarım da zaman uyumsuzdur, bu nedenle sonuçlar hemen döndürülmaz. Bir değişkene sonuçların bağlantısını içeren yanıt üst bilgisinde kaydetmeye dikkat edin; böylece sonuçları daha sonra nereden resultId ala bilirsiniz.

Hatalara genellikle model sorunları veya veri sorunları neden olur. Model hazır değilse veya veri bağlantısı geçersizse çıkarım gerçekleştiresiniz. Eğitim verileri ve çıkarım verileri tutarlı olduğundan emin olun; bu da tam olarak aynı değişkenler, farklı zaman damgasına sahip olması gerektiği anlamına gelir. Daha fazla değişken, daha az değişken veya farklı bir değişken kümesine sahip çıkarım, veri doğrulama aşamasından geçmez ve hatalar oluşur. Veri doğrulama ertelenmiştir, böylece yalnızca sonuçları sorgularken hata iletisi alırsınız.

6. Çıkarım sonuçlarını al

Sonuçları almak resultId için gerekir. resultId , çıkarım isteğini gönderdiğinizde yanıt üst bilgilerinden elde edilir. Bu sayfa çıkarım sonuçlarını sorgulamaya ilişkin yönergeleri içerir.

Örnek yanıt şu şekildedir

 {
        "resultId": "663884e6-b117-11ea-b3de-0242ac130004",
        "summary": {
          "status": "READY",
          "errors": [],
          "variableStates": [
            {
              "variable": "ad_input",
              "filledNARatio": 0,
              "effectiveCount": 26,
              "startTime": "2019-04-01T00:00:00Z",
              "endTime": "2019-04-01T00:25:00Z",
              "errors": []
            },
            {
              "variable": "ad_ontimer_output",
              "filledNARatio": 0,
              "effectiveCount": 26,
              "startTime": "2019-04-01T00:00:00Z",
              "endTime": "2019-04-01T00:25:00Z",
              "errors": []
            },
            // more variables
          ],
          "setupInfo": {
            "source": "https://aka.ms/AnomalyDetector/MVADSampleData",
            "startTime": "2019-04-01T00:15:00Z",
            "endTime": "2019-04-01T00:40:00Z"
          }
        },
        "results": [
          {
            "timestamp": "2019-04-01T00:15:00Z",
            "errors": [
              {
                "code": "InsufficientHistoricalData",
                "message": "historical data is not enough."
              }
            ]
          },
          // more results
          {
            "timestamp": "2019-04-01T00:20:00Z",
            "value": {
              "contributors": [],
              "isAnomaly": false,
              "severity": 0,
              "score": 0.17805261260751692
            }
          },
          // more results
          {
            "timestamp": "2019-04-01T00:27:00Z",
            "value": {
              "contributors": [
                {
                  "contributionScore": 0.0007775013367514271,
                  "variable": "ad_ontimer_output"
                },
                {
                  "contributionScore": 0.0007989604079048129,
                  "variable": "ad_series_init"
                },
                {
                  "contributionScore": 0.0008900927229851369,
                  "variable": "ingestion"
                },
                {
                  "contributionScore": 0.008068144477478554,
                  "variable": "cpu"
                },
                {
                  "contributionScore": 0.008222036467507165,
                  "variable": "data_in_speed"
                },
                {
                  "contributionScore": 0.008674941549594993,
                  "variable": "ad_input"
                },
                {
                  "contributionScore": 0.02232242629793674,
                  "variable": "ad_output"
                },
                {
                  "contributionScore": 0.1583773213660846,
                  "variable": "flink_last_ckpt_duration"
                },
                {
                  "contributionScore": 0.9816531517495176,
                  "variable": "data_out_speed"
                }
              ],
              "isAnomaly": true,
              "severity": 0.42135109874230336,
              "score": 1.213510987423033
            }
          },
          // more results
        ]
      }

Yanıt; sonuç durumunu, değişken bilgilerini, çıkarım parametrelerini ve çıkarım sonuçlarını içerir.

  • variableStates çıkarım isteğinde her değişkenin bilgilerini listeler.
  • setupInfo , bu çıkarım için gönderilen istek gövdesidir.
  • results algılama sonuçlarını içerir. Üç tipik algılama sonucu türü vardır.
    1. Hata InsufficientHistoricalData kodu. Bu durum genellikle yalnızca ilk birkaç zaman damgasıyla gerçekleşir çünkü model verileri pencere tabanlı bir şekilde çıkarıyor ve karar için geçmiş verilere ihtiyaç ediyor. İlk birkaç zaman damgası için yetersiz geçmiş veri olduğu için çıkarım gerçekleştirilememektedir. Bu durumda, hata iletisi yoksayılabilir.
    2. "isAnomaly": false geçerli zaman damgasının bir anomali olmadığını gösterir.
      • severity anomalinin göreli önem derecesine ve normal veriler için her zaman 0 olduğunu gösterir.
      • score , modelin normal veri noktaları için bile sıfır olmayan bir karar aldığı ham çıkıştır.
    3. "isAnomaly": true geçerli zaman damgasındaki bir anomaliyi gösterir.
      • severity , anomalinin göreli önem derecesine ve anormal veriler için her zaman 0'dan büyük olduğunu gösterir.
      • score , modelin üzerinde karar aldığı ham çıkıştır. severity , değerinden türetilen bir score değerdir. Her veri noktasının bir score var.
      • contributors , her değişkenin katkı puanını içeren bir listedir. Daha yüksek katkı puanları, kök nedenin daha yüksek olasılığını işaret ediyor. Bu liste genellikle anomalileri yorumlamak ve kök nedenleri tanılamak için kullanılır.

Not

Yaygın bir tuzak, tüm veri noktalarını isAnomaly = true anomali olarak almaktır. Bu, çok fazla hatalı pozitif sonuçla sonuç olabilir. Hem hem de (veya ) kullanarak ciddi olan anomalileri yok edin ve (isteğe bağlı olarak) rastgele gürültüyü bastırmak için anomalilerin süresini kontrol etmek için isAnomaly severity score gruplama kullan. ile arasındaki fark için lütfen en iyi yöntemler belgesinde yer alan SSS bölümüne severity score bakın.

Sonraki adımlar