在当今社交媒体盛行的时代,监控和分析平台上的对话量对于理解用户行为、发现趋势以及识别异常活动具有重要意义。及时掌握异常发生的时间点,能够帮助管理团队和市场营销部门在危机情况下快速响应。
towardsdatascience.com/detecting-anomalies-in-social-media-volume-time-series-9cae614a11d0?source=collection_archive---------5-----------------------#2024-11-11
本文介绍一种基于残差的异常检测方法,用于识别社交媒体流量时间序列中的异常波动,并以 Twitter 数据为例进行实证分析。所使用的数据来自 Numenta Anomaly Benchmark(NAB)公开数据集,包含以5分钟为间隔的Twitter发帖流量记录,聚焦于与“Apple”相关的讨论热度。
我们将从两个层面展开探讨:首先,在完整历史数据集上实施异常检测;随后,模拟实时场景下的检测流程,评估该方法在动态环境中的灵敏度与实用性。
基于完整数据集的异常识别
我们从加载并可视化一个关于 Apple 相关话题的 Twitter 流量示例开始:

图中展示了原始流量及其对数变换后的表现。可以明显看到多个尖峰——这些即为潜在的异常事件。同时,在对数尺度下,数据呈现出显著的周期性特征:白天活跃、夜间沉寂,反映出典型的用户昼夜行为模式。尽管数据也可能存在周级别周期性,但本分析暂不考虑该层次的季节影响。
消除周期性干扰
为了更准确地识别异常,需先去除数据中的周期性趋势,避免其对结果造成干扰。为此,我们采用季节性分解策略。
首先计算成交量的移动平均(MA),用以捕捉整体趋势。接着,通过观察值与移动平均之间的比率,提取出乘法形式的季节性成分。

如图所示,该乘法效应清晰体现了日周期规律:高峰出现在日间,低谷则位于夜间,符合预期。
接下来,利用上述得到的季节性因子,估算每个时间点的成交量期望值。

对比实际观测值与模型期望值,可以发现两者在趋势和周期上高度吻合,说明季节性建模较为成功。
残差分析与异常判定
完成趋势与季节性的剥离后,剩余部分即为残差,代表无法被周期性和趋势解释的波动。这一残差可视为剔除常规模式后的“净”变化量,是异常检测的核心依据。

分析发现,残差的分布形态接近帕累托分布(Pareto distribution)。这一统计特性极具价值,因为它允许我们基于分布的高百分位设定异常阈值。例如,可将超过第99.95百分位的残差值标记为潜在异常点,从而实现自动化检测。
这种方法的优势在于:既保留了对正常周期行为的敏感性,又能有效突出真正偏离常态的极端事件,适用于社交媒体流量这类强周期、高波动的数据场景。
结语
通过构建基于残差的检测框架,我们能够在复杂的社交媒体流量中精准定位异常波动。结合季节性分解与统计分布建模,该方法不仅逻辑清晰,而且具备良好的可解释性与实用性,尤其适合用于品牌舆情监控、突发事件预警等现实应用。
绝对误差与对数误差的分位数同帕累托分布的分位数之间的关系
图片来源:作者
towardsdatascience.com/detecting-anomalies-in-social-media-volume-time-series-9cae614a11d0?source=collection_archive---------5-----------------------#2024-11-11
需要指出的是,文中提到的这一统计特性并非在所有情况下都严格成立。根据我在社交数据监测中的实践经验,该规律适用于大多数社交类数据集,尤其是那些呈现右偏且包含少量极端值的情况。但对于异常波动剧烈或存在大量离群点的数据,则可能不完全适用。
在当前分析中,由于观测总数超过15,000条,我们将阈值p设定为0.9995。在此标准下,若假设数据服从理想的帕累托分布,则平均每10,000次观测中大约会识别出5个异常点。
通过筛选误差值对应p值高于0.9995的观测记录,我们可以获得一组显著的异常信号:
[此处为图片2]
上图展示了AAPL在Twitter上的交易量所检测到的异常信号。
从可视化结果可以看出,数值最大的几个观测点被明确标记为异常。当然,如果希望增加或减少触发信号的数量,可以通过调整p值来实现——降低p值将导致更多信号被触发,反之则更为严格。
实时环境下的异常检测应用
接下来,我们将场景切换至实时数据流处理模式。在此设定下,系统会对每一个新到达的观测值运行相同的检测逻辑,并即时反馈是否产生新的异常信号及其响应时间。
[此处为图片3]
此图表反映了AAPL Twitter交易量在时间推移中的实时异常报警情况。
可以明显观察到,相比静态分析,实时模式产生了更多的信号。这主要是因为用于拟合的帕累托分布参数会随着新数据的不断加入而动态更新。例如,在仅考虑“2015-03-08”之前的数据时,前三个信号可被视为显著异常;但当纳入完整数据集进行评估时,它们的相对重要性有所下降。
代码设计上,返回的异常信号限定在过去24小时内发生的事件。然而,从实际输出来看,大部分信号在新观测到来后立即被触发,仅有少数被特别标注(以加粗形式显示):
- New signal at datetime 2015-03-03 21:02:53, relative to timestamp 2015-03-03 21:02:53
- New signal at datetime 2015-03-03 21:07:53, relative to timestamp 2015-03-03 21:07:53
- New signal at datetime 2015-03-03 21:12:53, relative to timestamp 2015-03-03 21:12:53
- New signal at datetime 2015-03-03 21:17:53, relative to timestamp 2015-03-03 21:17:53 **
- New signal at datetime 2015-03-05 05:37:53, relative to timestamp 2015-03-04 20:07:53
- New signal at datetime 2015-03-07 09:47:53, relative to timestamp 2015-03-06 19:42:53 **
- New signal at datetime 2015-03-09 15:57:53, relative to timestamp 2015-03-09 15:57:53
- New signal at datetime 2015-03-09 16:02:53, relative to timestamp 2015-03-09 16:02:53
- New signal at datetime 2015-03-09 16:07:53, relative to timestamp 2015-03-09 16:07:53
- New signal at datetime 2015-03-14 01:37:53, relative to timestamp 2015-03-14 01:37:53
- New signal at datetime 2015-03-14 08:52:53, relative to timestamp 2015-03-14 08:52:53
2015年3月14日09:02:53记录到新的信号,时间戳为2015-03-14 09:02:53。
2015年3月15日16:12:53再次检测到新信号,对应的时间戳为2015-03-15 16:12:53。
2015年3月16日02:52:53出现一次信号更新,与之关联的时间戳为2015-03-16 02:52:53。
紧接着在2015年3月16日02:57:53,系统捕获到另一条新信号,时间戳同步为2015-03-16 02:57:53。
随后在2015年3月16日03:02:53,又记录了一次新的信号事件,对应的时间标记为2015-03-16 03:02:53。
2015年3月30日17:57:53,系统再次接收到一个新信号,其时间戳为2015-03-30 17:57:53。
一分钟后,即2015年3月30日18:02:53,再次确认接收到一条新信号,时间戳为2015-03-30 18:02:53。
进入3月31日凌晨,首次信号出现在03:02:53,记录时间为2015-03-31 03:02:53。
此后每隔五分钟连续记录到多个信号:
2015年3月31日03:07:53,时间戳为2015-03-31 03:07:53。
2015年3月31日03:12:53,对应时间戳为2015-03-31 03:12:53。
2015年3月31日03:17:53,时间戳同步为2015-03-31 03:17:53。
2015年3月31日03:22:53,记录到新信号,时间戳为2015-03-31 03:22:53。
2015年3月31日03:27:53,系统再次捕捉到信号,时间戳为2015-03-31 03:27:53。
2015年3月31日03:32:53,新信号生成,时间戳为2015-03-31 03:32:53。
2015年3月31日03:37:53,继续记录到信号活动,时间戳为2015-03-31 03:37:53。
2015年3月31日03:42:53,最新一次信号被登记,时间戳为2015-03-31 03:42:53。
同一天的晚间,2015年3月31日20:22:53,再次监测到新信号,时间戳为2015-03-31 20:22:53 **
towardsdatascience.com/detecting-anomalies-in-social-media-volume-time-series-9cae614a11d0?source=collection_archive---------5-----------------------#2024-11-11
2015年4月2日12:52:53,系统接收到一条信号,但其相对时间戳显示为2015-04-01 20:42:53 **
[此处为图片2]
2015年4月14日14:12:53,新一轮信号开始出现,时间戳为2015-04-14 14:12:53。
当天晚间22:52:53,再次检测到新信号,时间戳为2015-04-14 22:52:53。
接下来的几分钟内持续有信号更新:
2015年4月14日22:57:53,时间戳为2015-04-14 22:57:53。
2015年4月14日23:02:53,信号被记录,时间戳为2015-04-14 23:02:53。
最后一次信号出现在2015年4月14日23:07:53,对应时间戳为2015-04-14 23:07:53。
在时间戳 2015-04-14 23:12:53、2015-04-14 23:17:53、2015-04-14 23:22:53 和 2015-04-14 23:27:53 处均检测到新的信号,每个信号与其对应的时间点完全同步。此外,在 2015-04-21 20:12:53 也记录到了一次新的信号,表明该模型在此时间点同样捕捉到了异常波动。
从上述结果可以看出,所采用的算法具备实时识别异常的能力。每当有新的观测数据输入时,系统能够迅速触发相应的警报信号。这种即时响应机制使相关组织可以及时应对社交媒体讨论量的突发性变化,从而为危机管理或趋势捕捉提供宝贵的时间窗口。
基于残差分析的方法被证明是一种有效的手段,可用于侦测社交媒体话题量序列中的异常模式。该方法不仅灵活,而且适用于多种场景,有助于企业与市场运营人员及时发现正在发生的重大事件、新兴趋势或潜在风险。
尽管当前算法表现良好,但仍存在多个可优化的方向:
- 目前的实现依赖于全部历史数据进行实时判断,未来可考虑引入固定滑动窗口机制以提升计算效率和适应长期运行需求。
- 尝试不同时间粒度的数据聚合方式,例如采用 hourly(每小时)替代现有的 5 分钟间隔,以评估其对检测灵敏度的影响。
- 通过统计检验手段进一步验证数据是否符合帕累托分布假设,增强模型理论基础的严谨性。
除此之外,还可探索加入季节性调整、噪声过滤或自适应阈值机制,以提高模型在复杂环境下的鲁棒性。


雷达卡


京公网安备 11010802022788号







