选择变化点检测算法

数据挖掘 时间序列 数据集 情绪分析
2022-03-02 00:39:21

我目前正在研究属于餐厅和食品配送领域的数据集。完成情绪分析和量化后,我现在需要选择一个变化点检测算法,并检测每个类别餐厅评论中情绪信号的变化。信号将是一个分数,它是特定时间范围内评论的正面和负面之间的差异。我考虑了 3 种积极、中性和消极的情绪,因此正在考虑使用多元时间序列。因为我手头有完整的数据集,所以我将进行离线变化点检测算法,以检测新冠病毒疫情前和疫情后评论情绪的变化。请就如何选择算法提供一些帮助。

2个回答

变化点检测(或正/负趋势检测)的问题在于它取决于许多因素,包括随时间变化的噪声和敏感性。例如,您无法在某一天的分数刚开始为负数时发送警报。您必须等待几天才能看到趋势是否真的很糟糕。因此,您必须调整模型以定义“几天”和“临界”。这就是为什么我建议通过使用通用评分系统(例如:正 +1、中性 0 和负 -1 的总和)并应用平滑函数(例如:卡尔曼滤波器,具有不同的降噪值)来可视化每个类别的趋势。通过这种方式,您应该能够检测到所需的灵敏度,以检测情况何时变得危急或好转。对于平滑函数,你可以使用 pykalman。在评估了正确的降噪和正确的天数 N 之后,您可以应用 diff 函数来测量最近 N 天过滤曲线的差异。

您还没有指定您使用的编程语言,所以我将提供不同的选项。

python 中的“破裂”包将是一个不错的选择,它允许您对数据尝试几种不同的变化点检测方法。在使用它之前,阅读这篇评论可能会有所帮助,其中进一步解释了破裂方法 - 更好地理解这些方法将有助于您选择方法。另一篇总结和解释变化点检测方法的评论论文是“ A Survey of Methods用于时间序列变化点检测”。

或者,如果你使用 R,你可以使用“changepoint”包(参考手册在这里

最后,从任务的描述来看,我相信更简单的变化点检测方法也可以工作,例如我将从尝试 CUSUM 方法开始(在 R 中可用,也集成在matlab的信号处理库中)