समय-श्रृंखला पर विसंगतियों का पता लगाने के लिए मुझे किस एल्गोरिथ्म का उपयोग करना चाहिए?


69

पृष्ठभूमि

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

यह कुछ इस तरह दिखता है: प्रति सिस्टम उपयोगकर्ताओं की संख्या

वास्तविक डेटा (एक मीट्रिक, 15 मिनट समय सीमा के लिए एक उदाहरण; पहली संख्या उपयोगकर्ताओं की एक संख्या है, दूसरा समय टिकट):

[{"target": "metric_name", "datapoints": [[175562.0, 1431803460], [176125.0, 1431803520], [176125.0, 1431803580], [175710.0, 1431803640], [175710.0, 1431803700], [175733.0, 1431803760], [175733.0, 1431803820], [175839.0, 1431803880], [175839.0, 1431803940], [175245.0, 1431804000], [175217.0, 1431804060], [175629.0, 1431804120], [175104.0, 1431804180], [175104.0, 1431804240], [175505.0, 1431804300]]}]

जिसे मैं पूरा करने की कोशिश कर रहा हूं

मैंने एक पायथन स्क्रिप्ट बनाई है, जो हाल के डेटा पॉइंट्स को प्राप्त करती है, ऐतिहासिक बदलाव और अलर्ट के साथ उनकी तुलना करती है अगर कोई अचानक बदलाव या ड्रॉप होता है। मौसमी "स्थैतिक" सीमा के कारण अच्छी तरह से काम नहीं करता है और स्क्रिप्ट झूठी-सकारात्मक अलर्ट उत्पन्न करती है। मैं और अधिक सटीक होने के लिए एक अलर्टिंग एल्गोरिथ्म में सुधार करना चाहता हूं और अलर्ट थ्रेसहोल्ड को लगातार बनाए बिना इसे काम करना चाहता हूं।

मुझे जो सलाह की जरूरत है और जो चीजें मैंने खोजी हैं

Googling द्वारा मुझे लगा कि मैं विसंगति का पता लगाने के लिए मशीन लर्निंग एल्गोरिदम की तलाश कर रहा हूं (अनसुना)। आगे की जांच से पता चला कि उनमें से कई टन हैं और यह समझना बहुत मुश्किल है कि मेरे मामले में कौन सा लागू है। अपने सीमित गणित ज्ञान के कारण मैं परिष्कृत विद्वानों के पेपर नहीं पढ़ सकता हूं और क्षेत्र में शुरुआती के लिए कुछ सरल तलाश रहा हूं।

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

उपयोगी कड़ियाँ

इसी तरह के सवाल:

बाहरी संसाधन:


1
क्या आपने CUSUM जैसे सरलतम एल्गोरिदम में से एक पर एक नज़र डाली?
व्लादिस्लाव डोवगलकेस

@xeon, अभी तक नहीं। मैं विषय के लिए नया हूं और हर चीज को पचाने के लिए कुछ समय चाहिए। इसे लाने के लिए धन्यवाद, यह एक अच्छा शुरुआती बिंदु है, मैं इसे अभी लागू कर सकता हूं
इल्या खाडकिन

1
यह एक महान प्रश्न है, @ मा-जीई। मेरा भी ऐसा ही परिदृश्य है। मेरा दृष्टिकोण auto.arimaआर के उत्कृष्ट forecastपैकेज ( jstatsoft.org/v27/i03/paper देखें ) से फ़ंक्शन का उपयोग करके लगातार आवधिक पूर्वानुमान का निर्माण करके अलर्ट स्थापित करना था । आप levelपैरामीटर को समायोजित करके आत्मविश्वास के स्तर को ट्यून कर सकते हैं , जैसे data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
एलेक्स वूलफोर्ड

3
ट्विटर के दोस्तों ने इस विषय पर बहुत दिलचस्प लेख लिखा। इसे देखें: blog.twitter.com/2015/…
ognjenz

अरे @IlyaKhadykin आशा है कि आप ठीक कर रहे हैं! क्या आपको कभी इस समस्या का कोई हल मिला। मैं ठीक वैसा ही कुछ कर रहा हूं, जिसमें हर मिनट में हम कुछ उपयोगकर्ता हैं और हमें बहुत सारे झूठे सकारात्मक मिल रहे हैं। अब तक हम प्रत्येक 5 मिनट के अंतराल डेटा के लिए स्कोर की गणना कर रहे हैं और इसे ऐतिहासिक पैटर्न के साथ मिलान कर रहे हैं। यदि आप किसी भी सहयोगी काम कर रहे हैं, तो आप इसे कैसे साझा कर सकते हैं, कृपया बताएं। अग्रिम में धन्यवाद!
ak3191

जवाबों:


23

मुझे लगता है कि आपके ग्राफ में कुंजी "अनपेक्षित" क्वालिफायर है। अप्रत्याशित का पता लगाने के लिए आपको यह अनुमान लगाने की आवश्यकता है कि क्या अपेक्षित है

मैं एआर (पी) या एआरएमए (पी, क्यू) जैसे सरल समय श्रृंखला मॉडल के साथ शुरू करूंगा। डेटा के लिए इसे फिट करें, उपयुक्त के रूप में मौसमी जोड़ें। उदाहरण के लिए, आपका SAR (1) (24) मॉडल हो सकता है: , जहां घंटे में समय है। इसलिए, आप अगले घंटे के लिए ग्राफ की भविष्यवाणी करेंगे। जब भी भविष्यवाणी त्रुटि "बहुत बड़ी है" आप एक चेतावनी फेंक देते हैं।yt=c+ϕyt1+Φ24yt24+Φ25yt25+εttet=yty^t

जब आप मॉडल का अनुमान लगाते हैं तो आपको त्रुटि का variance । आपकी वितरण संबंधी मान्यताओं के आधार पर, जैसे कि सामान्य, आप संभावना के आधार पर सीमा निर्धारित कर सकते हैं, जैसे कि 99.7% या एक तरफा ।σεεt|et|<3σεet>3σε

आगंतुकों की संख्या संभवतः काफी लगातार है, लेकिन सुपर मौसमी है। यह गुणात्मक मौसमी के बजाय मौसमी डमी को आज़माने के लिए बेहतर काम कर सकता है, फिर आप एआरएमएएक्स की कोशिश करेंगे जहां एक्स बाहरी चर के लिए खड़ा है, जो छुट्टी डमी, घंटा डमी, सप्ताहांत डमी आदि जैसे कुछ भी हो सकता है।


5
यह दृष्टिकोण एक विशिष्ट ARIMA मॉडल को मानता है जिसमें विसंगतियों के आधार पर पक्षपाती पैरामीटर होंगे जिन्हें समकालिक रूप से गैर-मौजूद माना गया है। एएलएसओ के लिए एक अधिक सामान्य दृष्टिकोण पहले विसंगतियों की पहचान करना होगा और फिर एक इष्टतम एआरआईएमए मॉडल जो महत्व के इनलाइन परीक्षणों का नेतृत्व करेगा। अतिरिक्त विसंगतियां स्तरीय बदलाव, मौसमी दालों और स्थानीय समय की प्रवृत्ति हो सकती हैं जिन्हें यहां प्रस्तावित से अधिक सामान्य समाधान की आवश्यकता होती है। एक व्यापक प्रक्रिया के लिए unc.edu/~jbhill/tsay.pdf देखें । आप अधिक जानकारी के लिए Google "स्वचालित हस्तक्षेप जांच" भी कर सकते हैं।
आयरिशस्टैट

@IrishStat मैंने घटनाओं के लिए डमी के साथ ARIMAX का सुझाव दिया। ओपी ज्ञात घटनाओं के लिए जिम्मेदार हो सकते हैं जैसे डमी के साथ वेब साइट क्रैश। यह त्रुटि विचरण को कम करेगा, और अधिक अलर्ट होंगे। जटिल मॉडल बनाने का कोई कारण नहीं है, क्योंकि जब यह वेब साइट ट्रैफ़िक की बात आती है तो हर चीज़ का हिसाब रखना असंभव है। सरल मॉडल सबसे अच्छा काम करेंगे।
अक्कल

2
@ मा-जी, एक और बात: आप ओवरलैपिंग अंतराल का उपयोग करना चाह सकते हैं। मान लीजिए कि आप हर मिनट डेटा एकत्र करते हैं, लेकिन मॉडलिंग के लिए आप 10 मिनट में एक कदम उठा सकते हैं। यह एस्टाटन के लिए कुछ मुद्दों को बनाता है (ऑटोकार्ट्रलेशन के कारण), लेकिन परिणामस्वरूप मॉडल सबसे अधिक संभावना होगा।
अक्कल

@ अक्षल मॉडल जितना आवश्यक हो उतना सरल होना चाहिए लेकिन बहुत सरल नहीं है।
आयरिशस्टैट

17

नेटफ्लिक्स टेक ब्लॉग पर उनके रॉबस एनोमली डिटेक्शन टूल (आरएडी) पर एक लेख है। http://techblog.netflix.com/2015/02/rad-outlier-detection-on-big-data.html

यह मौसमी और बहुत अधिक मात्रा वाले डेटासेट से संबंधित है, ताकि यह आपकी आवश्यकताओं के अनुरूप हो सके। कोड खुला स्रोत जावा और Apache Pig https://github.com/Netflix/Surus/blob/master/resources/examples/pig/rad.pig है

अंतर्निहित एल्गोरिथम मजबूत पीसीए पर आधारित है - यहां मूल पेपर देखें: http://statweb.stanford.edu/~candes/papers/RobustPCA.pdf


12

ओपन सोर्स पैकेज में अधिकांश आउटलाइर डिटेक्शन एल्गोरिदम कम आवृत्ति, दैनिक / साप्ताहिक / मासिक आवृत्ति डेटा के साथ व्यापार समय श्रृंखला डेटा के लिए हैं। यह डेटा एक विशेष क्षेत्र के लिए प्रतीत होता है जो मिनटों में कैप्चर किया जाता है, इसलिए मुझे यकीन नहीं है कि यदि ओपन सोर्स आउटलाइयर डिटैक्शन मददगार होगा। आप इस दृष्टिकोण को अपने डेटा में अनुकूलित करने का प्रयास कर सकते हैं।

नीचे मैं खुले स्रोत में कुछ उपलब्ध पैकेज दृष्टिकोणों की रूपरेखा प्रस्तुत करता हूं R:

  1. tsoutliers : कार्यान्वयन चेन और लियू के आउटिमा ढांचे के भीतर आउटलाइंग डिटेक्शन एल्गोरिदम। इस साइट पर मेरा पहले वाला प्रश्न देखें । शानदार दृष्टिकोण, लेकिन बहुत धीमी गति से सुनिश्चित नहीं है कि यह आपके जैसे उच्च आवृत्ति डेटा को संभालने में सक्षम होगा। इसमें मेरे पहले प्रश्न / पोस्ट में उल्लिखित सभी प्रकार के आउटलेर्स का पता लगाने की सलाह है।
  2. ट्विटर की विसंगति का पता लगाना : समय श्रृंखला में आधारित विसंगतियों का पता लगाने के लिए रोसनर के एल्गोरिदम का उपयोग करता है । एल्गोरिथ्म समय सारणी को विघटित करता है और फिर विसंगतियों का पता लगाता है। मेरी व्यक्तिगत राय में, यह समय श्रृंखला में रूपरेखा का पता लगाने में कुशल और सटीक नहीं है।
  3. पूर्वानुमान पैकेज में tsoutlier : समय श्रृंखला को विघटित करने और फिर आउटलेर्स का पता लगाने के मामले में ट्विटर के एल्गोरिथ्म के समान। केवल additive आउटलेर या दालों का पता लगाएगा।

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

आशा है कि यह उपयोगी है


धन्यवाद, यह मुझे समान समस्याओं और दृष्टिकोणों पर परिप्रेक्ष्य देता है; लिंक के लिए विशेष धन्यवाद!
इल्या खाडकिन

अगर किसी को मेटाफ़र की तलाश है, तो हम स्प्लंक द्वारा अधिग्रहित हो गए। हमारे TSAD एल्गोरिदम स्प्लंक आईटी सर्विस इंटेलिजेंस ("ITSI") के हाल के संस्करणों में शामिल हैं।
अलेक्स क्रूज

4

क्या आपने सांख्यिकीय प्रक्रिया नियंत्रण नियमों (उदाहरण के लिए पश्चिमी इलेक्ट्रिक http://en.wikipedia.org/wiki/Western_Electric_ules ) का उपयोग करने की कोशिश की है ?

मैं उन्हें समय श्रृंखला डेटा के लिए उपयोग करता हूं - अक्सर डेटा के बारे में अंतर्ज्ञान के एक स्पर्श के साथ - यह आकलन करने के लिए कि क्या डेटा कहीं जा रहा है मैं नहीं चाहता कि वह जा सके। आपके उदाहरण की तरह, ये नियम कहते हैं कि यदि डेल्टा / परिवर्तन कई डेटा बिंदुओं पर सुसंगत है, तो यह झंडी देता है कि कोई समस्या हो सकती है।

साथ ही सांख्यिकीय प्रक्रिया नियंत्रण (एसपीसी) काम करने के लिए अच्छा हो सकता है अगर आप पहले से बेहतर या बदतर हो रहे हैं।

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


4

जिन अन्य उत्तरों का उल्लेख नहीं किया गया है, वह यह है कि आपकी समस्या चेंजप्वाइंट डिटेक्शन की तरह लगती है । चेंजपॉइंट डिटेक्शन का विचार यह है कि आप अपने डेटा में ऐसे सेगमेंट की तलाश कर रहे हैं जो शब्दों के गुणों (जैसे माध्य, विचरण) में काफी भिन्न हों। यह अधिकतम संभावना आकलन का उपयोग करके मुझे प्राप्त किया जा सकता है, जहां बदलावों के लिए संभावना फ़ंक्शन हैm

L(m,τ1:m,θ1:(m+1))=i=1m+1p(y(τi1+1):τiθi)

जहाँ आपका डेटा है, परिवर्तन को चिह्नित करने वाले सीमा बिंदु हैं, और प्रायिकता वितरण प्रत्येक खंड के लिए द्वारा । यह आसानी से विभिन्न स्थितियों की वीडियोग्राफी करने के लिए सामान्यीकृत किया जा सकता है। अज्ञात खोजने सहित कई मापदंडों को खोजने के लिए कई एल्गोरिदम मौजूद हैं । ऐसे सॉफ़्टवेयर भी हैं जो ऐसे मॉडलों का आकलन करने के लिए उपलब्ध हैं, जैसे आर के लिए पैकेज। यदि आप अधिक सीखना चाहते हैं, तो आप निम्नलिखित प्रकाशनों और उनके द्वारा दिए गए संदर्भों की जांच कर सकते हैं: 1 < τ 1 < < τ मीटर < n पी θ मैं मैं हूँy1,,yn1<τ1<<τm<npθiimchangepoint

रेबेका किलिक और इदरिस ए। एक्ले। (2013) चेंजपॉइंट: चेंज एनालिसिस के लिए एक आर पैकेज। (ऑनलाइन पेपर)

एकली, आईए, फर्नहेड, पी। और किलिक, आर (2011) चेंजप्वाइंट मॉडल का विश्लेषण। [में:] बायेसियन टाइम सीरीज़ मॉडल , एड। डी। बार्बर, एटी केमगिल और एस। चियप्पा, कैम्ब्रिज यूनिवर्सिटी प्रेस।


4

यह देखते हुए कि समय श्रृंखला की आवधिकता को एक सरल, लेकिन प्रभावी रूप से समझा जाना चाहिए, विभिन्नता पर आधारित एल्गोरिथ्म को तैयार किया जा सकता है।

एक साधारण वन-स्टेप विभेदक पिछले मान से अचानक गिरावट का पता लगाएगा

yt=ytyt1

लेकिन अगर श्रृंखला में एक मजबूत आवधिक घटक है, तो आप उम्मीद करेंगे कि ड्रॉप नियमित रूप से काफी हो। इस मामले में पिछले चक्र में एक ही बिंदु पर अपने समकक्ष के किसी भी मूल्य की तुलना करना बेहतर होगा, यानी एक अवधि पहले।

yt=ytytnwhere n=length of period

पोस्ट किए गए प्रश्न के मामले में दो महत्वपूर्ण आवधिक घटकों, एक दिन की लंबाई, एक सप्ताह की दूसरी लंबाई की अपेक्षा करना स्वाभाविक होगा। लेकिन यह अधिक जटिल नहीं है, क्योंकि लंबी अवधि की लंबाई को छोटे की लंबाई से बड़े पैमाने पर विभाजित किया जा सकता है।

यदि नमूना हर घंटे किया जाता है, तो उपरोक्त समीकरण में को सेट किया जाना चाहिए24 7 = 168n247=168

यदि बूँदें एक आनुपातिक चरित्र के अधिक हैं, तो एक साधारण अंतर आसानी से गतिविधि के कम होने पर अचानक गिरावट का पता लगाने में विफल हो जाएगा। ऐसी परिस्थितियों में एल्गोरिथ्म को इसके बजाय अनुपात की गणना करने के लिए संशोधित किया जा सकता है।

yt=ytytn

मैंने एक नकली डेटासेट का उपयोग करके आर में कुछ परीक्षण किए। इसमें डेटा को दिन में 6 बार नमूना लिया जाता है और अन्य शोर और उतार-चढ़ाव के साथ दैनिक और साप्ताहिक अवधि होती है। ड्रॉप्स को यादृच्छिक स्थानों पर और 1 और 3 के बीच अवधि में जोड़ा गया था। ड्रॉप्स को
अलग करने के लिए पहले अनुपातों की गणना 42 की दूरी पर की गई थी, फिर 0.6 पर एक सीमा निर्धारित की गई, क्योंकि एक निश्चित आकार का केवल नकारात्मक परिवर्तन ही रूचि है। फिर एक-चरण अंतर की गणना की गई, और -0.5 पर एक सीमा निर्धारित की गई। अंत में एक झूठी सकारात्मक के माध्यम से फिसल गया है (एक सप्ताह 16 के अंत में)। बाएँ और दाएँ पर ग्राफ़ समान डेटा दिखाते हैं, बस अलग-अलग तरीकों से।

यहाँ छवि विवरण दर्ज करें


3

क्या विसंगति के बजाय एक नई प्रवृत्ति की शुरुआत के रूप में समय श्रृंखला में बदलाव के बारे में सोचना अधिक उपयोगी होगा? आसन्न बिंदुओं के बीच अंतर लेने से यह बताने में मदद मिलेगी कि ढलान (व्युत्पन्न) कब बदल रहा है और तारीख में एक नए रुझान की शुरुआत का संकेत दे सकता है। अंतर मानों के अंतर (दूसरा व्युत्पन्न) का उपयोग करने से भी हो सकता है। "प्रवृत्ति की शुरुआत के समय श्रृंखला" पर Google खोज करने से तरीकों के लिए अच्छे सुझाव मिल सकते हैं। वित्तीय आंकड़ों में नए रुझानों पर देर से ध्यान दिया जाता है (क्या आप खरीदते हैं या बेचते हैं?) इसलिए इस विषय पर कागजात हैं।

ह्यूबर्ट द्वारा मेरा मानना ​​है कि लेखक के लिए वेवलेट का एक अच्छा परिचय "तरंगों के अनुसार दुनिया" है।


2

मैं दो अलग-अलग एल्गोरिदम का उपयोग करके कई-सीज़न समय श्रृंखला (दैनिक, साप्ताहिक) के लिए कुछ अच्छे परिणाम प्राप्त करने में सक्षम था:

  • मिडपॉइंट सीरीज़ की स्थापना के लिए लोस (या एसटीएल) का उपयोग करके मौसमी-प्रवृत्ति अपघटन
  • विचरण और स्तर के बीच के संबंध के आधार पर, उस मध्य बिंदु के चारों ओर थ्रेसहोल्ड स्थापित करने के लिए नॉनलाइनियर प्रतिगमन

STL आपकी टाइम सीरीज़ के टाइम डोमेन अपघटन को ट्रेंड कंपोनेंट, सिंगल सीज़न कंपोनेंट और शेष में करता है। मौसमी घटक आपकी उच्च आवृत्ति मौसमी (जैसे, दैनिक) है, जबकि प्रवृत्ति में कम आवृत्ति मौसमी (जैसे, साप्ताहिक) और प्रवृत्ति दोनों शामिल हैं। आप ट्रेंड पर फिर से एसटीएल चलाकर दोनों को अलग कर सकते हैं। वैसे भी एक बार जब आप शेष श्रृंखला को अन्य घटकों से अलग करते हैं, तो आप उस श्रृंखला के खिलाफ अपनी विसंगति का पता लगा सकते हैं।

मैंने यहां अधिक विस्तृत लेखन कार्य किया:

https://techblog.expedia.com/2016/07/28/applying-data-science-to-monitoring/


1

डेविड से प्रेरित, क्या आपने एफएफटी का उपयोग करने की कोशिश की है? यह अचानक बूंदों को देखने में सक्षम हो सकता है क्योंकि वे आपकी विसंगतियों का संकेत दे रहे हैं। विसंगतियां एक संकीर्ण स्पेक्ट्रम में दिखाई दे सकती हैं। तो आप उन्हें आसानी से पकड़ सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.