التشغيل السريع: استخدام مكتبة عميل Univariate Anomaly Detector

هام

اعتبارا من 20 سبتمبر 2023، لن تتمكن من إنشاء موارد Anomaly Detector جديدة. يتم إيقاف خدمة Anomaly Detector في 1 أكتوبر 2026.

الوثائق المرجعية |للمكتبة حزمة التعليمات البرمجية | المصدر للمكتبة (NuGet) |ابحث عن نموذج التعليمات البرمجية على GitHub

ابدأ مع مكتبة عميل Anomaly Detector لـ C#. اتبع هذه الخطوات لتثبيت الحزمة والبدء في استخدام الخوارزميات التي توفرها الخدمة. تمكنك خدمة Anomaly Detector من العثور على أي تشوهات في بيانات السلسلة الزمنية باستخدام أفضل النماذج عليها تلقائيًا، بصرف النظر عن حجم البيانات أو السيناريو أو المجال.

استخدام مكتبة عميل Anomaly Detector لـ C# من أجل:

  • الكشف عن الحالات الشاذة في جميع أنحاء مجموعة بيانات السلسلة الزمنية، كطلب دفعي
  • الكشف عن حالة الشذوذ لأحدث نقطة بيانات في السلسلة الزمنية
  • الكشف عن نقاط تغيير الاتجاه في مجموعة البيانات.

المتطلبات الأساسية

  • اشتراك Azure - إنشاء اشتراك مجاناً
  • الإصدار الحالي من .NET Core.
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Anomaly Detector في مدخل Microsoft Azure للحصول على المفتاح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق الزر الانتقال إلى المورد. يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.

الإعداد

إنشاء تطبيق .NET Core جديد

في نافذة وحدة تحكم (مثل cmd أو PowerShell أو Bash)، استخدم الأمر ⁧dotnet new⁩ لإنشاء تطبيق وحدة تحكم جديد بالاسم ⁧anomaly-detector-quickstart⁩. ينشئ هذا الأمر مشروع "Hello World" بسيطًا مع ملف مصدر C# واحد: Program.cs.

dotnet new console -n anomaly-detector-quickstart

غيّر دليلك إلى مجلد التطبيق المنشأ حديثاً. يمكنك إنشاء التطبيق باستخدام:

dotnet build

يجب ألا يحتوي إخراج البناء على تحذيرات أو أخطاء.

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

تثبيت مكتبة العميل

ضمن دليل التطبيق، قم بتثبيت مكتبة عميل Anomaly Detector من أجل .NET باستخدام الأمر التالي:

dotnet add package Azure.AI.AnomalyDetector --prerelease

قم باسترداد المفتاح ونقطة النهاية

لإجراء استدعاء بنجاح مقابل خدمة Anomaly Detector، ستحتاج إلى القيم التالية:

اسم المتغير القيمة‬
ANOMALY_DETECTOR_ENDPOINT يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. مثال على نقطة النهاية: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY يمكن العثور على قيمة مفتاح واجهة برمجة التطبيقات في قسم المفاتيح ونقطة النهاية عند فحص المورد الخاص بك من مدخل Microsoft Azure. يمكنك استخدام إما KEY1 أو KEY2.
DATA_PATH يستخدم request-data.csv هذا التشغيل السريع الملف الذي يمكن تنزيله من بيانات نموذج GitHub. مثال على المسار: c:\\test\\request-data.csv

انتقل إلى مجموعة الموارد في مدخل Microsoft Azure. يمكن العثور على نقطة النهاية والمفاتيح في قسم إدارة الموارد. انسخ نقطة النهاية ومفتاح الوصول حيث ستحتاج إلى كليهما لمصادقة استدعاءات واجهة برمجة التطبيقات. يمكنك استخدام إما KEY1 أو KEY2. يسمح لك وجود مفتاحين دائماً بتدوير المفاتيح وإعادة إنشائها بأمان دون التسبب في تعطيل الخدمة.

إنشاء متغيرات البيئة

إنشاء متغيرات بيئة ثابتة وتعيينها للمفتاح ونقطة النهاية.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

تنزيل نموذج البيانات

يستخدم request-data.csv هذا التشغيل السريع الملف الذي يمكن تنزيله من بيانات نموذج GitHub

يمكنك أيضا تنزيل نموذج البيانات عن طريق تشغيل:

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

الكشف عن الحالات الخارجة عن المألوف

من دليل المشروع، افتح ملف program.cs واستبدل بالتعليمات البرمجية التالية:

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


هام

للإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها مثل Azure Key Vault. لمزيد من المعلومات حول أمان بيانات الاعتماد، راجع مقالة أمان خدمات Azure الذكاء الاصطناعي.

dotnet run program.cs

الإخراج

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

تفاصيل التعليمات البرمجية

فهم نتائج SMART الخاصة بك

في التعليمات البرمجية أعلاه، تتم قراءة بيانات العينة وتحويلها إلى كائن DetectRequest . نستدعي File.ReadAllLines مسار الملف وننشئ قائمة بالكائنات TimeSeriesPoint ، ونجرد أي أحرف سطر جديدة. قم باستخراج القيم وفصل الطابع الزمني من قيمته الرقمية، ثم إضافتهم إلى كائن TimeSeriesPoint جديد. DetectRequest يتكون الكائن من سلسلة من نقاط البيانات، مع TimeGranularity.Daily لنقاوة (أو دورية) نقاط البيانات. بعد ذلك، نستدعي أسلوب العميل DetectEntireSeriesAsync مع DetectRequest الكائن وننتظر الاستجابة ككائن EntireDetectResponse . ثم نقوم بالتكرار من خلال قيم الاستجابة IsAnomaly وطباعة أي قيم صحيحة. تتوافق هذه القيم مع فهرس نقاط البيانات الشاذة، إن وجدت.

تنظيف الموارد

إذا كنت ترغب في تنظيف مورد Anomaly Detector وإزالته، يمكنك حذف المورد أو مجموعة الموارد. يؤدي حذف مجموعة الموارد إلى حذف أية موارد أخرى مقترنة بها أيضًا. قد تحتاج أيضا إلى التفكير في حذف متغيرات البيئة التي قمت بإنشائها إذا لم تعد تنوي استخدامها.

الوثائق المرجعية |للمكتبة حزمة التعليمات البرمجية | المصدر للمكتبة (npm) |ابحث عن نموذج التعليمات البرمجية على GitHub

ابدأ باستخدام مكتبة العميل Anomaly Detector لـ JavaScript. اتبع هذه الخطوات لتثبيت الحزمة، وابدأ في استخدام الخوارزميات التي توفرها الخدمة. تمكنك خدمة Anomaly Detector من العثور على التشوهات في بيانات السلاسل الزمنية الخاصة بك باستخدام النموذج الأفضل ملاءمة عليه تلقائيا، بغض النظر عن الصناعة أو السيناريو أو حجم البيانات.

يتم استخدام مكتبة عميل Anomaly Detector لـ JavaScript في:

  • الكشف عن الحالات الشاذة في جميع أنحاء مجموعة بيانات السلسلة الزمنية، كطلب دفعي
  • الكشف عن حالة الشذوذ لأحدث نقطة بيانات في السلسلة الزمنية
  • الكشف عن نقاط تغيير الاتجاه في مجموعة البيانات.

المتطلبات الأساسية

  • اشتراك Azure - إنشاء اشتراك مجاناً
  • الإصدار الحالي من Node.js
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Anomaly Detector في مدخل Microsoft Azure للحصول على المفتاح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق الزر الانتقال إلى المورد.
    • ستحتاج إلى المفتاح ونقطة النهاية من المورد الذي تقوم بإنشائه لتوصيل التطبيق الخاص بك بواجهة برمجة تطبيقات Anomaly Detector. ستستخدم المفتاح ونقطة النهاية لإنشاء متغيرات البيئة. يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.

الإعداد

إنشاء تطبيق Node.js جديد

في إطار نافذة وحدة التحكم (مثل cmd أو PowerShell أو Bash)، يمكنك إنشاء دليل جديد لتطبيقك وانتقل إليه.

mkdir myapp && cd myapp

أنشئ package.jsonملف بالمحتويات التالية:

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

تثبيت مكتبة العميل

قم بتثبيت حزم npm المطلوبة عن طريق تشغيل ما يلي من نفس الدليل مثل ملف package.json الخاص بك:

npm install

قم باسترداد المفتاح ونقطة النهاية

لإجراء استدعاء بنجاح مقابل خدمة Anomaly Detector، ستحتاج إلى القيم التالية:

اسم المتغير القيمة‬
ANOMALY_DETECTOR_ENDPOINT يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. مثال على نقطة النهاية: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY يمكن العثور على قيمة مفتاح واجهة برمجة التطبيقات في قسم المفاتيح ونقطة النهاية عند فحص المورد الخاص بك من مدخل Microsoft Azure. يمكنك استخدام إما KEY1 أو KEY2.
datapath يستخدم request-data.csv هذا التشغيل السريع الملف الذي يمكن تنزيله من بيانات نموذج GitHub.

انتقل إلى مجموعة الموارد في مدخل Microsoft Azure. يمكن العثور على نقطة النهاية والمفاتيح في قسم إدارة الموارد. انسخ نقطة النهاية ومفتاح الوصول حيث ستحتاج إلى كليهما لمصادقة استدعاءات واجهة برمجة التطبيقات. يمكنك استخدام إما KEY1 أو KEY2. يسمح لك وجود مفتاحين دائماً بتدوير المفاتيح وإعادة إنشائها بأمان دون التسبب في تعطيل الخدمة.

إنشاء متغيرات البيئة

إنشاء متغيرات بيئة ثابتة وتعيينها للمفتاح ونقطة النهاية.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

تنزيل نموذج البيانات

يستخدم request-data.csv هذا التشغيل السريع الملف الذي يمكن تنزيله من بيانات نموذج GitHub

يمكنك أيضا تنزيل نموذج البيانات عن طريق تشغيل:

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

الكشف عن الحالات الخارجة عن المألوف

أنشئ ملفا باسم index.js واستبدل بالتعليمات البرمجية التالية:

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

شغّل التطبيق

شغّل التطبيق باستخدام الأمر node المُتاح على ملف التشغيل السريع.

node index.js

الإخراج

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

فهم نتائج SMART الخاصة بك

في التعليمات البرمجية أعلاه، نستدعي واجهة برمجة تطبيقات Anomaly Detector للكشف عن الحالات الشاذة من خلال السلسلة الزمنية بأكملها كدفعة مع أسلوب العميل detectEntireSeries(). نقوم بتخزين الكائن AnomalyDetectorDetectEntireSeriesResponse الذي تم إرجاعه. ثم نتكرر من خلال قائمة الاستجابة isAnomaly ، ونطبع فهرس أي true قيم. تتوافق هذه القيم مع فهرس نقاط البيانات الشاذة، إن وجدت.

تنظيف الموارد

إذا كنت ترغب في تنظيف مورد Anomaly Detector وإزالته، يمكنك حذف المورد أو مجموعة الموارد. يؤدي حذف مجموعة الموارد إلى حذف أية موارد أخرى مقترنة بها أيضًا. قد تحتاج أيضا إلى التفكير في حذف متغيرات البيئة التي قمت بإنشائها إذا لم تعد تنوي استخدامها.

الوثائق المرجعية |للمكتبة حزمة التعليمات البرمجية | المصدر للمكتبة (PyPi) |ابحث عن نموذج التعليمات البرمجية على GitHub

ابدأ باستخدام مكتبة العميل Anomaly Detector لـ Python. اتبع تلك الخطوات لتثبيت الحزمة والبدء في استخدام الخوارزميات التي توفرها لك الخدمة. تمكنك خدمة Anomaly Detector من العثور على أي تشوهات في بيانات السلسلة الزمنية باستخدام أفضل النماذج عليها تلقائيًا، بصرف النظر عن حجم البيانات أو السيناريو أو المجال.

استخدام مكتبة عميل Anomaly Detector لـ Python من أجل:

  • الكشف عن الحالات الشاذة في جميع أنحاء مجموعة بيانات السلسلة الزمنية، كطلب دفعي
  • الكشف عن حالة الشذوذ لأحدث نقطة بيانات في السلسلة الزمنية
  • الكشف عن نقاط تغيير الاتجاه في مجموعة البيانات.

المتطلبات الأساسية

الإعداد

ثبت مكتبة العميل. يمكنك تثبيت مكتبة العميل باستخدام:

pip install --upgrade azure.ai.anomalydetector

قم باسترداد المفتاح ونقطة النهاية

لإجراء استدعاء بنجاح مقابل خدمة Anomaly Detector، ستحتاج إلى القيم التالية:

اسم المتغير القيمة‬
ANOMALY_DETECTOR_ENDPOINT يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. مثال على نقطة النهاية: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY يمكن العثور على قيمة مفتاح واجهة برمجة التطبيقات في قسم المفاتيح ونقطة النهاية عند فحص المورد الخاص بك من مدخل Microsoft Azure. يمكنك استخدام إما KEY1 أو KEY2.
DATA_PATH يستخدم request-data.csv هذا التشغيل السريع الملف الذي يمكن تنزيله من بيانات نموذج GitHub. مثال على المسار: c:\\test\\request-data.csv

انتقل إلى مجموعة الموارد في مدخل Microsoft Azure. يمكن العثور على نقطة النهاية والمفاتيح في قسم إدارة الموارد. انسخ نقطة النهاية ومفتاح الوصول حيث ستحتاج إلى كليهما لمصادقة استدعاءات واجهة برمجة التطبيقات. يمكنك استخدام إما KEY1 أو KEY2. يسمح لك وجود مفتاحين دائماً بتدوير المفاتيح وإعادة إنشائها بأمان دون التسبب في تعطيل الخدمة.

إنشاء متغيرات البيئة

إنشاء متغيرات بيئة ثابتة وتعيينها للمفتاح ونقطة النهاية.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

تنزيل نموذج البيانات

يستخدم request-data.csv هذا التشغيل السريع الملف الذي يمكن تنزيله من بيانات نموذج GitHub

يمكنك أيضا تنزيل نموذج البيانات عن طريق تشغيل:

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

الكشف عن الحالات الخارجة عن المألوف

  1. إنشاء ملف Python جديد باسم ⁧⁩quickstart.py. ثم افتحه في المحرر أو IDE المُفضل لديك.

  2. استبدل التعليمات البرمجية التالية بمحتويات quickstart.py. تعديل التعليمات البرمجية لإضافة أسماء متغيرات البيئة للمفتاح ونقطة النهاية ومسار بيانات السلسلة الزمنية:

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

    هام

    للإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها مثل Azure Key Vault. لمزيد من المعلومات حول أمان بيانات الاعتماد، راجع مقالة أمان خدمات Azure الذكاء الاصطناعي.

  3. شغّل التطبيق باستخدام الأمر python المُتاح على ملف التشغيل السريع خاصتك

    python quickstart.py
    

الإخراج

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

فهم نتائج SMART الخاصة بك

في التعليمات البرمجية أعلاه، نستدعي واجهة برمجة تطبيقات Anomaly Detector مرتين. يتحقق الاستدعاء الأول من نقاط تغيير الاتجاه عبر سلسلة بيانات العينة الخاصة بنا باستخدام detect_change_point الأسلوب . ترجع ChangePointDetectResponse هذه المكالمة التي قمنا بتخزينها في متغير أطلقنا عليه اسم change_point_request. ثم نقوم بالتكرار من خلال قائمة الاستجابة is_change_point ، وطباعة فهرس أي قيم بقيمة منطقية من true.

يتحقق الاستدعاء الثاني من سلسلة بيانات العينة بأكملها للبحث عن الحالات الشاذة detect_entire_series باستخدام الأسلوب . ترجع EntireDetectResponse هذه المكالمة التي قمنا بتخزينها في متغير أطلقنا عليه اسم anomaly_response. نقوم بالتكرار من خلال قائمة الاستجابة is_anomaly ، وطباعة فهرس أي قيم بقيمة منطقية من true. بدلا من ذلك، كان يمكننا استخدام detect_last_point الأسلوب ، وهو أكثر ملاءمة للكشف عن الحالات الشاذة في البيانات في الوقت الفعلي. لمعرفة المزيد، راجع دليل أفضل الممارسات.

تصور النتائج

لتصور الحالات الشاذة ونقاط التغيير فيما يتعلق بسلسلة البيانات النموذجية، سنستخدم matplotlib مكتبة مفتوحة المصدر الشائعة.

  1. تثبيت المكتبة.

    pip install matplotlib
    
  2. تعديل ملف quickstart.py الخاص بك مع التعليمات البرمجية التالية:

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

    هام

    للإنتاج، استخدم طريقة آمنة لتخزين بيانات الاعتماد والوصول إليها مثل Azure Key Vault. لمزيد من المعلومات حول أمان بيانات الاعتماد، راجع مقالة أمان خدمات Azure الذكاء الاصطناعي.

  3. شغّل التطبيق باستخدام الأمر python المُتاح على ملف التشغيل السريع خاصتك

    python quickstart.py
    

الإخراج

في مثال التعليمات البرمجية هذا، أضفنا matplotlib المكتبة للسماح لنا بتصور نقاط البيانات العادية وتمييزها بسهولة عن نقاط التغيير والشذوذ. يتم تمثيل نقاط التغيير بمربعات زرقاء، والشذوذ مثلثات حمراء، ونقاط البيانات العادية هي دوائر خضراء. يتم تحويل التواريخ إلى أرقام باستخدام matplotlibdate2num أسلوب لتوفير قيم مألوفة للرسم البياني للمحور 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..

تنظيف الموارد

إذا كنت ترغب في تنظيف مورد Anomaly Detector وإزالته، يمكنك حذف المورد أو مجموعة الموارد. يؤدي حذف مجموعة الموارد إلى حذف أية موارد أخرى مقترنة بها أيضًا. قد تحتاج أيضا إلى التفكير في حذف متغيرات البيئة التي قمت بإنشائها إذا لم تعد تنوي استخدامها.

في هذه البداية السريعة، تتعلم كيفية اكتشاف الحالات الشاذة في مجموعة من بيانات السلسلة الزمنية باستخدام خدمة الكشف عن الشذوذ وcURL.

لإلقاء نظرة عالية المستوى على مفاهيم "الكشف عن الشذوذ"،‏ راجع مقالة النظرة العامة.

المتطلبات الأساسية

  • اشتراك Azure - إنشاء اشتراك مجاناً
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Anomaly Detector في مدخل Microsoft Azure للحصول على المفتاح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق الزر الانتقال إلى المورد. يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.
  • ملف JSON صالح من بيانات السلسلة الزمنية لاختبار الحالات الشاذة. إذا لم يكن لديك ملف خاص بك، يمكنك إنشاء ملف sample.json من نموذج نص الطلب

قم باسترداد المفتاح ونقطة النهاية

لإجراء استدعاء بنجاح مقابل خدمة Anomaly Detector، ستحتاج إلى القيم التالية:

اسم المتغير القيمة‬
ANOMALY_DETECTOR_ENDPOINT يمكن العثور على هذه القيمة في قسم المفاتيح ونقطة النهاية عند فحص المورد من مدخل Microsoft Azure. مثال على نقطة النهاية: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY يمكن العثور على قيمة مفتاح واجهة برمجة التطبيقات في قسم المفاتيح ونقطة النهاية عند فحص المورد الخاص بك من مدخل Microsoft Azure. يمكنك استخدام إما KEY1 أو KEY2.

انتقل إلى مجموعة الموارد في مدخل Microsoft Azure. يمكن العثور على نقطة النهاية والمفاتيح في قسم إدارة الموارد. انسخ نقطة النهاية ومفتاح الوصول حيث ستحتاج إلى كليهما لمصادقة استدعاءات واجهة برمجة التطبيقات. يمكنك استخدام إما KEY1 أو KEY2. يسمح لك وجود مفتاحين دائماً بتدوير المفاتيح وإعادة إنشائها بأمان دون التسبب في تعطيل الخدمة.

إنشاء متغيرات البيئة

إنشاء متغيرات بيئة ثابتة وتعيينها للمفتاح ونقطة النهاية.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

الكشف عن الحالات الخارجة عن المألوف

في موجه الأوامر، أدخل الأمر التالي. ستحتاج إلى إدراج القيم التالية في الأمر .

  • مفتاح الاشتراك في خدمة الكشف عن الشذوذ.
  • عنوان نقطة نهاية كاشف الشذوذ الخاص بك.
  • ملف JSON صالح من بيانات السلسلة الزمنية لاختبار الحالات الشاذة. إذا لم يكن لديك ملف خاص بك، يمكنك إنشاء الملف sample.json من نموذج النص الأساسي للطلب.
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" 

مثال على الأمر الكامل كخط واحد:

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"

بدلا من ذلك إذا كنت تقوم بتشغيل الأمر cURL من Bash shell، فسيكون الأمر مختلفا قليلا:

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"

إذا استخدمت نموذج البيانات من متطلبات مسبقة، يجب أن تتلقى استجابة 200 مع النتائج التالية:

{
  "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
}

لمزيد من المعلومات، راجع مرجع REST للكشف عن الشذوذ.

تنظيف الموارد

إذا كنت ترغب في تنظيف اشتراك خدمات Azure الذكاء الاصطناعي وإزالته، يمكنك حذف المورد أو مجموعة الموارد. يؤدي حذف مجموعة الموارد أيضًا إلى حذف أي موارد أخرى مرتبطة بمجموعة الموارد هذه.

الخطوات التالية

Concepts:

البرامج التعليمية: