시계열에서 이상을 탐지하기 위해 어떤 알고리즘을 사용해야합니까?


69

배경

Network Operations Center에서 일하고 있으며 컴퓨터 시스템 및 성능을 모니터링합니다. 모니터링 할 주요 지표 중 하나는 현재 서버에 연결된 많은 방문자 / 고객입니다. 이를 보이기 위해 (Ops 팀) 시계열 데이터와 같은 메트릭을 수집하고 그래프를 그립니다. Graphite 는 우리가 그것을 할 수있게 해줍니다.이 API는 갑작스런 하락 (주로) 및 기타 변경이 발생하면 팀에 알리기 위해 경고 시스템을 구축하는 데 사용하는 매우 풍부한 API를 가지고 있습니다. 지금은 평균 값을 기반으로 정적 임계 값을 설정했지만 낮과 주 동안 다른로드 (계절 요인)로 인해 잘 작동하지 않습니다 (많은 오탐이 있습니다).

다음과 같이 보입니다 : 시스템 당 다수의 사용자

실제 데이터 (한 통계에 대한 예, 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]]}]

내가 성취하려고하는 것

최근 데이터 포인트를 수신하고 과거 평균과 비교하여 갑작스런 변경이나 드롭이 발생하면 경고하는 Python 스크립트를 만들었습니다. 계절성으로 인해 "정적"임계 값이 제대로 작동하지 않고 스크립트가 위양성 경고를 생성합니다. 경고 알고리즘을보다 정확하게 개선하고 경고 임계 값을 지속적으로 조정하지 않고 작동하도록하고 싶습니다.

내가 필요로하는 조언과 발견 한 것들

인터넷 검색을 통해 이상 감지 (관리되지 않는 알고리즘)를위한 기계 학습 알고리즘을 찾고 있다고 생각했습니다. 추가 조사에 따르면 톤이 많으며 내 경우에 어떤 것이 적용되는지 이해하기가 매우 어렵습니다. 제한된 수학 지식으로 인해 정교한 학술 논문을 읽을 수 없으며 현장 초보자에게 간단한 것을 찾고 있습니다.

나는 파이썬을 좋아하고 R에 대해 조금 알고 있으므로이 언어에 대한 예제를 보게되어 기쁩니다. 문제를 해결하는 데 도움이되는 좋은 책이나 기사를 추천하십시오. 시간 내 주셔서 감사합니다

유용한 링크

유제:

외부 자원 :


1
CUSUM과 같은 가장 간단한 알고리즘 중 하나를 살펴 보셨습니까?
Vladislavs Dovgalecs가

@xeon은 아직 없습니다. 나는이 주제를 처음 접했고 모든 것을 소화 할 시간이 필요하다. 이것을 가져 주셔서 감사합니다, 그것은 좋은 출발점입니다, 지금 그것을 구현할 수 있습니다
Ilya Khadykin

1
좋은 질문입니다, @ ma-ge. 비슷한 시나리오가 있습니다. 내 접근 방식은 auto.arimaR의 우수한 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).
Alex Woolford

3
트위터의 사람들은이 주제에 대해 매우 흥미로운 기사를 썼습니다. 확인해보세요 : blog.twitter.com/2015/…
ognjenz

안녕하세요 @IlyaKhadykin 잘 지내고 있기를 바랍니다! 이 문제에 대한 해결책을 얻었습니까? 매분마다 특정 사용자가 있고 긍정 오류가 많은 것과 똑같은 일을하고 있습니다. 현재 5 분 간격 데이터마다 점수를 계산하고 기록 패턴과 일치시킵니다. 특정 알고리즘 작업을하는 경우 IT 부서가 공유 한 방법을 공유 할 수 있습니까? 미리 감사드립니다!
ak3191

답변:


23

그래프에서 키가 "예기치 않은"한정자 인 것 같습니다. 감지하기 위해 예기치 않은 당신은 무슨 아이디어가 필요 기대를 .

AR (p) 또는 ARMA (p, q)와 같은 간단한 시계열 모델로 시작하겠습니다. 데이터에 적합하고 계절성을 적절하게 추가하십시오. 예를 들어 SAR (1) (24) 모델은 다음과 같습니다. (여기서 는 시간입니다). 다음 시간에 대한 그래프를 예측하게됩니다. 예측 오류 가 "너무 크면"경고가 발생합니다.yt=c+ϕyt1+Φ24yt24+Φ25yt25+εttet=yty^t

당신이 모델을 추정 할 때 당신은 분산거야 오류의 . 정규 분포와 같은 분포 가정에 따라 과 같은 확률을 기반으로 임계 값 을 99.7 % 또는 단측 있습니다.σεεt|et|<3σεet>3σε

방문자 수는 상당히 지속적이지만 매우 계절적입니다. 곱하기 계절성 대신 계절성 인형을 사용하는 것이 좋습니다 .X는 외래 변수, 휴일 더미,시 인형, 주말 인형 등과 같은 외생 변수를 나타내는 ARMAX를 사용해보십시오.


5
이 방법은 암시 적으로 존재하지 않는 것으로 가정 된 이상을 기반으로 바이어스 된 매개 변수를 갖는 특정 ARIMA 모델을 가정합니다. 보다 일반적인 접근 방식은 이상을 먼저 식별 한 다음 인라인 유의도 테스트로 이어지는 최적의 ARIMA 모델입니다. 추가적으로 이상 현상은 여기에 제안 된 것보다 더 일반적인 솔루션이 필요한 레벨 시프트, 계절 펄스 및 현지 시간 추세 일 수 있습니다. 포괄적 인 절차는 unc.edu/~jbhill/tsay.pdf 를 참조하십시오 . 자세한 내용은 Google "자동 중재 감지"를 참조하십시오.
IrishStat 12

@IrishStat 나는 이벤트에 대한 인형으로 ARIMAX를 제안했습니다. OP는 더미로 인한 웹 사이트 충돌과 같은 알려진 이벤트를 설명 할 수 있습니다. 이렇게하면 오류 분산이 줄어들고 경고가 더 많이 발생합니다. 복잡한 모델을 구축 할 이유가 없습니다. 웹 사이트 트래픽과 관련하여 모든 것을 설명하는 것은 불가능하기 때문입니다. 간단한 모델이 가장 효과적입니다.
Aksakal

2
@ ma-ge, 한가지 더 : 겹치는 간격을 사용하고 싶을 수도 있습니다. 매분마다 데이터를 수집한다고 가정하지만 모델링을 위해 10 분 안에 단계를 선택할 수 있습니다. 자동 상관 관계로 인해 추정에 문제가 발생하지만 결과 모델이 더 강력 할 것입니다.
Aksakal

@ Aksakal 모델은 필요한만큼 단순해야하지만 너무 단순하지 않아야합니다.
IrishStat

17

Netflix 기술 블로그에는 강력한 예외 탐지 도구 (RAD)에 대한 기사가 있습니다. http://techblog.netflix.com/2015/02/rad-outlier-detection-on-big-data.html

계절 성과 매우 많은 양의 데이터 세트를 처리하므로 요구 사항에 맞을 수 있습니다. 이 코드는 오픈 소스 Java 및 Apache Pig https://github.com/Netflix/Surus/blob/master/resources/examples/pig/rad.pig입니다.

기본 알고리즘은 강력한 PCA를 기반으로합니다. 원본 논문 참조 : http://statweb.stanford.edu/~candes/papers/RobustPCA.pdf


12

오픈 소스 패키지의 대부분의 이상치 탐지 알고리즘은 빈도가 낮고 일별 / 주별 / 월별 빈도가있는 비즈니스 시계열 데이터를위한 것입니다. 이 데이터는 몇 분 안에 캡처 된 특수 영역에 대한 것으로 보이므로 오픈 소스 이상 치가 도움이 될지 확실하지 않습니다. 이 접근 방식을 데이터에 적용 할 수 있습니다.

아래에서는 오픈 소스에서 사용 가능한 패키지 접근 방식을 간략하게 설명합니다 R.

  1. tsoutliers : arima 프레임 워크 내에서 Chen 및 Liu의 특이 치 탐지 알고리즘을 구현 합니다. 이 사이트에서 내 이전 질문 을 참조하십시오 . 환상적인 접근 방식이지만 귀하와 같은 고주파 데이터를 처리 할 수 ​​있는지 확실하지 않습니다. 이전 질문 / 게시물에 언급 된 것처럼 모든 유형의 특이 치를 감지하는 장점이 있습니다.
  2. 트위터의 이상 탐지 : Rosner의 알고리즘을 사용하여 시계열 기반의 이상을 탐지합니다. 알고리즘은 시계열을 분해 한 다음 이상을 감지합니다. 제 개인적으로는 시계열의 아웃 리어를 감지하는 데 효율적이지 않고 정확하지 않습니다.
  3. 예측 패키지의 tsoutlier : 시계열을 분해 한 다음 이상 값을 감지하는 측면에서 트위터의 알고리즘과 유사합니다. 추가 특이 치 또는 펄스 만 감지합니다.

아노 몰리를 시도하고 탐지하기위한 전용 접근 방식이있는 상용 패키지가 있습니다. 또 다른 고전적인 접근 방식은 Tsay의 시계열 이상치 탐지 알고리즘이며, Chen과 Liu의 접근 방식은 다른 유형의 특이 치를 탐지합니다. 또한 최근에는 메타포 (mertafor) 라고하는이 상용 소프트웨어 솔루션을 우연히 발견 했는데, 이는 데이터에 더 적합 할 수 있습니다.

이것이 도움이 되길 바랍니다.


감사합니다. 비슷한 문제와 접근 방식에 대한 관점을 제공합니다. 링크에 대한 특별한 감사합니다!
Ilya Khadykin

누군가 Metafor를 찾고 있다면 Splunk가 인수했습니다. TSAD 알고리즘은 최신 버전의 Splunk IT 서비스 인텔리전스 ( "ITSI")에 포함되어 있습니다.
Alex Cruise

4

통계적 공정 제어 규칙 (예 : Western Electric http://en.wikipedia.org/wiki/Western_Electric_rules )을 사용해 보셨습니까 ?

나는 시계열 데이터 (종종 데이터에 대한 직관력이있는 데이터)를 사용하여 데이터가 원하지 않는 곳으로 가고 있는지 평가합니다. 예를 들어, 이러한 규칙에 따르면 델타 / 변경이 여러 데이터 포인트에서 일관성이 있으면 문제가있을 수 있음을 나타냅니다.

또한 SPC (Statistical Process Control)는 이전보다 나아지거나 나빠질 경우 운동하기에 좋습니다.

SPC의 한 가지 문제는 대부분이 정규 분포에 의존한다는 것입니다.이 분포는 0에 미치지 못하는 데이터에 적합하지 않을 수 있습니다. SPC를 사용하는 나보다 나은 사람들은 여기서 옵션을 제안 할 수 있습니다. 나는 그것을 사용하여 문제를 신고하는 것을 좋아하지만 모든 모델과 마찬가지로 데이터 자체 (및 소스)에 대한 많은 지식과 함께 사용하는 것이 가장 좋습니다.


4

다른 답변에서 언급하지 않은 것은 문제가 변경점 감지 처럼 들린다는 것 입니다. 샹가 포인트 탐지의 개념은 속성 용어 (예 : 평균, 분산)가 크게 다른 데이터 세그먼트를 찾고 있다는 것입니다. 이것은 최대 가능성 추정을 사용하여 달성 할 수 있습니다. 여기서 변경점에 대해 가능성 함수는m

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

여기서 은 데이터이고 은 변화를 나타내는 경계점이며 확률 분포 는 번째 세그먼트 마다 로 매개 변수화됩니다 . 이것은 다양한 상황에 따라 쉽게 일반화 될 수 있습니다. 알 수없는 찾기를 포함하여 매개 변수를 찾기위한 많은 알고리즘이 존재합니다 . 이러한 모델을 추정하는 데 사용할 수있는 소프트웨어 (예 : R 용 패키지)도 있습니다. 자세한 내용을 보려면 다음 간행물과 해당 문서에서 제공하는 참조를 확인하십시오. 1 < τ 1 < < τ m < n p θ i i my1,,yn1<τ1<<τm<npθiimchangepoint

Rebecca Killick과 Idris A. Eckley. (2013) 변경점 : 변경점 분석을위한 R 패키지. (온라인 신문)

Eckley, IA, Fearnhead, P. and Killick, R. (2011) 변경점 모델 분석. [in :] 베이지안 시계열 모델 , 에디션. D. Barber, AT Cemgil 및 S. Chiappa, Cambridge University Press.


4

시계열의 주기성을 잘 이해해야한다는 점을 감안할 때 차이에 기반한 단순하지만 효과적인 알고리즘을 고안 할 수 있습니다.

간단한 1 단계 차이로 인해 이전 값에서 급격한 하락이 감지됩니다.

yt=ytyt1

그러나 시리즈에주기적인 구성 요소가 강한 경우 정기적으로 그 하락이 상당 할 것으로 예상됩니다. 이 경우 이전주기의 동일한 시점, 즉 1 년 전의 값에서 해당 값을 해당 값과 비교하는 것이 좋습니다.

yt=ytytnwhere n=length of period

게시 된 질문의 경우, 하루의 길이와 일주일의 두 가지 중요한 구성 요소를 예상하는 것이 당연합니다. 그러나 더 긴 기간의 길이를 더 짧은 길이로 깔끔하게 나눌 수 있기 때문에 이것은 복잡하지 않습니다.

매 시간마다 샘플링을 수행 하는 경우 위 방정식의 을 로 설정해야합니다.24 7 = 168n247=168

방울이 비례적인 특성에 가까운 경우 활동이 적을 때 간단한 차이로 인해 갑작스런 하락을 쉽게 감지하지 못합니다. 이러한 상황에서 비율을 계산하도록 알고리즘을 수정할 수 있습니다.

yt=ytytn

시뮬레이션 된 데이터 세트를 사용하여 R에서 몇 가지 테스트를 수행했습니다. 데이터는 하루에 6 번 샘플링되며 다른 소음 및 변동과 함께 매일 및 매주 강한 시간이 있습니다. 드랍을 임의의 장소 및 1 내지 3의 지속 시간에 첨가 하였다. 드랍
을 분리하기 위해, 특정 크기의 음의 변화 만이 관심이 있기 때문에 첫 번째 비율을 거리 42에서 계산 한 다음 임계 값을 0.6으로 설정 하였다. 그런 다음 1 단계 차이를 계산하고 임계 값을 -0.5로 설정했습니다. 결국 하나의 거짓 긍정이 빠져 나간 것으로 보입니다 (16 주말에 하나). 왼쪽과 오른쪽의 그래프는 다른 방식으로 동일한 데이터를 보여줍니다.

여기에 이미지 설명을 입력하십시오


3

시계열의 변화를 예외가 아닌 새로운 트렌드의 시작으로 생각하는 것이 더 유용할까요? 인접한 점들 사이의 차이를 취하면 기울기 (유도)가 변경되는시기를 식별하는 데 도움이되고 날짜의 새로운 추세가 시작될 수 있습니다. 또한 차이 값의 차이 (제 2 도함수)를 취하는 것이 유용 할 수 있습니다. "시간 시리즈의 트렌드 시작"에 대해 Google 검색을 수행하면 방법에 대한 좋은 제안이 될 수 있습니다. 재무 데이터에서 새로운 트렌드 (구매 또는 판매)에 대한 관심이 늦어 지므로이 주제에 대한 논문이 있습니다.

잔물결에 대한 좋은 소개는 Hubbard의 "웨이블릿에 따른 세계"입니다.


2

두 가지 알고리즘을 사용하여 여러 계절성 시계열 (매일, 매주)에 대한 좋은 결과를 얻을 수있었습니다.

  • 중간 점 시리즈를 설정하기 위해 loess (또는 STL)를 사용한 계절 추세 분해 .
  • 분산과 수준 간의 관계를 기반으로 해당 중간 점 주위에 임계 값을 설정하는 비선형 회귀 .

STL은 시계열의 시간 영역 분해를 추세 구성 요소, 단일 계절 구성 요소 및 나머지로 분해합니다. 계절 성분은 빈도가 높은 계절성 (예 : 매일)이며 추세에는 빈도가 적은 계절성 (예 : 주별)과 추세가 모두 포함됩니다. 트렌드에서 STL을 다시 실행하여 둘을 분리 할 수 ​​있습니다. 어쨌든 나머지 구성 요소를 다른 구성 요소와 분리하면 해당 시리즈에 대한 이상 감지를 수행 할 수 있습니다.

나는 여기에 더 자세한 글을 썼다.

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


1

David에서 영감을 받아 FFT를 사용해 보셨습니까? 갑작스런 방울을 발견하면 이상 징후를 나타낼 수 있습니다. 예외는 좁은 스펙트럼에 나타날 수 있습니다. 따라서 쉽게 캡처 할 수 있습니다.

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