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

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

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

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

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

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

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

الإعداد

قم بإنشاء تطبيق جديد أساسي لـ .NET

في نافذة وحدة تحكم (مثل 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 --version 3.0.0-preview.5

اكتشاف حالة شاذة من سلسلة زمنية كاملة

ستحتاج إلى تحديث التعليمات البرمجية أدناه وتقديم القيم الخاصة بك للمتغيرات التالية.

اسم المتغير القيمة
your-endpoint يمكن العثور على هذه القيمة في قسم نقطة نهاية المفاتيح & عند فحص المورد الخاص بك من مدخل Azure. مثال على نقطة النهاية هو:https://contoso-new-001.cognitiveservices.azure.com/
your-apikey يمكن العثور على هذه القيمة في قسم نقطة نهاية المفاتيح & عند فحص المورد الخاص بك من مدخل Azure. يمكنك استخدام Key1 أو Key2. يسمح وجود مفتاحين صالحين دائما بتدوير المفتاح الآمن بدون توقف.
request-data.csv تحتاج إلى توفير مسار لبيانات العينة الخاصة بك المخزنة بتنسيق csv للكشف عن حالة شاذة من. إذا كنت ترغب في استخدام عينة البيانات الخاصة بنا ، يمكنك تنزيل بيانات العينة هنا

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

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Azure.AI.AnomalyDetector;
using Azure.AI.AnomalyDetector.Models;
using Azure.Core.TestFramework;
using NUnit.Framework;

namespace Azure.AI.AnomalyDetector.Tests.Samples
{
    public partial class AnomalyDetectorSamples : SamplesBase<AnomalyDetectorTestEnvironment>
    {
        [Test]
        public async Task DetectEntireSeriesAnomaly()
        {
            //read endpoint and apiKey
            string endpoint = "your-endpoint";
            string apiKey = "your-apikey";

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

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

            //read data
            string datapath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "samples", "data", "request-data.csv");

            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
            DetectRequest request = new DetectRequest(list)
            {
                Granularity = TimeGranularity.Daily
            };

            //detect
            Console.WriteLine("Detecting anomalies in the entire time series.");

            try
            {
                EntireDetectResponse result = await client.DetectEntireSeriesAsync(request).ConfigureAwait(false);

                bool hasAnomaly = false;
                for (int i = 0; i < request.Series.Count; ++i)
                {
                    if (result.IsAnomaly[i])
                    {
                        Console.WriteLine("An anomaly was detected at index: {0}.", i);
                        hasAnomaly = true;
                    }
                }
                if (!hasAnomaly)
                {
                    Console.WriteLine("No anomalies detected in the series.");
                }
            }
            catch (RequestFailedException ex)
            {
                Console.WriteLine(String.Format("Entire detection failed: {0}", ex.Message));
                throw;
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("Detection error. {0}", ex.Message));
                throw;
            }
        }
    }
}

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

تحميل السلاسل الزمنية وإنشاء DetectRequest

يمكنك تنزيل بيانات العينة الخاصة بنا ، وقراءة بيانات السلسلة الزمنية وإضافتها إلى كائن DetectRequest .

اتصل File.ReadAllLines باستخدام مسار الملف وقم بإنشاء قائمة بالكائنات TimeSeriesPoint ، وقم بتجريد أي أحرف سطر جديدة. استخراج القيم وفصل الطابع الزمني عن قيمته الرقمية، وإضافتها إلى كائن جديد TimeSeriesPoint .

DetectRequest اصنع كائنا بسلسلة النقاط ، وللدقة TimeGranularity.Daily (أو الدورية) لنقاط البيانات.

//read data
string datapath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "samples", "data", "request-data.csv");

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
DetectRequest request = new DetectRequest(list)
{
    Granularity = TimeGranularity.Daily
};

اكتشاف الحالات الشاذة في السلسلة بأكملها

استدعاء أسلوب العميل DetectEntireSeriesAsync مع الكائن DetectRequest وانتظر الاستجابة ككائن EntireDetectResponse . كرر من خلال قيم الاستجابة IsAnomaly واطبع أي قيم صحيحة. تتوافق هذه القيم مع فهرس نقاط البيانات الشاذة، إن وجدت.

//detect
Console.WriteLine("Detecting anomalies in the entire time series.");

try
{
    EntireDetectResponse result = await client.DetectEntireSeriesAsync(request).ConfigureAwait(false);

    bool hasAnomaly = false;
    for (int i = 0; i < request.Series.Count; ++i)
    {
        if (result.IsAnomaly[i])
        {
            Console.WriteLine("An anomaly was detected at index: {0}.", i);
            hasAnomaly = true;
        }
    }
    if (!hasAnomaly)
    {
        Console.WriteLine("No anomalies detected in the series.");
    }
}
catch (RequestFailedException ex)
{
    Console.WriteLine(String.Format("Entire detection failed: {0}", ex.Message));
    throw;
}
catch (Exception ex)
{
    Console.WriteLine(String.Format("Detection error. {0}", ex.Message));
    throw;
}

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

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

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

Concepts:

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

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

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

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

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

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

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

الإعداد

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

ملاحظة

تستخدم نقاط انتهاء الموارد التي تم إنشاؤها بعد 1 يوليو 2019 تنسيق النطاق الفرعي المخصص كما هو موضح أدناه. لمزيد من المعلومات وقائمة كاملة بنقاط الانتهاء الإقليمية، راجع أسماء النطاقات الفرعية المخصصة للخدمات المعرفية.

باستخدام المفتاح ونقطة الانتهاء من المورد الذي أنشأته، أنشئ متغيرين للبيئة من أجل المصادقة:

  • ANOMALY_DETECTOR_KEY- مفتاح الموارد للمصادقة على الطلبات الخاصة بك.
  • ANOMALY_DETECTOR_ENDPOINT- نقطة نهاية الموارد لإرسال طلبات API. سيبدو هكذا:
    • https://<your-custom-subdomain>.api.cognitive.microsoft.com

استخدام إرشادات نظام تشغيلك.

setx ANOMALY_DETECTOR_KEY <replace-with-your-anomaly-detector-key>
setx ANOMALY_DETECTOR_ENDPOINT <replace-with-your-anomaly-detector-endpoint>

بعد إضافة متغير البيئة، إعادة تشغيل إطار وحدة التحكم.

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

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

mkdir myapp && cd myapp

قم بتشغيل ⁧npm init⁩الأمر لإنشاء تطبيق العقدة مع ⁧package.json⁩ الملف.

npm init

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

'use strict'

const fs = require('fs');
const parse = require("csv-parse/lib/sync");
const { AnomalyDetectorClient } = require('@azure/ai-anomaly-detector');
const { AzureKeyCredential } = require('@azure/core-auth');

إنشاء متغيرات نقطة النهاية Azure للمورد الخاص بك والمفتاح. إذا قمت بإنشاء متغير البيئة بعد تشغيل التطبيق، فستحتاج إلى إغلاق وإعادة فتح المحرر أو IDE أو shell وتشغيله للوصول إلى المتغير. إنشاء متغير آخر لمثال ملف البيانات الذي سيتم تنزيله في خطوة لاحقة، وقائمة فارغة لنقاط البيانات. ثم قم بإنشاء كائن ApiKeyCredentials لاحتواء المفتاح.

// Spreadsheet with 2 columns and n rows.
let CSV_FILE = './request-data.csv';

// Authentication variables
let key = 'PASTE_YOUR_ANOMALY_DETECTOR_SUBSCRIPTION_KEY_HERE';
let endpoint = 'PASTE_YOUR_ANOMALY_DETECTOR_ENDPOINT_HERE';

// Points array for the request body
let points = [];

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

ثبّت حزم NPM ms-rest-azure وazure-cognitiveservices-anomalydetector. تُستخدم مكتبة csv-parse أيضًا في هذا التشغيل السريع:

npm install @azure/ai-anomaly-detector @azure/ms-rest-js csv-parse

سيتم تحديث ⁧⁧package.json⁩⁩ ملف التطبيق الخاص بك مع التبعيات.

طراز الكائن

عميل Anomaly Detector هو كائن ⁧⁩AnomalyDetectorClient⁧⁩ الذي يصادق Azure باستخدام مفتاحك. يمكن للعميل الكشف عن الشذوذ في مجموعة بيانات بأكملها باستخدام ⁧⁩entireDetect()⁧⁩، أو على أحدث نقطة بيانات باستخدام ⁧⁩LastDetect()⁧⁩. تكشف طريقة ⁧⁩ChangePointDetectAsync⁧⁩ أيضًا عن النقاط التي تميز التغييرات في الاتجاه.

يتم إرسال بيانات السلسلة الزمنية كسلسلة من ⁧⁩النقاط⁧⁩ في كائن ⁧⁩طلب⁧⁩. يحتوي ⁧Request⁩الكائن على خصائص لوصف البيانات (⁧⁩الدقة ⁧⁩على سبيل المثال)، ومعلمات لاكتشاف الانحراف.

تكون استجابة Anomaly Detector في صورة كائن ⁧⁩EntireDetectResponse⁧⁩ أو ⁧⁩LastDetectResponse⁧⁩ أو ⁧⁩changePointDetectResponse⁧⁩ اعتمادًا على الطريقة المستخدمة.

أمثلة التعليمات البرمجية

توضح لك مقتطفات التعليمات البرمجية هذه كيفية القيام بما يلي مع مكتبة عميل Anomaly Detector لـ Node.js:

مصادقة العميل

أنشئ مثيل كائن AnomalyDetectorClient باستخدام نقطة النهاية وبيانات الاعتماد الخاصة بك.

let anomalyDetectorClient = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(key));

تحميل بيانات السلسلة الزمنية من ملف

قم بتنزيل مثال للبيانات لهذا البدء السريع من GitHub:

  1. في متصفحك، انقر بزر الماوس الأيمن فوق Raw.
  2. انقر فوق حفظ الارتباط باسم.
  3. احفظ الملف إلى دليل التطبيق الخاص بك، كملف .csv.

يتم تنسيق بيانات السلسلة الزمنية هذه كملف .csv، وسيتم إرسالها إلى واجهة برمجة تطبيق Anomaly Detector.

اقرأ ملف البيانات باستخدام أسلوب readFileSync() لمكتبة csv-parse، ثم حلل الملف باستخدام parse() . لكل سطر، ادفع كائن نقطة يحتوي على الطابع الزمني والقيمة الرقمية.

function readFile() {
    let input = fs.readFileSync(CSV_FILE).toString();
    let parsed = parse(input, { skip_empty_lines: true });
    parsed.forEach(function (e) {
        points.push({ timestamp: new Date(e[0]), value: parseFloat(e[1]) });
    });
}
readFile()

الكشف عن الحالات الشاذة في مجموعة البيانات بأكملها

استدع واجهة برمجة التطبيقات للكشف عن الحالات الشاذة خلال سلسلة الوقت بأكمله كدفعة باستخدام أسلوب العميل ⁩entireDetect()⁦. تخزين الكائن ⁩EntireDetectResponse⁦ الذي تم إرجاعه. يتجاوب من خلال قائمة الاستجابة isAnomaly، وطباعة فهرس أي قيم true. تتوافق هذه القيم مع فهرس نقاط البيانات الشاذة، إن وجدت.

async function batchCall() {
    // Create request body for API call
    let body = { series: points, granularity: 'daily' }
    // Make the call to detect anomalies in whole series of points
    await anomalyDetectorClient.detectEntireSeries(body)
        .then((response) => {
            console.log("Batch (entire) anomaly detection):")
            for (let item = 0; item < response.isAnomaly.length; item++) {
                if (response.isAnomaly[item]) {
                    console.log("An anomaly was detected from the series, at row " + item)
                }
            }
        }).catch((error) => {
            console.log(error)
        })

}
batchCall()

الكشف عن حالة الشذوذ لأحدث نقطة بيانات

استدع واجهة برمجة التطبيقات للكشف عن الحالات الشاذة لتحديد أحدث نقطة بيانات شذوذ باستخدام أسلوب العميل ⁩lastDetect()⁦ وتخزين الكائن ⁩LastDetectResponse⁦ الذي تم إرجاعه. قيمة الاستجابة isAnomaly هي متغير منطقي يحدد حالة الشذوذ في هذه النقطة.

async function lastDetection() {

    let body = { series: points, granularity: 'daily' }
    // Make the call to detect anomalies in the latest point of a series
    await anomalyDetectorClient.detectLastPoint(body)
        .then((response) => {
            console.log("Latest point anomaly detection:")
            if (response.isAnomaly) {
                console.log("The latest point, in row " + points.length + ", is detected as an anomaly.")
            } else {
                console.log("The latest point, in row " + points.length + ", is not detected as an anomaly.")
            }
        }).catch((error) => {
            console.log(error)
        })
}
lastDetection()

الكشف عن نقاط التغيير في مجموعة البيانات

استدع واجهة برمجة التطبيقات للكشف عن نقاط التغيير في السلسلة الزمنية بأكملها باستخدام أسلوب العميل ⁩detectChangePoint()⁦. تخزين الكائن ChangePointDetectResponse الذي تم إرجاعه. يتجاوب من خلال قائمة الاستجابة isChangePoint، وطباعة فهرس أي قيم true. هذه القيم تتوافق مع مؤشرات نقاط تغيير الاتجاه، إن وجدت.

async function changePointDetection() {

    let body = { series: points, granularity: 'daily' }
    // get change point detect results
    await anomalyDetectorClient.detectChangePoint(body)
        .then((response) => {
            if (
                response.isChangePoint.some(function (changePoint) {
                    return changePoint === true;
                })
            ) {
                console.log("Change points were detected from the series at index:");
                response.isChangePoint.forEach(function (changePoint, index) {
                    if (changePoint === true) {
                        console.log(index);
                    }
                });
            } else {
                console.log("There is no change point detected from the series.");
            }
        }).catch((error) => {
            console.log(error)
        })
}

شغّل التطبيق

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

node index.js

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

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

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

Concepts:

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

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

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

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

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

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

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

الإعداد

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

ملاحظة

تستخدم نقاط انتهاء الموارد التي تم إنشاؤها بعد 1 يوليو 2019 تنسيق النطاق الفرعي المخصص كما هو موضح أدناه. لمزيد من المعلومات وقائمة كاملة بنقاط الانتهاء الإقليمية، راجع أسماء النطاقات الفرعية المخصصة للخدمات المعرفية.

باستخدام المفتاح ونقطة الانتهاء من المورد الذي أنشأته، أنشئ متغيرين للبيئة من أجل المصادقة:

  • ANOMALY_DETECTOR_KEY- مفتاح الموارد للمصادقة على الطلبات الخاصة بك.
  • ANOMALY_DETECTOR_ENDPOINT- نقطة نهاية الموارد لإرسال طلبات API. سيبدو هكذا:
    • https://<your-custom-subdomain>.api.cognitive.microsoft.com

استخدام إرشادات نظام تشغيلك.

setx ANOMALY_DETECTOR_KEY <replace-with-your-anomaly-detector-key>
setx ANOMALY_DETECTOR_ENDPOINT <replace-with-your-anomaly-detector-endpoint>

بعد إضافة متغير البيئة، إعادة تشغيل إطار وحدة التحكم.

إنشاء تطبيق Python جديد

إنشاء ملف Python جديد واستيراد المكتبات التالية.

import os
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.ai.anomalydetector.models import DetectRequest, TimeSeriesPoint, TimeGranularity, \
    AnomalyDetectorError
from azure.core.credentials import AzureKeyCredential
import pandas as pd

إنشاء متغيرات المفتاح الخاص بك كمتغير بيئة المسار إلى ملف بيانات السلسلة الزمنية وموقع Azure للاشتراك الخاص بك. على سبيل المثال، ⁧westus2⁩.

SUBSCRIPTION_KEY = os.environ["ANOMALY_DETECTOR_KEY"]
ANOMALY_DETECTOR_ENDPOINT = os.environ["ANOMALY_DETECTOR_ENDPOINT"]
TIME_SERIES_DATA_PATH = os.path.join("./sample_data", "request-data.csv")

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

بعد تثبيت Python، يمكنك تثبيت مكتبة العميل عن طريق:

pip install --upgrade azure-ai-anomalydetector

نموذج الكائن

عميل Anomaly Detector هو كائن ⁧⁩AnomalyDetectorClient⁧⁩ الذي يصادق Azure باستخدام مفتاحك. يمكن للعميل الكشف عن التشوه في مجموعة البيانات بأكملها باستخدام ⁧⁩detect_entire_series⁧⁩، أو على أحدث نقطة بيانات باستخدام ⁧⁩detect_last_point⁧⁩. الدالة detect_change_point بالكشف عن النقاط التي علامة التغييرات في اتجاه.

يتم إرسال بيانات السلسلة الزمنية كسلسلة من ⁧⁩TimeSeriesPoints⁧⁩ في كائن. ⁧DetectRequest⁩يحتوي الكائن على خصائص لوصف البيانات⁧TimeGranularity⁩على سبيل المثال والمعلمات للكشف عن الشذوذ.

تكون استجابة Anomaly Detector في صورة كائن ⁧⁩EntireDetectResponse⁧⁩ أو ⁧⁩LastDetectResponse⁧⁩ أو ⁧⁩changePointDetectResponse⁧⁩ اعتمادًا على الطرق المستخدمة.

أمثلة التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية القيام بما يلي مع مكتبة عميل Anomaly Detector لـ Python:

مصادقة العميل

أضف متغير موقع Azure الخاص بك إلى نقطة النهاية، وصادق على العميل باستخدام المفتاح.

client = AnomalyDetectorClient(AzureKeyCredential(SUBSCRIPTION_KEY), ANOMALY_DETECTOR_ENDPOINT)

تحميل بيانات السلسلة الزمنية من ملف

قم بتنزيل مثال للبيانات لهذا البدء السريع من GitHub:

  1. في متصفحك، انقر بزر الماوس الأيمن فوق Raw.
  2. انقر فوق حفظ الارتباط باسم.
  3. احفظ الملف إلى دليل التطبيق الخاص بك، كملف .csv.

يتم تنسيق بيانات السلسلة الزمنية هذه كملف .csv، وسيتم إرسالها إلى واجهة برمجة تطبيق Anomaly Detector.

قم بتحميل ملف البيانات الخاص بك باستخدام أسلوب مكتبة read_csv() Pandas، ثم قم بإجراء متغير قائمة فارغ لتخزين سلسلة البيانات. كرر خلال الملف، وألحق البيانات ككائن TimeSeriesPoint. سيحتوي هذا الكائن على الطابع الزمني والقيمة الرقمية من صفوف ملف البيانات .csv.

series = []
data_file = pd.read_csv(TIME_SERIES_DATA_PATH, header=None, encoding='utf-8', parse_dates=[0])
for index, row in data_file.iterrows():
    series.append(TimeSeriesPoint(timestamp=row[0], value=row[1]))

أنشئ DetectRequest كائن مع سلسلة زمنية وTimeGranularity (أو دورية) من نقاط البيانات الخاصة به. على سبيل المثال، ⁧TimeGranularity.daily⁩.

request = DetectRequest(series=series, granularity=TimeGranularity.daily)

أوصاف وسيطة الإدخال: "السلسلة": مطلوبة في الطلب. يجب أن يكون نوع الصفيف / القائمة ، ويحتوي على أكثر من 12 نقطة ولا يزيد عن 8640 نقطة. يجب فرزها حسب الطابع الزمني بترتيب تصاعدي ولا يمكن أن يكون لها طابع زمني مكرر. "الدقة": مطلوب في الطلب. يمكن أن يكون واحدا فقط مما يلي: ["يوميا" ، "دقيقا" ، "كل ساعة" ، "أسبوعيا" ، "شهريا" ، "سنويا" ، "ثانيا"]. "customInterval": يجب أن يكون عددا صحيحا > 0. "الفترة": يجب أن تكون عددا صحيحا >= 0. "maxAnomalyRatio": يجب أن يكون أقل من 50٪ من نقاط السلسلة (0 maxAnomalyRatio < 0.5<). "الحساسية": يجب أن يكون عددا صحيحا بين 0 و 99.

الكشف عن الحالات الشاذة في مجموعة البيانات بأكملها

استدع واجهة برمجة التطبيقات للكشف عن الشذوذ من خلال بيانات السلسلة الزمنية بأكملها باستخدام أسلوب العميل detect_entire_series. تخزين الكائن ⁩EntireDetectResponse⁦ الذي تم إرجاعه. يتجاوب من خلال قائمة الاستجابة is_anomaly، وطباعة فهرس أي قيم true. تتوافق هذه القيم مع فهرس نقاط البيانات الشاذة، إن وجدت.

print('Detecting anomalies in the entire time series.')

try:
    response = client.detect_entire_series(request)
except AnomalyDetectorError as e:
    print('Error code: {}'.format(e.error.code), 'Error message: {}'.format(e.error.message))
except Exception as e:
    print(e)

if any(response.is_anomaly):
    print('An anomaly was detected at index:')
    for i, value in enumerate(response.is_anomaly):
        if value:
            print(i)
else:
    print('No anomalies were detected in the time series.')

الكشف عن حالة الشذوذ لأحدث نقطة بيانات

استدعاء API Anomaly Detector لتحديد ما إذا كانت أحدث نقطة بيانات شذوذ باستخدام أسلوب العميل detect_last_point وتخزين الكائن LastDetectResponse الذي تم إرجاعه. قيمة الاستجابة is_anomaly هي منطقية تحدد حالة الشذوذ في هذه النقطة.

print('Detecting the anomaly status of the latest data point.')

try:
    response = client.detect_last_point(request)
except AnomalyDetectorError as e:
    print('Error code: {}'.format(e.error.code), 'Error message: {}'.format(e.error.message))
except Exception as e:
    print(e)

if response.is_anomaly:
    print('The latest point is detected as anomaly.')
else:
    print('The latest point is not detected as anomaly.')

الكشف عن نقاط التغيير في مجموعة البيانات

استدع واجهة برمجة التطبيقات للكشف عن نقاط التغيير في السلسلة الزمنية بأكملها باستخدام أسلوب العميل detect_change_point. تخزين الكائن ChangePointDetectResponse الذي تم إرجاعه. يتجاوب من خلال قائمة الاستجابة is_change_point، وطباعة فهرس أي قيم true. هذه القيم تتوافق مع مؤشرات نقاط تغيير الاتجاه، إن وجدت.

print('Detecting change points in the entire time series.')

try:
    response = client.detect_change_point(request)
except AnomalyDetectorError as e:
    print('Error code: {}'.format(e.error.code), 'Error message: {}'.format(e.error.message))
except Exception as e:
    print(e)

if any(response.is_change_point):
    print('An change point was detected at index:')
    for i, value in enumerate(response.is_change_point):
        if value:
            print(i)
else:
    print('No change point were detected in the time series.')

شغّل التطبيق

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

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

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

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

Concepts:

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

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

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

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

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

الكشف عن الحالات الشاذة لسلسلة كاملة

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

  • مفتاح الاشتراك في خدمة الكشف عن الشذوذ.
  • عنوان نقطة نهاية كاشف الشذوذ الخاص بك.
  • ملف JSON صالح من بيانات السلسلة الزمنية لاختبار الحالات الشاذة. إذا لم يكن لديك ملف خاص بك، يمكنك إنشاء الملف sample.json من نموذج النص الأساسي للطلب.
curl -v -X POST "https://{endpointresourcename.cognitive.microsoft.com}/anomalydetector/v1.0/timeseries/entire/detect"
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: {subscription key}"
-d "@{path_to_file.json}" 

على سبيل المثال مع كافة القيم التي تم ملؤها:

curl -v -X POST "https://my-resource-name.cognitiveservices.azure.com/anomalydetector/v1.0/timeseries/entire/detect" -H  "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key:1111112222222ed333333ab333333333" -d "@test.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 للكشف عن الشذوذ.

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

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

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

Concepts:

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