Szybki start: używanie biblioteki klienta univariate Narzędzie do wykrywania anomalii

Ważne

Od 20 września 2023 r. nie będzie można tworzyć nowych zasobów Narzędzie do wykrywania anomalii. Usługa Narzędzie do wykrywania anomalii jest wycofywana 1 października 2026 r.

Dokumentacja biblioteki referencyjnej |— pakiet kodu | źródłowego biblioteki (NuGet) |Znajdowanie przykładowego kodu w witrynie GitHub

Rozpocznij pracę z biblioteką klienta Narzędzie do wykrywania anomalii dla języka C#. Wykonaj następujące kroki, aby zainstalować pakiet za pomocą algorytmów dostarczonych przez usługę. Usługa Narzędzie do wykrywania anomalii umożliwia automatyczne znajdowanie nieprawidłowości w danych szeregów czasowych przy użyciu najlepiej dopasowanych modeli, niezależnie od branży, scenariusza lub ilości danych.

Użyj biblioteki klienta Narzędzie do wykrywania anomalii dla języka C#, aby:

  • Wykrywanie anomalii w zestawie danych szeregów czasowych jako żądanie wsadowe
  • Wykrywanie stanu anomalii najnowszego punktu danych w szeregach czasowych
  • Wykrywanie punktów zmian trendu w zestawie danych.

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Bieżąca wersja platformy .NET Core
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób Narzędzie do wykrywania anomalii w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Poczekaj na wdrożenie i wybierz przycisk Przejdź do zasobu . Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Ustawienia

Tworzenie nowej aplikacji .NET Core

W oknie konsoli (takim jak cmd, PowerShell lub Bash) użyj dotnet new polecenia , aby utworzyć nową aplikację konsolową o nazwie anomaly-detector-quickstart. To polecenie tworzy prosty projekt "Hello World" z jednym plikiem źródłowym języka C#: Program.cs.

dotnet new console -n anomaly-detector-quickstart

Zmień katalog na nowo utworzony folder aplikacji. Aplikację można skompilować za pomocą następujących funkcji:

dotnet build

Dane wyjściowe kompilacji nie powinny zawierać żadnych ostrzeżeń ani błędów.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Instalowanie biblioteki klienta

W katalogu aplikacji zainstaluj bibliotekę klienta Narzędzie do wykrywania anomalii dla platformy .NET za pomocą następującego polecenia:

dotnet add package Azure.AI.AnomalyDetector --prerelease

Pobieranie klucza i punktu końcowego

Aby pomyślnie wykonać wywołanie usługi Narzędzie do wykrywania anomalii, potrzebne są następujące wartości:

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza interfejsu API można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
DATA_PATH W tym przewodniku request-data.csv Szybki start jest używany plik, który można pobrać z przykładowych danych usługi GitHub. Przykładowa ścieżka: c:\\test\\request-data.csv

Przejdź do zasobu w witrynie Azure Portal. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Tworzenie zmiennych środowiskowych

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Pobierz przykładowe dane

W tym przewodniku request-data.csv Szybki start jest używany plik, który można pobrać z przykładowych danych usługi GitHub

Możesz również pobrać przykładowe dane, uruchamiając polecenie:

curl "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/anomalydetector/azure-ai-anomalydetector/samples/sample_data/request-data.csv" --output request-data.csv

Wykrywanie anomalii

W katalogu projektu otwórz plik program.cs i zastąp ciąg następującym kodem:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Azure;
using Azure.AI.AnomalyDetector;
using static System.Environment;

namespace anomaly_detector_quickstart
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT");
            string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");

            var endpointUri = new Uri(endpoint);
            var credential = new AzureKeyCredential(apiKey);

            //create client
            AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);

            //read data
            //example: string datapath = @"c:\test\request-data.csv";
            string datapath = @"REPLACE_WITH_YOUR_LOCAL_SAMPLE_REQUEST_DATA_PATH";

            List<TimeSeriesPoint> list = File.ReadAllLines(datapath, Encoding.UTF8)
                .Where(e => e.Trim().Length != 0)
                .Select(e => e.Split(','))
                .Where(e => e.Length == 2)
                .Select(e => new TimeSeriesPoint(float.Parse(e[1])) { Timestamp = DateTime.Parse(e[0]) }).ToList();

              //create request
            UnivariateDetectionOptions request = new UnivariateDetectionOptions(list)
            {
                Granularity = TimeGranularity.Daily
            };

            UnivariateEntireDetectionResult result = client.DetectUnivariateEntireSeries(request);

            bool hasAnomaly = false;
            for (int i = 0; i < request.Series.Count; ++i)
            {
                if (result.IsAnomaly[i])
                {
                    Console.WriteLine("Anomaly detected at index: {0}.", i);
                    hasAnomaly = true;
                }
            }
            if (!hasAnomaly)
            {
                Console.WriteLine("No anomalies detected in the series.");
            }
        }
    }
}


Ważne

W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji na temat zabezpieczeń poświadczeń, zobacz artykuł Zabezpieczenia usług Azure AI.

dotnet run program.cs

Wyjście

Anomaly detected at index:      3
Anomaly detected at index:      18
Anomaly detected at index:      21
Anomaly detected at index:      22
Anomaly detected at index:      23
Anomaly detected at index:      24
Anomaly detected at index:      25
Anomaly detected at index:      28
Anomaly detected at index:      29
Anomaly detected at index:      30
Anomaly detected at index:      31
Anomaly detected at index:      32
Anomaly detected at index:      35
Anomaly detected at index:      44

Szczegóły kodu

Informacje o wynikach

W powyższym kodzie przykładowe dane są odczytywane i konwertowane na DetectRequest obiekt. Wywołujemy File.ReadAllLines ścieżkę pliku i tworzymy listę TimeSeriesPoint obiektów i usuwamy wszystkie nowe znaki wiersza. Wyodrębnij wartości i oddziel znacznik czasu od jego wartości liczbowej i dodaj je do nowego TimeSeriesPoint obiektu. Obiekt DetectRequest składa się z serii punktów danych z TimeGranularity.Daily dokładnością (lub okresowością) punktów danych. Następnie wywołujemy metodę klienta DetectEntireSeriesAsync z obiektem DetectRequest i czekamy na odpowiedź jako EntireDetectResponse obiekt. Następnie iterujemy wartości odpowiedzi IsAnomaly i wyświetlamy wszystkie wartości, które są prawdziwe. Te wartości odpowiadają indeksowi nietypowych punktów danych, jeśli zostały znalezione.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób Narzędzie do wykrywania anomalii, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów. Możesz również rozważyć usunięcie utworzonych zmiennych środowiskowych, jeśli nie zamierzasz już ich używać.

Dokumentacja biblioteki dokumentacja |pakietu kodu | źródłowego biblioteki (npm) |Znajdowanie przykładowego kodu w usłudze GitHub

Wprowadzenie do biblioteki klienta Narzędzie do wykrywania anomalii dla języka JavaScript. Wykonaj następujące kroki, aby zainstalować pakiet i rozpocząć korzystanie z algorytmów dostarczonych przez usługę. Usługa Narzędzie do wykrywania anomalii umożliwia automatyczne znajdowanie nieprawidłowości w danych szeregów czasowych przy użyciu najlepiej dopasowanego modelu, niezależnie od branży, scenariusza lub ilości danych.

Użyj biblioteki klienta Narzędzie do wykrywania anomalii dla języka JavaScript, aby:

  • Wykrywanie anomalii w zestawie danych szeregów czasowych jako żądanie wsadowe
  • Wykrywanie stanu anomalii najnowszego punktu danych w szeregach czasowych
  • Wykrywanie punktów zmian trendu w zestawie danych.

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Bieżąca wersja środowiska Node.js
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób Narzędzie do wykrywania anomalii w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Poczekaj na wdrożenie i wybierz przycisk Przejdź do zasobu .
    • Będziesz potrzebować klucza i punktu końcowego z utworzonego zasobu, aby połączyć aplikację z interfejsem API Narzędzie do wykrywania anomalii. Użyjesz klucza i punktu końcowego do utworzenia zmiennych środowiskowych. Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.

Ustawienia

Tworzenie nowej aplikacji Node.js

W oknie konsoli (na przykład cmd, PowerShell lub Bash) utwórz nowy katalog dla aplikacji i przejdź do niego.

mkdir myapp && cd myapp

package.json Utwórz plik z następującą zawartością:

{
  "dependencies": {
    "@azure/ai-anomaly-detector": "next",
    "@azure-rest/ai-anomaly-detector": "next",
    "@azure/core-auth": "^1.3.0",
    "csv-parse": "^5.3.0"
  }
}

Instalowanie biblioteki klienta

Zainstaluj wymagane pakiety npm, uruchamiając następujące polecenie z tego samego katalogu co plik package.json:

npm install

Pobieranie klucza i punktu końcowego

Aby pomyślnie wykonać wywołanie usługi Narzędzie do wykrywania anomalii, potrzebne są następujące wartości:

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza interfejsu API można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
datapath W tym przewodniku request-data.csv Szybki start jest używany plik, który można pobrać z przykładowych danych usługi GitHub.

Przejdź do zasobu w witrynie Azure Portal. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Tworzenie zmiennych środowiskowych

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Pobierz przykładowe dane

W tym przewodniku request-data.csv Szybki start jest używany plik, który można pobrać z przykładowych danych usługi GitHub

Możesz również pobrać przykładowe dane, uruchamiając polecenie:

curl "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/anomalydetector/azure-ai-anomalydetector/samples/sample_data/request-data.csv" --output request-data.csv

Wykrywanie anomalii

Utwórz plik o nazwie index.js i zastąp element następującym kodem:

const AnomalyDetector = require("@azure-rest/ai-anomaly-detector").default,
  { isUnexpected } = require("@azure-rest/ai-anomaly-detector");
const { AzureKeyCredential } = require("@azure/core-auth");

const { parse } = require("csv-parse/sync");
const fs = require("fs");

// You will need to set this environment variables or edit the following values
const apiKey = process.env["ANOMALY_DETECTOR_API_KEY"] || "";
const endpoint = process.env["ANOMALY_DETECTOR_ENDPOINT"] || "";
const timeSeriesDataPath = "./request-data.csv";

function read_series_from_file(path) {
  let result = Array();
  let input = fs.readFileSync(path).toString();
  let parsed = parse(input, { skip_empty_lines: true });
  parsed.forEach(function (e) {
    result.push({ timestamp: new Date(e[0]), value: Number(e[1]) });
  });
  return result;
}

async function main() {
  // create client
  const credential = new AzureKeyCredential(apiKey);
  const client = AnomalyDetector(endpoint, credential);

  // construct request
  const options = {
    body: {
      granularity: "daily",
      imputeMode: "auto",
      maxAnomalyRatio: 0.25,
      sensitivity: 95,
      series: read_series_from_file(timeSeriesDataPath),
    },
    headers: { "Content-Type": "application/json" },
  };

  // get last detect result
  const result = await client.path("/timeseries/entire/detect").post(options);
  if (isUnexpected(result)) {
    throw result;
  }

  if (result.body.isAnomaly) {
    result.body.isAnomaly.forEach(function (anomaly, index) {
      if (anomaly === true) {
        console.log(index);
      }
    });
  } else {
    console.log("There is no anomaly detected from the series.");
  }

}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

module.exports = { main };

Uruchamianie aplikacji

Uruchom aplikację, wykonując polecenie node dla pliku szybkiego startu.

node index.js

Wyjście

Anomalies were detected from the series at index:
3
18
21
22
23
24
25
28
29
30
31
32
35
44

Informacje o wynikach

W powyższym kodzie wywołujemy interfejs API Narzędzie do wykrywania anomalii w celu wykrywania anomalii w całej serii czasowej jako partii za pomocą metody detectEntireSeries() klienta. Przechowujemy zwrócony obiekt AnomalyDetectorDetectEntireSeriesResponse . Następnie iterujemy listę odpowiedzi isAnomaly i wyświetlamy indeks wszystkich true wartości. Te wartości odpowiadają indeksowi nietypowych punktów danych, jeśli zostały znalezione.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób Narzędzie do wykrywania anomalii, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów. Możesz również rozważyć usunięcie utworzonych zmiennych środowiskowych, jeśli nie zamierzasz już ich używać.

Dokumentacja biblioteki dokumentacji |Pakietu kodu | źródłowego biblioteki (PyPi) |Znajdowanie przykładowego kodu w usłudze GitHub

Rozpocznij pracę z biblioteką klienta Narzędzie do wykrywania anomalii dla języka Python. Wykonaj następujące kroki, aby zainstalować pakiet i rozpocząć korzystanie z algorytmów udostępnianych przez usługę. Usługa Narzędzie do wykrywania anomalii umożliwia automatyczne znajdowanie nieprawidłowości w danych szeregów czasowych przy użyciu najlepiej dopasowanych modeli, niezależnie od branży, scenariusza lub ilości danych.

Użyj biblioteki klienta Narzędzie do wykrywania anomalii dla języka Python, aby:

  • Wykrywanie anomalii w zestawie danych szeregów czasowych jako żądanie wsadowe
  • Wykrywanie stanu anomalii najnowszego punktu danych w szeregach czasowych
  • Wykrywanie punktów zmian trendu w zestawie danych.

Wymagania wstępne

Ustawienia

Zainstaluj bibliotekę klienta. Bibliotekę klienta można zainstalować za pomocą następujących funkcji:

pip install --upgrade azure.ai.anomalydetector

Pobieranie klucza i punktu końcowego

Aby pomyślnie wykonać wywołanie usługi Narzędzie do wykrywania anomalii, potrzebne są następujące wartości:

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza interfejsu API można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
DATA_PATH W tym przewodniku request-data.csv Szybki start jest używany plik, który można pobrać z przykładowych danych usługi GitHub. Przykładowa ścieżka: c:\\test\\request-data.csv

Przejdź do zasobu w witrynie Azure Portal. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Tworzenie zmiennych środowiskowych

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Pobierz przykładowe dane

W tym przewodniku request-data.csv Szybki start jest używany plik, który można pobrać z przykładowych danych usługi GitHub

Możesz również pobrać przykładowe dane, uruchamiając polecenie:

curl "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/anomalydetector/azure-ai-anomalydetector/samples/sample_data/request-data.csv" --output request-data.csv

Wykrywanie anomalii

  1. Utwórz nowy plik w języku Python o nazwie quickstart.py. Następnie otwórz go w preferowanym edytorze lub środowisku IDE.

  2. Zastąp zawartość quickstart.py następującym kodem. Zmodyfikuj kod, aby dodać nazwy zmiennych środowiskowych dla klucza, punktu końcowego i ścieżki danych szeregów czasowych:

    from azure.ai.anomalydetector import AnomalyDetectorClient
    from azure.ai.anomalydetector.models import *
    from azure.core.credentials import AzureKeyCredential
    import pandas as pd
    import os
    
    API_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
    ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
    DATA_PATH = "REPLACE_WITH_YOUR_LOCAL_SAMPLE_REQUEST_DATA_PATH" #example: c:\\test\\request-data.csv
    
    client = AnomalyDetectorClient(ENDPOINT, AzureKeyCredential(API_KEY))
    
    series = []
    data_file = pd.read_csv(DATA_PATH, header=None, encoding='utf-8', date_parser=[0])
    for index, row in data_file.iterrows():
        series.append(TimeSeriesPoint(timestamp=row[0], value=row[1]))
    
    request = UnivariateDetectionOptions(series=series, granularity=TimeGranularity.DAILY)
    
    change_point_response = client.detect_univariate_change_point(request)
    anomaly_response = client.detect_univariate_entire_series(request)
    
    for i in range(len(data_file.values)):
        if (change_point_response.is_change_point[i]):
            print("Change point detected at index: "+ str(i))
        elif (anomaly_response.is_anomaly[i]):
            print("Anomaly detected at index:      "+ str(i))
    

    Ważne

    W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji na temat zabezpieczeń poświadczeń, zobacz artykuł Zabezpieczenia usług Azure AI.

  3. Uruchamianie aplikacji za python pomocą polecenia w pliku Szybki start

    python quickstart.py
    

Wyjście

Anomaly detected at index:      3
Anomaly detected at index:      18
Change point detected at index: 20
Anomaly detected at index:      21
Anomaly detected at index:      22
Anomaly detected at index:      23
Anomaly detected at index:      24
Anomaly detected at index:      25
Change point detected at index: 27
Anomaly detected at index:      28
Anomaly detected at index:      29
Anomaly detected at index:      30
Anomaly detected at index:      31
Anomaly detected at index:      32
Anomaly detected at index:      35
Anomaly detected at index:      44

Informacje o wynikach

W powyższym kodzie wywołujemy interfejs API Narzędzie do wykrywania anomalii dwa razy. Pierwsze wywołanie sprawdza punkty zmian trendu w naszej przykładowej serii danych za pomocą detect_change_point metody . To wywołanie zwraca ChangePointDetectResponse wartość przechowywaną w zmiennej o nazwie change_point_request. Następnie wykonujemy iterację po liście odpowiedzi is_change_point i wyświetlamy indeks wszystkich wartości z wartością logiczną .true

Drugie wywołanie sprawdza całą przykładową serię danych pod kątem detect_entire_series anomalii przy użyciu metody . To wywołanie zwraca EntireDetectResponse wartość przechowywaną w zmiennej o nazwie anomaly_response. Iterujemy listę odpowiedzi is_anomaly i wyświetlamy indeks wszystkich wartości z wartością logiczną .true Alternatywnie można użyć detect_last_point metody , która jest bardziej odpowiednia do wykrywania anomalii w danych w czasie rzeczywistym. Aby dowiedzieć się więcej, zapoznaj się z przewodnikiem najlepszych rozwiązań.

Wizualizowanie wyników

Aby zwizualizować anomalie i punkty zmian w odniesieniu do przykładowej serii danych, użyjemy popularnej biblioteki open source matplotlib.

  1. Zainstaluj bibliotekę.

    pip install matplotlib
    
  2. Zmodyfikuj plik quickstart.py przy użyciu następującego kodu:

    from azure.ai.anomalydetector import AnomalyDetectorClient
    from azure.ai.anomalydetector.models import *
    from azure.core.credentials import AzureKeyCredential
    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import os
    
    API_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
    ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
    DATA_PATH = "REPLACE_WITH_YOUR_LOCAL_SAMPLE_REQUEST_DATA_PATH" #example: c:\\test\\request-data.csv
    
    client = AnomalyDetectorClient(ENDPOINT, AzureKeyCredential(API_KEY))
    
    series = []
    data_file = pd.read_csv(DATA_PATH, header=None, encoding='utf-8', date_parser=[0])
    for index, row in data_file.iterrows():
        series.append(TimeSeriesPoint(timestamp=row[0], value=row[1]))
    
    request = UnivariateDetectionOptions(series=series, granularity=TimeGranularity.DAILY)
    
    change_point_response = client.detect_univariate_change_point(request)
    anomaly_response = client.detect_univariate_entire_series(request)
    
    for i in range(len(data_file.values)):
        temp_date_to_num = mdates.date2num(data_file.values[i])
        date= temp_date_to_num[0]
        if (change_point_response.is_change_point[i]):
            plt.plot(date,data_file.values[i][1], 's', color ='blue')
            print("Change point detected at index: "+ str(i))
        elif (anomaly_response.is_anomaly[i]):
            plt.plot(date,data_file.values[i][1], '^', color="red")
            print("Anomaly detected at index:      "+ str(i))
        else:
            plt.plot(date,data_file.values[i][1], 'o', color ='green')
    plt.show()
    

    Ważne

    W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji na temat zabezpieczeń poświadczeń, zobacz artykuł Zabezpieczenia usług Azure AI.

  3. Uruchamianie aplikacji za python pomocą polecenia w pliku Szybki start

    python quickstart.py
    

Wyjście

W tym przykładzie kodu dodaliśmy bibliotekę matplotlib , aby umożliwić wizualizowanie i łatwe odróżnienie normalnych punktów danych od punktów zmian i anomalii. Punkty zmian są reprezentowane przez niebieskie kwadraty, anomalie są czerwonymi trójkątami, a normalne punkty danych są zielonymi okręgami. Daty są konwertowane na liczby przy użyciu matplotlibmetody w date2num celu zapewnienia przyjaznych dla wykresów wartości osi y.

Screenshot of results with indexes of anomalies and change points on a scatter plot. Different shapes and colors are used for different data types..

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć zasób Narzędzie do wykrywania anomalii, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów. Możesz również rozważyć usunięcie utworzonych zmiennych środowiskowych, jeśli nie zamierzasz już ich używać.

Z tego przewodnika Szybki start dowiesz się, jak wykrywać anomalie w partii danych szeregów czasowych przy użyciu usługi Narzędzie do wykrywania anomalii i biblioteki cURL.

Aby zapoznać się z ogólnymi pojęciami dotyczącymi Narzędzie do wykrywania anomalii, zobacz artykuł z omówieniem.

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób Narzędzie do wykrywania anomalii w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Poczekaj na wdrożenie i wybierz przycisk Przejdź do zasobu . Możesz użyć warstwy cenowej bezpłatna (F0), aby wypróbować usługę, a następnie uaktualnić ją do warstwy płatnej dla środowiska produkcyjnego.
  • Prawidłowy plik JSON danych szeregów czasowych do testowania pod kątem anomalii. Jeśli nie masz własnego pliku, możesz utworzyć plik sample.json z przykładu treść żądania

Pobieranie klucza i punktu końcowego

Aby pomyślnie wykonać wywołanie usługi Narzędzie do wykrywania anomalii, potrzebne są następujące wartości:

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza interfejsu API można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal. Możesz użyć wartości KEY1 lub KEY2.

Przejdź do zasobu w witrynie Azure Portal. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będzie potrzebny zarówno do uwierzytelniania wywołań interfejsu API. Możesz użyć wartości KEY1 lub KEY2. Zawsze posiadanie dwóch kluczy umożliwia bezpieczne obracanie i ponowne generowanie kluczy bez powodowania zakłóceń usługi.

Tworzenie zmiennych środowiskowych

Tworzenie i przypisywanie trwałych zmiennych środowiskowych dla klucza i punktu końcowego.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

Wykrywanie anomalii

W wierszu polecenia uruchom następujące polecenie. Do polecenia należy wstawić następujące wartości.

  • Klucz subskrypcji usługi wykrywania anomalii.
  • Adres punktu końcowego narzędzia do wykrywania anomalii.
  • Prawidłowy plik JSON danych szeregów czasowych do testowania pod kątem anomalii. Jeśli nie masz własnego pliku, możesz utworzyć plik sample.json z przykładu Treści żądania.
curl -v POST "%ANOMALY_DETECTOR_ENDPOINT%/anomalydetector/v1.0/timeseries/entire/detect"
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: %ANOMALY_DETECTOR_API_KEY%"
-d "@path_to_sample_file.json" 

Przykład pełnego polecenia jako pojedynczego wiersza:

curl -v POST "%ANOMALY_DETECTOR_ENDPOINT%/anomalydetector/v1.0/timeseries/entire/detect" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: %ANOMALY_DETECTOR_API_KEY%" -d "@c:\test\rest.json"

Alternatywnie, jeśli używasz polecenia cURL z powłoki Bash, polecenie byłoby nieco inne:

curl -v POST "$ANOMALY_DETECTOR_ENDPOINT/anomalydetector/v1.0/timeseries/entire/detect" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: $ANOMALY_DETECTOR_API_KEY" -d "@c:\test\rest.json"

Jeśli użyto przykładowych danych z wymagań wstępnych, otrzymasz odpowiedź 200 z następującymi wynikami:

{
  "expectedValues": [
    827.7940908243968,
    798.9133774671927,
    888.6058431807189,
    900.5606407986661,
    962.8389426378304,
    933.2591606306954,
    891.0784104799666,
    856.1781601363697,
    809.8987227908941,
    807.375129007505,
    764.3196682448518,
    803.933498594564,
    823.5900620883058,
    794.0905641334288,
    883.164245249282,
    894.8419000690953,
    956.8430591101258,
    927.6285055190114,
    885.812983784303,
    851.6424797402517,
    806.0927886943216,
    804.6826815312029,
    762.74070738882,
    804.0251702513732,
    825.3523662579559,
    798.0404188724976,
    889.3016505577698,
    902.4226124345937,
    965.867078532635,
    937.3200495736695,
    896.1720524711102,
    862.0087368413656,
    816.4662342097423,
    814.4297745524709,
    771.8614479159354,
    811.859271346729,
    831.8998279215521,
    802.947544797165,
    892.5684407435083,
    904.5488214533809,
    966.8527063844707,
    937.3168391003043,
    895.180003672544,
    860.3649596356635,
    814.1707285969043,
    811.9054862686213,
    769.1083769610742,
    809.2328084659704
  ],
  "upperMargins": [
    41.389704541219835,
    39.94566887335964,
    44.43029215903594,
    45.02803203993331,
    48.14194713189152,
    46.66295803153477,
    44.55392052399833,
    42.808908006818484,
    40.494936139544706,
    40.36875645037525,
    38.215983412242586,
    40.196674929728196,
    41.17950310441529,
    39.70452820667144,
    44.1582122624641,
    44.74209500345477,
    47.84215295550629,
    46.38142527595057,
    44.290649189215145,
    42.58212398701258,
    40.30463943471608,
    40.234134076560146,
    38.137035369441,
    40.201258512568664,
    41.267618312897795,
    39.90202094362488,
    44.46508252788849,
    45.121130621729684,
    48.29335392663175,
    46.86600247868348,
    44.80860262355551,
    43.100436842068284,
    40.82331171048711,
    40.721488727623544,
    38.593072395796774,
    40.59296356733645,
    41.5949913960776,
    40.14737723985825,
    44.62842203717541,
    45.227441072669045,
    48.34263531922354,
    46.86584195501521,
    44.759000183627194,
    43.01824798178317,
    40.70853642984521,
    40.59527431343106,
    38.45541884805371,
    40.46164042329852
  ],
  "lowerMargins": [
    41.389704541219835,
    39.94566887335964,
    44.43029215903594,
    45.02803203993331,
    48.14194713189152,
    46.66295803153477,
    44.55392052399833,
    42.808908006818484,
    40.494936139544706,
    40.36875645037525,
    38.215983412242586,
    40.196674929728196,
    41.17950310441529,
    39.70452820667144,
    44.1582122624641,
    44.74209500345477,
    47.84215295550629,
    46.38142527595057,
    44.290649189215145,
    42.58212398701258,
    40.30463943471608,
    40.234134076560146,
    38.137035369441,
    40.201258512568664,
    41.267618312897795,
    39.90202094362488,
    44.46508252788849,
    45.121130621729684,
    48.29335392663175,
    46.86600247868348,
    44.80860262355551,
    43.100436842068284,
    40.82331171048711,
    40.721488727623544,
    38.593072395796774,
    40.59296356733645,
    41.5949913960776,
    40.14737723985825,
    44.62842203717541,
    45.227441072669045,
    48.34263531922354,
    46.86584195501521,
    44.759000183627194,
    43.01824798178317,
    40.70853642984521,
    40.59527431343106,
    38.45541884805371,
    40.46164042329852
  ],
  "isAnomaly": [
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    true,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false
  ],
  "isPositiveAnomaly": [
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    true,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false
  ],
  "isNegativeAnomaly": [
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false
  ],
  "period": 12
}

Aby uzyskać więcej informacji, zobacz dokumentację REST wykrywania anomalii.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję usług Azure AI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych zasobów skojarzonych z grupą zasobów.

Następne kroki

Pojęcia:

Samouczki: