使用CouchDB和Python机器学习检测“异常行为”?

问题描述 投票:15回答:3

当用户访问我的Python Web服务时,我正在收集许多非常有趣的数据点。例如,我有他们当前的城市,州,国家,用户代理等。我希望能够做的是通过某种类型的机器学习系统/算法(可能是贝叶斯分类器?)来运行它们,最终目标是在出现异常情况时(异常检测)获取电子邮件通知。例如,Jane Doe只在Chrome上从美国登录。因此,如果她突然在Firefox上从乌克兰登录我的网络服务,我希望看到这是一个非常“不寻常”的事件并触发通知。

我已经在使用CouchDB(特别是Cloudant),我看到人们经常在网上说,Cloudant / CouchDB非常适合这种事情(大数据分析)。但是我完全不知道从哪里开始。我没有找到关于相对简单地跟踪Web服务的外围事件的文档,更不用说使用CouchDB存储以前“学习”的数据了。我看到了几种用于进行此类数据处理的专用系统(需要想到的是PredictionIO),但我不禁觉得,考虑到CouchDB的本质,它们是过度的。

任何见解都会非常感激。谢谢!

python machine-learning couchdb bayesian cloudant
3个回答
22
投票

你认为这是一个非常适合机器学习的问题是正确的,而scikit-learn.org是我对这类问题的首选库。现在不要担心细节 - (couchdb cloudant),让你的问题进入可以解决的状态。

如果我们可以假设给定用户的登录详细信息(时间,位置,用户代理等)的变化很小,那么任何大的变化都会触发您的警报。这就是@Robert McGibbon建议的'离群'检测发挥作用的地方。

例如,将每个登录详细信息压缩到一个维度,并为每个用户创建一个登录详细信息向量(有很大的空间来改进登录信息的摘要);

  • 登录时间(模数24小时)
  • location(可能是整数位置的数组,每个整数代表不同的国家/地区)
  • user-agent(类似的整数用户代理数组)

等等。每次用户登录时,都会创建此详细信息数组并存储它。一旦累积了大量测试数据,就可以尝试运行一些ML例程。

因此,我们有一个用户和一组与成功登录(训练集)相对应的登录数据。我们现在可以训练Support Vector Machine来识别这个用户的登录模式:

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

if clf.predict(log_in_data) < 0:
    fire_alert_event()
else:
    # log-in is not dissimilar to previous attempts
    print('log in ok')

如果SVM发现新数据点与其训练集明显不同,则它将触发警报。

我的两便士。一旦掌握了良好的训练集,就会有更多ML技术可能更适合您的任务(它们可能更快,更准确等)但是创建训练集然后训练例程将是最多的重大挑战。

有许多令人兴奋的事情要尝试!如果您知道登录尝试不正确,可以使用更复杂的SVM将这些添加到训练集中,您可以使用好的和坏的登录进行训练。您可以找到欧几里德不同的登录并使用它,而不是使用不同的“位置”值数组!这听起来很有趣,祝你好运!


1
投票

我还认为使用sklearn的svm.OneClassSVM的方法会产生一个好的离群检测器。但是,我根据问题中的示例汇总了一些代表性数据,它根本无法检测到异常值。我扫描了从.01到.99的nu和gamma参数,发现没有令人满意的SVM预测器。

我的理论是,由于样本具有分类数据(城市,州,国家,网络浏览器),SVM算法不是正确的方法。 (我做过,BTW,首先使用DictVectorizer.fit_transform方法将数据转换为二进制特征向量)。

我相信当他建议使用贝叶斯分类器时,@ sullivanmatt正走在正确的轨道上。贝叶斯分类器用于监督学习,但至少在表面上,这个问题被视为无监督学习问题,即我们不知道哪些观察是正常的,哪些是异常值。

因为您想要检测的异常值在网站访问流中非常罕见,我相信您可以通过将训练集中的每个观察值标记为正/正常观察来训练贝叶斯分类器。分类器应该预测真正的正常观察具有更高的概率,因为大多数观察结果确实是正常的。真正的异常值应该突出显示为接收低预测概率。


1
投票

如果您在此期间尝试调查用户行为异常,我建议您查看time-series anomaly detectors。通过这种方法,您将能够统计/自动地找出新的,可能可疑的新出现的模式和异常事件。

http://www.autonlab.org/tutorials/biosurv.htmlhttp://web.engr.oregonstate.edu/~wong/workshops/icml2006/slides/agarwal.ppt解释了一些基于机器学习的技术。在这种情况下,您可以使用scikit-learn.org,这是一个非常强大的Python库,包含大量的ML算法。

© www.soinside.com 2019 - 2024. All rights reserved.