>

사용자가 Python 웹 서비스를 이용할 때 정말 흥미로운 데이터 포인트를 많이 수집하고 있습니다. 예를 들어, 현재 도시, 주, 국가, 사용자 에이전트 등이 있습니다. 내가 할 수있는 것은 일종의 기계 학습 시스템/알고리즘 (아마도 베이지안 분류기)을 통해 실행하는 것입니다. 비정상적인 상황이 발생했을 때 전자 메일 알림을받는 최종 목표 (이상 탐지). 예를 들어 Jane Doe는 미국에서만 Chrome을 통해 로그인했습니다. 파이어 폭스에서 우크라이나의 웹 서비스에 갑자기 로그인하면이 이벤트가 매우 '이상한'이벤트로보고 알림이 발생하고 싶습니다.

CouchDB (구체적으로 Cloudant와 함께)를 이미 사용하고 있는데, 사람들이 Cloudant/CouchDB가 이런 종류의 제품에 적합하다고 온라인으로 여기저기서 자주 말하는 것을 봅니다 (큰 데이터 분석). 그러나 나는 어디서부터 시작 해야할지 완전히 상실했습니다. CouchDB를 사용하여 이전에 '학습 된'데이터를 저장하는 것은 물론 웹 서비스의 외부 이벤트를 비교적 간단하게 추적하는 것과 관련하여 문서화 측면에서 많이 발견하지 못했습니다. 이러한 유형의 데이터 크 런칭을 수행하기위한 몇 가지 전용 시스템 (PredictionIO가 떠오를 것)이 있지만 CouchDB의 특성상 처음부터 과도하다고 생각할 수는 없습니다.

통찰력이 있으면 대단히 감사하겠습니다. 감사합니다!


  • 답변 # 1

    이것이 기계 학습에 이상적으로 적합한 문제라고 가정하면 옳습니다. scikit-learn.org는 이러한 유형의 문제에 대해 제가 선호하는 라이브러리입니다. 세부 사항에 대해 걱정하지 마십시오-( couchdb  와이즈 비즈 ) 지금은 문제를 해결할 수있는 상태로 만듭니다.

    지정된 사용자에 대한 로그인 세부 사항 (시간, 위치, 사용자 에이전트 등)의 변동이 적다고 가정 할 수있는 경우이 범위에서 큰 변동이 발생하면 경고가 트리거됩니다. @Robert McGibbon이 제안한 '이상한'탐지가 시작됩니다.

    예를 들어, 각 로그인 세부 사항을 한 차원으로 짜고 각 사용자에 대한 로그인 세부 사항 벡터를 작성하십시오 (로그인 정보 요약을 개선 할 수있는 충분한 공간이 있습니다).

    로그인 시간 (모듈로 24 시간)

    위치 (각각 다른 정수를 나타내는 정수 위치의 배열 일 수 있음)

    사용자 에이전트 (유사한 사용자 에이전트의 유사한 배열)

    등. 사용자가 로그인 할 때마다이 세부 사항 배열을 작성하여 저장하십시오. 대량의 테스트 데이터를 모은 후에는 ML 루틴을 실행할 수 있습니다.

    그래서 우리는 성공적인 로그인 (훈련 세트)에 해당하는 사용자와 로그인 데이터 세트를 가지고 있습니다. 이제이 사용자 로그인 패턴을 인식하도록 Support Vector Machine을 교육 할 수 있습니다.

    cloudant
    
    

    그런 다음 새 로그인이 발생할 때마다 단일 로그인 세부 사항 배열을 작성하고 SVM을 지나서 전달하십시오

    from sklearn import svm
    # training data [[11.0, 2, 2], [11.3, 2, 2] ... etc]
    train_data = my_training_data()
    # create and fit the model
    clf = svm.OneClassSVM()
    clf.fit(train_data)
    
    

    SVM이 새로운 데이터 포인트가 훈련 세트와 크게 다른 것을 발견하면 알람을 발생시킵니다.

    나의 두 펜스. 좋은 훈련 세트를 얻은 후에는 작업에 더 적합 할 수있는 ML 기술이 더 많지만 (더 빠르거나 정확할 수 있음) 훈련 세트를 만든 다음 일상적인 훈련이 가장 좋습니다. 중대한 도전.

    시도 할만한 흥미로운 것들이 많이 있습니다! 로그인 시도가 잘못되었다는 것을 알면 양호하고 나쁜 로그인으로 훈련하는보다 복잡한 SVM을 사용하여이를 훈련 세트에 추가 할 수 있습니다. 서로 다른 '위치'값 배열을 사용하는 대신 유클리드의 다른 로그인을 찾아서 사용할 수 있습니다! 이것은 큰 재미, 행운을 빕니다!

  • 답변 # 2

    또한 sklearn의 svm.OneClassSVM을 사용하는 접근 방식이 좋은 이상치 탐지기를 생성 할 것이라고 생각했습니다. 그러나 문제의 예를 기반으로 한 대표적인 데이터를 모아서 이상 값을 감지하지 못했습니다. nu 및 gamma 매개 변수를 .01에서 .99로 스윕했으며 만족스러운 SVM 예측기를 찾지 못했습니다.

    내 이론은 샘플에 범주 형 데이터 (도시, 주, 국가, 웹 브라우저)가 있기 때문에 SVM 알고리즘이 올바른 접근법이 아니라는 것입니다. BTW는 먼저 DictVectorizer.fit_transform 메소드를 사용하여 데이터를 이진 피쳐 벡터로 변환했습니다.

    @sullivanmatt가 베이지안 분류기 사용을 제안 할 때 올바른 길을 가고 있다고 생각합니다. 베이지안 분류기는감독학습에 사용되지만, 적어도 표면적으로이 문제는 감독되지 않은 학습 문제로 제기되었습니다. 즉, 어떤 관측치가 정상이고 어떤 특이 치인지 우선 순위를 알지 못합니다.

    웹 사이트 방문시 탐지하려는 특이 치가 매우 드물기 때문에 훈련 세트의 모든 관측치를 긍정적/정상 관측치로 레이블 지정하여 베이지안 분류기를 훈련 할 수 있다고 생각합니다. 분류자는 대부분의 관측치가 실제로 정규이기 때문에 실제 정규 관측치의 확률이 높을 것이라고 예측해야합니다. 진정한 특이 치는 낮은 예측 확률을받는 것으로 눈에 띄어 야합니다.

  • 답변 # 3

    시간 동안 사용자 행동의 이상을 조사하려는 경우 if clf.predict(log_in_data) < 0: fire_alert_event() else: # log-in is not dissimilar to previous attempts print('log in ok') 를 살펴 보는 것이 좋습니다. . 이 방법을 사용하면 통계적으로/자동으로 새롭고 잠재적으로 의심스러운 새로운 패턴과 비정상적인 이벤트를 파악할 수 있습니다.

    http://www.autonlab.org/tutorials/biosurv.html 및 http://web.engr.oregonstate.edu/~wong/workshops/icml2006/slides/agarwal.ppt  머신 러닝을 기반으로하는 몇 가지 기술을 설명합니다. 이 경우 수많은 ML 알고를 포함하는 매우 강력한 Python 라이브러리 인 scikit-learn.org를 사용할 수 있습니다.

    time-series anomaly detectors

  • 이전 javascript - JQuery를 반복 할 수 있도록 리턴 JSON 문자열을 분할해야합니다
  • 다음 c# - XNA에서 픽셀 단위로 2D를 그리는 방법은 무엇입니까?