שְׁאֵלָה:
אלגוריתם פשוט לזיהוי חריגים מקוונים של סדרת זמן כללית
gianluca
2010-08-03 01:37:28 UTC
view on stackexchange narkive permalink

אני עובד עם כמות גדולה של סדרות זמן. סדרות זמן אלו הן בעצם מדידות רשת המגיעות כל עשר דקות, וחלקן תקופתיות (כלומר רוחב הפס), ואילו אחרות אינן (כלומר כמות התעבורה המנותבת).

הייתי רוצה אלגוריתם פשוט לביצוע "זיהוי חריגים" מקוון. בעיקרון, אני רוצה לשמור בזיכרון (או בדיסק) את כל הנתונים ההיסטוריים עבור כל סדרת זמן, ואני רוצה לזהות כל יוצא מן הכלל בתרחיש חי (בכל פעם שמדגם מדגם חדש). מהי הדרך הטובה ביותר להשיג תוצאות אלו?

כרגע אני משתמש בממוצע נע על מנת להסיר קצת רעש, אך אז מה הלאה? דברים פשוטים כמו סטיית תקן, מטורפים, ... כנגד מערך הנתונים לא עובדים טוב (אני לא יכול להניח שסדרות הזמן הן נייחות), והייתי רוצה משהו "מדויק" יותר, באופן אידיאלי תיבה שחורה כמו:

זיהוי כפול של outlier (כפול * וקטור, ערך כפול);

כאשר הווקטור הוא מערך הכפול המכיל את הנתונים ההיסטוריים, וערך ההחזרה הוא ציון החריגה עבור המדגם החדש " ערך ".

רק לשם הבהרה, הנה השאלה המקורית ב- SO: http://stackoverflow.com/questions/3390458/simple-algorithm-for-online-outlier-detection-of-a-generic-time-series
אני חושב שעלינו לעודד פוסטרים לפרסם קישורים כחלק מהשאלה אם הם פרסמו את אותה שאלה באתר SE אחר.
כן, אתה צודק לגמרי. בפעם הבאה אציין שההודעה מוצלבת.
אני מציע לך לבדוק את שאר הקישורים הקשורים בצד ימין של הדף. זו שאלה פופולרית והיא עלתה במגוון שאלות בעבר. אם הם לא מספקים, עדיף לעדכן את שאלתך לגבי הספציפיות של המצב שלך.
תפיסה טובה, @Andy! בואו נמזג את השאלה הזו עם השאלה השנייה.
קלט 2cts.בעבודה על אותו סוג של מודלים הגעתי למסקנה שתעבורת אינטרנט "יכולה פשוט לקרות", שינויים בנפח נפוצים ויכולים לקרות מבלי לדרוש פעולה.שאלות נגזרות כמו האם אחוז החשבונות הנעולים גדל, האם המקור הגאוגרפי של שינוי התעבורה יכול להיות מעניין ו / או יציב יותר.
ארבעה עשר תשובות:
#1
+84
Rob Hyndman
2010-08-03 05:54:56 UTC
view on stackexchange narkive permalink

הנה פונקציית R פשוטה שתמצא חריגים של סדרות זמן (ותציג אותם באופציה בעלילה). זה יטפל בסדרות זמן עונתיות ולא עונתיות. הרעיון הבסיסי הוא למצוא אומדנים חזקים של המגמה והרכיבים העונתיים ולהחסיר אותם. ואז מצא חריגים בשאריות. הבדיקה לחריגים שיוריים זהה לזו של מגרש התיבות הסטנדרטי - נקודות גבוהות מ- 1.5IQR מעל או מתחת לרבעונים העליונים והתחתונים הם הנמצאים חריגים. מספר ה- IQR מעל / מתחת לסף זה מוחזר כ"ציון "יוצא דופן. כך שהציון יכול להיות כל מספר חיובי, ויהיה אפס עבור אנשים שאינם חריגים.

אני מבין שאתה לא מיישם את זה ב- R, אבל לעתים קרובות אני מוצא שפונקציה R היא מקום טוב להתחיל בו. ואז המשימה היא לתרגם זאת לכל שפה שתידרש.

  tsoutliers <- function (x, plot = FALSE) {x <- as.ts (x) if (frequency (x) >1) resid <- stl (x, s.window = "periodic", robust = TRUE) $ time.series [, 3] אחר {tt <- 1: אורך (x) resid <- שאריות (לס (x ~ tt ))} resid.q <- quantile (resid, prob = c (0.25,0.75)) iqr <- diff (resid.q) מגביל <- resid.q + 1.5 * iqr * c (-1,1) ציון < - abs (pmin ((resid- גבולות [1]) / iqr, 0) + pmax ((resid - גבולות [2]) / iqr, 0)) אם (plot) {plot (x) x2 <- ts (rep (NA, אורך (x))) x2 [score>0] <- x [score>0] כפית (x2) <- כפית (x) נקודות (x2, pch = 19, col = "אדום") החזר (בלתי נראה (ציון)) } החזר אחר (ציון)}  
+1 ממני, מצוין. אז> טווח בין רבעונים 1.5 X הוא ההגדרה הקונצנזוס של חריג לסדרות תלויות זמן? זה יהיה נחמד שיש התייחסות בלתי תלויה בקנה מידה.
מבחן החריגות הוא על השאריות, כך אני מקווה שתלות הזמן קטנה. אני לא יודע לגבי קונצנזוס, אך לעתים קרובות נעשה שימוש במגרשי תיבות לזיהוי יוצא דופן ונראה שהם עובדים בצורה סבירה. ישנן שיטות טובות יותר אם מישהו היה רוצה להפוך את הפונקציה למעט יותר מהודרת.
באמת תודה על העזרה שלך, אני מאוד מעריך. אני די עסוק בעבודה עכשיו, אבל אני אבדוק גישה כמו שלך בהקדם האפשרי ואחזור עם השיקולים האחרונים שלי בנושא זה. מחשבה אחת בלבד: בתפקוד שלך, ממה שאני רואה, עלי לציין ידנית את תדירות סדרות הזמן (בעת בנייתו), ורכיב העונתיות נחשב רק כאשר התדר גדול מ- 1. האם יש דרך חזקה להתמודד עם זה באופן אוטומטי?
כן, הנחתי שהתדירות ידועה ומוגדרת. ישנן שיטות לאמוד את התדירות באופן אוטומטי, אך זה יסבך את הפונקציה במידה ניכרת. אם אתה צריך לאמוד את התדירות, נסה לשאול שאלה נפרדת בנושא - וכנראה אביא תשובה! אבל זה זקוק ליותר מקום ממה שיש לי בתגובה.
סוף סוף הספקתי לשחק קצת בשיטה הזו, וזה נראה פשרה טובה (גם אם אני עדיין צריך להעריך עד כמה מורכבת שגרת ה- stl () מנקודת מבט זיכרון / מעבד), שעובדת די טוב אם ידענו את התדירות של סדרות הזמן. BTW, שמתי לב שתוצאות האיתור תלויות במידה רבה בסוג האות שאני מנתח, וכדי להשיג את התוצאות האופטימליות עלי לכוון ידנית את ההסתברויות לכמויות או מכפיל ה- IQR. מכיוון שאתה ' האם אתה מומחה בנושא זה, האם יש פיתרון "חכם" ו"מעשה "לטפל בנושא זה?
האם יש סיכוי שמישהו יוכל לכתוב את זה מחדש במתלאב? אני לא 'מדבר' R, אבל זה נראה מאוד שימושי.
@Marcin, אני ממליץ לדקור את זה בעצמך. אולי תדביק את הפתרון שלך ב gist.github.com ותפרסם שאלה מסוג SO כשתסיים, כדי שאחרים יבדקו את עבודתך?
פשוט פרסמתי כאן שאלת המשך לתשובת @RobHyndman's: [אלגוריתם פשוט לזיהוי מקוון של חריגים של סדרת זמן כללית II: מחזור יומי בתוך שנתי] (http://stats.stackexchange.com/questions/151840/simple-algorithm-לגילוי מקוון-אאוטלטר-של-סדרה-זמן-גנרית-יומי)
#2
+28
whuber
2010-08-26 23:02:44 UTC
view on stackexchange narkive permalink

לפיתרון טוב יהיו כמה מרכיבים, כולל:

  • השתמש בחלון עמיד ונע, חלק כדי להסיר את האי-סטנדרטיות.

  • ביטא מחדש את הנתונים המקוריים כך שהשאריות ביחס לחלק יתפזרו באופן סימטרי בקירוב. בהתחשב באופי הנתונים שלך, סביר להניח כי השורשים הריבועיים שלהם או הלוגריתמים שלהם יעניקו שאריות סימטריות.

  • החל שיטות תרשים בקרה, או לפחות שליטת חשיבה של תרשים, על השאריות.

ככל שזה האחרון מגיע, חשיבת תרשימי בקרה מראה שסף "קונבנציונאלי" כמו 2 SD או פי 1.5 מנת המשכל מעבר לרבעונים פועל בצורה גרועה מכיוון שהם מפעילים יותר מדי אותות שקריים מחוץ לשליטה. אנשים בדרך כלל משתמשים ב- 3 SD בעבודות תרשים בקרה, כאשר פי 2.5 (או אפילו 3) ה- IQR מעבר לרבעוני יהווה נקודת התחלה טובה.

התארתי פחות או יותר את אופי הפתרון של רוב הינדמן בזמן והוסיפו לו שתי נקודות עיקריות: הצורך הפוטנציאלי להביע מחדש את הנתונים והחוכמה להיות שמרניים יותר לאותת חריג. אני לא בטוח שלוס מתאים לגלאי מקוון, מכיוון שהוא לא עובד טוב בנקודות הקצה. במקום זאת תוכל להשתמש במשהו פשוט כמו פילטר חציוני נע (כמו בהחלקה העמידה של טוקי). אם חריגים לא מגיעים בהתפרצויות, אתה יכול להשתמש בחלון צר (אולי 5 נקודות נתונים, שיתפרקו רק עם התפרצות של 3 חריגים או יותר בתוך קבוצה של 5).

פעם אחת ביצעת את הניתוח כדי לקבוע ביטוי מחדש טוב של הנתונים, לא סביר שתצטרך לשנות את הביטוי מחדש. לכן, הגלאי המקוון שלך באמת צריך להתייחס רק לערכים האחרונים (החלון האחרון) מכיוון שהוא כלל לא ישתמש בנתונים הקודמים. אם יש לך סדרות זמן ארוכות באמת תוכל להמשיך רחוק יותר לניתוח התאמה אוטומטית ועונתיות (כגון תנודות יומיות או שבועיות חוזרות) כדי לשפר את ההליך.

זו תשובה יוצאת דופן לניתוח מעשי. מעולם לא היה חושב שצריך לנסות 3 מנת משכל מעבר לרבעונים.
@John, 1.5 IQR הוא ההמלצה המקורית של טוקי לזיפים הארוכים ביותר על מגרש תיבות, ו- 3 IQR היא ההמלצה שלו לסמן נקודות כ"חוצצות רחוקות "(ריף על ביטוי פופולרי של שנות ה -60). זה מובנה בתוך אלגוריתמי boxplot רבים. ההמלצה מנותחת באופן תיאורטי ב- Hoaglin, Mosteller, & Tukey, * הבנת ניתוח נתונים איתנים וחקירתיים. *
זה מאשש את נתוני סדרות הזמן שניסיתי לנתח.ממוצע חלונות וגם סטיות תקן של חלון.((x - ממוצע) / sd)> 3 נראה שהנקודות שאני רוצה לסמן כחריגות.ובכן, לפחות מזהיר כי הם חריגים, אני מסמן כל דבר הגבוה מ- 10 sd כחריגות שגיאות קיצוניות.הבעיה שאני נתקל בה היא מהו אורך החלון האידיאלי?אני משחק עם כל דבר שבין 4-8 נקודות נתונים.
@Neo המומלץ ביותר שלך יכול להיות להתנסות בתת-קבוצה של הנתונים שלך ולאשר את מסקנותיך באמצעות בדיקות לגבי השאר.אתה יכול גם לבצע אימות צולב רשמי יותר (אך יש צורך בזהירות מיוחדת בנתוני סדרות זמן בשל התלות ההדדית של כל הערכים).
#3
+19
whuber
2012-09-03 20:57:53 UTC
view on stackexchange narkive permalink

(תשובה זו הגיבה לשאלה כפולה (נסגרה כעת) ב- איתור אירועים מצטיינים, שהציגה נתונים מסוימים בצורה גרפית.)


יוצא מהכלל איתור תלוי באופי הנתונים ובמה שאתה מוכן להניח לגביהם. שיטות למטרות כלליות נשענות על נתונים סטטיסטיים חזקים. רוחה של גישה זו היא לאפיין את עיקר הנתונים בצורה שאינה מושפעת מאף חריגה ואז להצביע על כל ערכים בודדים שאינם מתאימים לאפיון זה.

מכיוון שזה זמן סדרה, זה מוסיף את הסיבוך של הצורך לאתר חריגים (מחדש) באופן שוטף. אם זה אמור להיעשות ככל שהסדרה מתרחשת, אז מותר לנו להשתמש בנתונים ישנים יותר לגילוי, ולא בנתונים עתידיים! יתר על כן, כהגנה מפני הבדיקות החוזרות ונשנות הרבות, נרצה להשתמש בשיטה שיש לה שיעור חיובי כוזב נמוך מאוד.

שיקולים אלה מצביעים על הפעלת מבחן חריץ חלונות נע פשוט וחזק על פני נתונים . ישנן אפשרויות רבות, אך אחת פשוטה, מובנת בקלות ומיושמת בקלות מבוססת על MAD פועל: סטייה מוחלטת חציונית מהחציון. זהו מדד חזק מאוד של שונות בתוך הנתונים, בדומה לסטיית תקן. שיא המרוחק יהיה מספר MAD או יותר מהחציון.

עדיין יש לבצע כיוונון כלשהו : כמה סטייה מ יש לראות את עיקר הנתונים כמרוחקים וכמה רחוק בזמן צריך להסתכל? בואו נעזוב את אלה כפרמטרים להתנסות. הנה יישום R המיושם על נתונים $ x = (1,2, \ ldots, n) $ (עם $ n = 1150 $ כדי לחקות את הנתונים) עם ערכים תואמים $ y $:

  # פרמטרים להתאמה לנסיבות: חלון <- 30 סף <- 5 # חישוב סף עליון ("ut") מבוסס על MAD: ספרייה (גן חיות) # rollapply ()
ut <- פונקציה (x) {m = חציון (x); חציון (x) + סף * חציון (abs (x - m))} z <- rollapply (גן חיות (y), חלון, ut, align = "ימין") z <- c (rep (z [1], חלון -1), z) # השתמש ב- z [1] לאורך כל המחזורים הראשוניים של הספקים <- y > z # גרף את הנתונים, הראה את חיתוכי ut () וסמן את החריגים: plot (x, y, type = "l" lwd = 2, col = "# E00000", ylim = c (0, 20000)) שורות (x, z, col = "אפור") נקודות (x [outliers], y [outliers], pch = 19)  קוד> 

מוחל על מערך נתונים כמו העקומה האדומה שמודגמת בשאלה, והוא מייצר תוצאה זו:

Plot

הנתונים מוצגים באדום , חלון 30 הימים של חציון + 5 * ספי MAD באפור, והחריגים - שהם פשוט ערכי הנתונים מעל העקומה האפורה - בשחור.

(ניתן לחשב את הסף החל מ סוף של החלון הראשוני. לכל הנתונים בחלון ראשוני זה משתמשים בסף הראשון: לכן העקומה האפורה שטוחה בין x = 0 ו- x = 30.)

ההשפעות של שינוי הפרמטרים הן (a) incr הקלה בערך של חלון נוטה להחליק את העקומה האפורה ו- (ב) הגדלת סף תעלה את העקומה האפורה. בידיעה זו, ניתן לקחת קטע ראשוני של הנתונים ולזהות במהירות ערכים של הפרמטרים המבדילים בצורה הטובה ביותר את הפסגות המרוחקות משאר הנתונים. החל ערכי פרמטר אלה לבדיקת שאר הנתונים. אם עלילה מראה שהשיטה מחמירה עם הזמן, פירוש הדבר שאופי הנתונים משתנה והפרמטרים עשויים להזדקק לכוונון מחדש.

שימו לב כמה מעט שיטה זו מניחה לגבי הנתונים: הם לא חייבים להיות מופצים בדרך כלל; הם אינם צריכים להציג מחזוריות כלשהי; הם אפילו לא צריכים להיות לא שליליים. כל מה שהוא מניח הוא שהנתונים מתנהגים בדרכים די דומות לאורך זמן וכי הפסגות המרוחקות גבוהות יותר משאר הנתונים.


אם מישהו מעוניין להתנסות (או להשוות פיתרון אחר לזה שמוצע כאן), הנה הקוד שהשתמשתי בו כדי להפיק נתונים כמו אלה המוצגים בשאלה.

  n. אורך <- 1150cycle.a <- 11cycle.b <- 365/12 amp.a <- 800amp.b <- 8000set.seed (17) x <- 1: n.lengthbaseline <- (1/2) * * (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. אורך / 2) ^ (1/5)) * x * 2 * pi / מחזור.ב)) * מחזור.ב )) y <- פסגות * rgamma (n.length, 20, scale = amp.b / 20) + baseline  
זהו פתרון מעניין באמת ואני מעריך שאני יכול ליישם אותו בלי להשתמש ב- R (רק באמצעות JavaScript רגיל ביישום אינטרנט).תודה!
אני חושב שגישה (מעט שונה) באמצעות ה- MAD ידועה גם תחת המונח "מזהה המפל".
#4
+15
ars
2010-08-03 05:56:33 UTC
view on stackexchange narkive permalink

אם אתם מודאגים מהנחות עם גישה מסוימת כלשהי, גישה אחת היא להכשיר מספר לומדים על אותות שונים, ואז להשתמש ב שיטות אנסמבל ולהצטבר על "ההצבעות" של הלומדים שלכם ל בצע את הסיווג החריגי.

בסך הכל, זה יכול להיות שווה לקרוא או לדלג מכיוון שהוא מתייחס למספר גישות לבעיה.

#5
+5
user28
2010-08-03 02:23:38 UTC
view on stackexchange narkive permalink

אני מניח שמודל סדרות זמן מתוחכם לא יעבוד עבורך בגלל הזמן שלוקח לזהות חריגים באמצעות מתודולוגיה זו. לכן, הנה דרך לעקיפת הבעיה:

  1. ראשית קבע דפוסי תנועה בסיסיים 'רגילים' למשך שנה על סמך ניתוח ידני של נתונים היסטוריים אשר מהווים זמן ביום, יום חול מול סוף שבוע. , חודש בשנה וכו '.

  2. השתמש בקו בסיס זה יחד עם מנגנון פשוט כלשהו (למשל, ממוצע נע המוצע על ידי קרלוס) לאיתור חריגים.

ייתכן שתרצה לעיין ב ספרות בקרת התהליכים הסטטיסטית עבור כמה רעיונות.

כן, זה בדיוק מה שאני עושה: עד עכשיו אני מחלק את האות ידנית לתקופות, כך שלכל אחד מהם אוכל להגדיר רווח ביטחון שבתוכו האות אמור להיות נייח, ולכן אוכל להשתמש בשיטות סטנדרטיות כגון כסטיית תקן, ... הבעיה האמיתית היא שאני לא יכול להחליט על התבנית הצפויה לכל האותות שיש לי לנתח, ולכן אני מחפש משהו אינטליגנטי יותר.
הנה רעיון אחד: שלב 1: יישום והערכה של מודל סדרות זמן כללי על בסיס חד פעמי על סמך נתונים היסטוריים. ניתן לעשות זאת במצב לא מקוון. שלב 2: השתמש במודל שהתקבל כדי לזהות חריגים. שלב 3: בתדירות כלשהי (אולי בכל חודש?), כיול מחדש את מודל סדרות הזמן (ניתן לעשות זאת במצב לא מקוון), כך שזיהוי שלב 2 שלך של חריגים לא יוצא יותר מדי מהשלב עם דפוסי התנועה הנוכחיים. האם זה יצליח להקשר שלך?
כן, זה עשוי לעבוד. חשבתי על גישה דומה (מחשוב מחדש את בסיס הבסיס מדי שבוע, שיכולה להיות אינטנסיבית במעבד אם יש לך מאות סדרות זמן חד-משתנות לניתוח). BTW השאלה הקשה האמיתית היא "מהו האלגוריתם הטוב ביותר בסגנון Blackbox למידול לחלוטין אות גנרי, בהתחשב ברעש, הערכת מגמות ועונתיות? ". AFAIK, כל גישה בספרות דורשת שלב" כוונון פרמטרים "ממש קשה, והשיטה האוטומטית היחידה שמצאתי היא מודל ARIMA של הינדמן (http: // robjhyndman. com / תוכנה / תחזית /). אני מפספס משהו?
אנא זכור שאני לא עצלן מדי לחקור את הפרמטרים הללו, העניין הוא שצריך להגדיר את הערכים האלה על פי התבנית הצפויה של האות, ובתרחיש שלי אני לא יכול להניח שום הנחה.
דגמי ARIMA הם דגמי סדרות זמן קלאסיים שניתן להשתמש בהם בכדי להתאים לנתוני סדרות הזמן. אני ממליץ לך לבחון את היישום של דגמי ARIMA. אתה יכול לחכות לרוב שיהיה מקוון ואולי הוא יצלצל עם כמה רעיונות.
#6
+5
James Roth
2010-08-03 02:50:27 UTC
view on stackexchange narkive permalink

התאם את הנתונים באופן עונתי כך שיום רגיל ייראה קרוב יותר לשטוח. אתה יכול לקחת דוגמה של היום בשעה 17:00 ולחסר או לחלק את הממוצע של 30 הימים הקודמים בשעה 17:00. ואז הסתכל על סטיות תקן N (נמדדות באמצעות נתונים מותאמים מראש) עבור חריגים. ניתן לעשות זאת בנפרד במשך "עונות" שבועיות ויומיות

שוב, זה עובד די טוב אם האות אמור להיות בעל עונתיות כזו, אבל אם אני משתמש בסדרת זמן שונה לחלוטין (כלומר זמן ההסעה הממוצע של TCP לאורך זמן), שיטה זו לא תפעל (מכיוון שהיא תהיה טובה יותר לטפל בזה עם ממוצע גלובלי פשוט וסטיית תקן באמצעות חלון הזזה המכיל נתונים היסטוריים).
אלא אם כן אתה מוכן ליישם מודל כללי של סדרות זמן (שמביא את חסרונותיו מבחינת חביון וכו ') אני פסימי שתמצא יישום כללי שבאותו זמן הוא פשוט מספיק כדי לעבוד עבור כל מיני סדרות זמן.
הערה נוספת: אני יודע שתשובה טובה עשויה להיות "אז אתה יכול לאמוד את מחזוריות האות ולהחליט שהאלגוריתם ישתמש לפיה", אבל לא מצאתי פיתרון טוב באמת לבעיה אחרת זו (שיחקתי קצת עם ניתוח ספקטרלי באמצעות DFT וניתוח זמן באמצעות פונקציית התאמה אוטומטית, אבל סדרות הזמן שלי מכילות הרבה רעש ושיטות כאלה נותנות תוצאות מטורפות לרוב)
תגובה לתגובה האחרונה שלך: בגלל זה אני מחפש גישה כללית יותר, אבל אני צריך סוג של "קופסה שחורה" כי אני לא יכול להניח שום הנחה לגבי האות הניתוח, ולכן אני לא יכול ליצור את "ערכת הפרמטרים הטובה ביותר לאלגוריתם הלמידה".
@gianluca כפי שסיפרת, מבנה ARIMA הבסיסי יכול להסוות את החריגה. ניסוח שגוי pf אפשרי לגרום למשתנים כגון שעה ביום, יום בשבוע, אפקטים של חג וכו 'יכולים להסוות את החריגה. התשובה ברורה למדי שעליך לנקוט בזהירות טובה בכדי לגלות ביעילות חריגות. אם לצטט את בייקון, "כי מי שמכיר את דרכי הטבע יבחין ביתר קלות בסטיות שלה, ומצד שני, מי שמכיר את סטיותיה יתאר ביתר דיוק את דרכיה."
#7
+3
Peter Prettenhofer
2012-02-16 19:36:14 UTC
view on stackexchange narkive permalink

חלופה לגישה שהתווה רוב הינדמן תהיה שימוש ב תחזית הולט-ווינטרס. ניתן להשתמש ברצועות הביטחון הנגזרות מהולט ווינטרס לגילוי חריגים. הנה מאמר המתאר כיצד להשתמש בהולט ווינטרס לצורך "איתור התנהגות סוטה בסדרות זמן לניטור רשת". יישום עבור RRDTool ניתן למצוא כאן.

#8
+2
Michael R. Chernick
2012-09-03 19:59:12 UTC
view on stackexchange narkive permalink

ניתוח ספקטרלי מגלה מחזוריות בסדרות זמן נייחות. הגישה לתחום התדרים המבוססת על אומדן צפיפות הספקטרום היא גישה שהייתי ממליץ עליה כצעד הראשון שלך.

אם לתקופות מסוימות אי סדירות פירושה שיא גבוה בהרבה מהאופייני לתקופה ההיא, הסדרה עם חריגות כאלה לא להיות נייח וניתוח ספקטרלי לא יהיה מתאים. אך בהנחה שזיהית את התקופה שיש בה אי סדרים, אתה אמור להיות מסוגל לקבוע בערך מה יהיה גובה השיא הרגיל ואז תוכל להגדיר סף ברמה כלשהי מעל הממוצע כדי לייעד את המקרים הלא סדירים.

האם תוכל להסביר כיצד פתרון זה יגלה "אי סדרים מקומיים"? הצגת דוגמה עבודה תועיל ביותר. (למען האמת, אני מציע לך לעשות זאת מכיוון שבביצוע תרגיל כזה אני מאמין שתגלה שההצעה שלך אינה יעילה לזיהוי יוצא דופן. אבל אני יכול לטעות ...)
@whuber ניתוח הספקטרום יזהה רק היכן נמצאים כל הפסגות. השלב הבא יהיה להתאים מודל של סדרת yime תוך שימוש במונחי סינוס וקוסינוס עם התדרים שנקבעו מניתוח הספקטרום והמשרעות המוערכות מהנתונים. אם אי סדרים פירושם פסגות עם משרעות גבוהות מאוד אז אני חושב שסף במשרעת יהיה מתאים. אם אי-סדרים מקומיים פירושם שלמשך תקופה המשרעת לפעמים גדולה משמעותית מאחרים, אז הסדרה אינה נייחת וניתוח הספקטרום לא יהיה נכון.
אני לא עוקב אחר המסקנה בדבר חוסר נייחות. למשל, סכום צורת הגל הסינוסואידית הרגילה ותהליך נקודת פויסון מובהק יהיה נייח, אך הוא לא יציג שום מחזוריות שאתה מחפש. בכל זאת היית מוצא כמה פסגות חזקות בפריודוגרמה, אך הן לא יגידו לך שום דבר רלוונטי לפסגות הנתונים הלא סדירות שהכניס רכיב תהליך Poisson.
לסדרת זמן נייחת יש ממוצע קבוע. אם השיא של רכיב תקופתי יכול להשתנות לאורך זמן הוא יכול לגרום לממוצע להשתנות לאורך זמן ומכאן שהציורים לא יהיו נייחים.
#9
+2
AyodeleO
2015-04-30 13:50:53 UTC
view on stackexchange narkive permalink

מכיוון שמדובר בנתוני סדרות זמן, מסנן מעריכי פשוט http://en.wikipedia.org/wiki/Exponential_smoothing יחליק את הנתונים. זהו מסנן טוב מאוד מכיוון שאינך צריך לצבור נקודות נתונים ישנות. השווה כל ערך נתונים חדש ל החלקה לערכו ה לא מוחלק. ברגע שהסטייה חורגת מסף מוגדר מראש מסוים (תלוי מה אתה סבור שהוא יוצא מן הכלל בנתונים שלך), ניתן לזהות בקלות את הקיצון שלך.

ב- CI יעשה את הפעולות הבאות בזמן אמת של 16 ביט. מדגם (אני מאמין שזה נמצא איפשהו כאן < הסבר - https://dsp.stackexchange.com/questions/378/what-is-the-best-firstorder-iir-approximation-to-a-moving -ממוצע-פילטר>)

  #define BITS2 2 // < זה בערך = log2 (1 / alpha), תלוי כמה חלקים אתה רוצה שהנתונים שלך יעודדו Simple_Exp_Filter ( int new_sample) {intic filtered_sample = 0; local_sample ארוך = לדוגמא << 16; / * אנו מניחים שזה מדגם של 16 סיביות * / filtered_sample + = (local_sample - filtered_sample) >> BITS2; החזר (קצר) ((filtered_sample + 0x8000) >> 16); // < עגול על ידי הוספת 0.5 וקטיעה. } int main () {recent_arrived = function_receive_new_sample (); filtered_sample = Simple_Exp_Filter (new_arrived); if (abs (לאחרונה_הגיע - מסנן_דוגמה) / > שזה עתה הושג THRESHOLD) {// תשובה חיצונית הייתה 0) }  
#10
+1
Carlos Accioly
2010-08-03 01:48:01 UTC
view on stackexchange narkive permalink

אתה יכול להשתמש בסטיית התקן של מדידות ה- N האחרונות (אתה צריך לבחור N מתאים). ציון חריג טוב יהיה כמה סטיות תקן מדידה מהממוצע הנע.

תודה על תגובתך, אך מה אם האות מציג עונתיות גבוהה (כלומר, הרבה מדידות רשת מאופיינות בתבנית יומית ושבועית בו זמנית, למשל לילה מול יום או סוף שבוע מול ימי עבודה)? גישה המבוססת על סטיית תקן לא תפעל במקרה זה.
לדוגמא, אם אקבל מדגם חדש כל עשר דקות, ואני מבצע זיהוי יוצא דופן של השימוש ברוחב הפס ברשת בחברה, בעצם בשעה 18:00 מדד זה ייפול (זה צפוי דפוס רגיל לגמרי), ו סטיית תקן המחושבת מעל חלון הזזה תיכשל (מכיוון שהיא תפעיל התראה בוודאות). יחד עם זאת, אם המדד נופל בשעה 16:00 (חורג מקו הבסיס הרגיל), מדובר בחריגה של ממש.
#11
+1
Aleksandar Ivanisevic
2010-08-10 15:54:57 UTC
view on stackexchange narkive permalink

מה שאני עושה זה לקבץ את המדידות לפי שעה ויום בשבוע ולהשוות סטיות תקן של זה. עדיין לא מתקן לדברים כמו חגים ועונות קיץ / חורף אבל זה נכון לרוב.

החיסרון הוא שאתה באמת צריך לאסוף שנה בערך של נתונים כדי שיהיה מספיק כדי ש- stddev מתחיל להיות הגיוני.

תודה, זה בדיוק מה שניסיתי להימנע (שיש לי הרבה דוגמאות כבסיס), כי הייתי רוצה גישה ממש תגובתית (למשל זיהוי מקוון, אולי "מלוכלך", אחרי 1-2 שבועות של בסיס)
#12
  0
IrishStat
2012-09-06 18:15:34 UTC
view on stackexchange narkive permalink

איתור חריגות מחייב בניית משוואה המתארת ​​את הציפייה. גילוי התערבות זמין הן במסגרת לא סיבתית והן בסיבה. אם יש סדרת מנבא כמו מחיר אז הדברים יכולים להסתבך מעט. נראה שתגובות אחרות כאן אינן לוקחות בחשבון סיבה שניתנת להקצה המיוחסת לסדרות ניבוי שצוינו על ידי המשתמש כמו מחיר ולכן עשויה להיות לקויה. כמות שנמכרה עשויה מאוד להיות תלויה במחיר, אולי במחירים קודמים ואולי בכמות שנמכרה בעבר. הבסיס לזיהוי חריגות (דופקים, דופקים עונתיים, שינויים ברמה ומגמות זמן מקומיות) נמצא ב- https://pdfs.semanticscholar.org/09c4/ba8dd3cc88289caf18d71e8985bdd11ad21c.pdf

הקישור לא עובד, אתה יכול לתקן אותו בבקשה.תודה
בוצע ..................
#13
  0
Ytsen de Boer
2016-11-24 16:58:28 UTC
view on stackexchange narkive permalink

אני מציע את התוכנית למטה, שאמורה להיות מיושמת בעוד יום:

אימון

  • אסוף כמה דוגמאות שתוכל להחזיק בזיכרון
  • הסר חריגים ברורים באמצעות סטיית התקן עבור כל תכונה
  • חישב ושמור את מטריצת המתאם וגם את הממוצע של כל תכונה
  • חישב ואחסן את מרחקי Mahalanobis מכל הדוגמאות שלך

חישוב "חריגות":

עבור המדגם היחיד שאתה רוצה לדעת את "חריגותו":

זה יהיה הציון החריג שלך: 100% הוא חריגה קיצונית.


נ.ב. בחישוב מרחק מהאלנוביס השתמשו במטריקס המתאם, ולא במטריצת השונות. זה חזק יותר אם מדידות הדגימה משתנות ביחידה ובמספר.
#14
  0
orgesleka
2018-02-11 23:38:28 UTC
view on stackexchange narkive permalink

במקרה בו צריך לחשב את החריגים במהירות, אפשר להשתמש ברעיון של רוב הינדמן ומהיטו סוגיאמה ( https://github.com/BorgwardtLab/sampling-outlier-detection,ספרייה (spoutlier), פונקציה qsp) כדי לחשב את החריגים באופן הבא:

  ספרייה (spoutlier)
פונקציות מהירות מהירות של < (x, חלקה = FALSE, זרע = 123)
{
    set.seed (זרע)
    x <- as.numeric (x)
    tt <- 1: אורך (x)
    qspscore <- qsp (x)
    מגביל את <- כמות (qspscore, prob = c (0.95))
    ציון <- pmax ((qspscore - מגבלה), 0)
    אם (עלילה)
    {
        עלילה (x, סוג = "l")
        x2 <- ts (rep (NA, אורך (x)))
        x2 [score>0] <- x [score>0]
        כפית (x2) <- כפית (x)
        נקודות (x2, pch = 19, col = "אדום")
        החזר (בלתי נראה (ציון))
    }
    אַחֵר
        החזר (ציון)
}
 


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 2.0 עליו הוא מופץ.
Loading...