您假设这是一个非常适合机器学习的问题是正确的,并且scikit-learn.org是我解决这些类型问题的首选库。不要担心细节 - ( couchdb
cloudant
) 现在,让您的问题进入可以解决的状态。
如果我们可以假设给定用户的登录详细信息(时间、位置、用户代理等)的变化很小,那么任何较大的变化都会触发您的警报。这就是@Robert McGibbon 建议的“异常值”检测发挥作用的地方。
例如,将每个登录细节压缩到一个维度,并为每个用户创建一个登录细节向量(这个登录信息摘要还有很大的改进空间);
- 登录时间(模 24 小时)
- 位置(可能是一个整数位置数组,每个整数代表一个不同的国家)
- 用户代理(一个类似的整数用户代理数组)
等等。每次用户登录时,创建此详细信息数组并存储它。一旦你积累了大量的测试数据,你就可以尝试运行一些 ML 例程。
因此,我们有一个用户和一组与成功登录相对应的登录数据(一个训练集)。我们现在可以训练支持向量机来识别这种用户登录模式:
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 发现新数据点与其训练集显着不同,那么它将发出警报。
我的两便士。一旦你掌握了一个好的训练集,还有更多的机器学习技术可能更适合你的任务(它们可能更快、更准确等),但是创建你的训练集然后训练例程将是最重大挑战。
有很多令人兴奋的事情可以尝试!如果您知道您有错误的登录尝试,您可以使用更复杂的 SVM 将它们添加到训练集中,您可以使用良好和错误的登录来训练该 SVM。您可以找到欧几里得不同的登录名并使用它,而不是使用一组不同的“位置”值!这听起来很有趣,祝你好运!