Math 实时检测数据流中的趋势

Math 实时检测数据流中的趋势,math,statistics,trending,data-stream,trend,Math,Statistics,Trending,Data Stream,Trend,我试图实时检测Twitter上的热门话题。我所做的是,每次我收到一条推文,我都会将该推文分配给与该推文谈论相同主题的集群。不管我使用的是什么聚类算法,也不管我是如何将推文分配给主题的,我都无法找到如何检测趋势主题 我对趋势集群/主题的理解或定义是,它是一个在一定时期内比其他集群获得更多指定推文的集群。或者更新集群大小的频率高于其他集群 如何将该定义转换为实际代码或数学模型是我无法解决的问题 这是一个趋势集群规模如何发展的示例: 如您所见,集群大小将为零,然后突然开始增加,因为现在这是一个热门话

我试图实时检测Twitter上的热门话题。我所做的是,每次我收到一条推文,我都会将该推文分配给与该推文谈论相同主题的集群。不管我使用的是什么聚类算法,也不管我是如何将推文分配给主题的,我都无法找到如何检测趋势主题

我对趋势集群/主题的理解或定义是,它是一个在一定时期内比其他集群获得更多指定推文的集群。或者更新集群大小的频率高于其他集群

如何将该定义转换为实际代码或数学模型是我无法解决的问题

这是一个趋势集群规模如何发展的示例:


如您所见,集群大小将为零,然后突然开始增加,因为现在这是一个热门话题,tweet被分配给集群。一旦集群不再是热门话题,那么集群大小将保持相对静态。

您似乎在尝试检测绘制的曲线斜率高于某个阈值的情况。但是你没有一条连续的曲线,取而代之的是采样点,一条tweet到一个集群的每一个赋值都有一个采样点。理论上,两个这样的样本点可以定义一个斜率,但这些斜率看起来会非常不稳定:两条关于一个无聊话题的连续推特会突然成为一种趋势。为了避免这种情况,您必须以某种方式平滑数据。一种可能的方法是使用滑动窗口,跨越固定的时间(例如两小时)或固定数量的tweet。所以你可以制定一个阈值,比如

  • 如果过去x分钟内的推文数量超过y或y,则是趋势
  • 如果最后一条tweet的yth时间不超过x分钟,这是一种趋势
用这样的阈值来表述,上面的两个公式实际上是等价的。如果你必须用一个数字来衡量趋势,那么这两个数字之间就会有区别


如果这种简单的方法对您不起作用,您可能需要询问,您还可以研究各种峰值检测算法,因为这本质上是在斜率函数中找到峰值的问题。

您似乎试图检测绘制的曲线的斜率高于某个阈值的情况。但是你没有一条连续的曲线,取而代之的是采样点,一条tweet到一个集群的每一个赋值都有一个采样点。理论上,两个这样的样本点可以定义一个斜率,但这些斜率看起来会非常不稳定:两条关于一个无聊话题的连续推特会突然成为一种趋势。为了避免这种情况,您必须以某种方式平滑数据。一种可能的方法是使用滑动窗口,跨越固定的时间(例如两小时)或固定数量的tweet。所以你可以制定一个阈值,比如

  • 如果过去x分钟内的推文数量超过y或y,则是趋势
  • 如果最后一条tweet的yth时间不超过x分钟,这是一种趋势
用这样的阈值来表述,上面的两个公式实际上是等价的。如果你必须用一个数字来衡量趋势,那么这两个数字之间就会有区别


如果这种简单的方法对您不起作用,您可能需要询问,您也可以研究各种峰值检测算法,因为这本质上是在斜率函数中找到峰值的问题。

考虑到原始问题的日期,这对您来说可能太晚了,但可能不会。考虑到你提问后的时间,你可能有数据知道趋势线的形状。现在,您所要做的就是对其进行规范化,例如在-1,0,1之间,并分析实时数据,也进行规范化,以获得匹配。如果实际数据和线型之间的差异低于阈值,则趋势正在进行中,您可以发出警报


a

鉴于原始问题的日期,这对您来说可能太晚了,但可能不会。考虑到你提问后的时间,你可能有数据知道趋势线的形状。现在,您所要做的就是对其进行规范化,例如在-1,0,1之间,并分析实时数据,也进行规范化,以获得匹配。如果实际数据和线型之间的差异低于阈值,则趋势正在进行中,您可以发出警报

a