随着数以百万计的设备中数据的涌现,数据量正在高速增长。这带来了对逐流记录的数据流分析,处理和分析数据的日益增长的需求。
在这项工作中,对流分析进行了全面的文献综述,重点是检测异常行为。讨论了流分析的挑战和方法。示出了确定和识别异常的不同方式,并且提出了用于流数据的大量异常检测方法。此外,还介绍了用于流分析的现有软件平台和解决方案。
根据文献调查,我选择了一种进一步研究的方法,即轻型异常在线检测器(LODA)。 LODA旨在从高维数据实时检测异常。另外,它是一种自适应方法,可以在线更新模型。
LODA已在综合和真实数据集上进行了测试。这项工作显示了如何定义LODA使用的参数。我向LODA提出了一些改进想法,并表明其中三个带来了重要的好处。首先,我展示了一个简单的加法来处理特殊情况,以便可以计算所有数据点的异常得分。其次,我展示了由于缺少数据预处理而导致LODA失败的情况。我提出了用于流数据的预处理方案,并表明使用它们可以显着改善结果,并且它们仅需要一小部分数据即可确定预处理参数。第三,由于LODA仅给出异常分数,因此我建议使用阈值技术来定义异常。这项工作表明,与理论上的最佳性能相比,建议的技术效果很好。这样就可以在实际的流分析情况下使用LODA。
全球不断产生大量数据。例如,2011年仅两天就生成了1.8 zb的数据,2021年RFID标签的预期数量为2090亿,Facebook每天生成数百tb的日志和图像数据[47,71]。利用这些数据并将其转化为能够提供新的商业机会和价值的信息的需求和兴趣日益增长。因此,需要能够处理和分析大量数据的技术。
流式分析意味着实时或接近实时地处理和分析大量数据。传统的分析和机器学习方法被设计成以批处理模式运行:该模型使用有限数量的数据[58]进行批处理训练。使用训练过的模型对新数据点进行预测通常是快速的,可以应用于一批数据,也可以一次应用于一个数据点。这允许在流模式下进行预测,也就是说,数据可以不断地从不同的来源到达,并且根据训练过的模型对每个来源独立地进行预测。
如果传入的数据分布随时间变化,那么在批处理模式中学习的模型就不能保持准确。此外,还需要进行在线模型培训。这被称为在线学习或增量学习。该模型是自适应的,因为它随着数据到达是不断更新的。有时,对新批数据按一定的时间间隔学习一个新模型就足够了,但适应的速度在所有情况下都不够快,重新训练模型需要时间和空间。流处理和批处理也可以结合在一个lambda架构中,该架构可用于带有延迟地回答较大的历史数据的查询,以及速度更快地回答较小数量最近数据的查询。表1.1显示了批量和在线模型学习和应用的用例。
流分析有很多应用。恶意的网络使用可以通过反欺诈来识别和阻止[12,61]。社交网络分析从用户在社交媒体中的活动中识别趋势[65],可以识别流行的新的主题[73]。能源使用可以通过分析来为家庭节省能源成本[65],或者能源供应商可以调整他们的能源生产[61],或者能源公司可以决定何时出售或购买能源[56]。这同样适用于水和天然气消耗[56]。
流数据的处理和分析需要合适的平台和良好的方法。该平台应该支持可扩展的、通常是分布式的计算和处理来自不同来源的数据,以及高速传输和存储数据。这些方法应该将系统中的数据转换为有意义的信息和操作。关于流数据处理和分析有两个主要问题:空间和时间。当数据量很大时,它限制了存储数据的可能性。通常不可能存储所有数据,只能存储一个相对较小的子集。
流数据的分析应该是接近实时的,在单个事件上花费的时间应该是最少的。这些方法需要适应数据的高吞吐量,以便在数据到达时保持相同的更新速度,否则就会形成越来越多的数据积压,等待处理和分析。这通常意味着只能使用主存,磁盘访问速度太慢。这些方法需要一次遍历,也就是说,它们只允许一次查看数据中的每个元素,因为数据在处理后不存储在内存中[38,61]。
在流媒体分析中,常常需要在时间、空间和准确性之间进行权衡[61]。使用更多的空间通常允许更快的处理。有时可能需要较高的精度和精确的算法,但通常可以放宽要求,使用近似算法来获得更少的空间和处理时间[38,57,65]。降低准确性的方法有两种:近似法和随机化法。近似是指有一个小的误差范围,随机是指结果是不正确的[57]的一个小概率。这些可以结合起来得到一个算法,提供一个有小错误的结果的高概率。Raghavan[87]比较了流式数据上精确算法和近似算法的内存使用情况。
Heintz等人[65]讨论了系统在不同的情况下可能有不同的需求。在某些情况下,查询可能需要快速处理,而在另一些情况下,较慢的处理就足够了。这同样适用于准确性。有时有大量数据,有时只有少量数据。计算应该以集中方式进行还是以非集中方式进行,这取决于条件。由于条件可能随着时间和情况的变化而变化,因此设计系统并不容易。有些用例需要历史数据,而有些则只需要最近的数据。图1.1总结了流分析方法的不同选项。
Gaber等人的[55]和Gama等人的[58]指出,实时模型仍然缺乏良好的评价标准。例如,交叉验证对于流数据是不可行的,因为要求每个元素只被看到一次。这也会影响参数调优,因为不可能使用交叉验证或类似的技术来选择最佳参数[75]。
Krempl等人[75]认为目前还没有很好的流数据预处理方法。例如,由于数据不断地到达,零均值单位方差标准化是困难的。他们还指出流数据的缺失值处理缺乏。一些数据标签可能也会有延迟,因此不能用于正确的预测,或者最新数据没有用于预测。
设备生成的流数据通常构造一个或多个时间序列。时间序列数据包含一个时间戳和一个值,该值的时间行为值得关注。时间序列分析可以用于实例跟踪变量及其随时间的变化。时间序列分析的一个应用是异常检测,检测意外或非典型行为。检测异常可以触发警报或某些动作。在时间序列数据上以流模式执行的异常检测允许对变化和奇怪的行为做出快速反应。
异常检测的应用领域包括信用卡使用或保险中的欺诈检测、入侵检测或监视图像中的新奇检测等[45,68]。异常检测还可以从环境传感器数据或飞行高度或角度的异常变化来识别洪水[64]。智能家居或医疗保健领域也有应用,例如识别一个人在睡觉前打开了洗澡水但没有关掉,或检测疾病或其他医疗条件[64]。在金融领域,股价或其他市场事件的异常可以表明买入或卖出的机会[68]。其中一些需要非常快速的反应,因此需要实时异常检测方法。
除了包含异常值或模式外,数据分布还可能随时间变化。这就是所谓的概念漂移[60]。为了保持精确的模型,检测和适应概念漂移是很重要的。Gama等人提出了概念漂移发生的一些应用。第一个是预测工业锅炉中的质量流量。预测改善了锅炉的运行和控制。燃料供给是手动的,因此不稳定,并可能导致概念漂移。另一个例子是,当考虑到概念漂移而不是使用一个固定的模型时,风能的生产和使用可以更好地预测。推荐系统也应该考虑到概念漂移。用户的兴趣可能随着时间的推移而改变,但也取决于上下文或具有季节性的模式。这些方法应该适应这种转变。自适应方法在自动驾驶汽车中也很有用,因为概念漂移可以反映环境的变化。
本文讨论了流媒体分析的挑战和方法。一个关于流分析的文献综述被提出,重点是检测异常行为,并提出了商业上可用的流分析软件解决方案。给出了一种实时异常检测方法的合成异常检测数据和实际异常检测数据的测试结果。论文结构如下。第2节介绍了流分析、时间序列分析和异常检测的背景。在第3节中,给出了流异常检测的方法和可用的商业解决方案。此外,选择的方法进行进一步的研究在第3节中进行了更详细的讨论。在第4节中,给出了用于实验的合成数据集和真实数据集。第5节讨论了实验及其结果,第6节通过讨论其影响和未来方向对工作进行了总结。
流媒体的重要性在过去几年随着数据量和新应用领域的指数级增长而不断提高。然而,流媒体分析并不是一个新领域,它已经存在了几十年。例如,Page[83]在1954年提出了一种检测分布变化的方法,Flajolet和Martin[53]在1985年提出了一种对数据流的不同元素计数近似的方法,Alon、Matias和Szegedy[36]提出了估计数据流频率矩的算法。近年来,基于不同目的和应用的数据流算法得到了发展。数据流与批处理模式的数据在几个方面有所不同。本节介绍流数据的一些关键特性和对其执行的分析。
Babcock等人提出了数据流管理系统(DSMS)的概念,而不是传统的数据库管理系统(DBMS)。DSMS是一个系统,它尝试处理与数据管理和查询相关的流数据的特定需求。Babcock等人的[38]和Golab等人[61]指出,传统的数据库管理系统不适合流数据,因为它们不是为快速和连续到达的数据设计的,也不支持连续查询。连续查询是在新元素从数据中到达时连续计算的查询[38,61]。与之相反的是在给定时间点从数据库[38]快照计算的一次性查询。
查询中的另一个区别可以在预定义查询和即席查询[38]之间进行。可以对预定义的查询进行优化,并且预先知道应该存储哪些数据属性。另一方面,即席查询在处理数据流开始时是不知道的,对于流数据来说更加困难,因为它们可能查阅已经被丢弃的历史数据。或许回答基于流数据的即席查询是不可能的。
在流分析中,最近发生的事件通常比很久以前发生的事件更有趣。在方法中有两种常用的方法来考虑这一点:窗口和加权。
在窗口技术中,在每个时间点只检查随后的一组样本,即一个窗口。窗口会随着时间的推移而变化,包括更近期的数据,忽视更早的数据。窗口技术包括:
选择窗口的大小可能很困难,太小的窗口很容易捕获噪声,但是太大的窗口不考虑变化。在某些情况下,可以使用自适应大小的窗口。较宽的窗口显示较长的趋势,而较窄的窗口显示当前状态。这些可以结合起来,以获得最佳的结果[59]。
强调最近数据的另一种可能性是对数据使用加权,使旧的数据点具有较小的权重[58]。这使最近的数据具有最大的影响,但也考虑到较旧的数据,以减少短期变化的影响。
加权可以使用衰落因子来实现。然后,每个数据点的影响随着每个新数据点的到来而减小。[56]加权也可以在一个滑动窗口中执行,结合了两种方法[56]。在遗忘方面,窗表现为突发性遗忘,加权则表现为渐进性遗忘。
时间序列表示随时间的连续测量,它是按时间顺序排列的数据点的集合。时间序列中的数据点被视为整个时间序列的一部分,它们通常依赖于以前的值,因此不能将它们视为单独的数据点[54]。数据流形成时间序列,因此时间序列分析通常与流分析相关,尽管数据点的确切顺序或时间戳并不总是重要的。本节讨论时间序列的分析。
时间序列可以有一个描述序列走向的趋势。这种趋势可以用平均数来描述。一个流行的选择是移动平均线,它表示前n个点的平均值。变化有累积移动平均线、加权移动平均线和指数移动平均线。时间序列也可以具有描述季节性的季节性,如每周或每天,时间序列的模式。季节性可以通过序列的自相关来发现。[56]
时间序列的典型分析任务是时间序列的分类和聚类,发现相似的时间序列,预测未来值,检测时间序列中的基序和异常。Motif的发现意味着从时间序列[51]中识别出重复的模式。这些图案可以有不同的长度,也可以相互重叠。
预测未来时间点的值是时间序列分析中广泛研究的领域。自回归模型通常用于预测。最简单的自回归模型可以定义为, z t = α 1 + α 2 z t − 1 + ϵ t z_t= \alpha_1+\alpha_2z_{t-1}+\epsilon_t zt=α1+α2zt−1+ϵt。其中 z t z_t zt是 t t t时的数据点,α是系数, ϵ t \epsilon_t ϵt是 t t t时的误差项[56]。另一种流行的方法是卡尔曼滤波器,它实现了隐式的一阶马尔可夫模型[56]。预测的子类别是递归预测,其中预测值用作模型输入。如果不能立即获得真实值,因此无法将其用于预测下一个值,则可能会发生这种情况。但是,由于预测的不确定性比观察到的数据更多,这使任务更加困难[51]。
要找到相似的时间序列,需要定义两个时间序列之间的相似性或距离度量。最简单的是欧几里得距离
其中和是长度为的两个时间序列。但是,此度量的问题在于时间序列的长度不一定总是相同,它们可能有滞后,或者幅度,周期或标度可能不同。因此,需要更多可调整的方法。动态时间规整使用动态规划来找到两个时间序列之间的最佳对齐方式,并且可以在对齐的序列上测量距离。 [56]
在流分析中,数据量通常很高。通常不可能存储所有数据,但是只能存储相对较小的数据子集。可以通过仅存储样本子集或执行降维或构造某种类型的数据摘要来节省空间,例如使用平均值和方差。本节介绍几种执行数据缩减的方法。
一种方法是仅存储到达的对象的子集或样本,通常仅保留最新对象的权重或赋予它们更多权重[38]。采样的挑战是保持数据的代表性样本。尽管已经解决了该问题[39],但对于某些应用程序,例如时间序列数据的异常检测,由于识别异常取决于某些(先前的)数据点,因此采样是不合适的[55,57]。与采样类似的技术是load shedding。在load shedding过程中,不再随机选择一组数据点,而是删除一系列数据点[55]。窗口技术也只存储示例的一个子集。采样可以与加权相结合,使较旧的数据点在抽样中出现的概率较低。
降维技术也可以用来表示数据。一种方法是草绘。草绘意味着构造一个数据流的摘要,该摘要比数据本身占用的空间少,使用该摘要,可以近似地回答典型的查询[38]。草图绘制使用特征的随机投影[57]。另一种方法是小波,将数据流投影到基本矢量的正交集合上[38]。
直方图通过将数据分成不同的部分来总结数据。还可以聚合数据,存储数据的总和或方差,而不是原始值[55]。聚合还可以与采样[38]相结合。可以使用哈希,即将数据从任意大小的表示映射到固定大小的表示,通常结合一些聚合或抽样[61]。
(待更新…)