我正在尝试创建一个可以捕捉用户通常行为的模型:即,为用户分析创建一个模型。
我确实有 200 万行数据表明用户的正常行为,并且想要定义一个可以检测到用户正常行为的任何变化的模型。
我正在考虑使用经过正常行为训练的一类 svm / 隔离森林。我想知道这是否是一个好的方向。
或者我应该冒险进入深度学习或基于无监督聚类的模型,并收集用户异常行为的数据,以可能使用监督模型。
我正在尝试创建一个可以捕捉用户通常行为的模型:即,为用户分析创建一个模型。
我确实有 200 万行数据表明用户的正常行为,并且想要定义一个可以检测到用户正常行为的任何变化的模型。
我正在考虑使用经过正常行为训练的一类 svm / 隔离森林。我想知道这是否是一个好的方向。
或者我应该冒险进入深度学习或基于无监督聚类的模型,并收集用户异常行为的数据,以可能使用监督模型。
我认为这主要取决于收集异常行为数据的难度/昂贵/耗时。它还取决于您是否希望这种异常行为属于一个(或固定数量的)类,或者它可以是任何偏离正常的东西。
如果您有能力收集标记数据并期望异常行为仅限于固定数量的类别,那么监督方法很可能会给您带来更好的结果。
相反,如果上述任何假设都不成立,那么我认为半监督方法(如您所说,One Class SVM 或类似技术)在我看来是一个不错的方法。
有一类分类。特别是 OC-SVM。
或者您可以简单地分析到最近样本的距离。
我的答案当然是,先尝试最简单的方法,然后继续。机器学习不是繁重的工作,而是对工具的智能使用。
算法的选择主要取决于您的数据和您期望的异常类型。您是否有具有季节性影响和趋势的时间序列数据,也许 twitter 异常检测包将是一个好的开始。
例如。如果您的 CPU 很热,您会期望它以高负载运行。如果负载低,则可能是异常情况或负载过高。因此,您的问题之一是,您能否仅通过查看一个样本来发现异常或识别正常行为?
因此,“无免费午餐”定理再次适用。
话虽如此,SVM 和隔离森林是一个好的开始。即使您有时间序列问题,也想跟踪短期依赖关系。只需将“旧”行包含到您当前的集合中:链接
您甚至可以尝试更简单的方法,例如值的高斯分布、计算每个排列的概率(如果您的特征足够小)或构建马尔可夫模型。
结果不满意?深入研究,也许 Auto Encoder 可以解决问题,也许是 LSTM,也许是两者的结合。
我最近使用的无监督和半监督 ML 算法的简短摘要,按复杂度(种类)排序:
当然有监督的方法,但我不熟悉这些。