计算两个数据集之间差异的最佳方法?

数据挖掘 数据挖掘 数据集 数据
2022-03-09 20:23:48

我正在尝试编写一个识别 SQL 查询模式的应用程序。该程序将跟踪数据库中执行的所有查询。当它识别出数据库中有相当大的模式变化时,它会要求 DBA 调整数据库。我的追踪数据看起来像这样。

在此处输入图像描述 在此处输入图像描述

图像显示了 2 个不同月份的查询执行计数。根据图像,查询执行中有相当大的模式变化。Query2 大部分时间在第一个数据集中执行,Query3 大部分时间在第二个数据集中执行。我想数学计算这种模式差异。我能想到的一种解决方案是计算每个查询的执行计数的百分比差异并将其全部加起来。如果该值大于预定义的阈值,我可以向 DBA 发送通知。有没有更好的方法来做到这一点?任何可以应用的数据分析技术?有没有图书馆可以做到这一点?

1个回答

您尝试做的是计算两个离散概率密度函数之间的距离。计算此距离的标准方法是通过 Kullback-Leibler Divergence。它是这样定义的:

D(P||Q)=iP(i)log(P(i)Q(i))

从技术上讲,这不是数学意义上的度量,因为它不是对称的并且不遵守三角不等式。但无论如何,它是一个经常用于比较分布的“距离”。从信息论的角度来看,KL 散度(假设您使用以 2 为底的对数)表示将分布 P 编码为 Q 所需的位数。

在您的情况下,您必须对每个分布进行归一化以确保总和为 1,然后通过 KL 散度计算距离。如果您想要一个真正的指标,您可以使用 Jensen-Shannon Divergence,其定义为:

JSD(PQ)=12D(PM)+12D(QM)
M=12(P+Q)M=12(P+Q)

希望这可以帮助。