파이썬에서 오픈 소스 이상 탐지


61

문제 배경 : IT 모니터링 공간에서 찾은 것과 비슷한 로그 파일이 포함 된 프로젝트를 진행하고 있습니다 (IT 공간을 가장 잘 이해하고 있음). 이 로그 파일은 시계열 데이터이며 다양한 매개 변수의 수백 / 수천 행으로 구성됩니다. 각 매개 변수는 숫자 (float)이며 각 시점에 대해 사소한 / 오류가없는 값이 있습니다. 내 임무는 이상 로그 탐지 (스파이크, 낙하, 일부 매개 변수가 동기화되지 않은 이상한 패턴, 이상한 1 / 2 등 / 파생 동작 등)를 위해 로그 파일을 모니터링하는 것입니다.

비슷한 과제에서 Prelert와 함께 Splunk를 사용해 보았지만 현재 오픈 소스 옵션을 탐색 중입니다.

제약 조건 : 잘 알고 있기 때문에 파이썬으로 제한하고 있으며 R 및 관련 학습 곡선으로의 전환을 지연하고 싶습니다. R (또는 다른 언어 / 소프트웨어)에 대한 압도적 인 지원이없는 한이 작업을 위해 Python을 고수하고 싶습니다.

또한 현재 Windows 환경에서 작업하고 있습니다. 소형 로그 파일로 Windows에서 샌드 박스를 계속하고 싶지만 필요한 경우 Linux 환경으로 이동할 수 있습니다.

자료 : 결과로 막 다른 골목으로 다음을 확인했습니다.

  1. 파이썬이나 사기 탐지를위한 기계 학습 알고리즘을 구현하기위한 R . 여기에있는 일부 정보는 도움이되지만 불행히도 다음과 같은 이유로 올바른 패키지를 찾는 데 어려움을 겪고 있습니다.

  2. 트위터의 "AnomalyDetection"은 R에 있으며 파이썬을 고수하고 싶습니다. 또한 Python 포트 특유성 으로 인해 Windows 환경에서 구현하는 데 문제가있는 것 같습니다.

  3. 다음 시도 인 스카이 라인은 ( github 문제에서 ) 거의 중단 된 것으로 보입니다 . 온라인에 대한 지원이 거의없는 것을 감안할 때 나는 이것에 깊이 빠져들지 않았습니다.

  4. scikit-learn 나는 아직도 탐구하고 있지만, 이것은 훨씬 더 수동적 인 것 같습니다. 최첨단 접근법은 괜찮지 만 학습 도구의 배경은 약하므로 Splunk + Prelert와 비슷한 알고리즘과 같은 기술적 측면의 블랙 박스와 같은 것이 좋습니다.

문제 정의 및 질문 : 패키지 또는 라이브러리를 통해 Python의 시계열 로그 파일에서 이상 감지 프로세스를 자동화하는 데 도움이되는 오픈 소스 소프트웨어를 찾고 있습니다.

  1. 그러한 일들이 내 직무를 돕는 데 존재합니까, 아니면 내 생각에 상상력이 있습니까?
  2. 누구나 배경 기초 나 개념을 포함하여 나의 목표를 달성하기 위해 구체적인 단계를 도울 수 있습니까?
  3. 이것이 가장 좋은 StackExchange 커뮤니티입니까, 통계, 수학 또는 보안 또는 Stackoverflow가 더 나은 옵션입니까?

편집 [2015-07-23] 특이점에 대한 최신 업데이트 는 Windows 환경에서 수정 된 것 같습니다 . 아직 확인하지는 않았지만 커뮤니티에 유용한 도구가되어야합니다.

편집 [2016-01-19] 사소한 업데이트. 나는 이것에 대해 연구하고 연구 할 시간이 없었지만, 구체적인 세부 사항을 계속 연구하기 전에이 문제의 기초를 이해하기 위해 한 걸음 물러서 고 있습니다. 예를 들어, 내가 취하는 두 가지 구체적인 단계는 다음과 같습니다.

  1. 이상 감지를위한 Wikipedia 기사로 시작 [ https://en.wikipedia.org/wiki/Anomaly_detection ], 완전히 이해 한 다음 [ https : // 와 같은 다른 링크 된 Wikipedia 기사의 개념 계층에서 위 또는 아래로 이동 en.wikipedia.org/wiki/K-nearest_neighbors_algorithm ] 그리고 [ https://en.wikipedia.org/wiki/Machine_learning ]으로 이동하십시오.

  2. Chandola et al 2009 "Anomaly Detection : A Survey"[ http://www-users.cs.umn.edu/~banerjee/papers/09/anomaly.pdf ] 및 Hodge et al 2004에 의해 수행 된 훌륭한 설문 조사 기술 활용 "이상 점 탐지 방법론 조사"[ http://eprints.whiterose.ac.uk/767/1/hodgevj4.pdf ].

일단 개념이 더 잘 이해되면 (실제적인 측면을 개발하기 위해 장난감 예제를 가지고 놀기를 바랍니다), 어떤 오픈 소스 Python 도구가 내 문제에 더 적합한 지 이해하고 싶습니다.


Scikit을 시작하고 있다면이 비디오를 추천합니다 : github.com/justmarkham/scikit-learn-videos
Harvey

이 모듈에서 라이브러리를 가져 오지 않습니다.

1
문제가 잘못 정의되었습니다. 변칙을 구성하는 것은 많은 다른 의미를 가질 수 있습니다. 평균의 편차입니까? 특정 행동 패턴입니까? 각기 다른 방법이 적용됩니다. 이상이 평균에서 벗어난 경우 "이상 값 감지"를 조사해야합니다. 특정 패턴을 찾고 있다면 신경망과 같은지도 학습 알고리즘을 사용하는 것이 훨씬 좋습니다.
Willem van Doesburg

1
나는 당신이 파이썬을 원한다는 것을 알고 있지만, 이상 감지를 위해 ELKI가 사용하는 도구 인 것 같습니다.
익명-무스

답변:


35

이상 감지 또는 이벤트 감지는 다른 방법으로 수행 할 수 있습니다.

기본 방법

유도체! 과거와 미래의 신호 편차가 높으면 이벤트가있을 수 있습니다. 신호의 미분에서 큰 제로 크로싱을 찾아서 추출 할 수 있습니다.

통계적 방법

무엇이든 의미는 일반적인 기본 동작입니다. 무언가가 의미에서 벗어나면 그것은 사건이라는 것을 의미합니다. 시계열의 평균은 사소한 것이 아니며 일정하지 않지만 시계열의 변화에 ​​따라 변경되므로 평균 대신 "이동 평균" 을 확인해야합니다 . 다음과 같이 보입니다 :

이벤트는 이동 평균에서 1 표준 편차보다 큰 피크입니다.

이동 평균 코드는 여기 에서 찾을 수 있습니다 . 신호 처리 용어 에서는 이동 평균을 적용하여 "로우 패스" 필터를 적용합니다.

다음 코드를 따를 수 있습니다.

MOV = movingaverage(TimeSEries,5).tolist()
STD = np.std(MOV)
events= []
ind = []
for ii in range(len(TimeSEries)):
    if TimeSEries[ii] > MOV[ii]+STD:
        events.append(TimeSEries[ii])

확률 적 방법

머신 러닝을 처음 접하는 사람들을 위해 특별히 정교합니다. 칼만 필터는 예외찾는 좋은 아이디어 입니다. "Maximum-Likelihood Estimation"을 사용하는 간단한 확률 론적 접근법 도 잘 작동하지만 제 생각은 움직이는 평균 아이디어를 유지하는 것입니다. 실제로 잘 작동합니다.

나는 내가 도울 수 있기를 바랍니다 :) 행운을 빕니다!


깊은 토론에 노력해 주셔서 감사합니다. 프로그래밍이 그렇게 나쁘지는 않지만 (알파벳에 대해 깊이 익히기 위해 매우 흥미 롭습니다.), 이미 사용 가능한 패키지가 궁금합니다. 설치가 간단한 것이 있습니까? 이것은 구현하기 쉬운 것과 같지 않으므로 보증 할 수는 없습니다. 내 환경을 기능적으로 사용할 수 있다면 내 작업의 예를 기반으로 환경을 미세 조정할 수 있다고 생각합니다.
ximiki

15

h2o에는 이상 감지 모듈이 있으며 일반적으로 R에서 코드를 사용할 수 있습니다. 버전 3 외에도 파이썬에서도 비슷한 모듈을 사용할 수 있으며 h2o는 오픈 소스이므로 청구서에 맞을 수 있습니다.

여기에 실제 예제가 있습니다.

import sys
sys.path.insert(1,"../../../")
import h2o

def anomaly(ip, port):
    h2o.init(ip, port)

    print "Deep Learning Anomaly Detection MNIST"

    train = h2o.import_frame(h2o.locate("bigdata/laptop/mnist/train.csv.gz"))
    test = h2o.import_frame(h2o.locate("bigdata/laptop/mnist/test.csv.gz"))

    predictors = range(0,784)
    resp = 784

    # unsupervised -> drop the response column (digit: 0-9)
    train = train[predictors]
    test = test[predictors]

    # 1) LEARN WHAT'S NORMAL
    # train unsupervised Deep Learning autoencoder model on train_hex
    ae_model = h2o.deeplearning(x=train[predictors], training_frame=train, activation="Tanh", autoencoder=True,
                                hidden=[50], l1=1e-5, ignore_const_cols=False, epochs=1)

    # 2) DETECT OUTLIERS
    # anomaly app computes the per-row reconstruction error for the test data set
    # (passing it through the autoencoder model and computing mean square error (MSE) for each row)
    test_rec_error = ae_model.anomaly(test)

    # 3) VISUALIZE OUTLIERS
    # Let's look at the test set points with low/median/high reconstruction errors.
    # We will now visualize the original test set points and their reconstructions obtained
    # by propagating them through the narrow neural net.

    # Convert the test data into its autoencoded representation (pass through narrow neural net)
    test_recon = ae_model.predict(test)

    # In python, the visualization could be done with tools like numpy/matplotlib or numpy/PIL

if __name__ == '__main__':
    h2o.run_test(sys.argv, anomaly)

감사! 아직이 패키지를 고려하지 않았습니다. 후보 목록에 추가하겠습니다. 명확하게 말하면, "버전 3을 넘어 서면 파이썬에서도 비슷한 모듈을 사용할 수 있습니다"라고 말할 때, 파이썬 또는 다른 모듈에서 h2o의 이상 감지 모듈 (버전 3 이상)을 사용할 수 있는지 알고 있습니까?
ximiki

1
@ximik 글쎄, 나는 최신 버전 3.0.0.26 ( h2o-release.s3.amazonaws.com/h2o/rel-shannon/26/docs-website/… ) 의 파이썬 문서를 다시 방문했고 h2o.anomaly가 아닌 것처럼 R API와 달리 아직 사용할 수 있습니다 .Google 그룹 ( groups.google.com/forum/#!topic/h2ostream/uma3UdpanEI ) 에서 질문을 제기했으며 따를 수 있습니다.
0xF

1
글쎄, h2o 지원 그룹이 질문에 대답했으며 예외는 파이썬에서도 가능합니다. 여기에 예제가 있습니다. github.com/h2oai/h2o-3/blob/master/h2o-py/tests/testdir_algos/…
0xF

완전한! 조사해 주셔서 감사합니다. 이 게시물을 결과로 업데이트하겠습니다.
ximiki

1
h2o 테스트에 대한 링크는 더 이상 작동하지 않지만 github.com/h2oai/h2o-3/blob/master/h2o-py/tests/testdir_algos / ... (버전에 대한 영구 링크) 글을 쓰는 시점에있다 github.com/h2oai/h2o-3/blob/... )
안드레 HOLZNER

11

나는 최근에 툴박스를 개발했습니다 : Py thon O utlier D etection toolbox ( PyOD ). GitHub를 참조하십시오 .

감독되지 않은 접근 방식과 감독되지 않은 접근 방식을 모두 사용하여 데이터에서 외부 객체를 식별하도록 설계되었습니다. PyOD의 기능은 다음과 같습니다.

  • 다양한 알고리즘에 걸친 통합 API, 자세한 문서 및 대화식 예제.
  • 신경망 / 딥 러닝 및 이상치 앙상블을 포함한 고급 모델.
  • numba 및 joblib을 사용하여 가능한 경우 JIT 및 병렬화로 성능을 최적화했습니다. Python 2 및 3과 호환됩니다 (scikit-learn 호환 가능).

다음은 몇 가지 중요한 링크입니다.

과학 간행물에 PyOD를 사용하는 경우 다음 논문에 대한 인용을 부탁드립니다.

@article{zhao2019pyod,
  title={PyOD: A Python Toolbox for Scalable Outlier Detection},
  author={Zhao, Yue and Nasrullah, Zain and Li, Zheng},
  journal={arXiv preprint arXiv:1901.01588},
  year={2019},
  url={https://arxiv.org/abs/1901.01588}
}

현재 JMLR (머신 러닝 오픈 소스 소프트웨어 트랙) 에서 검토 중 입니다. 사전 인쇄를 참조하십시오 .


빠른 소개

PyOD 툴킷은 세 가지 주요 기능 그룹으로 구성됩니다. (i) 이상치 탐지 알고리즘; (ii) 이상치 앙상블 프레임 워크 및 (iii) 이상치 검출 유틸리티 기능.

개별 감지 알고리즘 :

  • PCA : 주요 성분 분석 (고유 벡터 초평면까지의 가중 투영 거리의 합)
  • MCD : 최소 공분산 결정 요인 (마할 라 노비스 거리를 특이점으로 사용)
  • OCSVM : 단일 클래스 지원 벡터 머신
  • LOF : 지역 특이 치
  • CBLOF : 클러스터링 기반 로컬 특이 치 요인
  • LOCI : LOCI : 로컬 상관 적분을 사용한 빠른 이상치 탐지
  • HBOS : 히스토그램 기반 특이 치 점수
  • kNN : k 가장 가까운 이웃 (k ** 가장 가까운 이웃까지의 거리를-** 이상 점으로 사용
  • AvgKNN : 평균 kNN (가장 가까운 이웃까지의 평균 거리를 특이점으로 사용)
  • MedKNN : kNN 중앙값
  • ABOD : 각도 기반 특이점 탐지
  • FastABOD : 근사법을 사용한 빠른 각도 기반 특이점 탐지
  • SOS : 확률 적 이상치 선택
  • IForest : 격리 숲
  • 기능 포장
  • LSCP : LSCP : 병렬 특이 치 앙상블의 로컬 선택적 조합
  • XGBOD : 극한 증폭 기반 이상치 탐지 (감독)
  • AutoEncoder : 완전 연결된 AutoEncoder (재 구축 오류를 특이점으로 사용)
  • SO_GAAL : 단일 목표 생성 적대적 액티브 학습
  • MO_GAAL : 다중 목표 생성 적대적 활성 학습

특이점 탐지기 / 점수 조합 프레임 워크 :

  • 기능 포장
  • LSCP : LSCP : 병렬 특이 치 앙상블의 로컬 선택적 조합
  • 평균 : 점수를 평균화하여 간단한 조합
  • 가중 평균 : 탐지기 가중치로 점수를 평균화하여 간단한 조합
  • 극대화 : 최대 점수를 받아 간단한 조합
  • AOM : 최대 평균
  • MOA : 평균 최대화

이상치 탐지를위한 유틸리티 기능 :

  1. score_to_lable () : 원시 특이점 점수를 이진 레이블로 변환
  2. precision_n_scores () : 특이 치 마이닝에 대한 대중적인 평가 지표 중 하나 (정밀도 @ 순위 n)
  3. generate_data () : 이상치 탐지 실험을위한 의사 데이터 생성
  4. wpearsonr () : 가중 피어슨은 의사 그라운드 진실 생성에 유용합니다

구현 된 모든 모델의 비교는 다음과 같습니다 ( 그림 , 코드 , Jupyter Notebooks ).여기에 이미지 설명을 입력하십시오

관심이 있으시면 자세한 정보는 Github ( https://github.com/yzhao062/Pyod )을 확인하십시오.


8

나는 현재 당신과 같은 무대에 있습니다. 몇 가지 연구를 통해 이상 감지에 가장 적합한 옵션을 찾고 있습니다.

내가 찾은 것은 귀하의 요구에 가장 잘 부합하고 귀하가 본 것과 더 잘 비교되는 것입니다. 즉, TwitterAnomalyDetection, SkyLine입니다.

Numenta의 NAB (Numenta Anomaly Benchmark)가 더 좋습니다. 또한 매우 훌륭한 커뮤니티 지원을 제공하며 플러스 포인트는 오픈 소스이며 파이썬으로 개발되었습니다. 알고리즘을 추가 할 수 있습니다.

알고리즘의 경우 LOF 또는 CBLOF가 좋은 옵션이라는 것을 알았습니다.

한 번 확인하십시오. 도움이 될 수 있습니다. https://github.com/numenta/nab

더 나은 옵션을 찾으면. 제발 말해줘 나는 또한 같은 길에 있습니다.

최고의 행운!!


소중한 정보 감사합니다! 나는 이것을 분명히 확인할 것입니다.
ximiki

3
NAB가 내 문제에 어떻게 적용되는지에 대해 의견을 말하고 싶었습니다. 내가 볼 수있는 유일한 단점은 단 변량 (1 열) 시계열 이상 탐지에만 해당되지만 다변량 (많은 열)은 어떻습니까? 이 제안에 감사드립니다. 솔루션 후보 후보 목록으로 보내겠습니다.
ximiki

@ximiki는 MultiVariate 시계열에 대한 것을 찾았습니다. 나는 또한 비슷한 문제를보고있다.
shubham003

7

어쩌면 이것이 정상 상태에 대해 언급하는 데 도움이 될 수 있습니다 : https://github.com/twitter/AnomalyDetection

https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series


1
시간 내 주셔서 감사하지만 "리소스"의 첫 번째 글 머리 기호를 참조하십시오. 이 옵션을 검토하고 "제약"을 만족시키는 것을 찾고 있습니다.
ximiki

1
트위터의 AnomalyDetection 패키지를 사용하는 것을 반복하고 더 무뚝뚝하게하는 것은 여기에 옵션이 아닙니다 : "제약"섹션을 더주의 깊게 읽으십시오. 나는 이것에 대한 진지한 시도를 비난하지는 않지만 파이썬 기반 패키지에 대한 문제입니다. 따라서, 향후 유권자들은이 답변을 사용할 수있는 옵션이 아니기 때문에이 답변을 찬성하지 마십시오. 나는 downvoting을 통해 이것에 대한 현재 2 투표를 지우는 것이 좋지만 아마도 이것은 Stackexchange 커뮤니티 내에서 비 ​​윤리적이며 어떤 측면도 잡기를 원하지 않습니다.
ximiki

1
다시 한 번이 문제에 대해 사과를 드리지만, 비슷한 문제가 발생하는 다른 사람들이이 질문을 매우 명확하고 유용하게 만들려고 노력하고 있으며, 거위 추적을 원하지 않습니다.
ximiki

6

비정상을 감지하는 데 사용하는 기능은 로그 파일의 한 행의 데이터라고 가정합니다. 그렇다면 Sklearn은 좋은 친구이며 블랙 박스로 사용할 수 있습니다. 1 클래스 SVM참신 탐지 의 튜토리얼을 확인하십시오 .

그러나 기능이 전체 로그 파일 인 경우 먼저 동일한 차원의 일부 기능으로 요약 한 다음 노벨 티 감지를 적용해야합니다.


3

누군가가 여기에 도착하고 관심이있는 경우를 대비하여 여전히 활발하고 개발 된 스카이 라인 버전이 있습니다.

https://github.com/earthgecko/skyline

https://earthgecko-skyline.readthedocs.io/en/latest

나는 프로젝트의 현재 관리자이며 현재 성능, UI, 계절성 더 나은 처리 측면에서 원래 Etsy 버전보다 훨씬 고급이며 예외 데이터베이스의 추가 기능, 상관 관계 계산 및 지문 기능이 있습니다. 변칙적 인 패턴을 배우지 않습니다.


1

다변량 시계열을 가지고 있으므로, 일반적으로 반 감독 (일반 클래스 만 포함)되는 훈련 데이터를 기반으로 시스템의 역학을 모델링하는 LSTM-RNN 구현을 살펴 보겠습니다. 즉, "정상"이 무엇인지 배우도록 모델을 훈련시킵니다. 테스트하는 동안 정상 조건과 비정상 조건을 모두 테스트하여 모델이 얼마나 잘 구별되는지 확인합니다.

신경망의 장점은 입력 신호 사이의 상호 상관을 "학습"한다는 것입니다. 수동으로 탐색 할 필요는 없습니다. 특히 LSTM-RNN은 제어 이론의 상태 공간 모델과 유사하게 이전 입력의 메모리를 유지할 수있는 기능 때문에 시계열 모델링에있어 이상적인 선택입니다 (유사한 경우).

파이썬에서는 Keras API (Tensorflow 백엔드 상단)를 사용하여 LSTM-RNN을 구현하는 것이 쉽지 않습니다. 이 네트워크는 임의의 수의 입력이 주어지면 관심 신호를 추정하여 실제 측정 값과 비교합니다. "큰"편차가 있으면 이상이 생겼습니다 (모델이 충분히 정확함).

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