एक सामान्य समय श्रृंखला के ऑनलाइन बाह्य विकृति का सरल एल्गोरिथ्म


88

मैं बड़ी मात्रा में समय श्रृंखला के साथ काम कर रहा हूं। ये समय श्रृंखला मूल रूप से हर 10 मिनट में आने वाले नेटवर्क माप हैं, और उनमें से कुछ आवधिक (यानी बैंडविड्थ) हैं, जबकि कुछ अन्य नहीं हैं (यानी रूटिंग ट्रैफ़िक की मात्रा)।

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

मैं वर्तमान में कुछ शोर को दूर करने के लिए एक चलती औसत का उपयोग कर रहा हूं, लेकिन फिर आगे क्या? मानक विचलन, पागल जैसी साधारण चीजें, ... पूरे डेटा सेट के खिलाफ अच्छी तरह से काम नहीं करता है (मैं मान नहीं सकता कि श्रृंखला स्थिर है), और मैं कुछ और "सटीक" चाहूंगा, आदर्श रूप से एक ब्लैक बॉक्स:

डबल outlier_detection (डबल * वेक्टर, डबल मूल्य);

जहां वेक्टर ऐतिहासिक डेटा वाले डबल का सरणी है, और नए नमूने "मान" के लिए वापसी मूल्य विसंगति है।


1
स्पष्टता के लिए, यहाँ SO पर मूल प्रश्न: stackoverflow.com/questions/3390458/…
मैट पार्कर

1
मुझे लगता है कि हमें पोस्टर को प्रश्न के भाग के रूप में लिंक पोस्ट करने के लिए प्रोत्साहित करना चाहिए यदि उन्होंने उसी प्रश्न को किसी अन्य एसई साइट पर पोस्ट किया हो।

हां, आप पूरी तरह से सही हैं। अगली बार मैं उल्लेख करूंगा कि संदेश क्रॉसपोस्ट है।
गियानलूका

मेरा सुझाव है कि आप पृष्ठ के दाईं ओर अन्य संबंधित लिंक देखें। यह एक लोकप्रिय प्रश्न है और यह पहले कई प्रकार के प्रश्नों में आया है। यदि वे संतोषजनक नहीं हैं तो अपनी स्थिति की बारीकियों के बारे में अपने प्रश्न को अपडेट करना सबसे अच्छा है।
एंडी डब्ल्यू

अच्छी पकड़, @Andy! आइए इस प्रश्न को दूसरे के साथ मिला दें।
whuber

जवाबों:


75

यहां एक सरल आर फ़ंक्शन है जो समय श्रृंखला के आउटलेर्स को ढूंढेगा (और वैकल्पिक रूप से उन्हें एक भूखंड में दिखाएगा)। यह मौसमी और गैर-मौसमी समय श्रृंखला को संभालेगा। मूल विचार प्रवृत्ति और मौसमी घटकों के मजबूत अनुमानों को खोजना और उन्हें घटाना है। फिर अवशिष्टों में आउटलेयर का पता लगाएं। अवशिष्ट आउटलेयर के लिए परीक्षण मानक बॉक्सप्लॉट के लिए समान है - ऊपरी और निचले चतुर्थक के ऊपर या नीचे 1.5IQR से अधिक अंक आउटलेर मान लिए गए हैं। इन थ्रेसहोल्ड के ऊपर / नीचे IQRs की संख्या एक बाहरी "स्कोर" के रूप में वापस आ जाती है। तो स्कोर किसी भी सकारात्मक संख्या हो सकता है, और गैर-आउटलेर के लिए शून्य होगा।

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

tsoutliers <- function(x,plot=FALSE)
{
    x <- as.ts(x)
    if(frequency(x)>1)
        resid <- stl(x,s.window="periodic",robust=TRUE)$time.series[,3]
    else
    {
        tt <- 1:length(x)
        resid <- residuals(loess(x ~ tt))
    }
    resid.q <- quantile(resid,prob=c(0.25,0.75))
    iqr <- diff(resid.q)
    limits <- resid.q + 1.5*iqr*c(-1,1)
    score <- abs(pmin((resid-limits[1])/iqr,0) + pmax((resid - limits[2])/iqr,0))
    if(plot)
    {
        plot(x)
        x2 <- ts(rep(NA,length(x)))
        x2[score>0] <- x[score>0]
        tsp(x2) <- tsp(x)
        points(x2,pch=19,col="red")
        return(invisible(score))
    }
    else
        return(score)
}

मुझ से +1, उत्कृष्ट। तो> 1.5 एक्स अंतर-चतुर्थक श्रेणी समय-निर्भर श्रृंखला के लिए एक बाहरी की आम सहमति परिभाषा है? एक पैमाना-स्वतंत्र संदर्भ होना अच्छा होगा।
dgg

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

वास्तव में आपकी मदद के लिए धन्यवाद, मैं वास्तव में सराहना करता हूं। मैं अभी काम में काफी व्यस्त हूं, लेकिन मैं जल्द से जल्द आप जैसे दृष्टिकोण का परीक्षण करने जा रहा हूं, और मैं इस मुद्दे के बारे में अपने अंतिम विचारों के साथ वापस आऊंगा। केवल एक ही विचार: आपके कार्य में, जो मैं देखता हूं, मुझे समय श्रृंखला की आवृत्ति को मैन्युअल रूप से निर्दिष्ट करना होगा (इसका निर्माण करते समय), और मौसमी घटक केवल तभी माना जाता है जब आवृत्ति 1 से अधिक हो। क्या कोई मजबूत तरीका है? इससे निपटने के लिए स्वचालित रूप से?
जियानलुका

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

2
@ मारकिन, मैं इसे खुद एक छुरा लेने की सलाह देता हूं। हो सकता है कि अपने समाधान को gist.github.com पर पेस्ट करें और जब आप काम पूरा कर लें, तो दूसरों को आपके काम की जाँच करने के लिए एक एसओ प्रश्न पोस्ट करें?
केन विलियम्स

27

एक अच्छे समाधान में कई सामग्रियां होंगी, जिनमें शामिल हैं:

  • गैरबराबरी को दूर करने के लिए चिकनी, चलती खिड़की का उपयोग करें।

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

  • अवशिष्ट के लिए नियंत्रण चार्ट विधियों, या कम से कम नियंत्रण चार्ट सोच को लागू करें।

जहाँ तक कि आखिरी जाता है, नियंत्रण चार्ट सोच से पता चलता है कि चतुर्थकों से परे 2 एसडी या 1.5 गुना IQR जैसे "पारंपरिक" थ्रेसहोल्ड खराब काम करते हैं क्योंकि वे बहुत से गलत आउट-ऑफ-कंट्रोल सिग्नल ट्रिगर करते हैं। लोग आमतौर पर नियंत्रण चार्ट के काम में 3 एसडी का उपयोग करते हैं, जो कि चतुर्थक से परे आईक्यूआर से 2.5 (या यहां तक ​​कि 3) बार एक अच्छा प्रारंभिक बिंदु होगा।

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

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


3
यह व्यावहारिक विश्लेषण के लिए एक असाधारण जवाब है। कभी नहीं सोचा होगा कि क्वार्टराइल से परे 3 आईक्यूआर की कोशिश करना।
जॉन रॉबर्टसन

3
@ जॉन, 1.5 आईक्यूआर एक बॉक्सप्लॉट पर सबसे लंबे मूंछ के लिए टुकी की मूल सिफारिश है और 3 आईक्यूआर अंक "आउटलेयर" (एक लोकप्रिय 60 के वाक्यांश पर एक दरार) के रूप में अंक अंकित करने के लिए उनकी सिफारिश है। यह कई बॉक्सप्लाट एल्गोरिदम में बनाया गया है। सिफारिश का विश्लेषण होग्लिन, मोस्टेलर, और टुकी, अंडरस्टैंडिंग रोबस्ट एंड एक्सप्लोरेटरी डेटा विश्लेषण
व्हिबर

यह समय श्रृंखला डेटा की पुष्टि करता है जिसका मैं विश्लेषण करने की कोशिश कर रहा हूं। विंडो औसत और विंडो मानक विचलन भी। ((x - avg) / sd)> 3 वे बिंदु हैं जो मैं आउटलेर के रूप में ध्वजांकित करना चाहता हूं। अच्छी तरह से कम से कम बाहरी लोगों के रूप में चेतावनी दी है, मैं चरम त्रुटि आउटलेर के रूप में 10 एसडी से अधिक कुछ भी झंडा। मैं जिस समस्या को चलाता हूं वह एक आदर्श खिड़की की लंबाई है? मैं 4-8 डेटा पॉइंट्स के बीच कुछ भी खेल रहा हूं।
जोश पीक

1
@ अपना सर्वश्रेष्ठ दांव अपने डेटा के सबसेट के साथ प्रयोग करना और शेष पर परीक्षण के साथ अपने निष्कर्ष की पुष्टि करना हो सकता है। आप अधिक औपचारिक क्रॉस-सत्यापन कर सकते हैं, भी (लेकिन सभी मूल्यों की अन्योन्याश्रयता के कारण समय श्रृंखला डेटा के साथ विशेष देखभाल की आवश्यकता है)।
whuber

17

(यह जवाब बकाया घटनाओं का पता लगाने पर एक डुप्लिकेट (अब बंद) सवाल का जवाब दिया , जो ग्राफिकल रूप में कुछ डेटा प्रस्तुत करता है।)


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

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

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

अभी भी कुछ ट्यूनिंग की जानी है : डेटा के थोक से कितना विचलन आउटसाइड माना जाना चाहिए और एक समय में कितनी दूर दिखना चाहिए? आइए प्रयोग के लिए इन मापदंडों को छोड़ दें। यहाँ एक है Rकार्यान्वयन डेटा पर लागू (साथ संबंधित मानों के साथ डेटा का अनुकरण करने के) :n = 1150 yx=(1,2,,n)n=1150y

# Parameters to tune to the circumstances:
window <- 30
threshold <- 5

# An upper threshold ("ut") calculation based on the MAD:
library(zoo) # rollapply()
ut <- function(x) {m = median(x); median(x) + threshold * median(abs(x - m))}
z <- rollapply(zoo(y), window, ut, align="right")
z <- c(rep(z[1], window-1), z) # Use z[1] throughout the initial period
outliers <- y > z

# Graph the data, show the ut() cutoffs, and mark the outliers:
plot(x, y, type="l", lwd=2, col="#E00000", ylim=c(0, 20000))
lines(x, z, col="Gray")
points(x[outliers], y[outliers], pch=19)

प्रश्न में सचित्र लाल वक्र जैसे एक डेटासेट पर लागू होता है, यह इस परिणाम का उत्पादन करता है:

भूखंड

डेटा को लाल रंग में दिखाया गया है, 30-दिवसीय माध्यिका की विंडो + 5 * MAD थ्रेसहोल्ड ग्रे में, और आउटलेरर्स - जो ग्रे वक्र के ऊपर केवल उन डेटा मान हैं - काले रंग में।

(थ्रेशोल्ड की गणना प्रारंभिक विंडो के अंत में की जा सकती है । इस प्रारंभिक विंडो में सभी डेटा के लिए, पहली थ्रेशोल्ड का उपयोग किया जाता है: यही कारण है कि ग्रे वक्र x = 0 और x = 30 के बीच समतल है।)

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

ध्यान दें कि यह विधि डेटा के बारे में कितना कम मानती है: उन्हें सामान्य रूप से वितरित करने की आवश्यकता नहीं है; उन्हें किसी आवधिकता का प्रदर्शन करने की आवश्यकता नहीं है; उन्हें गैर-नकारात्मक होना भी नहीं चाहिए। यह सभी मानते हैं कि डेटा समय के साथ समान रूप से व्यवहार करता है और यह कि बाकी की चोटियां बाकी डेटा की तुलना में अधिक दिखाई देती हैं।


यदि कोई प्रयोग करना चाहता है (या यहां प्रस्तुत किसी अन्य समाधान की तुलना करता है), तो यहां वह कोड है जिसका उपयोग मैंने प्रश्न में दिखाए गए डेटा की तरह किया था।

n.length <- 1150
cycle.a <- 11
cycle.b <- 365/12
amp.a <- 800
amp.b <- 8000

set.seed(17)
x <- 1:n.length
baseline <- (1/2) * amp.a * (1 + sin(x * 2*pi / cycle.a)) * rgamma(n.length, 40, scale=1/40)
peaks <- rbinom(n.length, 1,  exp(2*(-1 + sin(((1 + x/2)^(1/5) / (1 + n.length/2)^(1/5))*x * 2*pi / cycle.b))*cycle.b))
y <- peaks * rgamma(n.length, 20, scale=amp.b/20) + baseline

यह वास्तव में एक दिलचस्प समाधान है और मैं सराहना करता हूं कि मैं आर का उपयोग किए बिना इसे लागू कर सकता हूं (बस एक वेब अनुप्रयोग में सादे जावास्क्रिप्ट का उपयोग करके)। धन्यवाद!
हॉजबेल

15

यदि आप किसी विशेष दृष्टिकोण के साथ मान्यताओं के बारे में चिंतित हैं, तो एक दृष्टिकोण कई शिक्षार्थियों को विभिन्न संकेतों पर प्रशिक्षित करने के लिए है, फिर बाहरी वर्गीकरण बनाने के लिए अपने शिक्षार्थियों से "वोट" पर एकत्रित तरीकों का उपयोग करें और एकत्र करें।

BTW, यह पढ़ने या स्किमिंग के लायक हो सकता है क्योंकि यह समस्या के लिए कुछ दृष्टिकोणों का संदर्भ देता है।


5

मैं यह अनुमान लगा रहा हूं कि परिष्कृत समय श्रृंखला मॉडल आपके लिए काम नहीं करेगा क्योंकि इस पद्धति का उपयोग करके समय का पता लगाने में समय लगता है। इसलिए, यहाँ एक समाधान है:

  1. पहले ऐतिहासिक डेटा के मैनुअल विश्लेषण के आधार पर एक वर्ष के लिए एक आधारभूत 'सामान्य' ट्रैफिक पैटर्न स्थापित करें जो दिन के समय, सप्ताह के अंत बनाम सप्ताहांत, वर्ष के महीने आदि के लिए जिम्मेदार हो।

  2. आउटलाइनरों का पता लगाने के लिए कुछ सरल तंत्र (जैसे, कार्लोस द्वारा सुझाए गए मूविंग एवरेज) के साथ इस बेसलाइन का उपयोग करें।

आप कुछ विचारों के लिए सांख्यिकीय प्रक्रिया नियंत्रण साहित्य की समीक्षा भी कर सकते हैं ।


1
हाँ, यह वही है जो मैं कर रहा हूं: अब तक मैं मैन्युअल रूप से संकेत को अवधि में विभाजित करता हूं, ताकि उनमें से प्रत्येक के लिए मैं एक आत्मविश्वास अंतराल को परिभाषित कर सकूं जिसके भीतर संकेत स्थिर होना चाहिए, और इसलिए मैं मानक विधियों का उपयोग कर सकता हूं जैसे मानक विचलन के रूप में, ... असली समस्या यह है कि मैं उन सभी संकेतों के लिए अपेक्षित पैटर्न तय नहीं कर सकता हूं जिनका मुझे विश्लेषण करना है, और इसीलिए मैं कुछ अधिक बुद्धिमान की तलाश कर रहा हूं।
गियानलुका

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

हां, यह काम कर सकता है। मैं इसी तरह के दृष्टिकोण के बारे में सोच रहा था (हर हफ्ते आधारभूत को फिर से तैयार करना, जो कि सीपीयू गहन हो सकता है यदि आपके पास विश्लेषण करने के लिए सैकड़ों अनिवारीट समय श्रृंखला है)। BTW असली मुश्किल सवाल है "शोर, प्रवृत्ति अनुमान और मौसमीता पर विचार करते हुए पूरी तरह से सामान्य संकेत मॉडलिंग के लिए सबसे अच्छा ब्लैकबॉक्स-शैली एल्गोरिथ्म क्या है?"। AFAIK, साहित्य में प्रत्येक दृष्टिकोण के लिए वास्तव में कठिन "पैरामीटर ट्यूनिंग" चरण की आवश्यकता होती है, और केवल एक स्वचालित विधि जो मैंने पाया है वह Hyndman ( robjhyndman.com/software/forecast ) द्वारा एक ARIMA मॉडल है । क्या मैं कुछ भूल रहा हूँ?
गियानलूका

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

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

5

मौसमी रूप से डेटा को ऐसे समायोजित करें कि एक सामान्य दिन फ्लैट के करीब दिखे। आप आज का 5:00 बजे का नमूना ले सकते हैं और पिछले 30 दिनों के औसत को 5:00 बजे घटा या घटा सकते हैं। फिर आउटलेर्स के लिए पिछले N मानक विचलन (पूर्व-समायोजित डेटा का उपयोग करके मापा गया) देखें। यह साप्ताहिक और दैनिक "मौसमों" के लिए अलग से किया जा सकता है।


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

1
जब तक आप एक सामान्य समय श्रृंखला मॉडल (जो विलंबता के संदर्भ में अपनी सहमति में लाता है) को लागू करने के लिए तैयार हैं, मैं निराशावादी हूं कि आप एक सामान्य कार्यान्वयन पाएंगे जो एक ही समय में सभी प्रकार की श्रृंखला के लिए काम करने के लिए पर्याप्त सरल है।

एक और टिप्पणी: मुझे पता है कि एक अच्छा उत्तर "हो सकता है" इसलिए आप संकेत की आवधिकता का अनुमान लगा सकते हैं, और इसके अनुसार उपयोग करने के लिए एल्गोरिथ्म तय कर सकते हैं ", लेकिन मुझे इस अन्य समस्या का वास्तविक अच्छा समाधान नहीं मिला (मैंने खेला एक ऑटोक्रॉलेशन फ़ंक्शन का उपयोग करते हुए डीएफटी और समय विश्लेषण का उपयोग करते हुए वर्णक्रमीय विश्लेषण के साथ बिट, लेकिन मेरी समय श्रृंखला में बहुत अधिक शोर होता है और इस तरह के तरीके कुछ पागल परिणाम
अधिकांश

आपकी पिछली टिप्पणी पर टिप्पणी: इसीलिए मैं अधिक सामान्य दृष्टिकोण की तलाश कर रहा हूं, लेकिन मुझे एक "ब्लैक बॉक्स" की आवश्यकता है, क्योंकि मैं विश्लेषण किए गए सिग्नल के बारे में कोई धारणा नहीं बना सकता हूं, और इसलिए मैं नहीं बना सकता हूं "लर्निंग एल्गोरिथम के लिए सबसे अच्छा पैरामीटर सेट"।
गियानलूका

@gianluca जैसा कि आप अंतर्निहित ARIMA संरचना को सूचित कर चुके हैं विसंगति का सामना कर सकते हैं। गलत निर्माण pf संभव कारण चर जैसे दिन के घंटे, दिन के सप्ताह, छुट्टी प्रभाव आदि भी विसंगति का सामना कर सकते हैं। उत्तर स्पष्ट रूप से स्पष्ट है कि आपको विसंगतियों का प्रभावी ढंग से पता लगाने के लिए एक अच्छा ईक्वाएशन होना चाहिए। बेकन को उद्धृत करने के लिए, "जो कोई भी जानता है कि प्रकृति के तरीके अधिक आसानी से उसके विचलन को नोटिस करेंगे और दूसरी तरफ, जो कोई भी जानता है कि उसके विचलन उसके तरीकों का अधिक सटीक वर्णन करेंगे।"
आयरिशस्टैट

3

रोब हंडमैन द्वारा उल्लिखित दृष्टिकोण का एक विकल्प होल्ट-विंटर्स पूर्वानुमान का उपयोग करना होगा । होल्ट-विंटर्स से प्राप्त आत्मविश्वास बैंड का उपयोग आउटलेर्स का पता लगाने के लिए किया जा सकता है। यहां एक पेपर है जो बताता है कि "नेटवर्क मॉनिटरिंग के लिए टाइम सीरीज़ में एबरेंट बिहेवियर डिटेक्शन" के लिए होल्ट-विंटर्स का उपयोग कैसे करें। RRDTool के लिए एक कार्यान्वयन यहां पाया जा सकता है


2

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

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


2
क्या आप बता सकते हैं कि यह समाधान "स्थानीय अनियमितताओं" का कैसे पता लगाएगा? एक काम किया उदाहरण पेश करना बेहद मददगार होगा। (ईमानदारी से कहूं तो मैं तुम्हें क्योंकि इस तरह एक व्यायाम मैं तुम्हें पता चल जाएगा कि आपका सुझाव बाहरी पता लगाने के लिए प्रभावी नहीं है का मानना है कि बाहर ले जाने में ऐसा सुझाव दे रहा हूँ लेकिन मैं गलत हो सकता है ...।)
whuber

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

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

1
एक स्थिर समय श्रृंखला का एक निरंतर मतलब होता है। यदि समय-समय पर घटक के लिए चोटी बदल सकती है, तो यह समय के साथ बदलने के लिए साधन को कम कर सकता है और इसलिए सीरे को केंद्र में रखा जाएगा।
बजे माइकल चेरिक

2

चूंकि यह एक समय श्रृंखला डेटा है, एक सरल घातीय फिल्टर http://en.wikipedia.org/wiki/Exponential_smoothing डेटा को सुचारू करेगा। यह एक बहुत अच्छा फिल्टर है क्योंकि आपको पुराने डेटा बिंदुओं को जमा करने की आवश्यकता नहीं है। हर नए सुचारू डेटा मूल्य की उसके अनम्यूट वैल्यू के साथ तुलना करें । एक बार जब विचलन एक निश्चित पूर्वनिर्धारित सीमा से अधिक हो जाता है (यह इस पर निर्भर करता है कि आप अपने डेटा में एक ख़ासियत को मानते हैं), तो आपके आउटलाइन का आसानी से पता लगाया जा सकता है।

CI में एक वास्तविक समय 16 बिट नमूना के लिए निम्नलिखित करेंगे (मेरा मानना ​​है कि यह यहां कहीं पाया गया है <स्पष्टीकरण - https://dsp.stackexchange.com/questions/378/what-is-the-best-first-order -आईआर-सन्निकटन-से-एक-चलती-औसत-फ़िल्टर >)

#define BITS2 2     //< This is roughly = log2( 1 / alpha ), depending on how smooth you want your data to be

short Simple_Exp_Filter(int new_sample) 
{static int filtered_sample = 0;
long local_sample = sample << 16; /*We assume it is a 16 bit sample */
filtered_sample += (local_sample - filtered_sample) >> BITS2;   
return (short) ((filtered_sample+0x8000) >> 16); //< Round by adding .5 and truncating.   
}


int main()
{
newly_arrived = function_receive_new_sample();
filtered_sample = Simple_Exp_Filter(newly_arrived);
if (abs(newly_arrived - filtered_sample)/newly_arrived > THRESHOLD)
    {
    //AN OUTLIER HAS BEEN FOUND
    }
 return 0;   
}

1

आप अंतिम एन माप के मानक विचलन का उपयोग कर सकते हैं (आपको एक उपयुक्त एन चुनना होगा)। एक अच्छा विसंगति स्कोर यह होगा कि चलती औसत से माप कितने मानक विचलन है।


आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन क्या होगा यदि संकेत एक उच्च मौसमीता प्रदर्शित करता है (यानी बहुत सारे नेटवर्क माप एक ही समय में दैनिक और साप्ताहिक पैटर्न की विशेषता है, उदाहरण के लिए रात बनाम दिन या सप्ताहांत बनाम कार्य दिवस)? मानक विचलन पर आधारित एक दृष्टिकोण उस मामले में काम नहीं करेगा।
गियानलुका २०

उदाहरण के लिए, यदि मुझे हर 10 मिनट में एक नया नमूना मिलता है, और मैं किसी कंपनी के नेटवर्क बैंडविड्थ के उपयोग का बाहरी रूप से पता लगा रहा हूं, तो मूल रूप से शाम 6 बजे यह उपाय नीचे गिर जाएगा (यह एक कुल मिलाकर सामान्य पैटर्न है), और स्लाइडिंग विंडो पर गणना किया गया एक मानक विचलन विफल हो जाएगा (क्योंकि यह सुनिश्चित करने के लिए अलर्ट ट्रिगर करेगा)। उसी समय, यदि माप शाम 4 बजे गिरता है (सामान्य आधार रेखा से भटकना), तो यह एक वास्तविक परिणाम है।
गियानलुका २०

1

मैं सप्ताह के दिन और दिन के हिसाब से मापों का समूह बनाता हूं और उस के मानक विचलन की तुलना करता हूं। अभी भी छुट्टियों और गर्मियों / सर्दियों के मौसम जैसी चीजों के लिए सही नहीं है, लेकिन इसका अधिकांश समय सही है।

नकारात्मक पक्ष यह है कि आपको वास्तव में पर्याप्त होने के लिए एक या एक वर्ष का डेटा एकत्र करने की आवश्यकता है ताकि stddev समझ में आने लगे।


धन्यवाद, यह वही है जो मैं बचने की कोशिश कर रहा था (बेसलाइन के रूप में बहुत सारे नमूने हैं), क्योंकि मैं वास्तव में प्रतिक्रियाशील दृष्टिकोण (जैसे ऑनलाइन पहचान, शायद "गंदा", 1-2 सप्ताह के बाद आधारभूत)
चाहूंगा

0

मैं नीचे दी गई योजना का सुझाव देता हूं, जिसे एक या दो दिन में लागू किया जाना चाहिए:

प्रशिक्षण

  • आप स्मृति में पकड़ के रूप में कई नमूने ले सकते हैं
  • प्रत्येक विशेषता के लिए मानक विचलन का उपयोग करके स्पष्ट आउटलेयर निकालें
  • सहसंबंध मैट्रिक्स की गणना और स्टोर करें और प्रत्येक विशेषता का मतलब भी
  • अपने सभी नमूनों की महालनोबिस दूरी की गणना करें और संग्रहीत करें

"बाह्यता" की गणना:

जिस एकल नमूने के लिए आप इसकी "बाहरीता" जानना चाहते हैं:

  • प्रशिक्षण से साधन, सहसंयोजक मैट्रिक्स और महालनोबिस दूरी को पुनः प्राप्त करें
  • अपने नमूने के लिए महालनोबिस दूरी "डी" की गणना करें
  • वह प्रतिशतक लौटाएं जिसमें "डी" गिरता है (प्रशिक्षण से महालनोबिस दूरी का उपयोग करके)

यह आपका आउटलाइन स्कोर होगा: 100% एक अत्यधिक परिणाम है।


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


0

उस मामले के लिए जहां किसी को आउटलेयर की गणना जल्दी से करनी हो, कोई व्यक्ति गणना करने के लिए Rob Hyndman और Mahito Sugiyama ( https://github.com/BorgwardtLab/sampling-outlier-detection , Library (spoutlier), फंक्शन qsp) के विचार का उपयोग कर सकता है। इस प्रकार है:

library(spoutlier)
rapidtsoutliers <- function(x,plot=FALSE,seed=123)
{
    set.seed(seed)
    x <- as.numeric(x)
    tt <- 1:length(x)
    qspscore <- qsp(x)
    limit <- quantile(qspscore,prob=c(0.95))
    score <- pmax((qspscore - limit),0)
    if(plot)
    {
        plot(x,type="l")
        x2 <- ts(rep(NA,length(x)))
        x2[score>0] <- x[score>0]
        tsp(x2) <- tsp(x)
        points(x2,pch=19,col="red")
        return(invisible(score))
    }
    else
        return(score)
}

0

विसंगति का पता लगाने के लिए एक समीकरण के निर्माण की आवश्यकता होती है जो अपेक्षा का वर्णन करता है। हस्तक्षेप जांच एक गैर-कारण और कारण सेटिंग दोनों में उपलब्ध है। यदि किसी के पास कीमत की तरह भविष्यवक्ता श्रृंखला है तो चीजें थोड़ी जटिल हो सकती हैं। अन्य प्रतिक्रियाएं यहां उपयोगकर्ता द्वारा निर्दिष्ट भविष्यवक्ता श्रृंखला जैसे मूल्य के कारण असाइन किए गए कारण को ध्यान में नहीं आती हैं और इस प्रकार त्रुटिपूर्ण हो सकती हैं। बेची गई मात्रा अच्छी तरह से मूल्य, शायद पिछले मूल्यों और शायद अतीत में बेची गई मात्रा पर निर्भर हो सकती है। विसंगति का पता लगाने का आधार (दालें, मौसमी दालें, स्तर पारियों और स्थानीय समय के रुझान) https://pdfs.semanticscholar.org/09c4/ba8dd3cc88289caf18d71d8985bdd11ad21c.pdf में पाया जाता है।


लिंक काम नहीं कर रहा है, क्या आप इसे ठीक कर सकते हैं। धन्यवाद
पंकज जोशी

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