일반 시계열의 온라인 이상 값 탐지를위한 간단한 알고리즘


88

많은 시계열로 작업하고 있습니다. 이 시계열은 기본적으로 10 분마다 오는 네트워크 측정이며, 일부는 주기적 (예 : 대역폭)이고 다른 일부는 그렇지 않습니다 (예 : 라우팅 트래픽의 양).

온라인 "이상 점 탐지"를위한 간단한 알고리즘을 원합니다. 기본적으로 각 시계열에 대한 전체 기록 데이터를 메모리 (또는 디스크)에 유지하고 라이브 시나리오에서 새 이상 치를 캡처하려고합니다 (새 샘플이 캡처 될 때마다). 이러한 결과를 얻는 가장 좋은 방법은 무엇입니까?

나는 현재 약간의 노이즈를 제거하기 위해 이동 평균을 사용하고 있지만 다음은 무엇입니까? 전체 데이터 세트에 대한 표준 편차, 미친, ...와 같은 간단한 것은 잘 작동하지 않으며 (시계열이 고정되어 있다고 가정 할 수는 없습니다) 이상적으로 다음과 같은 블랙 박스와 같은 더 정확한 것을 원합니다.

double outlier_detection (double * 벡터, double 값);

여기서 vector는 기록 데이터를 포함하는 double의 배열이며 반환 값은 새 샘플 "value"의 이상 점수입니다.


1
명확성을 위해 여기 SO에 대한 원래 질문이 있습니다. stackoverflow.com/questions/3390458/…
Matt Parker

1
다른 SE 사이트에 동일한 질문을 게시 한 경우 포스터가 질문의 일부로 링크를 게시하도록 권장해야한다고 생각합니다.

네, 당신 말이 맞아요 다음에는 메시지가 크로스 포스트되었다고 언급하겠습니다.
gianluca

또한 페이지 오른쪽의 다른 관련 링크를 확인하십시오. 이것은 인기있는 질문이며 이전에 다양한 질문에서 나타났습니다. 이들이 만족스럽지 않은 경우 상황의 특정 사항에 대한 질문을 업데이트하는 것이 가장 좋습니다.
Andy W

잘 잡아라, @ 앤디! 이 질문을 다른 질문과 병합합시다.
whuber

답변:


75

다음은 시계열 특이 치를 찾는 간단한 R 함수입니다 (선택적으로 플롯으로 표시). 계절 및 비 계절 시계열을 처리합니다. 기본 아이디어는 추세 및 계절적 구성 요소에 대한 강력한 추정치를 찾아 빼는 것입니다. 그런 다음 잔차에서 특이 치를 찾으십시오. 잔차 특이 치에 대한 검정은 표준 상자 그림과 동일합니다. 상한 및 사 분위수의 위 또는 아래에서 1.5IQR보다 큰 점은 특이 치라고 가정합니다. 이러한 임계 값 위 / 아래의 IQR 수는 특이 치 "점수"로 반환됩니다. 따라서 점수는 양수일 수 있으며, 특이 치가 아닌 경우 0이됩니다.

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]
    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 X 사 분위수 범위는 시간 종속 계열에 대한 특이 치의 합의 정의입니까? 스케일 독립적 인 참조가 있으면 좋을 것입니다.
doug

이상치 테스트는 잔차에 대한 것이므로 시간 의존성이 작을 것입니다. 나는 합의에 대해 알지 못하지만 상자 그림은 종종 이상치 탐지에 사용되며 합리적으로 잘 작동하는 것 같습니다. 누군가가 기능을 조금 더 멋지게 만들고 싶다면 더 좋은 방법이 있습니다.
Rob Hyndman

도와 주셔서 감사합니다. 정말 고맙습니다. 나는 지금 직장에서 꽤 바쁘지만 가능한 한 빨리 당신과 같은 접근법을 테스트 할 것입니다.이 문제에 대한 최종 고려 사항으로 돌아갈 것입니다. 하나의 생각 : 귀하의 기능에서, 내가 본 것에서, 시계열의 빈도를 수동으로 지정해야하며 (구축 할 때) 계절성 성분은 빈도가 1보다 클 때만 고려됩니다. 이것을 자동으로 처리하기 위해?
gianluca

1
예, 주파수가 알려져 있고 지정되었다고 가정했습니다. 주파수를 자동으로 추정하는 방법이 있지만 기능을 상당히 복잡하게 만듭니다. 빈도를 추정해야하는 경우 별도의 질문을 해보세요. 아마도 답변을 드릴 것입니다. 그러나 의견에서 사용할 수있는 것보다 더 많은 공간이 필요합니다.
Rob Hyndman

2
@Marcin, 직접 찌르는 것이 좋습니다. 어쩌면 gist.github.com에 솔루션을 붙여 넣고 완료되면 SO 질문을 게시하여 다른 사람들이 작업을 확인하도록 할 수 있습니까?
Ken Williams

27

좋은 해결책은 다음과 같은 여러 가지 성분을 포함합니다.

  • 흔들리지 않는 이동 창을 사용하여 비정상을 제거하십시오.

  • 평활에 대한 잔차가 대략 대칭으로 분포되도록 원래 데이터를 다시 표현하십시오. 데이터의 특성을 고려할 때 제곱근이나 로그가 대칭 잔차를 제공 할 수 있습니다.

  • 잔차에 컨트롤 차트 방법 또는 최소한 컨트롤 차트 사고를 적용합니다.

마지막으로, 제어 차트 사고는 사 분위수를 넘어서서 2 SD 또는 IQR의 1.5 배와 같은 "기존의"임계 값이 너무 많은 잘못된 제어 불능 신호를 트리거하기 때문에 제대로 작동하지 않음을 보여줍니다. 사람들은 일반적으로 사 분위수를 넘어서는 IQR의 2.5 배 (또는 3 배)가 좋은 출발점이 될 때 제어 차트 작업에 3 SD를 사용합니다.

Rob Hyndman 솔루션의 본질을 대략적으로 설명하면서 데이터를 다시 표현해야 할 가능성과 특이 치를 알리는 데 더 보수적 인 지혜라는 두 가지 주요 요점을 추가했습니다. Loess가 엔드 포인트에서 제대로 작동하지 않기 때문에 온라인 탐지기에 적합하다는 확신이 없습니다. 대신 Tukey의 내성 스무딩과 같이 움직이는 중간 필터처럼 단순한 것을 사용할 수 있습니다. 특이 치가 버스트에 포함되지 않으면 좁은 창을 사용할 수 있습니다 (5 개 데이터 포인트, 아마도 5 개 그룹 내에서 3 개 이상의 특이 치 버스트만으로 분해됨).

데이터의 좋은 재 발현을 결정하기 위해 분석을 수행 한 후에는 재 발현을 변경하지 않아도됩니다. 따라서 온라인 감지기는 이전 데이터를 전혀 사용하지 않으므로 가장 최근의 값 (최신 창) 만 참조하면됩니다. 시계열이 너무 길면 자기 상관 및 계절성 (예 : 매일 또는 매주 반복되는 변동)을 분석하여 절차를 개선 할 수 있습니다.


3
이것은 실제 분석에 대한 특별한 해답입니다. 사 분위를 넘어서서 3 개의 IQR을 시도 할 필요는 없었을 것입니다.
John Robertson

3
@John, 1.5 IQR은 박스 플롯에서 가장 긴 수염에 대한 Tukey의 원래 권장 사항이며 3 IQR은 포인트를 "먼 이상치"(인기있는 60의 문구에 대한 리프)로 표시하기위한 그의 권장 사항입니다. 이것은 많은 상자 그림 알고리즘에 내장되어 있습니다. 권장 사항은 이론적으로 Hoaglin, Mosteller, & Tukey, Robust and Exploratory Data Analysis 이해에서 분석됩니다.
whuber

이것은 내가 분석하려고했던 시계열 데이터를 확인합니다. 창 평균 및 창 표준 편차. ((x-avg) / sd)> 3은 특이 치로 플래그 지정하려는 점인 것 같습니다. 적어도 이상치로 경고하면 10 sd보다 높은 것을 극단적 인 오류 이상치로 플래그합니다. 내가 겪는 문제는 이상적인 창 길이는 무엇입니까? 4-8 데이터 포인트 사이에서 무엇이든 놀고 있습니다.
Josh Peak

1
@Neo 가장 좋은 방법은 데이터의 하위 집합을 실험하고 나머지 테스트를 통해 결론을 확인하는 것입니다. 보다 공식적인 교차 검증도 수행 할 수 있습니다 (그러나 모든 값의 상호 의존성으로 인해 시계열 데이터에는 특별한주의가 필요합니다).
whuber

17

(이 답변 은 일부 이벤트 를 그래픽 형식으로 표시하는 미해결 이벤트 감지 의 중복 (현재 비공개) 질문에 응답했습니다 .)


이상치 탐지는 데이터의 특성과 데이터에 대해 기꺼이 추측하는 것에 달려 있습니다. 범용 방법은 강력한 통계에 의존합니다. 이 접근 방식의 정신은 대부분의 데이터를 특이 치의 영향을받지 않는 방식으로 특성화 한 다음 해당 특성에 맞지 않는 개별 값을 가리 키는 것입니다.

이것은 시계열이므로 특이 치를 지속적으로 (재) 검출해야하는 복잡한 문제를 추가합니다. 시리즈가 전개됨에 따라이 작업을 수행하면 추후 데이터가 아닌 오래된 데이터 만 탐지에 사용할 수 있습니다! 또한 여러 번 반복되는 테스트를 방지하기 위해 오 탐지율이 매우 낮은 방법을 사용하려고합니다.

이러한 고려 사항은 데이터에 대해 간단하고 강력한 이동 창 이상치 테스트를 실행하는 것을 제안합니다 . 많은 가능성이 있지만 간단하고 쉽게 이해되고 쉽게 구현되는 것은 실행중인 MAD를 기준으로합니다. 이는 표준 편차와 유사하게 데이터 내에서 강력한 변동 측정입니다. 외부 피크 는 여러 MAD이거나 중앙값보다 큽니다.

R엑스=(1,2,,)=1150와이

# 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 사이에서 평평한 이유입니다.

매개 변수 변경의 효과 는 (a) 값이 증가 window하면 회색 곡선이 평활 해지는 경향이 있고 (b) 증가 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

이것은 정말 흥미로운 솔루션이며 R (웹 응용 프로그램에서 일반 JavaScript 만 사용)을 사용하지 않고 구현할 수 있다는 점에 감사드립니다. 감사!
hgoebl

15

특정 접근 방식의 가정에 대해 걱정이되는 경우 한 가지 접근 방식은 여러 신호에 대해 많은 수의 학습자를 훈련시킨 다음 앙상블 방법 을 사용 하고 학습자의 "투표"를 집계하여 특이 치 분류를 만드는 것입니다.

BTW, 이것은 문제에 대한 몇 가지 접근법을 참조하기 때문에 읽거나 감추는 것이 좋습니다.


5

이 방법론을 사용하여 특이 치를 탐지하는 데 걸리는 시간 때문에 정교한 시계열 모델이 작동하지 않을 것이라고 생각합니다. 따라서 해결 방법은 다음과 같습니다.

  1. 먼저 하루 중 시간, 주중 대 주말, 연도 등을 설명하는 기록 데이터의 수동 분석을 기반으로 1 년 동안 기본 '정상'트래픽 패턴을 설정하십시오.

  2. 특이점을 탐지하기 위해이 기준선을 간단한 메커니즘 (예 : Carlos가 제안한 이동 평균)과 함께 사용하십시오.

일부 아이디어에 대한 통계적 공정 관리 문헌 을 검토 할 수도 있습니다 .


1
예, 이것은 정확히 내가하고있는 일입니다. 지금까지 수동으로 신호를 기간으로 분할하여 각 신호에 대해 신호가 정지되어야하는 신뢰 구간을 정의 할 수 있으므로 표준 방법을 사용할 수 있습니다 실제 문제는 내가 분석해야 할 모든 신호에 대한 예상 패턴을 결정할 수 없다는 것입니다. 그래서 더 지능적인 것을 찾고 있습니다.
gianluca

한 가지 아이디어가 있습니다. 1 단계 : 과거 데이터를 기반으로 한 번에 일반 시계열 모델을 구현하고 추정합니다. 오프라인으로 할 수 있습니다. 2 단계 : 결과 모델을 사용하여 특이 치를 탐지합니다. 3 단계 : 일부 빈도 (아마도 매달?)에서 시계열 모델 (오프라인으로 수행 할 수 있음)을 다시 교정하여 2 단계 이상치 탐지가 현재 트래픽 패턴에서 너무 많이 벗어나지 않도록합니다. 상황에 맞는가요?

그렇습니다. 비슷한 접근법 (매주 기준을 다시 계산하여 수백 개의 일 변량 시계열을 분석하면 CPU를 많이 사용할 수 있음)에 대해 생각하고있었습니다. BTW의 실제 문제는 "노이즈, 추세 추정 및 계절성을 고려하여 완전히 일반적인 신호를 모델링하기위한 최고의 블랙 박스 스타일 알고리즘은 무엇입니까?"입니다. AFAIK, 문학의 모든 접근 방식에는 매우 어려운 "파라미터 튜닝"단계가 필요하며, 내가 찾은 유일한 자동 방법은 Hyndman의 ARIMA 모델 ( robjhyndman.com/software/forecast )입니다. 뭔가 빠졌습니까?
gianluca

이 매개 변수를 조사하기에는 너무 게으르지 않습니다. 요점은이 값이 신호의 예상 패턴에 따라 설정되어야한다는 것입니다. 제 시나리오에서는 가정을 할 수 없습니다.
gianluca

ARIMA 모델은 시계열 데이터를 맞추는 데 사용할 수있는 클래식 시계열 모델입니다. ARIMA 모델의 적용을 살펴 보도록 권장합니다. Rob이 온라인 상태가 될 때까지 기다릴 수 있으며 아마도 몇 가지 아이디어를 얻을 것입니다.

5

정상적인 날이 평평 해 지도록 계절에 따라 데이터를 조정하십시오. 오늘 오후 5시 샘플을 가져 와서 지난 30 일의 평균을 오후 5시에 빼거나 나눌 수 있습니다. 그런 다음 특이 치에 대해 N 표준 편차 (사전 조정 된 데이터를 사용하여 측정)를 지나서 살펴보십시오. 이것은 주간 및 일일 "시즌"에 대해 별도로 수행 될 수 있습니다.


다시 말하지만 신호가 이와 같은 계절성을 가지면 꽤 잘 작동하지만 완전히 다른 시계열 (예 : 시간에 따른 평균 TCP 왕복 시간)을 사용하면이 방법이 작동하지 않습니다 (더 좋을 것이므로) 과거 데이터를 포함하는 슬라이딩 윈도우를 사용하여 간단한 전역 평균 및 표준 편차로 처리합니다.
gianluca

1
일반적인 시계열 모델을 구현할 의향이 없다면 (지연 시간 등의 측면에서 단점을 가져옵니다) 동시에 모든 종류의 시계열에 대해 작동하기에 간단한 일반 구현을 찾는 것이 비관적입니다.

또 다른 의견 : 나는 좋은 대답이 "그래서 신호의주기를 추정하고 그에 따라 사용할 알고리즘을 결정할 수 있습니다"라고 알고 있지만이 다른 문제에 대한 진정한 해결책을 찾지 못했습니다 ( DFT를 사용한 스펙트럼 분석 및 자기 상관 기능을 사용한 시간 분석을 사용하는 비트이지만 내 시계열에는 많은 노이즈가 포함되어 있으며 이러한 방법은 대부분 미친 결과를 제공합니다)
gianluca

마지막 의견에 대한 의견 : 그것이 더 일반적인 접근법을 찾고있는 이유이지만 분석 된 신호에 대해 어떤 가정도 할 수 없기 때문에 일종의 "블랙 박스"가 필요합니다. "학습 알고리즘을위한 최고의 파라미터 세트".
gianluca

@gianluca 기본 ARIMA 구조를 예상 한대로 이상 항목을 숨길 수 있습니다. 부정확 한 공식화 pf로 인해 시간, 요일, 공휴일 효과 등의 변수가 예외를 가릴 수 있습니다. 정답은 이상을 효과적으로 탐지하기 위해 좋은 등식이 필요하다는 것입니다. 베이컨은 "자연의 길을 아는 사람은 자신의 편차를 더 쉽게 알아 차릴 수 있고, 반면에 자신의 편차를 아는 사람은 자신의 길을 더 정확하게 설명 할 것"이라고 말했다.
IrishStat

3

Rob Hyndman이 제시 한 접근 방식의 대안은 Holt-Winters Forecasting 을 사용하는 것 입니다. Holt-Winters에서 파생 된 신뢰 구간을 사용하여 특이 치를 탐지 할 수 있습니다. 다음 은 "네트워크 모니터링을위한 시계열의 비정상적인 동작 감지"에 Holt-Winter를 사용하는 방법을 설명하는 문서입니다. RRDTool의 구현은 여기 에서 찾을 수 있습니다 .


2

스펙트럼 분석은 고정 시계열의 주기성을 감지합니다. 스펙트럼 밀도 추정에 기반한 주파수 영역 접근 방식은 첫 번째 단계로 권장하는 접근 방식입니다.

특정 기간 동안 불규칙성이 해당 기간 동안 일반적인 것보다 훨씬 더 높은 피크를 의미하는 경우 이러한 불규칙성을 갖는 계열은 고정되지 않으며 스펙트럼 anlsysis는 적합하지 않습니다. 그러나 불규칙성이있는 기간을 식별했다고 가정하면 대략적인 최대 피크 높이를 대략적으로 결정한 다음 해당 평균보다 높은 수준에서 임계 값을 설정하여 불규칙한 사례를 지정할 수 있어야합니다.


2
이 솔루션이 어떻게 "로컬 불규칙성"을 감지하는지 설명해 주시겠습니까? 효과적인 예제를 제시하면 매우 도움이 될 것입니다. (솔직히 말해서, 나는 당신이 그런 운동을 수행 할 때 당신의 제안이 이상치 탐지에 효과적이지 않다는 것을 알게 될 것이라고 믿기 때문에 이것을 제안하고 있습니다. 그러나 나는 틀릴 수 있습니다 ...)
whuber

1
@whuber 스펙트럼 분석은 모든 피크가있는 위치 만 식별합니다. 다음 단계는 스펙트럼 분석에서 결정된 주파수와 데이터에서 추정 된 진폭으로 사인 및 코사인 항을 사용하여 yime 시리즈 모델을 맞추는 것입니다. 불규칙성이 진폭이 매우 높은 피크를 의미하는 경우 진폭의 임계 값이 적절하다고 생각합니다. 국소 불규칙성이 한 기간 동안 진폭이 때때로 다른 것보다 상당히 크다는 것을 의미한다면, 시리즈는 정지되지 않으며 스펙트럼 분석은 적절하지 않습니다.
Michael Chernick

1
나는 고정 성의 부족에 대한 결론을 따르지 않습니다. 예를 들어, 정현파 형 파형과 표시된 포아송 포인트 프로세스의 합은 고정적이지만 원하는주기를 나타내지 않습니다. 그럼에도 불구하고 주기도에서 강한 피크를 찾을 수는 있지만 포아송 프로세스 구성 요소에 의해 도입 된 불규칙적 인 데이터 피크와는 관련이 없습니다.
whuber

1
고정 시계열은 평균이 일정합니다. 주기적인 구성 요소의 피크가 시간이 지남에 따라 변할 수 있으면 시간이 지남에 따라 변하는 평균을 유발할 수 있으므로 seire는 비정상적입니다.
Michael Chernick

2

시계열 데이터이므로 간단한 지수 필터 http://en.wikipedia.org/wiki/Exponential_smoothing 은 데이터를 부드럽게합니다. 오래된 데이터 포인트를 축적 할 필요가 없으므로 매우 좋은 필터입니다. 새로 매끄럽게 한 모든 비교 그와 데이터 값 비평 활 값입니다. 편차가 미리 정의 된 특정 임계 값을 초과하면 (데이터의 특이 치가 무엇인지에 따라) 특이 치를 쉽게 감지 할 수 있습니다.

- CI에서 실시간 16 비트 샘플 (I이 여기 어딘가에 <찾을 생각에 대한 설명은 다음을 수행합니다 https://dsp.stackexchange.com/questions/378/what-is-the-best-first-order -iir- 근사-이동 평균 필터 >)

#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

마지막 N 측정의 표준 편차를 사용할 수 있습니다 (적절한 N을 선택해야 함). 좋은 변칙 점수는 측정 값이 이동 평균과 얼마나 많은 표준 편차가 될 수 있습니다.


귀하의 답변에 감사드립니다. 그러나 신호가 높은 계절성을 나타내는 경우 (즉, 많은 네트워크 측정이 매일 밤과 낮 또는 주말과 작업 일과 같이 매일, 매주 패턴으로 특징 지워지는 경우)? 이 경우 표준 편차를 기반으로하는 접근 방식이 작동하지 않습니다.
gianluca

예를 들어, 10 분마다 새 샘플을 가져오고 회사의 네트워크 대역폭 사용량에 대한 이상치 탐지를 수행하는 경우 기본적으로 오후 6시에이 측정 값이 떨어집니다 (완전히 정상적인 패턴입니다). 슬라이딩 윈도우에서 계산 된 표준 편차는 실패합니다 (확실히 경고를 트리거하기 때문에). 동시에, 측정 값이 오후 4시에 떨어지면 (일반 기준선에서 벗어남), 이는 실제 이상치입니다.
지안루카

1

내가하는 일은 시간과 요일별로 측정을 그룹화하고 표준 편차를 비교하는 것입니다. 여전히 휴일과 여름 / 겨울 계절과 같은 것들에는 맞지 않지만 대부분의 경우에는 맞습니다.

단점은 stddev가 이해하기 시작할 정도로 1 년 정도의 데이터를 실제로 수집해야한다는 것입니다.


감사합니다. 실제 반응 방식 (예 : 온라인 감지, 1-2 주간 기준 후 "더러운")을 원하기 때문에 피하려고했던 것입니다 (예 : 많은 샘플을 기준선으로 사용)
gianluca

0

아래 계획을 제안합니다.이 계획은 하루 정도면 구현할 수 있습니다.

훈련

  • 메모리에 저장할 수있는만큼의 샘플을 수집하십시오
  • 각 속성에 대한 표준 편차를 사용하여 명백한 특이 치를 제거
  • 상관 행렬과 각 속성의 평균을 계산하고 저장합니다.
  • 모든 샘플 의 Mahalanobis 거리 계산 및 저장

"이상성"계산 :

"outlierness"를 알고 싶은 단일 샘플의 경우 :

그것은 당신의 특이 치 점수가 될 것입니다 : 100 %는 극단적 인 특이 치입니다.


추신. Mahalanobis distance 계산시 공분산 행렬이 아닌 상관 행렬을 사용하십시오. 샘플 측정 값이 단위와 개수가 다를 경우 더욱 강력합니다.


0

특이 치를 빠르게 계산 해야하는 경우 Rob Hyndman과 Mahito Sugiyama ( https://github.com/BorgwardtLab/sampling-outlier-detection , library (spoutlier), function 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/ba8dd3cc88289caf18d71e8985bdd11ad21c.pdf있습니다.


링크가 작동하지 않습니다. 수정 해주세요. 감사합니다
Pankaj Joshi

완료 ..................
IrishStat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.