Azure Stream Analytics'te anomali algılama

Hem bulutta hem de Azure IoT Edge kullanılabilen Azure Stream Analytics, geçici ve kalıcı olmak üzere en sık oluşan iki anomaliyi izlemek için kullanabileceğiniz yerleşik makine öğrenmesi tabanlı anomali algılama özellikleri sunar. AnomalyDetection_SpikeAndDip ve AnomalyDetection_ChangePoint işlevlerini kullanarak anomali algılamayı doğrudan Stream Analytics işinizde gerçekleştirebilirsiniz.

Makine öğrenmesi modelleri, tekdüzen örneklenmiş bir zaman serisi olduğunu varsayar. Zaman serisi tekdüzen değilse, anomali algılamayı çağırmadan önce yuvarlanan bir pencere içeren bir toplama adımı ekleyin.

Makine öğrenmesi işlemleri şu anda mevsimsellik eğilimlerini veya çok değişkenli bağıntıları desteklememektedir.

Azure Stream Analytics'de makine öğrenmesi kullanarak anomali algılama

Aşağıdaki videoda, Azure Stream Analytics'da makine öğrenmesi işlevlerini kullanarak anomaliyi gerçek zamanlı olarak algılama gösterilmektedir.

Model davranışı

Genellikle, kayan pencerede daha fazla veri ile modelin doğruluğu artar. Belirtilen kayan penceredeki veriler, bu zaman çerçevesi için normal değer aralığının bir parçası olarak değerlendirilir. Model, geçerli olayın anormal olup olmadığını denetlemek için yalnızca kayan pencere üzerinde olay geçmişini dikkate alır. Kayan pencere ilerledikçe eski değerler modelin eğitiminden çıkarılır.

İşlevler, şimdiye kadar gördüklerine göre belirli bir normal oluşturarak çalışır. Aykırı değerler, güven düzeyi içinde yerleşik normale göre karşılaştırılarak tanımlanır. Pencere boyutu, modeli normal davranış için eğitmek için gereken en düşük olayları temel almalıdır, böylece bir anomali oluştuğunda bunu tanıyabilir.

Modelin yanıt süresi geçmiş boyutuyla artar çünkü daha fazla sayıda geçmiş olayla karşılaştırması gerekir. Daha iyi performans için yalnızca gerekli olay sayısını ekleyin.

Zaman serisindeki boşluklar, model zaman içinde belirli noktalarda olayları almadığında ortaya çıkabilir. Stream Analytics, bu durumu imputation mantığını kullanarak işler. Geçmiş veri boyutu ve aynı kayan pencere süresi, olayların gelmesi beklenen ortalama oranı hesaplamak için kullanılır.

IoT Hub'ı farklı anomali desenleri içeren verilerle beslemek için anomali üreteci kullanabilirsiniz. Bu IoT Hub'dan okumak ve anomalileri algılamak için anomali algılama işlevlerini kullanarak bir Azure Stream Analytics işi ayarlayabilirsiniz.

Ani artış ve dip

Zaman serisi olay akışındaki geçici anomaliler ani artışlar ve düşüşler olarak bilinir. ani artışları ve düşüşleri izlemek için Machine Learning tabanlı AnomalyDetection_SpikeAndDip işlecini kullanabilirsiniz.

Ani artış ve dip anomalisi örneği

Aynı kayan pencerede, ikinci bir ani artış ilkinden küçükse, küçük ani artış için hesaplanan puan, belirtilen güvenilirlik düzeyi içindeki ilk ani artışa ilişkin puanla karşılaştırıldığında yeterince önemli olmayabilir. Bu tür anomalileri algılamak için modelin güvenilirlik düzeyini azaltmayı deneyebilirsiniz. Ancak, çok fazla uyarı almaya başlarsanız daha yüksek bir güvenilirlik aralığı kullanın.

Aşağıdaki örnek sorgu, 120 olay geçmişine sahip 2 dakikalık kayan pencerede saniyede bir olayın tekdüzen giriş hızını varsayar. Son SELECT deyimi puanı ve anomali durumunu 95%güvenilirlik düzeyiyle ayıklar ve çıkarır.

WITH AnomalyDetectionStep AS
(
    SELECT
        EVENTENQUEUEDUTCTIME AS time,
        CAST(temperature AS float) AS temp,
        AnomalyDetection_SpikeAndDip(CAST(temperature AS float), 95, 120, 'spikesanddips')
            OVER(LIMIT DURATION(second, 120)) AS SpikeAndDipScores
    FROM input
)
SELECT
    time,
    temp,
    CAST(GetRecordPropertyValue(SpikeAndDipScores, 'Score') AS float) AS
    SpikeAndDipScore,
    CAST(GetRecordPropertyValue(SpikeAndDipScores, 'IsAnomaly') AS bigint) AS
    IsSpikeAndDipAnomaly
INTO output
FROM AnomalyDetectionStep

Değişiklik noktası

Zaman serisi olay akışındaki kalıcı anomaliler, düzey değişiklikleri ve eğilimler gibi olay akışındaki değerlerin dağılımındaki değişikliklerdir. Stream Analytics'te Machine Learning tabanlı AnomalyDetection_ChangePoint operatörü bu anomalileri algılar.

Kalıcı değişiklikler ani artışlardan ve düşüşlerden çok daha uzun sürer ve yıkıcı olaylara işaret edebilir. Kalıcı değişiklikler genellikle çıplak gözle görülemez, ancak AnomalyDetection_ChangePoint işleci bunları algılayabilir.

Aşağıdaki görüntü, bir düzey değişikliği örneğidir:

Düzey değişikliği anomalisi örneği

Aşağıdaki görüntüde eğilim değişikliği örneği verilmiştir:

Eğilim değişikliği anomalisi örneği

Aşağıdaki örnek sorgu, geçmiş boyutu 1.200 olay olan 20 dakikalık kayan pencerede saniyede bir olay için tekdüzen giriş hızı olduğunu varsayar. Son SELECT deyimi puanı ve anomali durumunu 80%güvenilirlik düzeyiyle ayıklar ve çıkarır.

WITH AnomalyDetectionStep AS
(
    SELECT
        EVENTENQUEUEDUTCTIME AS time,
        CAST(temperature AS float) AS temp,
        AnomalyDetection_ChangePoint(CAST(temperature AS float), 80, 1200) 
        OVER(LIMIT DURATION(minute, 20)) AS ChangePointScores
    FROM input
)
SELECT
    time,
    temp,
    CAST(GetRecordPropertyValue(ChangePointScores, 'Score') AS float) AS
    ChangePointScore,
    CAST(GetRecordPropertyValue(ChangePointScores, 'IsAnomaly') AS bigint) AS
    IsChangePointAnomaly
INTO output
FROM AnomalyDetectionStep

Performans özellikleri

Bu modellerin performansı geçmiş boyutuna, pencere süresine, olay yüküne ve işlev düzeyi bölümlemenin kullanılıp kullanılmadığına bağlıdır. Bu bölümde, bu yapılandırmaların ele alındığı ve saniyede 1 K, 5 K ve 10 K olay alım oranlarını nasıl sürdüreceğinize dair örneklerin sağlandığı açıklanmaktadır.

  • Geçmiş boyutu - Bu modeller geçmiş boyutuyla doğrusal olarak performans gösterir. Geçmiş boyutu ne kadar uzun olursa, modellerin yeni bir etkinliği puanlaması o kadar uzun sürer. Modeller, yeni olayı geçmiş arabelleğindeki geçmiş olayların her biriyle karşılaştırır.
  • Pencere süresi - Pencere süresi , geçmiş boyutuna göre belirtilen sayıda olayı almanın ne kadar sürdüğünü yansıtmalıdır. Pencerede çok fazla olay olmadığında, Azure Stream Analytics eksik değerleri tahmin eder. Bu nedenle, CPU tüketimi geçmiş boyutunun bir işlevidir.
  • Olay yükü - Olay yükü ne kadar büyükse, modeller o kadar fazla çalışma gerçekleştirir ve bu da CPU tüketimini etkiler. İş mantığının daha fazla giriş bölümü kullanmasının mantıklı olduğunu varsayarak işi utanç verici derecede paralel hale getirerek ölçeği genişletebilirsiniz.
  • İşlev düzeyi bölümleme - PARTITION BY gerçekleştirmek için anomali algılama işlev çağrısı içinde kullanın. Bu bölümleme türü ek yük ekler çünkü işin aynı anda birden çok model için durumu koruması gerekir. Cihaz düzeyinde bölümleme gibi senaryolarda işlev düzeyinde bölümleme kullanın.

İlişki

Geçmiş boyutu, pencere süresi ve toplam olay yükü aşağıdaki şekilde ilişkilidir:

windowDuration (ms cinsinden) = 1000 * geçmiş Boyutu / (saniyede toplam giriş olayları / Giriş Bölümü Sayısı)

İşlevi deviceId'ye göre bölümlerken anomali algılama işlev çağrısına "PARTITION BY deviceId" ekleyin.

Gözlemler

Aşağıdaki tabloda, bölümlenmemiş durum için tek bir düğüm (altı SU) için aktarım hızı gözlemleri gösterilmektedir:

Geçmiş etkinlik boyutu (olaylar) Pencere süresi (ms) Saniye başına toplam giriş olayı
60 55 2,200
600 728 1,650
6.000 10,910 1.100

Aşağıdaki tabloda, bölümlenmiş durum için tek düğüm (altı SU) için aktarım hızı gözlemleri gösterilmektedir:

Geçmiş etkinlik boyutu (olaylar) Pencere süresi (ms) Saniye başına toplam giriş olayı Cihaz sayısı
60 1,091 1.100 10
600 10,910 1.100 10
6.000 218,182 <550 10
60 21,819 550 100
600 218,182 550 100
6.000 2,181,819 <550 100

Bölümlenmemiş yapılandırmaları çalıştırmak için örnek kodu Azure Örneklerinin Streaming At Scale deposunda bulabilirsiniz. Kod, giriş ve çıkış olarak Event Hubs kullanan işlev düzeyi bölümleme içermeyen bir Stream Analytics işi oluşturur. Test istemcileri giriş yükünü oluşturur. Her giriş olayı 1 KB JSON belgesidir. Olaylar, JSON verileri gönderen bir IoT cihazının benzetimini (en fazla 1 K cihaz için) sağlar. Geçmiş boyutu, pencere süresi ve toplam olay yükü iki giriş bölümüne göre değişir.

Uyarı

Daha doğru bir tahmin için örnekleri senaryonuza uyacak şekilde özelleştirin.

Performans sorunlarını tanımlama

İşlem hattınızdaki performans sorunlarını belirlemek için Azure Stream Analytics işinizin Ölçümler bölmesini kullanın. İşin giriş hızına uygun olup olmadığını görmek için Giriş/Çıkış Olayları ve aktarım hızı, "Filigran Gecikmesi" veya Biriken Olaylar'ı gözden geçirin. Event Hubs ölçümleri için Kısıtlanmış İstekler'i arayın ve Eşik Birimlerini buna göre ayarlayın. Azure Cosmos DB ölçümlerinde, bölüm anahtarı aralıklarınızın tutarlı bir şekilde tüketildiğinden emin olmak için iş hacmi altında Bölüm anahtarı aralığı başına maksimum tüketilen RU/sn değerini gözden geçirin. Azure SQL DB için Log IO ve CPU'ı izleyin.

Tanıtım videosu

Sonraki Adımlar