Anomaly detection in Azure Stream Analytics

متوفر في كل من السحابة وAzure IoT Edge، ويوفر Azure Stream Analytics قدرات مدمجة لاكتشاف الشذوذات القائمة على التعلم الآلي يمكنك استخدامها لمراقبة أكثر الشذوذين شيوعا: مؤقتا ومستمرا. باستخدام وظائف AnomalyDetection_SpikeAndDipو AnomalyDetection_ChangePoint ، يمكنك إجراء اكتشاف الشذوذ مباشرة في وظيفة تحليلات التدفق الخاصة بك.

تفترض نماذج التعلم الآلي سلسلة زمنية موحدة العينات. إذا لم تكن السلسلة الزمنية متجانسة، أدخل خطوة تجميع مع نافذة متقلبة قبل استدعاء اكتشاف الشذوذ.

عمليات التعلم الآلي لا تدعم اتجاهات الموسمية أو الترابطات متعددة المتغيرات في الوقت الحالي.

اكتشاف الشذوذات باستخدام التعلم الآلي في Azure Stream Analytics

يوضح الفيديو التالي كيفية اكتشاف الشذوذ في الوقت الحقيقي باستخدام وظائف تعلم الآلة في Azure Stream Analytics.

سلوك النموذج

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

تعمل الوظائف من خلال إنشاء وضع طبيعي معين بناء على ما رأوه حتى الآن. يتم تحديد القيم المتطرفة من خلال المقارنة مع الوضع الطبيعي المعمول به ، ضمن مستوى الثقة. يجب أن يعتمد حجم النافذة على الحد الأدنى من الأحداث المطلوبة لتدريب النموذج على السلوك الطبيعي بحيث يكون قادرا على التعرف عليه عند حدوث شذوذ.

يزداد وقت استجابة النموذج مع حجم السجل لأنه يحتاج إلى المقارنة مع عدد أكبر من الأحداث السابقة. للحصول على أداء أفضل، قم بتضمين العدد اللازم فقط من الفعاليات.

يمكن أن تحدث فجوات في السلسلة الزمنية عندما لا يستقبل النموذج أحداثا في نقاط زمنية معينة. تتعامل Stream Analytics مع هذه الحالة باستخدام منطق النسبة. يستخدم حجم التاريخ، ومدة الوقت لنفس النافذة المنزلقة، لحساب متوسط معدل حدوث الأحداث المتوقعة.

يمكنك استخدام مولد anomaly لتغذية IoT Hub ببيانات تحتوي على أنماط شذوذات مختلفة. يمكنك إعداد وظيفة Azure Stream Analytics باستخدام هذه الوظائف لاكتشاف الشذوذات للقراءة من هذا IoT Hub واكتشاف الشذوذات.

سبايك وتراجع

تعرف الحالات الشاذة المؤقتة في دفق أحداث السلسلة الزمنية باسم الارتفاعات والانخفاضات. يمكنك مراقبة الارتفاعات والانخفاضات باستخدام المشغل المعتمد على التعلم الآلي AnomalyDetection_SpikeAndDip.

مثال على شذوذ الشوكة والانخفاض

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

يفترض الاستعلام المثال التالي معدل إدخال موحد لحدث واحد في الثانية في نافذة منزلقة مدتها دقيقتان مع محفوظات 120 حدثا. تستخرج عبارة SELECT النهائية وتخرج النتيجة وحالة الشذوذ بمستوى ثقة 95%.

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

نقطة التغيير

الحالات الشاذة المستمرة في دفق أحداث السلاسل الزمنية هي تغييرات في توزيع القيم في دفق الأحداث، مثل تغييرات المستوى والاتجاهات. في تحليل التدفق، يكتشف مشغل AnomalyDetection_ChangePoint القائم على التعلم الآلي هذه الشذوذات.

تستمر التغييرات المستمرة لفترة أطول بكثير من الارتفاعات والانخفاضات ويمكن أن تشير إلى أحداث كارثية. التغيرات المستمرة عادة لا تكون مرئية بالعين المجردة، لكن مشغل AnomalyDetection_ChangePoint يمكنه اكتشافها.

الصورة التالية هي مثال على تغيير المستوى:

مثال على شذوذ تغير المستوى

الصورة التالية هي مثال على تغيير الاتجاه:

مثال على شذوذ تغير الاتجاه

يفترض الاستعلام المثال التالي معدل إدخال موحد لحدث واحد في الثانية في نافذة منزلقة مدتها 20 دقيقة بحجم محفوظات يبلغ 1,200 حدث. تستخرج عبارة SELECT النهائية وتخرج النتيجة وحالة الشذوذ بمستوى ثقة 80%.

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

الخصائص المتعلقة بالأداء

يعتمد أداء هذه النماذج على حجم المحفوظات ومدة النافذة وحمل الحدث وما إذا كان يتم استخدام تقسيم مستوى الوظيفة. يناقش هذا القسم هذه التكوينات ويوفر عينات لكيفية الحفاظ على معدلات الابتلاع 1 كلفن، 5 كلفن، و10 آلاف في الثانية.

  • حجم التاريخ - هذه النماذج تعمل بشكل خطي مع حجم التاريخ. كلما زاد حجم السجل ، كلما استغرقت النماذج وقتا أطول لتسجيل حدث جديد. تقارن النماذج الحدث الجديد مع كل حدث سابق في مخزن التاريخ.
  • مدة النافذة - يجب أن تعكس مدة النافذة المدة التي يستغرقها استقبال عدد كاف من الأحداث حسب حجم التاريخ. بدون هذا العدد الكبير من الأحداث في النافذة، كان Azure Stream Analytics سيحدد القيم المفقودة. ومن ثم ، فإن استهلاك وحدة المعالجة المركزية هو دالة لحجم التاريخ.
  • حمل الأحداث - كلما زاد حمل الحدث، زادت كمية العمل التي تقوم بها النماذج، مما يؤثر على استهلاك وحدة المعالجة المركزية. يمكنك توسيع المهمة بجعلها متوازية بشكل محرج، بافتراض أن منطق الأعمال يستخدم المزيد من أقسام الإدخال.
  • تقسيم مستوى الوظائف - يستخدم PARTITION BY ضمن استدعاء دالة كشف الشذوذ لأداء تقسيم مستوى الدالة. هذا النوع من التقسيم يضيف عبئا إضافيا، حيث يحتاج الوظيفة للحفاظ على الحالة لعدة نماذج في نفس الوقت. استخدم تقسيم مستوى الوظائف في سيناريوهات مثل تقسيم مستوى الجهاز.

العلاقة

يرتبط حجم المحفوظات ومدة النافذة وإجمالي حمل الحدث بالطريقة التالية:

windowDuration (بالمللي ثانية) = 1000 * historySize / (إجمالي أحداث الإدخال في الثانية / عدد أقسام الإدخال)

عند تقسيم الدالة حسب deviceId، أضف "PARTITION BY deviceId" إلى استدعاء دالة الكشف عن الشذوذ.

الملاحظات

يوضح الجدول التالي ملاحظات معدل النقل لعقدة واحدة (ستة وحدات SU) للحالة غير المقسمة:

حجم السجل (الأحداث) مدة النافذة (مللي ثانية) إجمالي أحداث الإدخال في الثانية
60 55 2,200
600 728 1,650
6,000 10,910 1,100

يوضح الجدول التالي ملاحظات معدل النقل لعقدة واحدة (ستة وحدات SU) للحالة المقسمة:

حجم السجل (الأحداث) مدة النافذة (مللي ثانية) إجمالي أحداث الإدخال في الثانية عدد الأجهزة
60 1091 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

يمكنك العثور على كود نموذجي لتشغيل التكوينات غير المقسمة في Streaming At Scale repos من Azure Samples. ينشئ الكود وظيفة تحليلات التدفق بدون تقسيم على مستوى الوظائف، والتي تستخدم مراكز الأحداث كمدخل ومخرجات. يقوم عملاء الاختبار بتوليد حمل الإدخال. كل حدث إدخال هو مستند JSON بحجم 1 كيلوبايت. تحاكي هذه الأحداث جهاز إنترنت الأشياء الذي يرسل بيانات JSON (لما يصل إلى 1 كيلوبايت جهاز). يختلف حجم التاريخ، مدة النافذة، وإجمالي حمل الأحداث عبر قسمين من الإدخال.

ملاحظة

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

تحديد الاختناقات

لتحديد عنق الزجاجة في خط الأنابيب الخاص بك، استخدم لوحة المقاييس في وظيفتك في Azure Stream Analytics. راجع أحداث الإدخال/الإخراج من حيث معدل النقل و "تأخير العلامات المائية" أو الأحداث المتراكمة لترى ما إذا كانت المهمة تواكب معدل الإدخال. بالنسبة لمقاييس Event Hubs، ابحث عن الطلبات المخنونة وقم بضبط وحدات العتبة وفقا لذلك. بالنسبة Azure Cosmos DB المقاييس، راجع Max استهلاك RU/s لكل نطاق مفتاح تقسيم تحت معدل النقل لضمان استهلاك نطاقات مفاتيح التقسيم بشكل متساو. بالنسبة لقاعدة بيانات Azure SQL، راقب Log IO و CPU.

فيديو تجريبي

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