根据访问时间戳进行聚类

假设我们有以下网络访问日志。

timestamp                  page_visted======================================2017-01-02 10:00:02         /xxx/a.html2017-01-02 10:00:06         /xxx/b.html2017-01-02 10:01:03         /xxx/c.html2017-01-02 10:02:02         /xxx/d.html2017-01-02 15:00:02         /xxx/a.html2017-01-02 15:01:10         /xxx/b.html2017-01-02 15:03:05         /xxx/c.html

用户访问了我们的网站2次,浏览了7个页面。我的问题是“如何最佳地知道他访问了我们网站多少次,而不是他浏览了多少个页面?”

因为用户可能每次访问浏览的页面数量和花费的时间不同,很难设定一个固定的数字或时间间隔来分组这些记录。是否有任何算法可以根据它们的访问时间戳来分组(聚类)这些记录?谢谢。


回答:

会话开始/结束

一种简单的方法是选择一个数字来表示会话已经结束,我见过使用20分钟的无活动时间来表示会话已经结束。

更robust的方法是将这个问题视为一个概率问题,因为会话的长度没有固定,或者会话之间的时间间隔也没有固定。

你需要做的第一件事是查看数据。特别是到达时间间隔。你有一系列的页面访问事件。你需要绘制到达时间间隔的分布图(页面访问之间的时间间隔,以秒为单位)。

一个合理的假设是分布看起来像泊松分布,或者如果会话间的时间确实是聚集的,那么分布会是泊松分布但有额外的峰值

如果数据显示出一个很好的泊松分布,一个简单的方法就是直接使用访问时间的分布。

通过从到达时间间隔的分布中选择一个适合你用例的百分位数,你可以确定一个相当有用的阈值,超过这个阈值的到达时间间隔表明一个新会话已经开始。

或者,如果更有用的话,你可以使用分布来获取观察到到达时间间隔的概率,低概率表明新会话的开始/结束。

更复杂的情况是,如果分布是双峰的,比如因为人们倾向于以相似的方式安排他们的会话。如果是这样,可能更简单的是探索一个简单的聚类算法,如k-means,对到达时间间隔进行聚类,你期望有一个聚类用于会话内的访问,另一个聚类用于会话间的访问。

计算会话次数

一旦你找到了一个合适的方法来识别不同的会话,分配每个会话一个唯一的键,按用户分组并计算唯一键的数量就变得很简单了。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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