Szybki start: używanie biblioteki klienta Jednowymiarowego Wykrywacza Anomalii

Ważne

Od 20 września 2023 r. nie będzie można tworzyć nowych zasobów usługi Anomaly Detector. Usługa narzędzia do wykrywania anomalii jest wycofywana 1 października 2026 r. Zalecamy migrację do Microsoft Fabric, który integruje projekt open-source microsoft/anomaly-detector, lub bezpośrednio do projektu open-source narzędzia do wykrywania anomalii.

dokumentacja referencyjna Biblioteka |Kod źródłowy biblioteki | Pakiet (NuGet) |Znajdź przykładowy kod na 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 Anomaly Detector w języku C#, aby:

  • Wykryj anomalie w zestawie danych szeregów czasowych w formie żądania wsadowego
  • Wykrywanie stanu anomalii najnowszego punktu danych w szeregach czasowych
  • Wykrywanie punktów zmian trendu w zestawie danych.

Wymagania wstępne

  • Subskrypcja Azure — Utwórz ją bezpłatnie
  • Bieżąca wersja .NET Core
  • Po utworzeniu subskrypcji Azure utwórz zasób narzędzia do wykrywania anomalii w portalu Azure, 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.

Konfiguruj

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 pojedynczym 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ędzia do wykrywania anomalii dla .NET za pomocą następującego polecenia:

dotnet add package Azure.AI.AnomalyDetector --prerelease

Pobierz klucz i punkt końcowy

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

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w Klucze i punkt końcowy podczas przeglądania zasobu w portalu Azure. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza API można znaleźć w Keys & Endpoint podczas przeglądania zasobu w portalu Azure. Możesz użyć wartości KEY1 lub KEY2.
DATA_PATH Ten szybki przewodnik wykorzystuje plik request-data.csv, który można pobrać z naszych danych przykładowych na GitHubie. Przykładowa ścieżka: c:\\test\\request-data.csv

Przejdź do zasobu w portalu Azure. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będziesz potrzebować obu 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.

Ważne

Zalecamy uwierzytelnianie Microsoft Entra ID przy użyciu zarządzanych tożsamości Azure, aby można było uniknąć przechowywania poświadczeń z aplikacjami uruchomionymi w chmurze.

Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz API keys with Azure Key Vault (Klucze interfejsu API Azure Key Vault

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Pobierz przykładowe dane

Ten przewodnik szybki start używa pliku request-data.csv, który można pobrać z naszych przykładowych danych GitHub.

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

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.");
            }
        }
    }
}


Uruchom aplikację za pomocą następującego polecenia:

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

Zrozumienie wyników

W powyższym kodzie przykładowe dane są odczytywane i konwertowane na DetectRequest obiekt. Wywołujemy File.ReadAllLines ze ścieżką pliku, tworzymy listę obiektów TimeSeriesPoint i usuwamy znaki nowej linii. 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 oczekujemy odpowiedzi w postaci obiektu EntireDetectResponse. 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 referencyjna biblioteki |Kod źródłowy biblioteki | Pakiet (npm) |Znajdź przykładowy kod na GitHub

Rozpoczęcie pracy z biblioteką klienta Anomaly Detector dla 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 Anomaly Detector w języku JavaScript, aby:

  • Wykryj anomalie w zestawie danych szeregów czasowych w formie żądania wsadowego
  • Wykrywanie stanu anomalii najnowszego punktu danych w szeregach czasowych
  • Wykrywanie punktów zmian trendu w zestawie danych.

Wymagania wstępne

Konfiguruj

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

Pobierz klucz i punkt końcowy

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

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w Klucze i punkt końcowy podczas przeglądania zasobu w portalu Azure. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza API można znaleźć w Keys & Endpoint podczas przeglądania zasobu w portalu Azure. Możesz użyć wartości KEY1 lub KEY2.
datapath Ten szybki przewodnik wykorzystuje plik request-data.csv, który można pobrać z naszych danych przykładowych na GitHubie.

Przejdź do zasobu w portalu Azure. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będziesz potrzebować obu 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.

Ważne

Zalecamy uwierzytelnianie Microsoft Entra ID przy użyciu zarządzanych tożsamości Azure, aby można było uniknąć przechowywania poświadczeń z aplikacjami uruchomionymi w chmurze.

Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz API keys with Azure Key Vault (Klucze interfejsu API Azure Key Vault

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Pobierz przykładowe dane

Ten przewodnik szybki start używa pliku request-data.csv, który można pobrać z naszych przykładowych danych GitHub.

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

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");

// Retrieve the endpoint and key from the environment variables.
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

Zrozumienie wyników

W powyższym kodzie używamy API Anomaly Detector, aby wykryć anomalie w całym szeregu czasowym w trybie wsadowym za pomocą metody client.detectEntireSeries(). Przechowujemy zwrócony obiekt AnomalyDetectorDetectEntireSeriesResponse. Następnie przechodzimy przez listę odpowiedzi isAnomaly i wyświetlamy indeks dowolnych 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 referencyjna biblioteki | | |

Rozpocznij pracę z biblioteką klienta narzędzia do wykrywania anomalii dla 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 Anomaly Detector w Pythonie, aby:

  • Wykryj anomalie w zestawie danych szeregów czasowych w formie żądania wsadowego
  • Wykrywanie stanu anomalii najnowszego punktu danych w szeregach czasowych
  • Wykrywanie punktów zmian trendu w zestawie danych.

Wymagania wstępne

Konfiguruj

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

pip install --upgrade azure.ai.anomalydetector

Pobierz klucz i punkt końcowy

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

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w Klucze i punkt końcowy podczas przeglądania zasobu w portalu Azure. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza API można znaleźć w Keys & Endpoint podczas przeglądania zasobu w portalu Azure. Możesz użyć wartości KEY1 lub KEY2.
DATA_PATH Ten szybki przewodnik wykorzystuje plik request-data.csv, który można pobrać z naszych danych przykładowych na GitHubie. Przykładowa ścieżka: c:\\test\\request-data.csv

Przejdź do zasobu w portalu Azure. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będziesz potrzebować obu 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.

Ważne

Zalecamy uwierzytelnianie Microsoft Entra ID przy użyciu zarządzanych tożsamości Azure, aby można było uniknąć przechowywania poświadczeń z aplikacjami uruchomionymi w chmurze.

Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz API keys with Azure Key Vault (Klucze interfejsu API Azure Key Vault

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Pobierz przykładowe dane

Ten przewodnik szybki start używa pliku request-data.csv, który można pobrać z naszych przykładowych danych GitHub.

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

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 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 środowisku produkcyjnym użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak Azure Key Vault. Aby uzyskać więcej informacji na temat zabezpieczeń poświadczeń, zobacz artykuł Azure AI services security .

  3. Uruchom aplikację poleceniem python 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

Zrozumienie wyników

W powyższym kodzie wywołujemy Anomaly Detector API dwa razy. Pierwsze wywołanie sprawdza punkty zmian trendu w naszej przykładowej serii danych za pomocą metody detect_change_point. To wywołanie zwraca ChangePointDetectResponse, które przechowaliśmy w zmiennej nazwanej change_point_request. Następnie iterujemy przez listę 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 anomaliów przy użyciu metody detect_entire_series. To wywołanie zwraca EntireDetectResponse, które przechowaliśmy w zmiennej nazwanej anomaly_response. Iterujemy przez 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 środowisku produkcyjnym użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak Azure Key Vault. Aby uzyskać więcej informacji na temat zabezpieczeń poświadczeń, zobacz artykuł Azure AI services security .

  3. Uruchom aplikację poleceniem python 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.

Zrzut ekranu przedstawiający wyniki z indeksami anomalii i punktów zmian na wykresie punktowym. Różne kształty i kolory są używane dla różnych typów danych.

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ć.

W tym szybkim starcie nauczysz się, jak wykrywać anomalie w zbiorze danych szeregów czasowych przy użyciu usługi Anomaly Detector i narzędzia cURL.

Aby zapoznać się z ogólnymi pojęciami dotyczącymi Detektora Anomalii, zobacz artykuł przeglądowy.

Wymagania wstępne

  • Subskrypcja Azure — Utwórz ją bezpłatnie
  • Po utworzeniu subskrypcji Azure utwórz zasób narzędzia do wykrywania anomalii w portalu Azure, 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 referencji interfejsu API REST Azure AI Foundry.

Pobierz klucz i punkt końcowy

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

Nazwa zmiennej Wartość
ANOMALY_DETECTOR_ENDPOINT Tę wartość można znaleźć w Klucze i punkt końcowy podczas przeglądania zasobu w portalu Azure. Przykładowy punkt końcowy: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY Wartość klucza API można znaleźć w Keys & Endpoint podczas przeglądania zasobu w portalu Azure. Możesz użyć wartości KEY1 lub KEY2.

Przejdź do zasobu w portalu Azure. Punkt końcowy i klucze można znaleźć w sekcji Zarządzanie zasobami. Skopiuj punkt końcowy i klucz dostępu, ponieważ będziesz potrzebować obu 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.

Ważne

Zalecamy uwierzytelnianie Microsoft Entra ID przy użyciu zarządzanych tożsamości Azure, aby można było uniknąć przechowywania poświadczeń z aplikacjami uruchomionymi w chmurze.

Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz kluczy interfejsu API, przechowuj je bezpiecznie w Azure Key Vault, regularnie obracaj klucze i ograniczaj dostęp do Azure Key Vault przy użyciu kontroli dostępu opartej na rolach i ograniczeń dostępu do sieci. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz API keys with Azure Key Vault (Klucze interfejsu API Azure Key Vault

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług Azure AI.

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 referencji interfejsu API REST Azure AI Foundry.
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 powłoki Bash do uruchomienia polecenia cURL, twoje 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ę interfejsu API REST Azure AI Foundry.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję Azure AI services, 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: