Hızlı Başlangıç: Çok Değişkenli Anomali Algılayıcısı istemci kitaplığını kullanma

Önemli

20 Eylül 2023 tarihinden itibaren yeni Anomali Algılayıcısı kaynakları oluşturamayacaksınız. Anomali Algılayıcısı hizmeti 1 Ekim 2026'da kullanımdan kaldırılıyor.

C# için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek ve hizmet tarafından sağlanan algoritmaları kullanmaya başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

C# için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.

Kitaplık başvurusu belgeleri | Kitaplık kaynak kodu | Paketi (NuGet)

Önkoşullar

  • Azure aboneliği - Ücretsiz olarak oluşturun
  • .NET Core'un geçerli sürümü
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin.
    • Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0) kullanabilirsiniz.

Ayarlama

Depolama hesabı oluşturma

Çok değişkenli Anomali Algılayıcısı, örnek dosyanızın Azure Blob Depolama depolanmasını gerektirir.

  1. Bir Azure Depolama hesabı oluşturun.
  2. Erişim Denetimi(IAM) bölümüne gidin ve Rol ataması ekle'ye EKLE'yi seçin.
  3. Depolama Blob Veri Okuyucusu'nun rolünü arayın, bu hesap türünü vurgulayın ve ardından İleri'yi seçin.
  4. Yönetilen kimliğe erişim ata'yı ve Üyeleri Seç'i seçin, ardından daha önce oluşturduğunuz Anomali Algılayıcısı kaynağını ve ardından Gözden Geçir ve ata'yı seçin.

Bu yapılandırma bazen biraz kafa karıştırıcı olabilir. Sorun yaşıyorsanız çok değişkenli Jupyter Notebook örneğimize danışmanızı öneririz. Bu örnekte bu işlem daha ayrıntılı bir şekilde izlenir.

Örnek verileri indirme data

Bu hızlı başlangıçta örnek veriler sample_data_5_3000.csviçin bir dosya kullanılır. Bu dosya GitHub örnek verilerimizden indirilebilir

Aşağıdakini çalıştırarak örnek verileri de indirebilirsiniz:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv

Örnek verileri Depolama Hesaba yükleme

  1. Depolama Hesabınıza gidin, Kapsayıcılar'ı seçin ve yeni bir kapsayıcı oluşturun.
  2. sample_data_5_3000.csv dosyasını karşıya yükle ve karşıya yükle'yi seçin
  3. Karşıya yüklediğiniz verileri seçin ve birkaç adımda kod örneğine eklemeniz gerektiğinden Blob URL'sini kopyalayın.

Anahtarı ve uç noktayı alma

Anomali Algılayıcısı hizmetine karşı başarılı bir şekilde çağrı yapmak için aşağıdaki değerlere ihtiyacınız vardır:

Değişken adı Değer
ANOMALY_DETECTOR_ENDPOINT Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API anahtarı değeri, Azure portalından kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. KEY1 veya KEY2 kullanabilirsiniz.

Azure portalında kaynağınıza gidin. Uç Nokta ve Anahtarlar Kaynak Yönetimi bölümünde bulunabilir. Api çağrılarınızın kimliğini doğrulamak için hem uç noktanızı hem de erişim anahtarınızı kopyalayın. KEY1 veya KEY2 kullanabilirsiniz. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.

Ortam değişkenlerini oluşturma

Anahtarınız ve uç noktanız için kalıcı ortam değişkenleri oluşturun ve atayın.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Yeni .NET Core uygulaması oluşturma

Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), adlı anomaly-detector-quickstart-multivariateyeni bir konsol uygulaması oluşturmak için komutunu kullanındotnet new. Bu komut, tek bir C# kaynak dosyasıyla basit bir "Merhaba Dünya" projesi oluşturur: Program.cs.

dotnet new console -n anomaly-detector-quickstart-multivariate

Dizininizi yeni oluşturulan uygulama klasörüyle değiştirin. Uygulamayı şu şekilde oluşturabilirsiniz:

dotnet build

Derleme çıkışı hiçbir uyarı veya hata içermemelidir.

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

İstemci kitaplığını yükleme

Uygulama dizininde aşağıdaki komutla .NET için Anomali Algılayıcısı istemci kitaplığını yükleyin:

dotnet add package Azure.AI.AnomalyDetector --prerelease

Proje dizininden program.cs dosyasını açın ve değerini aşağıdaki kodla değiştirin:

using Azure.AI.AnomalyDetector;
using Azure;
using static System.Environment;

internal class Program
{
    private static void Main(string[] args)
    {
        string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT"); 
        string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");
        string datasource = "Path-to-sample-file-in-your-storage-account";  // example path:https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
        Console.WriteLine(endpoint);
        var endpointUri = new Uri(endpoint);
        var credential = new AzureKeyCredential(apiKey);

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

        // train
        TimeSpan offset = new TimeSpan(0);
        DateTimeOffset start_time = new DateTimeOffset(2021, 1, 2, 0, 0, 0, offset);
        DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 5, 0, 0, offset);
        string model_id = null;
        try
        {
            model_id = TrainModel(client, datasource, start_time, end_time);

            // detect
            end_time = new DateTimeOffset(2021, 1, 2, 1, 0, 0, offset);
            MultivariateDetectionResult result = BatchDetect(client, datasource, model_id, start_time, end_time);
            if (result != null)
            {
                Console.WriteLine(string.Format("Result ID: {0}", result.ResultId.ToString()));
                Console.WriteLine(string.Format("Result summary: {0}", result.Summary.ToString()));
                Console.WriteLine(string.Format("Result length: {0}", result.Results.Count));
                Console.WriteLine(string.Format("Anomalies found: {0}", result.Results.Where(r => r.Value.IsAnomaly).Count()));
            }

            // delete
            DeleteModel(client, model_id);
        }
        catch (Exception e)
        {
            string msg = string.Format("Multivariate error. {0}", e.Message);
            Console.WriteLine(msg);
            throw;
        }

        int GetModelNumber(AnomalyDetectorClient client)
        {
            int model_number = 0;
            foreach (var multivariateModel in client.GetMultivariateModels())
            {
                model_number++;
            }
            return model_number;
        }

        string TrainModel(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
        {
            try
            {
                Console.WriteLine("Training new model...");

                Console.WriteLine(string.Format("{0} available models before training.", GetModelNumber(client)));

                ModelInfo request = new ModelInfo(datasource, start_time, end_time);
                request.SlidingWindow = 200;

                Console.WriteLine("Training new model...(it may take a few minutes)");
                AnomalyDetectionModel response = client.TrainMultivariateModel(request);
                string trained_model_id = response.ModelId;
                Console.WriteLine(string.Format("Training model id is {0}", trained_model_id));

                // Wait until the model is ready. It usually takes several minutes
                ModelStatus? model_status = null;
                int tryout_count = 1;
                response = client.GetMultivariateModel(trained_model_id);
                while (tryout_count < max_tryout & model_status != ModelStatus.Ready & model_status != ModelStatus.Failed)
                {
                    Thread.Sleep(1000);
                    response = client.GetMultivariateModel(trained_model_id);
                    model_status = response.ModelInfo.Status;
                    Console.WriteLine(string.Format("try {0}, model_id: {1}, status: {2}.", tryout_count, trained_model_id, model_status));
                    tryout_count += 1;
                };

                if (model_status == ModelStatus.Ready)
                {
                    Console.WriteLine("Creating model succeeds.");
                    Console.WriteLine(string.Format("{0} available models after training.", GetModelNumber(client)));
                    return trained_model_id;
                }

                if (model_status == ModelStatus.Failed)
                {
                    Console.WriteLine("Creating model failed.");
                    Console.WriteLine("Errors:");
                    try
                    {
                        Console.WriteLine(string.Format("Error code: {0}, Message: {1}", response.ModelInfo.Errors[0].Code.ToString(), response.ModelInfo.Errors[0].Message.ToString()));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
                    }
                }
                return null;
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("Train error. {0}", e.Message));
                throw;
            }
        }

        MultivariateDetectionResult BatchDetect(AnomalyDetectorClient client, string datasource, string model_id, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
        {
            try
            {
                Console.WriteLine("Start batch detect...");
                MultivariateBatchDetectionOptions request = new MultivariateBatchDetectionOptions(datasource, 10, start_time, end_time);

                Console.WriteLine("Start batch detection, this might take a few minutes...");
                MultivariateDetectionResult response = client.DetectMultivariateBatchAnomaly(model_id, request);
                string result_id = response.ResultId;
                Console.WriteLine(string.Format("result id is: {0}", result_id));

                // get detection result
                MultivariateDetectionResult resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
                MultivariateBatchDetectionStatus result_status = resultResponse.Summary.Status;
                int tryout_count = 0;
                while (tryout_count < max_tryout & result_status != MultivariateBatchDetectionStatus.Ready & result_status != MultivariateBatchDetectionStatus.Failed)
                {
                    Thread.Sleep(1000);
                    resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
                    result_status = resultResponse.Summary.Status;
                    Console.WriteLine(string.Format("try: {0}, result id: {1} Detection status is {2}", tryout_count, result_id, result_status.ToString()));
                    Console.Out.Flush();
                }

                if (result_status == MultivariateBatchDetectionStatus.Failed)
                {
                    Console.WriteLine("Detection failed.");
                    Console.WriteLine("Errors:");
                    try
                    {
                        Console.WriteLine(string.Format("Error code: {}. Message: {}", resultResponse.Summary.Errors[0].Code.ToString(), resultResponse.Summary.Errors[0].Message.ToString()));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
                    }
                    return null;
                }
                return resultResponse;
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("Detection error. {0}", e.Message));
                throw;
            }
        }

        void DeleteModel(AnomalyDetectorClient client, string model_id)
        {
            client.DeleteMultivariateModel(model_id);
            int model_number = GetModelNumber(client);
            Console.WriteLine(string.Format("{0} available models after deletion.", model_number));
        }
 
    }
}

Uygulamayı çalıştırma

Uygulamayı uygulama dizininizdeki komutuyla dotnet run çalıştırın.

dotnet run

Kaynakları temizleme

Azure AI hizmetleri aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

JavaScript için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek ve hizmet tarafından sağlanan algoritmaları kullanmaya başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

JavaScript için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.

Kitaplık başvuru belgeleri | Kitaplık kaynak kodu | Paketi (npm) | Örnek kod

Önkoşullar

  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Node.js dosyasının geçerli sürümü
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin.
    • Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0) kullanabilirsiniz.

Ayarlama

Yeni bir Node.js uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir myapp && cd myapp

Bir package.json dosyası ile bir düğüm uygulaması oluşturmak için npm init komutunu çalıştırın.

npm init

adlı index.js bir dosya oluşturun ve aşağıdaki kitaplıkları içeri aktarın: '

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

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun. Örnek veri dosyası için başka bir değişken oluşturun.

Dekont

Her zaman iki anahtardan birini kullanma seçeneğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda ilk anahtarı kullanın.

const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunlu bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren tamsayılar veya ondalıklar olabilir. Örneğin:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılmalıdır. Zip dosyası istediğiniz ada sahip olabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra, eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.

İstemci kitaplığını yükleme

ms-rest-azure ve azure-ai-anomalydetector NPM paketlerini yükleyin. Csv-ayrıştırma kitaplığı da bu hızlı başlangıçta kullanılır:

npm install @azure/ai-anomaly-detector csv-parse

Uygulamanızın package.json dosyası bağımlılıklarla güncelleştirilir.

Kod örnekleri

Bu kod parçacıkları, Node.js için Anomali Algılayıcısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

İstemcinin kimliğini doğrulama

Uç noktanız ve kimlik bilgilerinizle bir AnomalyDetectorClient nesne örneği oluşturma.

const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));

Modeli eğitme

Model sonucu oluşturma

İlk olarak bir model isteği oluşturmamız gerekir. Başlangıç ve bitiş saatlerinin veri kaynağınızla uyumlu olduğundan emin olun.

const Modelrequest = {
  source: data_source,
  startTime: new Date(2021,0,1,0,0,0),
  endTime: new Date(2021,0,2,12,0,0),
  slidingWindow:200
};

Yeni bir model eğitin

Model isteğinizi Anomali Algılayıcısı istemci trainMultivariateModel yöntemine geçirirsiniz.

console.log("Training a new model...")
const train_response = await client.trainMultivariateModel(Modelrequest)
const model_id = train_response.location?.split("/").pop() ?? ""
console.log("New model ID: " + model_id)

Modelinizin eğitiminin tamam olup olmadığını denetlemek için modelin durumunu izleyebilirsiniz:

let model_response = await client.getMultivariateModel(model_id);
let model_status = model_response.modelInfo.status;

while (model_status != 'READY' && model_status != 'FAILED'){
  await sleep(10000).then(() => {});
  model_response = await client.getMultivariateModel(model_id);
  model_status = model_response.modelInfo.status;
}

if (model_status == 'FAILED') {
  console.log("Training failed.\nErrors:");
  for (let error of model_response.modelInfo?.errors ?? []) {
    console.log("Error code: " + error.code + ". Message: " + error.message);
  }
}

console.log("TRAINING FINISHED.");

Anomalileri algılama

detectAnomaly Veri kaynağınızda anomali olup olmadığını belirlemek için ve getDectectionResult işlevlerini kullanın.

console.log("Start detecting...");
const detect_request = {
  source: data_source,
  startTime: new Date(2021,0,2,12,0,0),
  endTime: new Date(2021,0,3,0,0,0)
};
const result_header = await client.detectAnomaly(model_id, detect_request);
const result_id = result_header.location?.split("/").pop() ?? "";
let result = await client.getDetectionResult(result_id);
let result_status = result.summary.status;

while (result_status != 'READY' && result_status != 'FAILED'){
  await sleep(2000).then(() => {});
  result = await client.getDetectionResult(result_id);
  result_status = result.summary.status;
}

if (result_status == 'FAILED') {
  console.log("Detection failed.\nErrors:");
  for (let error of result.summary.errors ?? []) {
    console.log("Error code: " + error.code + ". Message: " + error.message)
  }
}
console.log("Result status: " + result_status);
console.log("Result Id: " + result.resultId);

Modeli dışarı aktarma

Dekont

Dışarı aktarma komutunun kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu, şu anda çok değişkenli için desteklenmemektedir, ancak gelecekte destek eklenecektir.

Eğitilen modelinizi dışarı aktarmak için işlevini kullanın exportModel .

const export_result = await client.exportModel(model_id)
const model_path = "model.zip"
const destination = fs.createWriteStream(model_path)
export_result.readableStreamBody?.pipe(destination)
console.log("New model has been exported to "+model_path+".")

Modeli silme

Geçerli kaynak tarafından kullanılabilen mevcut bir modeli silmek için işlevini kullanın deleteMultivariateModel .

client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")

Uygulamayı çalıştırma

Uygulamayı çalıştırmadan önce kodunuzu tam örnek koda karşı denetlemek yararlı olabilir

Uygulamayı hızlı başlangıç dosyanızdaki node komutuyla çalıştırın.

node index.js

Kaynakları temizleme

Azure AI hizmetleri aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

Kitaplık başvuru belgeleri |Kitaplık kaynak kodu | Paketi (PyPi) |GitHub'da örnek kodu bulma

Python için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve hizmet tarafından sağlanan algoritmaları kullanmaya başlayın. Yeni çok değişkenli anomali algılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

Python için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.

Önkoşullar

Ayarlama

İstemci kitaplığını yükleyin. İstemci kitaplığını şu şekilde yükleyebilirsiniz:

pip install --upgrade azure.ai.anomalydetector

Depolama hesabı oluşturma

Çok değişkenli Anomali Algılayıcısı, örnek dosyanızın Azure Blob Depolama depolanmasını gerektirir.

  1. Bir Azure Depolama hesabı oluşturun.
  2. Erişim Denetimi(IAM) bölümüne gidin ve Rol ataması ekle'ye EKLE'yi seçin.
  3. Depolama Blob Veri Okuyucusu'nun rolünü arayın, bu hesap türünü vurgulayın ve ardından İleri'yi seçin.
  4. Yönetilen kimliğe erişim ata'yı ve Üyeleri Seç'i seçin, ardından daha önce oluşturduğunuz Anomali Algılayıcısı kaynağını ve ardından Gözden Geçir ve ata'yı seçin.

Bu yapılandırma bazen biraz kafa karıştırıcı olabilir. Sorun yaşıyorsanız çok değişkenli Jupyter Notebook örneğimize danışmanızı öneririz. Bu örnekte bu işlem daha ayrıntılı bir şekilde izlenir.

Örnek verileri indirme data

Bu hızlı başlangıçta örnek veriler sample_data_5_3000.csviçin bir dosya kullanılır. Bu dosya GitHub örnek verilerimizden indirilebilir

Aşağıdakini çalıştırarak örnek verileri de indirebilirsiniz:

curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv

Örnek verileri Depolama Hesaba yükleme

  1. Depolama Hesabınıza gidin, Kapsayıcılar'ı seçin ve yeni bir kapsayıcı oluşturun.
  2. sample_data_5_3000.csv dosyasını karşıya yükle ve karşıya yükle'yi seçin
  3. Karşıya yüklediğiniz verileri seçin ve birkaç adımda kod örneğine eklemeniz gerektiğinden Blob URL'sini kopyalayın.

Anahtarı ve uç noktayı alma

Anomali Algılayıcısı hizmetine karşı başarılı bir şekilde çağrı yapmak için aşağıdaki değerlere ihtiyacınız vardır:

Değişken adı Değer
ANOMALY_DETECTOR_ENDPOINT Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API anahtarı değeri, Azure portalından kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. KEY1 veya KEY2 kullanabilirsiniz.

Azure portalında kaynağınıza gidin. Uç Nokta ve Anahtarlar Kaynak Yönetimi bölümünde bulunabilir. Api çağrılarınızın kimliğini doğrulamak için hem uç noktanızı hem de erişim anahtarınızı kopyalayın. KEY1 veya KEY2 kullanabilirsiniz. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.

Ortam değişkenlerini oluşturma

Anahtarınız ve uç noktanız için kalıcı ortam değişkenleri oluşturun ve atayın.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

Yeni Python uygulaması oluşturma

  1. sample_multivariate_detect.py adlı yeni bir Python dosyası oluşturun. Ardından tercih ettiğiniz düzenleyicide veya IDE'de açın.

  2. sample_multivariate_detect.py dosyasının içeriğini aşağıdaki kodla değiştirin. değişkenleri blob_urliçin yolları değiştirmeniz gerekir.

import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *

SUBSCRIPTION_KEY =  os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']

ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))

time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account"  # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv

train_body = ModelInfo(
    data_source=blob_url,
    start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
    end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
    data_schema="OneTable",
    display_name="sample",
    sliding_window=200,
    align_policy=AlignPolicy(
        align_mode=AlignMode.OUTER,
        fill_n_a_method=FillNAMethod.LINEAR,
        padding_value=0,
    ),
)

batch_inference_body = MultivariateBatchDetectionOptions(
       data_source=blob_url,
       top_contributor_count=10,
       start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
       end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
   )


print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))

## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None

while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
    model = ad_client.get_multivariate_model(model_id)
    print(model)
    model_status = model.model_info.status
    print("Model is {}".format(model_status))
    time.sleep(30)
if model_status == ModelStatus.READY:
    print("Done.\n--------------------")
    # Return the latest model id

# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id

# Get results (may need a few seconds)
r = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")

while r.summary.status != MultivariateBatchDetectionStatus.READY and r.summary.status != MultivariateBatchDetectionStatus.FAILED and r.summary.status !=MultivariateBatchDetectionStatus.CREATED:
    anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
    print("Detection is {}".format(r.summary.status))
    time.sleep(5)
    
   
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))

# See detailed inference result
for r in anomaly_results.results:
    print(
        "timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
            r.timestamp,
            r.value.is_anomaly,
            r.value.score,
            r.value.severity,
            len(r.value.interpretation) if r.value.is_anomaly else 0,
        )
    )
    if r.value.interpretation:
        for contributor in r.value.interpretation:
            print(
                "\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
                    contributor.variable, contributor.contribution_score
                )
            )

Uygulamayı çalıştırma

Uygulamayı hızlı başlangıç dosyanızdaki python komutuyla çalıştırın.

python sample_multivariate_detect.py

Çıktı

10 available models before training.
Training new model...(it may take a few minutes)
Training model id is 3a695878-a88f-11ed-a16c-b290e72010e0
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:23Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'CREATED', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [], 'trainLosses': [], 'validationLosses': [], 'latenciesInSeconds': []}, 'variableStates': []}}}
Model is CREATED
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:55Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'READY', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'trainLosses': [1.0493712276220322, 0.5454281121492386, 0.42524269968271255, 0.38019897043704987, 0.3472398854792118, 0.34301353991031647, 0.3219067454338074, 0.3108387663960457, 0.30357857793569565, 0.29986055195331573], 'validationLosses': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'latenciesInSeconds': [0.3412797451019287, 0.25798678398132324, 0.2556419372558594, 0.3165152072906494, 0.2748451232910156, 0.26111531257629395, 0.2571413516998291, 0.257282018661499, 0.2549862861633301, 0.25806593894958496]}, 'variableStates': [{'variable': 'series_0', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_1', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_2', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_3', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_4', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}]}}}
Model is READY
Done.
--------------------
10 available models after training.
Get detection result...(it may take a few seconds)
Detection is CREATED
Detection is READY
Result ID:	 70a6cdf8-a88f-11ed-a461-928899e62c38
Result status:	 READY
Result length:	 301
timestamp: 2021-01-02 00:00:00+00:00, is_anomaly: 0    , anomaly score: 0.1770, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:01:00+00:00, is_anomaly: 0    , anomaly score: 0.3446, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:02:00+00:00, is_anomaly: 0    , anomaly score: 0.2397, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:03:00+00:00, is_anomaly: 0    , anomaly score: 0.1270, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:04:00+00:00, is_anomaly: 0    , anomaly score: 0.3321, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:05:00+00:00, is_anomaly: 0    , anomaly score: 0.4053, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:06:00+00:00, is_anomaly: 0    , anomaly score: 0.4371, severity: 0.0000, contributor count: 0   
timestamp: 2021-01-02 00:07:00+00:00, is_anomaly: 1    , anomaly score: 0.6615, severity: 0.3850, contributor count: 5   
	contributor variable: series_3  , contributor score: 0.2939
	contributor variable: series_1  , contributor score: 0.2834
	contributor variable: series_4  , contributor score: 0.2329
	contributor variable: series_0  , contributor score: 0.1543
	contributor variable: series_2  , contributor score: 0.0354

Çıktı sonuçları kısa olması için kesildi.

Kaynakları temizleme

bir Anomali Algılayıcısı kaynağını temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler. Artık kullanmayı düşünmüyorsanız, oluşturduğunuz ortam değişkenlerini silmeyi de düşünebilirsiniz.

Java için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Hizmet tarafından sağlanan algoritmaları kullanarak paketi yüklemeye başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.

Java için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:

  • Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
  • Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
  • Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.

Kitaplık başvurusu belgeleri | Kitaplık kaynak kodu | Paketi (Maven) | Örnek kod

Önkoşullar

Ayarlama

Yeni Gradle projesi oluşturma

Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Deposu'nda daha fazla istemci kitaplığı bilgisi bulabilirsiniz.

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir myapp && cd myapp

gradle init Komutunu çalışma dizininizden çalıştırın. Bu komut, uygulamanızı oluşturmak ve yapılandırmak için çalışma zamanında kullanılan build.gradle.kts de dahil olmak üzere Gradle için temel derleme dosyaları oluşturur.

gradle init --type basic

DSL seçmeniz istendiğinde Kotlin'i seçin.

İstemci kitaplığını yükleme

build.gradle.kts dosyasını bulun ve tercih ettiğiniz IDE veya metin düzenleyici ile açın. Ardından bu derleme yapılandırmasında kopyalayın. Proje bağımlılıklarını eklediğinizden emin olun.

dependencies {
    compile("com.azure:azure-ai-anomalydetector")
}

Java dosyası oluşturma

Örnek uygulamanız için bir klasör oluşturun. Çalışma dizininizden aşağıdaki komutu çalıştırın:

mkdir -p src/main/java

Yeni klasöre gidin ve MetricsAdvisorQuickstarts.java adlı bir dosya oluşturun. Tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki import deyimleri ekleyin:

package com.azure.ai.anomalydetector;

import com.azure.ai.anomalydetector.models.*;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.*;
import com.azure.core.http.policy.*;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.PagedResponse;
import com.azure.core.http.rest.Response;
import com.azure.core.http.rest.StreamResponse;
import com.azure.core.util.Context;
import reactor.core.publisher.Flux;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun. Örnek veri dosyası için başka bir değişken oluşturun.

Dekont

Her zaman iki anahtardan birini kullanma seçeneğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda ilk anahtarı kullanın.

String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunlu bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren tamsayılar veya ondalıklar olabilir. Örneğin:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılmalıdır. Zip dosyası istediğiniz ada sahip olabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra, eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.

Kod örnekleri

Bu kod parçacıkları, Node.js için Anomali Algılayıcısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

İstemcinin kimliğini doğrulama

Uç noktanız ve kimlik bilgilerinizle bir anomalyDetectorClient nesne örneği oluşturma.

HttpHeaders headers = new HttpHeaders()
    .put("Accept", ContentType.APPLICATION_JSON);

HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy("Ocp-Apim-Subscription-Key",
 new AzureKeyCredential(key));
AddHeadersPolicy addHeadersPolicy = new AddHeadersPolicy(headers);

HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(HttpClient.createDefault())
    .policies(authPolicy, addHeadersPolicy).build();
// Instantiate a client that will be used to call the service.
HttpLogOptions httpLogOptions = new HttpLogOptions();
httpLogOptions.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS);

AnomalyDetectorClient anomalyDetectorClient = new AnomalyDetectorClientBuilder()
    .pipeline(httpPipeline)
    .endpoint(endpoint)
    .httpLogOptions(httpLogOptions)
    .buildClient();

Modeli eğitme

Model sonucu oluşturma ve modeli eğitma

İlk olarak bir model isteği oluşturmamız gerekir. Başlangıç ve bitiş saatlerinin veri kaynağınızla uyumlu olduğundan emin olun.

Anomali Algılayıcısı çok değişkenli API'leri kullanmak için algılamayı kullanmadan önce kendi modelimizi eğitmeliyiz. Eğitim için kullanılan veriler bir dizi zaman serisidir; her zaman serisi yalnızca "zaman damgası" ve "değer" olmak üzere iki sütun içeren bir CSV dosyasında olmalıdır (sütun adları tam olarak aynı olmalıdır). Her CSV dosyası, zaman serisi için her değişkenden sonra adlandırılmalıdır. Zaman serisinin tamamı tek bir zip dosyasına sıkıştırılmalı ve Azure Blob depolamaya yüklenmelidir ve zip dosyası adı için bir gereksinim yoktur. Alternatif olarak, değişkenin adının .zip dosya adından farklı olmasını isterseniz zip dosyasına ek bir meta.json dosyası da eklenebilir. Blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra eğitim için zip dosyasının URL'sini kullanabiliriz.

Path path = Paths.get("test-data.csv");
List<String> requestData = Files.readAllLines(path);
List<TimeSeriesPoint> series = requestData.stream()
    .map(line -> line.trim())
    .filter(line -> line.length() > 0)
    .map(line -> line.split(",", 2))
    .filter(splits -> splits.length == 2)
    .map(splits -> {
        TimeSeriesPoint timeSeriesPoint = new TimeSeriesPoint();
        timeSeriesPoint.setTimestamp(OffsetDateTime.parse(splits[0]));
        timeSeriesPoint.setValue(Float.parseFloat(splits[1]));
        return timeSeriesPoint;
    })
    .collect(Collectors.toList());

Integer window = 28;
AlignMode alignMode = AlignMode.OUTER;
FillNAMethod fillNAMethod = FillNAMethod.LINEAR;
Integer paddingValue = 0;
AlignPolicy alignPolicy = new AlignPolicy()
                                .setAlignMode(alignMode)
                                .setFillNAMethod(fillNAMethod)
                                .setPaddingValue(paddingValue);
String source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
OffsetDateTime startTime = OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
OffsetDateTime endTime = OffsetDateTime.of(2021, 1, 3, 0, 0, 0, 0, ZoneOffset.UTC);
String displayName = "Devops-MultiAD";

ModelInfo request = new ModelInfo()
                        .setSlidingWindow(window)
                        .setAlignPolicy(alignPolicy)
                        .setSource(source)
                        .setStartTime(startTime)
                        .setEndTime(endTime)
                        .setDisplayName(displayName);
TrainMultivariateModelResponse trainMultivariateModelResponse = anomalyDetectorClient.trainMultivariateModelWithResponse(request, Context.NONE);
String header = trainMultivariateModelResponse.getDeserializedHeaders().getLocation();
String[] substring = header.split("/");
UUID modelId = UUID.fromString(substring[substring.length - 1]);
System.out.println(modelId);

//Check model status until the model is ready
Response<Model> trainResponse;
while (true) {
    trainResponse = anomalyDetectorClient.getMultivariateModelWithResponse(modelId, Context.NONE);
    ModelStatus modelStatus = trainResponse.getValue().getModelInfo().getStatus();
    if (modelStatus == ModelStatus.READY || modelStatus == ModelStatus.FAILED) {
        break;
    }
    TimeUnit.SECONDS.sleep(10);
}

if (trainResponse.getValue().getModelInfo().getStatus() != ModelStatus.READY){
    System.out.println("Training failed.");
    List<ErrorResponse> errorMessages = trainResponse.getValue().getModelInfo().getErrors();
    for (ErrorResponse errorMessage : errorMessages) {
        System.out.println("Error code:  " + errorMessage.getCode());
        System.out.println("Error message:  " + errorMessage.getMessage());
    }
}

Anomalileri algılama

DetectionRequest detectionRequest = new DetectionRequest().setSource(source).setStartTime(startTime).setEndTime(endTime);
DetectAnomalyResponse detectAnomalyResponse = anomalyDetectorClient.detectAnomalyWithResponse(modelId, detectionRequest, Context.NONE);
String location = detectAnomalyResponse.getDeserializedHeaders().getLocation();
String[] substring = location.split("/");
UUID resultId = UUID.fromString(substring[substring.length - 1]);

DetectionResult detectionResult;
while (true) {
    detectionResult = anomalyDetectorClient.getDetectionResult(resultId);
    DetectionStatus detectionStatus = detectionResult.getSummary().getStatus();;
    if (detectionStatus == DetectionStatus.READY || detectionStatus == DetectionStatus.FAILED) {
        break;
    }
    TimeUnit.SECONDS.sleep(10);
}

if (detectionResult.getSummary().getStatus() != DetectionStatus.READY){
    System.out.println("Inference failed");
    List<ErrorResponse> detectErrorMessages = detectionResult.getSummary().getErrors();
    for (ErrorResponse errorMessage : detectErrorMessages) {
        System.out.println("Error code:  " + errorMessage.getCode());
        System.out.println("Error message:  " + errorMessage.getMessage());
    }
}

Modeli dışarı aktarma

Dekont

Dışarı aktarma komutunun kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu, şu anda çok değişkenli için desteklenmemektedir, ancak gelecekte destek eklenecektir.

Eğitilen modelinizi dışarı aktarmak için kullanın exportModelWithResponse.

StreamResponse response_export = anomalyDetectorClient.exportModelWithResponse(model_id, Context.NONE);
Flux<ByteBuffer> value = response_export.getValue();
FileOutputStream bw = new FileOutputStream("result.zip");
value.subscribe(s -> write(bw, s), (e) -> close(bw), () -> close(bw));

Modeli silme

Geçerli kaynak tarafından kullanılabilen mevcut bir modeli silmek için işlevini kullanın deleteMultivariateModelWithResponse .

Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);

Uygulamayı çalıştırma

Uygulamayı şu şekilde oluşturabilirsiniz:

gradle build

Uygulamayı çalıştırma

Çalıştırmadan önce kodunuzun tam örnek kodla karşılaştırılması yararlı olabilir.

Uygulamayı şu hedefle run çalıştırın:

gradle run

Kaynakları temizleme

Azure AI hizmetleri aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar