我正在尝试开发一种方法,通过页面请求来识别用户的浏览模式。举个简单的例子,我创建了8个页面,每当用户请求某个页面时,我会将该页面的请求频率存储在数据库中,如下图所示:
现在,我的假设是通过识别页面请求模式的差异,来推测如果模式与之前存在的模式不同,那么这可能是一个不同的(欺诈)用户。我正在开发这种方法,作为多因素认证系统的一部分。
当用户登录并以与之前观察到的模式不同的方式浏览时,系统应该能够识别出这是模式的变化。
问题是如何利用这些数据值来检查当前模式是否与之前存在的模式相关。
回答:
好的,这里有一个相当简单的想法(基本上,你想要做的是生成一组特征,然后识别当前会话行为是否与之前观察到的行为不同)。我喜欢将这些单类问题(只有正常行为进行训练,希望检测显著的偏离)视为密度估计问题,所以这里是一个简单的概率模型,它将允许你获得当前请求模式的概率。基本上,当这个概率变得太低时(具体多低取决于你需要调整以获得所需的行为),就说明有什么事情在发生。
我们的观察包括每个页面的计数。设它们的总和,即总请求数,等于c_total,每个页面的计数为p_i。我建议如下:
c_total ~ Poisson(\lambda)
p|c_total ~ Multinomial(\theta, c_total)
这允许你根据学习到的用户特定参数\lambda(单变量)和\theta(与p相同维度的向量)为新观察分配概率。要做到这一点,计算从泊松分布的概率质量函数中看到那么多请求的概率,然后计算从多项式中看到页面计数的概率,并将它们相乘。你可能还需要通过c_total来归一化,以便你可以比较具有不同请求数量的会话(因为请求越多,你相乘的数字<1就越多)。
所以,剩下的就是从该用户之前的“好”会话中获取参数。最简单的方法是最大似然法,其中\lambda是之前会话中总请求数的平均值,\theta_i是所有页面浏览中p_i的比例(对于该特定用户)。这可能对你有用:然而,考虑到你希望从非常少的观察中学习,我会倾向于使用完整的贝叶斯模型。这也将允许你在每次非可疑观察后整洁地更新参数。这些分布的推断非常简单,\lambda和\theta有共轭先验和解析预测分布,所以如果你熟悉这些类型的模型,这不会很难。