पायथन का उपयोग करके समय श्रृंखला विसंगति का पता लगाने के लिए एक व्यावहारिक टूलकिट

Latest Technology, (लेटेस्ट टेक न्यूज़) Gadget (गैजेट्स) …

समय श्रृंखला का दिलचस्प पहलू है आंतरिक जटिलता ऐसे स्पष्टतः सरल प्रकार के डेटा का।

दिन के अंत में, समय श्रृंखला में, आपके पास एक x अक्ष होता है जो आमतौर पर समय

हालाँकि, समय के साथ ब्याज की मात्रा (y अक्ष) का विकास (x अक्ष) वह जगह है जहाँ जटिलता छिपी हुई है। क्या यह विकास प्रस्तुत करता है? रुझान? क्या इसमें कोई है डेटा बिंदु जो अपेक्षित सिग्नल से स्पष्ट रूप से विक्षेपित होता है? यह है स्थिर या अप्रत्याशित? मात्रा का औसत मूल्य है बड़ा हम क्या अपेक्षा करेंगे? उन सभी को किसी भी तरह से परिभाषित किया जा सकता है विसंगतियों.

यह आलेख एकाधिक विसंगति पहचान तकनीकों का एक संग्रह है। लक्ष्य यह है कि, एकाधिक समय श्रृंखला के डेटासेट को देखते हुए, हम पता लगा सकते हैं कौन समय श्रृंखला विसंगतिपूर्ण है और क्यों.

ये 4 समय श्रृंखला विसंगतियाँ हैं जिनका हम पता लगाने जा रहे हैं:

  1. हम अपनी समय श्रृंखला में किसी भी प्रवृत्ति का पता लगाने जा रहे हैं (प्रवृत्ति विसंगति)
  2. हम यह मूल्यांकन करने जा रहे हैं कि समय श्रृंखला कितनी अस्थिर है (अस्थिरता विसंगति).
  3. हम समय श्रृंखला के भीतर बिंदु विसंगतियों का पता लगाने जा रहे हैं (एकल-बिंदु विसंगति).
  4. हम अपने सिग्नल बैंक के भीतर विसंगतियों का पता लगाने जा रहे हैं, यह समझने के लिए कि कौन सा सिग्नल हमारे सिग्नल के सेट से अलग व्यवहार करता है (डेटासेट-स्तरीय विसंगति).
AnomalyDetectionBank 1
लेखक द्वारा बनाई गई छवि

हम इस संग्रह से सैद्धांतिक रूप से प्रत्येक विसंगति का पता लगाने की विधि का वर्णन करने जा रहे हैं, और हम पायथन कार्यान्वयन दिखाने जा रहे हैं। इस ब्लॉग पोस्ट के लिए मेरे द्वारा उपयोग किया गया संपूर्ण कोड इसमें शामिल है पियरोपियालुंगाएआई/टाइमसीरीज़एनोमली GitHub फ़ोल्डर

0. डेटासेट

विसंगति संग्राहक बनाने के लिए, हमारे पास एक डेटासेट होना चाहिए जहां हमें पता हो कि हम वास्तव में कौन सी विसंगति खोज रहे हैं, ताकि हम जान सकें कि हमारा विसंगति डिटेक्टर काम कर रहा है या नहीं। ऐसा करने के लिए, मैंने एक बनाया है data.py लिखी हुई कहानी। स्क्रिप्ट में एक डेटा जेनरेटर ऑब्जेक्ट है जो:

  1. पुस्तकें config.json* फ़ाइल से हमारे डेटासेट का कॉन्फ़िगरेशन।
  2. बनाता है विसंगतियों का एक डेटासेट
  3. आपको आसानी से करने की क्षमता देता है इकट्ठा करना डेटा और कथानक उन्हें।

यह कोड स्निपेट है:

multiple ts 5 for tds 1
लेखक द्वारा बनाई गई छवि

तो हम देख सकते हैं कि हमारे पास:

  1. एक साझा समय अक्ष0 से 100 तक
  2. एकाधिक समय श्रृंखला जो एक समय श्रृंखला बनाते हैं डाटासेट
  3. प्रत्येक बार श्रृंखला एक या अनेक प्रस्तुत करती है विसंगतियों.

जैसा कि अपेक्षित था, विसंगतियाँ इस प्रकार हैं:

  1. प्रवृत्ति व्यवहारजहां समय श्रृंखला में एक रैखिक या बहुपद डिग्री व्यवहार होता है
  2. अस्थिरताजहां समय श्रृंखला सामान्य से अधिक अस्थिर और बदलती रहती है
  3. स्तर परिवर्तनजहां समय श्रृंखला का औसत सामान्य से अधिक है
  4. एक बिंदु विसंगतिजहां समय श्रृंखला में एक विसंगतिपूर्ण बिंदु है।

अब हमारा लक्ष्य होगा उपकरण बॉक्स जो संपूर्ण डेटासेट के लिए इनमें से प्रत्येक विसंगति की पहचान कर सकता है।

*Config.json फ़ाइल आपको हमारे डेटासेट के सभी मापदंडों को संशोधित करने की अनुमति देती है, जैसे समय श्रृंखला की संख्या, समय श्रृंखला अक्ष और विसंगतियों के प्रकार। यह इस प्रकार दिखता है:

1. प्रवृत्ति विसंगति की पहचान

1.1 सिद्धांत

जब हम कहते हैं “एक प्रवृत्ति विसंगति”, तो हम एक की तलाश कर रहे हैं संरचनात्मक व्यवहार: श्रृंखला समय के साथ ऊपर या नीचे की ओर बढ़ती है, या सुसंगत तरीके से झुकती है। यह वास्तविक डेटा में मायने रखता है क्योंकि बहाव का अर्थ अक्सर सेंसर का ख़राब होना, उपयोगकर्ता के व्यवहार में बदलाव, मॉडल/डेटा पाइपलाइन समस्याएँ, या आपके डेटासेट में जांच की जाने वाली कोई अन्य अंतर्निहित घटना है।

हम दो प्रकार के रुझानों पर विचार करते हैं:

  • रेखीय प्रतिगमन: हम समय श्रृंखला को एक रेखीय प्रवृत्ति के साथ फिट करते हैं
  • बहुपद प्रतिगमन: हम समय श्रृंखला को निम्न-डिग्री बहुपद के साथ फ़िट करते हैं।

व्यवहार में, हम रैखिक प्रतिगमन मॉडल की त्रुटि को मापते हैं। यदि यह बहुत बड़ा है, तो हम बहुपद प्रतिगमन को फिट करते हैं। हम एक प्रवृत्ति को “महत्वपूर्ण” मानते हैं जब पी मान एक निर्धारित सीमा से कम होता है (आमतौर पर पी <0.05)।

1.2 कोड

एनोमलीडिटेक्टर ऑब्जेक्ट में anomaly_detector.py निम्नलिखित फ़ंक्शंस का उपयोग करके ऊपर वर्णित कोड चलाएगा:

  • डिटेक्टरजो हमारे द्वारा जेनरेट किए गए डेटा को DataGenerator में लोड करेगा।
  • डिटेक्ट_ट्रेंड_अनोमली और सभी रुझानों का पता लगाएं क्रमशः एकल समय श्रृंखला और संपूर्ण डेटासेट के लिए (अंतिम) प्रवृत्ति का पता लगाएं
  • get_series_with_trend उन सूचकांकों को लौटाता है जिनमें महत्वपूर्ण रुझान है।

हम इसका उपयोग कर सकते हैं प्लॉट_ट्रेंड_अनोमलीज़ समय श्रृंखला प्रदर्शित करने और यह देखने के लिए कि हम क्या कर रहे हैं:

trend anomalies 5 3
लेखक द्वारा बनाई गई छवि

अच्छा! इसलिए हम बिना किसी बग के अपने डेटासेट में “ट्रेंडी” समय श्रृंखला को पुनः प्राप्त करने में सक्षम हैं। पर चलते हैं!

2. अस्थिरता विसंगति की पहचान

2.1 सिद्धांत

अब जबकि हमारे पास एक वैश्विक रुझान है, हम इस पर ध्यान केंद्रित कर सकते हैं अस्थिरता. अस्थिरता से मेरा मतलब स्पष्ट अंग्रेजी में है, हमारी समय श्रृंखला हर जगह कैसी है? अधिक सटीक शब्दों में, समय श्रृंखला का विचरण हमारे डेटासेट के औसत से कैसे तुलना करता है?

इस प्रकार हम इस विसंगति का परीक्षण करने जा रहे हैं:

  1. हम जा रहे हैं प्रवृत्ति को हटाओ टाइमसीरीज़ डेटासेट से।
  2. हम खोजने जा रहे हैं विचरण के आँकड़े.
  3. हम खोजने जा रहे हैं बाहरी कारकों के कारण इन आँकड़ों का

बहुत सरल, है ना? आइए कोड के बारे में गहराई से जानें!

2.2 कोड

इसी तरह हमने रुझानों के लिए जो किया है, हमारे पास है:

  • पता लगाएं_अस्थिरता_विसंगतिजो जाँचता है कि किसी दी गई समय श्रृंखला में अस्थिरता विसंगति है या नहीं।
  • सभी अस्थिरताओं का पता लगाएंऔर उच्च अस्थिरता के साथ श्रृंखला प्राप्त करेंजो अस्थिरता विसंगति के लिए संपूर्ण समय श्रृंखला डेटासेट की जांच करता है और क्रमशः विसंगतिपूर्ण सूचकांक लौटाता है।

इस प्रकार हम परिणाम प्रदर्शित करते हैं:

image 218
लेखक द्वारा बनाई गई छवि

3. एकल-बिंदु विसंगति

3.1 सिद्धांत

ठीक है, अब डेटासेट की अन्य सभी समय श्रृंखलाओं को अनदेखा करें और एक समय में प्रत्येक समय श्रृंखला पर ध्यान केंद्रित करें। हमारी रुचि की समय श्रृंखला के लिए, हम देखना चाहते हैं कि क्या हमारे पास है एक वह बिंदु जो स्पष्ट रूप से असंगत है। ऐसा करने के कई तरीके हैं; हम ट्रांसफॉर्मर, 1डी सीएनएन, एलएसटीएम, एनकोडर-डिकोडर आदि का लाभ उठा सकते हैं। सरलता के लिए, आइए एक बहुत ही सरल एल्गोरिदम का उपयोग करें:

  1. हम एक अपनाने जा रहे हैं घूमती हुई खिड़की दृष्टिकोण, जहां एक निश्चित आकार की खिड़की बाएं से दाएं चलेगी
  2. प्रत्येक बिंदु के लिए, हम गणना करते हैं अर्थ और मानक विचलन इसके आसपास की खिड़की (बिंदु को छोड़कर)
  3. हम इसका उपयोग करके गणना करते हैं कि बिंदु अपने स्थानीय पड़ोस से कितने मानक विचलन दूर है जेड स्कोर

हम एक बिंदु को इस प्रकार परिभाषित करते हैं नियमविरूद्ध जब यह एक निश्चित Z-स्कोर मान से अधिक हो जाता है। हम Z-स्कोर = 3 का उपयोग करने जा रहे हैं जिसका अर्थ है मानक विचलन का 3 गुना।

3.2 कोड

इसी तरह हमने रुझानों और अस्थिरता के लिए जो किया है, हमारे पास है:

  • डिटेक्ट_पॉइंट_एनोमलीजो रोलिंग विंडो Z-स्कोर विधि का उपयोग करके जाँच करता है कि किसी दी गई समय श्रृंखला में कोई एकल-बिंदु विसंगतियाँ हैं या नहीं।
  • सभी बिंदु_विसंगतियों का पता लगाएं और बिंदु_विसंगतियों के साथ_श्रृंखला_प्राप्त करेंजो बिंदु विसंगतियों के लिए संपूर्ण समय श्रृंखला डेटासेट की जांच करता है और श्रृंखला के सूचकांक लौटाता है जिसमें क्रमशः कम से कम एक विसंगति बिंदु होता है।

और यह इस प्रकार प्रदर्शन कर रहा है:

point anomalies 5
लेखक द्वारा बनाई गई छवि

4. डेटासेट-स्तरीय विसंगति

4.1 सिद्धांत

यह भाग जानबूझकर सरल है. यहाँ हम हैं नहीं हम समय में अजीब बिंदुओं की तलाश कर रहे हैं अजीब संकेत बैंक में. हम जो उत्तर देना चाहते हैं वह है:

क्या ऐसी कोई समय श्रृंखला है जिसका समग्र परिमाण बाकी डेटासेट को देखते हुए हमारी अपेक्षा से काफी बड़ा (या छोटा) है?

ऐसा करने के लिए, हम प्रत्येक समय श्रृंखला को एक एकल “आधार रेखा” संख्या (एक विशिष्ट स्तर) में संपीड़ित करते हैं, और फिर हम पूरे बैंक में उन आधार रेखाओं की तुलना करते हैं। तुलना के संदर्भ में की जाएगी MEDIAN और Z स्कोर.

4.2 कोड

इस प्रकार हम डेटासेट-स्तरीय विसंगति करते हैं:

  1. डिटेक्ट_डेटासेट_लेवल_अनोमलीज़ ()संपूर्ण डेटासेट में डेटासेट-स्तर की विसंगति का पता लगाता है।
  2. get_dataset_level_anomalies()उन सूचकांकों को ढूंढता है जो डेटासेट-स्तरीय विसंगति प्रस्तुत करते हैं।
  3. प्लॉट_डेटासेट_लेवल_अनोमलीज़()समय श्रृंखला का एक नमूना प्रदर्शित करता है जो विसंगतियाँ प्रस्तुत करता है।

ऐसा करने के लिए यह कोड है:

image 220

5. सब एक साथ!

ठीक है, यह सब एक साथ रखने का समय आ गया है। हम प्रयोग करेंगे डिटेक्टर.detect_all_anomalies() और हम इसके आधार पर संपूर्ण डेटासेट की विसंगतियों का मूल्यांकन करेंगे प्रवृत्ति, अस्थिरता, एकल-बिंदु और डेटासेट-स्तर विसंगतियाँ ऐसा करने की स्क्रिप्ट बहुत सरल है:

डीएफ आपको प्रत्येक समय श्रृंखला के लिए विसंगति देगा। यह इस प्रकार दिखता है:

यदि हम निम्नलिखित फ़ंक्शन का उपयोग करते हैं तो हम उसे क्रियान्वित होते हुए देख सकते हैं:

image 222
लेखक द्वारा बनाई गई छवि

बहुत प्रभावशाली है ना? हमने यह किया। 🙂

6. निष्कर्ष

हमारे साथ समय बिताने के लिए धन्यवाद, यह बहुत मायने रखता है। ❤️ यहां बताया गया है कि हमने एक साथ क्या किया है:

  • के लिए एक छोटी विसंगति का पता लगाने वाला टूलकिट बनाया समय श्रृंखला का बैंक.
  • का पता चला प्रवृत्ति विसंगतियाँ जब रैखिक फिट पर्याप्त न हो तो रैखिक प्रतिगमन और बहुपद प्रतिगमन का उपयोग करना।
  • का पता चला अस्थिरता विसंगतियाँ पहले रुझान को कम करके और फिर डेटासेट में भिन्नता की तुलना करके।
  • का पता चला एकल-बिंदु विसंगतियाँ रोलिंग विंडो Z-स्कोर के साथ (सरल, तेज़ और आश्चर्यजनक रूप से प्रभावी)।
  • का पता चला डेटासेट-स्तरीय विसंगतियाँ प्रत्येक श्रृंखला को एक आधार रेखा (माध्यिका) में संपीड़ित करके और विभिन्न परिमाण पैमाने पर रहने वाले संकेतों को चिह्नित करके।
  • सब कुछ एक साथ रखो एक एकल पाइपलाइन में जो एक साफ़ सारांश तालिका लौटाती है जिसका हम निरीक्षण या प्लॉट कर सकते हैं।

कई वास्तविक परियोजनाओं में, हमारे द्वारा यहां बनाया गया टूलबॉक्स आपको बहुत दूर तक ले जाता है, क्योंकि:

  • यह आपको देता है समझाने के योग्य सिग्नल (प्रवृत्ति, अस्थिरता, बेसलाइन शिफ्ट, स्थानीय आउटलेर)।
  • यह आपको एक मजबूत शक्ति प्रदान करता है आधारभूत इससे पहले कि आप भारी मॉडलों की ओर बढ़ें।
  • जब आपके पास होता है तो यह अच्छी तरह से मापता है कई संकेतजहां विसंगति का पता लगाना आमतौर पर दर्दनाक हो जाता है।

ध्यान रखें कि आधार रेखा उद्देश्य से सरल है, और यह बहुत ही सरल आँकड़ों का उपयोग करती है। हालाँकि, कोड की मॉड्यूलैरिटी आपको केवल कार्यक्षमता जोड़कर आसानी से जटिलता जोड़ने की अनुमति देती है anomaly_detector_utils.py और anomaly_detector.py.

7. बाहर निकलने से पहले!

आपके समय के लिए आपका फिर से शुक्रिया। इसका बहुत मतलब है ❤️

मेरा नाम पिएरो पियालुंगा है, और मैं यहाँ यह लड़का हूँ:

image 9
लेखक द्वारा बनाई गई छवि

मैं मूल रूप से इटली से हूं, मेरे पास पीएच.डी. है। से सिनसिनाटी विश्वविद्यालयऔर एक के रूप में काम करें ट्रेड डेस्क पर डेटा वैज्ञानिक न्यूयॉर्क शहर में. मैं इसके बारे में लिखता हूं एआई, मशीन लर्निंग, और डेटा वैज्ञानिकों की उभरती भूमिका यहां टीडीएस और लिंक्डइन दोनों पर। यदि आपको लेख पसंद आया और आप मशीन लर्निंग के बारे में अधिक जानना चाहते हैं और मेरे अध्ययनों का अनुसरण करना चाहते हैं, तो आप यह कर सकते हैं:

उ. मेरे पीछे आओ Linkedinजहाँ मैं अपनी सभी कहानियाँ प्रकाशित करता हूँ
बी. मेरे पीछे आओ GitHubजहां आप मेरा सारा कोड देख सकते हैं
सी. प्रश्नों के लिए, आप मुझे यहां एक ईमेल भेज सकते हैं piero.paialunga@hotmail

(टैग अनुवाद करने के लिए) विसंगति का पता लगाना (टी) संपादकों का चयन (टी) मशीन लर्निंग (टी) पायथन (टी) समय श्रृंखला विश्लेषण
Latest Technology, (लेटेस्ट टेक न्यूज़) Gadget (गैजेट्स) …

Source link

Leave a Reply

Your email address will not be published. Required fields are marked *