Udostępnij przez


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 Narzędzi do wykrywania anomalii. Usługa Detektor anomalii zostanie wycofana 1 października 2026 r.

Dokumentacja referencyjna biblioteki |Kod źródłowy biblioteki | Pakiet (NuGet) |Znaleźć przykładowy kod na GitHubie

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 platformy Azure — utwórz bezpłatnie
  • Bieżąca wersja platformy .NET Core
  • Po utworzeniu subskrypcji platformy Azure, w portalu Azure utwórz zasób Narzędzie do wykrywania anomalii, 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ędzie do wykrywania anomalii dla platformy .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 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 API można znaleźć w sekcji Klucze i punkt końcowy podczas przeglądania zasobu w Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
DATA_PATH W tym przewodniku Szybki start używany jest plik request-data.csv, który można pobrać z naszych przykładowych danych 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ę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 za pomocą identyfikatora Entra firmy Microsoft z tożsamościami zarządzanymi dla zasobów platformy Azure, aby uniknąć przechowywania poświadczeń przy użyciu aplikacji uruchamianych 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 usłudze Azure Key Vault, regularnie wymieniaj klucze i ograniczaj dostęp do usługi 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 Klucze interfejsu API w usłudze Azure Key Vault.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach 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

W tej instrukcji Szybki start używany jest plik, który można pobrać z danych przykładowych request-data.csv

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 GitHubie

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

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Bieżąca wersja Node.js
  • Po utworzeniu subskrypcji platformy Azure, w portalu Azure utwórz zasób Narzędzie do wykrywania anomalii, 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 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 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 API można znaleźć w sekcji Klucze i punkt końcowy podczas przeglądania zasobu w Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
datapath W tym przewodniku Szybki start używany jest plik request-data.csv, który można pobrać z naszych przykładowych danych 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ę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 za pomocą identyfikatora Entra firmy Microsoft z tożsamościami zarządzanymi dla zasobów platformy Azure, aby uniknąć przechowywania poświadczeń przy użyciu aplikacji uruchamianych 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 usłudze Azure Key Vault, regularnie wymieniaj klucze i ograniczaj dostęp do usługi 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 Klucze interfejsu API w usłudze Azure Key Vault.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach 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

W tej instrukcji Szybki start używany jest plik, który można pobrać z danych przykładowych request-data.csv

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 wywołujemy interfejs API Anomaly Detector w celu wykrywania anomalii w całej serii czasowej w trybie wsadowym za pomocą metody detectEntireSeries() klienta. 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 biblioteki referencyjnej |Kod źródłowy biblioteki | Pakiet (PyPi) |Znajdź przykładowy kod na GitHubie

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

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Python 3.x
  • Biblioteka analizy danych Pandas
  • Po utworzeniu subskrypcji platformy Azure, w portalu Azure utwórz zasób Narzędzie do wykrywania anomalii, 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

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 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 API można znaleźć w sekcji Klucze i punkt końcowy podczas przeglądania zasobu w Azure Portal. Możesz użyć wartości KEY1 lub KEY2.
DATA_PATH W tym przewodniku Szybki start używany jest plik request-data.csv, który można pobrać z naszych przykładowych danych 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ę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 za pomocą identyfikatora Entra firmy Microsoft z tożsamościami zarządzanymi dla zasobów platformy Azure, aby uniknąć przechowywania poświadczeń przy użyciu aplikacji uruchamianych 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 usłudze Azure Key Vault, regularnie wymieniaj klucze i ograniczaj dostęp do usługi 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 Klucze interfejsu API w usłudze Azure Key Vault.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach 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

W tej instrukcji Szybki start używany jest plik, który można pobrać z danych przykładowych request-data.csv

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 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. 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 API do wykrywania anomalii 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 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. 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 platformy Azure — utwórz bezpłatnie
  • Po utworzeniu subskrypcji platformy Azure, w portalu Azure utwórz zasób Narzędzie do wykrywania anomalii, 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 zawartości żądania.

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 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 API można znaleźć w sekcji Klucze i punkt końcowy podczas przeglądania zasobu w 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ę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 za pomocą identyfikatora Entra firmy Microsoft z tożsamościami zarządzanymi dla zasobów platformy Azure, aby uniknąć przechowywania poświadczeń przy użyciu aplikacji uruchamianych 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 usłudze Azure Key Vault, regularnie wymieniaj klucze i ograniczaj dostęp do usługi 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 Klucze interfejsu API w usłudze Azure Key Vault.

Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach 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 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 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 referencję 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: