如何判断当前数据值是否代表或与之前的历史数据值相关?

我正在尝试开发一种方法,通过页面请求来识别用户的浏览模式。举个简单的例子,我创建了8个页面,每当用户请求某个页面时,我会将该页面的请求频率存储在数据库中,如下图所示:enter image description here

现在,我的假设是通过识别页面请求模式的差异,来推测如果模式与之前存在的模式不同,那么这可能是一个不同的(欺诈)用户。我正在开发这种方法,作为多因素认证系统的一部分。

当用户登录并以与之前观察到的模式不同的方式浏览时,系统应该能够识别出这是模式的变化。

问题是如何利用这些数据值来检查当前模式是否与之前存在的模式相关。


回答:

好的,这里有一个相当简单的想法(基本上,你想要做的是生成一组特征,然后识别当前会话行为是否与之前观察到的行为不同)。我喜欢将这些单类问题(只有正常行为进行训练,希望检测显著的偏离)视为密度估计问题,所以这里是一个简单的概率模型,它将允许你获得当前请求模式的概率。基本上,当这个概率变得太低时(具体多低取决于你需要调整以获得所需的行为),就说明有什么事情在发生。

我们的观察包括每个页面的计数。设它们的总和,即总请求数,等于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有共轭先验和解析预测分布,所以如果你熟悉这些类型的模型,这不会很难。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注