Azure Stream Analytics'te anomali algılama

Hem bulutta hem de Azure IoT Edge'de kullanılabilen Azure Stream Analytics, geçici ve kalıcı olmak üzere en yaygın iki anomaliyi izlemek için kullanılabilecek yerleşik makine öğrenmesi tabanlı anomali algılama özellikleri sunar. AnomalyDetection_SpikeAndDip ve AnomalyDetection_ChangePoint işlevleriyle 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 pencere içeren bir toplama adımı ekleyebilirsiniz.

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

Azure Stream Analytics’te makine öğrenmesi kullanarak anomali algılama

Aşağıdaki videoda, Azure Stream Analytics'te makine öğrenmesi işlevlerini kullanarak anomaliyi gerçek zamanlı olarak algılama işlemi 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ı eklemenizi öneririz.

Zaman serisindeki boşluklar, modelin belirli zaman noktalarında olayları almamasından kaynaklanıyor olabilir. Bu durum, Stream Analytics tarafından imputation mantığı kullanılarak işlenir. Aynı kayan pencere için geçmiş boyutu ve bir süre, olayların gelmesi beklenen ortalama oranı hesaplamak için kullanılır.

Burada bulunan bir anomali oluşturucu, bir Iot Hub'ı farklı anomali desenlerine sahip verilerle beslemek için kullanılabilir. Azure Stream Analytics işi, bu Iot Hub'dan okumak ve anomalileri algılamak için bu anomali algılama işlevleriyle ayarlanabilir.

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üşüşler Machine Learning tabanlı işleç AnomalyDetection_SpikeAndDip kullanılarak izlenebilir.

Example of spike and dip anomaly

Aynı kayan pencerede ikinci bir ani artış ilkinden küçükse, küçük ani artış için hesaplanan puan, belirtilen güvenilirlik düzeyindeki ilk ani artışa göre büyük olasılıkla yeterince önemli değildir. 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ığı kullanabilirsiniz.

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 bu tür anomaliler Machine Learning tabanlı AnomalyDetection_ChangePoint işleci kullanılarak algılanıyor.

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şleciyle algılanabilir.

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

Example of level change anomaly

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

Example of trend change anomaly

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 ele alınmaktadır ve saniyede 1 K, 5 K ve 10.000 olay alım oranlarının nasıl sürdürülmesi için örnekler sağlanmaktadır.

  • Geçmiş boyutu - Bu modeller geçmiş boyutuyla doğrusal olarak performans gösterir. Geçmiş boyutu ne kadar uzun olursa modeller yeni bir etkinliği puanlar. Bunun nedeni modellerin yeni olayı geçmiş arabelleğindeki geçmiş olayların her biriyle karşılaştırmasıdı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 bu kadar çok olay olmadan Azure Stream Analytics eksik değerleri gösterir. Bu nedenle, CPU tüketimi geçmiş boyutunun bir işlevidir.
  • Olay yükü - Olay yükü ne kadar büyükse, modeller tarafından gerçekleştirilen ve CPU tüketimini etkileyen o kadar fazla iş olur. İş mantığının daha fazla giriş bölümü kullanması mantıklı olduğu varsayılarak, işin ölçeği utanç verici derecede paralel hale getirilerek genişletilebilir.
  • İşlev düzeyi bölümleme - İşlev düzeyi bölümleme , anomali algılama işlev çağrısı içinde kullanılarak PARTITION BY yapılır. Bu bölümleme türü, aynı anda birden çok model için durumun korunması gerektiğinden ek yük ekler. İşlev düzeyi bölümleme, cihaz düzeyinde bölümleme gibi senaryolarda kullanılır.

İ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şSize / (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 tablo, bölümlenmemiş durum için tek bir düğüme (altı SU) yönelik aktarım hızı gözlemlerini içerir:

Geçmiş 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 tablo, bölümlenmiş durum için tek bir düğüm (altı SU) için aktarım hızı gözlemlerini içerir:

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

Yukarıdaki bölümlenmemiş yapılandırmaları çalıştırmak için örnek kod, Azure Örnekleri'nin Uygun Ölçekte Akış deposunda bulunur. Kod, giriş ve çıkış olarak Event Hubs kullanan işlev düzeyinde bölümleme içermeyen bir akış analizi işi oluşturur. Giriş yükü, test istemcileri kullanılarak oluşturulur. Her giriş olayı 1 KB'lık bir 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ü üzerinde değişir.

Dekont

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şinizde Ölçümler bölmesini kullanın. İşin giriş hızına uygun olup olmadığını görmek için aktarım hızı ve "Filigran Gecikmesi" veya GeriLogged Olayları için Giriş/Çıkış Olayları'nı 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çümleri için, bölüm anahtarı aralıklarınızın düzgün bir şekilde tüketildiğinden emin olmak için Aktarım Hızı altındaki Bölüm anahtarı aralığı başına en fazla tüketilen RU/sn bölümünü gözden geçirin. Azure SQL DB için Günlük GÇ ve CPU'sunu izleyin.

Tanıtım videosu

Sonraki adımlar