精华内容
下载资源
问答
  • 时间序列数据
    千次阅读
    2021-08-11 19:14:18

    前言

    由于研究方向是时间序列预测,对时间序列数据也颇感兴趣,特此简单记录学习过程。

    参考文章:

    1. 时间序列数据分析101 - (1) 一份全面详尽的时间序列入门教程

    1. 引言

    1.1 时间序列

    • 定义:按照一定的时间间隔排列的一组数据,其时间间隔可以是任意的时间单位,如小时、日、周月等。
      比如,每天某产品的用户数量,每个月的销售额,这些数据形成了以一定时间间隔的数据。
    • 时间序列分析:指从按时间排序的数据点中抽取有价值的总结和统计信息的行为。
      时间序列分析既包含了对过去数据的诊断,也包括对未来数据的预测

    时间序列可以分为平稳序列和非平稳序列两大类

    • 平稳序列
      序列中的各观察值基本上在某个固定的水平上波动,虽然在不同的时间段波动的程度不同,但并不存在某种规律,波动可以看成是随机的
    • 非平稳序列
      包含趋势、季节性或周期性的序列,它可能只含有其中一种成分,也可能含有几种成分。

    1.2 应用场景

    • 医学
    • 天气
    • 经济学
    • 天文学
    • 海洋学

    落地场景:预测、异常检测和动态时间规整等

    1.3 研究方法的递进

    • 统计学方法 :
    • 传统时序方法:AR、ARMA、ARIMA
    • 机器学习模型:ANN、XGBoost、RF
    • 深度学习模型:LSTM、Transformer、Bert

    时间序列分析的主要任务之一是要建立时间序列适合的模型,通过建立模型来描述现象、事物随时间推移的变化规律性;并常常借助于模型进行预测。

    2. 时间序列数据

    2.1 数据的获取

    • 开源数据仓库

    开源时间序列数据集

      - 音乐库数据
      - 服务监控数据集
      - 国家经济数据
      - 政府开放数据
      - 数据竞赛网站
    
    • 从非显式数据中构造时间特征,创造时间序列数据

    2.2 数据时间轴的确定

    有时候在数据存储时并没有一列显式存在的时间列,这时候就需要我们去人为寻找和构造。

    • 以事件记录的时间构造时间列
    • 以另一个和时间相关的元素构造时间列,例如在一个数据集中行驶距离和时间是正相关的,此时就可以以距离来构造时间列
    • 以物理轨迹的顺序作为时间列,例如在医学,天气等领域有些数据是以图片的形式存储的,此时可以从图像中提取时间列

    2.3 时间序列遇到问题

    • 时间值是在哪个过程产生的,以及何时产生的。通常事件发生的时间和事件被记录的时间往往是不一致的。
    • 处理历史遗留数据,并没有清洗记录的文档说明,也无法找到处理数据流的人来确认时间戳产生的方式。
    • 时间分辨率,这对于后续特征构造和模型有效性都有很大的影响。
    • 数据缺失值处理以及可靠性
    更多相关内容
  • 时间序列界的“Imagnet”,发文章必跑数据集。大约有128个数据集,如ECG5000,GunPoint,coffee等数据集 相比于2015版有了大量更新,2018年秋季:该数据资源的早期工作由NSF职业奖0237918资助,并通过NSF IIS-...
  • 时间序列数据的预处理

    千次阅读 2022-02-11 10:46:39
    时间序列数据随处可见,要进行时间序列分析,我们必须先对数据进行预处理。 时间序列预处理技术对数据建模的准确性有重大影响。 在本文中,我们将主要讨论以下几点: 时间序列数据的定义及其重要性。 时间序列数据...

    时间序列数据随处可见,要进行时间序列分析,我们必须先对数据进行预处理。 时间序列预处理技术对数据建模的准确性有重大影响。

    在本文中,我们将主要讨论以下几点:

    • 时间序列数据的定义及其重要性。
    • 时间序列数据的预处理步骤。
    • 构建时间序列数据,查找缺失值,对特征进行去噪,并查找数据集中存在的异常值。

    首先,让我们先了解时间序列的定义:

    时间序列是在特定时间间隔内记录的一系列均匀分布的观测值。

    时间序列的一个例子是黄金价格。在这种情况下,我们的观察是在固定时间间隔后一段时间内收集的黄金价格。时间单位可以是分钟、小时、天、年等。但是任何两个连续样本之间的时间差是相同的。

    在本文中,我们将看到在深入研究数据建模部分之前应执行的常见时间序列预处理步骤和与时间序列数据相关的常见问题。

    时间序列数据预处理

    时间序列数据包含大量信息,但通常是不可见的。 与时间序列相关的常见问题是无序时间戳、缺失值(或时间戳)、异常值和数据中的噪声。 在所有提到的问题中,处理缺失值是最困难的一个,因为传统的插补(一种通过替换缺失值来保留大部分信息来处理缺失数据的技术)方法在处理时间序列数据时不适用。 为了分析这个预处理的实时分析,我们将使用 Kaggle 的 Air Passenger 数据集。

    时间序列数据通常以非结构化格式存在,即时间戳可能混合在一起并且没有正确排序。 另外在大多数情况下,日期时间列具有默认的字符串数据类型,在对其应用任何操作之前,必须先将数据时间列转换为日期时间数据类型。 让我们将其实现到我们的数据集中:

    import pandas as pd
    
    passenger = pd.read_csv('AirPassengers.csv')
    passenger['Date'] = pd.to_datetime(passenger['Date']) 
    passenger.sort_values(by=['Date'], inplace=True, ascending=True)
    
    

    时间序列中的缺失值

    处理时间序列数据中的缺失值是一项具有挑战性的任务。 传统的插补技术不适用于时间序列数据,因为接收值的顺序很重要。 为了解决这个问题,我们有以下插值方法:

    插值是一种常用的时间序列缺失值插补技术。 它有助于使用周围的两个已知数据点估计丢失的数据点。 这种方法简单且最直观。 处理时序数据时可以使用以下的方法:

    • 基于时间的插值
    • 样条插值
    • 线性插值

    让我们看看我们的数据在插补之前的样子:

    from matplotlib.pyplot import figure
    import matplotlib.pyplot as plt
    
    figure(figsize=(12, 5), dpi=80, linewidth=10)
    plt.plot(passenger['Date'], passenger['Passengers'])
    plt.title('Air Passengers Raw Data with Missing Values')
    plt.xlabel('Years', fontsize=14)
    plt.ylabel('Number of Passengers', fontsize=14)
    plt.show()
    

    让我们看看以上三个方法的结果:

    passenger[‘Linear’] = passenger[‘Passengers’].interpolate(method=’linear’)
    passenger[‘Spline order 3’] = passenger[‘Passengers’].interpolate(method=’spline’, order=3)
    passenger[‘Time’] = passenger[‘Passengers’].interpolate(method=’time’)
    
    methods = ['Linear', 'Spline order 3', 'Time']
    
    from matplotlib.pyplot import figure
    import matplotlib.pyplot as plt
    for method in methods:
        figure(figsize=(12, 4), dpi=80, linewidth=10)
        plt.plot(passenger["Date"], passenger[method])
        plt.title('Air Passengers Imputation using: ' + types)
        plt.xlabel("Years", fontsize=14)
        plt.ylabel("Number of Passengers", fontsize=14)
        plt.show()
    

    所有的方法都给出了还不错的结果。当缺失值窗口(缺失数据的宽度)很小时,这些方法更有意义。但是如果丢失了几个连续的值,这些方法就更难估计它们。

    时间序列去噪

    时间序列中的噪声元素可能会导致严重问题,所以一般情况下在构建任何模型之前都会有去除噪声的操作。 最小化噪声的过程称为去噪。 以下是一些通常用于从时间序列中去除噪声的方法:

    滚动平均值

    滚动平均值是先前观察窗口的平均值,其中窗口是来自时间序列数据的一系列值。 为每个有序窗口计算平均值。 这可以极大地帮助最小化时间序列数据中的噪声。

    让我们在谷歌股票价格上应用滚动平均值:

    rolling_google = google_stock_price['Open'].rolling(20).mean()
    plt.plot(google_stock_price['Date'], google_stock_price['Open'])
    plt.plot(google_stock_price['Date'], rolling_google)
    plt.xlabel('Date')
    plt.ylabel('Stock Price')
    plt.legend(['Open','Rolling Mean'])
    plt.show()
    

    傅里叶变换

    傅里叶变换可以通过将时间序列数据转换到频域来帮助去除噪声,我们可以过滤掉噪声频率。然后应用傅里叶反变换得到滤波后的时间序列。我们用傅里叶变换来计算谷歌股票价格。

    denoised_google_stock_price = fft_denoiser(value, 0.001, True)
    plt.plot(time, google_stock['Open'][0:300])
    plt.plot(time, denoised_google_stock_price)
    plt.xlabel('Date', fontsize = 13)
    plt.ylabel('Stock Price', fontsize = 13)
    plt.legend([‘Open’,’Denoised: 0.001'])
    plt.show()
    

    时间序列中的离群值检测

    时间序列中的离群值是指趋势线的突然高峰或下降。 导致离群值可能有多种因素。 让我们看一下检测离群值的可用方法:

    基于滚动统计的方法

    这种方法最直观,适用于几乎所有类型的时间序列。 在这种方法中,上限和下限是根据特定的统计量度创建的,例如均值和标准差、Z 和 T 分数以及分布的百分位数。 例如,我们可以将上限和下限定义为:

    取整个序列的均值和标准差是不可取的,因为在这种情况下,边界将是静态的。边界应该在滚动窗口的基础上创建,就像考虑一组连续的观察来创建边界,然后转移到另一个窗口。该方法是一种高效、简单的离群点检测方法。

    孤立森林

    顾名思义,孤立森林是一种基于决策树的异常检测机器学习算法。 它通过使用决策树的分区隔离给定特征集上的数据点来工作。 换句话说,它从数据集中取出一个样本,并在该样本上构建树,直到每个点都被隔离。 为了隔离数据点,通过选择该特征的最大值和最小值之间的分割来随机进行分区,直到每个点都被隔离。 特征的随机分区将为异常数据点在树中创建更短的路径,从而将它们与其余数据区分开来。

    K-means 聚类

    K-means 聚类是一种无监督机器学习算法,经常用于检测时间序列数据中的异常值。 该算法查看数据集中的数据点,并将相似的数据点分组为 K 个聚类。 通过测量数据点到其最近质心的距离来区分异常。 如果距离大于某个阈值,则将该数据点标记为异常。 K-Means 算法使用欧几里得距离进行比较。

    可能的面试问题

    如果一个人在简历中写了一个关于时间序列的项目,那么面试官可以从这个主题中提出这些可能的问题:

    • 预处理时间序列数据的方法有哪些,与标准插补方法有何不同?
    • 时间序列窗口是什么意思?
    • 你听说过孤立森林吗? 如果是,那么你能解释一下它是如何工作的吗?
    • 什么是傅立叶变换,我们为什么需要它?
    • 填充时间序列数据中缺失值的不同方法是什么?

    总结

    在本文中,我们研究了一些常见的时间序列数据预处理技术。 我们从排序时间序列观察开始; 然后研究了各种缺失值插补技术。 因为我们处理的是一组有序的观察结果,所以时间序列插补与传统插补技术不同。此外,还将一些噪声去除技术应用于谷歌股票价格数据集,最后讨论了一些时间序列的异常值检测方法。 使用所有这些提到的预处理步骤可确保高质量数据,为构建复杂模型做好准备。

    https://www.overfit.cn/post/9274a9c482b0431a802f5318c15cd76d

    作者:Shashank Gupta

    展开全文
  • 【时间序列】时间序列数据的缺失填补方法总结

    万次阅读 多人点赞 2021-05-21 00:16:01
    在前几次分享中我们知道,很多时序算法都依赖完整的时序数据进行建模,许多业务也需要数据保持完整性,以更好地进行可视化与分析。然而在真实场景中,由于采集能力或网络传输的原因,时序数据常常会有缺...

    在前几次分享中我们知道,很多时序算法都依赖完整的时序数据进行建模,许多业务也需要数据保持完整性,以更好地进行可视化与分析。然而在真实场景中,由于采集能力或网络传输的原因,时序数据常常会有缺失、断点的情况。如何处理这些有缺失的时间序列呢?

    图 | 两种不同类型的时序数据缺失

    有关时间序列的补缺工作大体上分为:删除填充这两类。删除所考虑的不是进行填补,而是将缺失值作为特征之一输入到时序模型,例如异常检测,行为分析等;而填充是找到时序变化的规律,将值补充进去,分为统计方式填充机器学习填充两种方式。

    本文就上面时序补缺的两大类方向整理相关工作,供大家阅读。

    01

    缺失数据删除

    最直接的缺失数据处理的方式,就是直接忽略这些缺失值,简称为直接删除法,该方法常用在离散型的时间序列处理中,比如用户购物行为序列,事件序列等,这类序列数据没有固定的采集间隔,一般会把数据点之间的间隔时间作为特征进行分析。

    图 | 融入时间间隔信息的LSTM: TLSTM[1] (KDD 2017)

    比如上图所展示了TLSTM模型,来自KDD 2017年的工作,其将数据之间的间隔作为特征进行输入。TLSTM中专门设计了一种新的门结构对这种间隔信息进行加权聚合。

    当然,该类方法可能会舍弃数据中的一些重要信息,在监控/IoT/风控等这种稳定性要求高的业务中,不能适用,因为每个数据点所代表的信息都很重要。

    02

    缺失数据填补

    将缺失的数据删除一般只适用于少部分对数据完整度要求不高的场景,大部分场景(例如监控、安全等)需要我们尽可能将缺失的数据填充。数据填充需要我们找到时间序列一定的变化规律,从而将值补充进去。这里与时间序列的预测有一点相似,不同的是,时间序列预测中我们看不到所要预测点后面的数据,而时序补缺中,我们可以分析缺失点前后的数据,从而更精准的对缺失数据进行填充。

    数据填充基本分为统计方式填充机器学习填充两种方式。

    统计方式填充

    a

    基于统计学的填充方法是时间序列补缺中常用的方法,其计算复杂度低,易操作,在许多精度要求不高的业务场景中比较适用。

    就近填充

    就近填充包括:前推法LOCF,用缺失之前的最后一次观测值填补;与后推法NOCB, 使用缺失值后面的观测值进行填补。这个方法是时序当中最基本的方法。

    特征值填充

    特征值填充包括:均值、中值、常用值等。这类方法计算快,进行简单的统计即可实现数据的填补。其一般直接忽略数据的时序信息假定时序数据里面基本没有很强趋势性。

    线性插值

    这个方法历史悠久。其假定时序之间变动有很强的趋势,通过拟合数据的趋势变化,进而进行填补。早期天文学缺失数据都用这个方法。线性插补的方法包括一元线性回归,多元线性回归,岭回归等,有关方法可以参考之前的文章:《TS技术课堂 | 时间序列回归》

    季节性+线性插值

    经济数据或者季节波动数据,常常不符合简单的线性变化强假设。对这样的数据进行补缺,一般的线性插值法效果比较差。这里需要模型同时捕捉时序数据的季节性和总体趋势性,进而对数据的演变模式更好的拟合,实现缺失值数据的补充。

    除了这些统计方法, 一般来说每个领域里面缺失值的填补还要借鉴专业知识来判断。比如以国家军费缺失数据为例,如果你知道因为战乱带来的缺失。那么战时数据比和平年代数据就更合适,很简单就近填补。

    机器学习填充

    b

    随着计算能力的大幅提升,现今许多的场景下的时间序列补缺都采用了机器学习的方式,常见的方法包括基于最近邻方法(KNN),循环神经网络(RNN),随机森林和矩阵分解的缺失值填充算法。

    有监督数据填充

    这类的方法的本质是以缺失点附近的数据作为特征,预测缺失点的数据,通过海量的历史数据中挖掘相似的变化模型,从而进行更精准的数据填充。包括:

    • KNN:找到缺失点附近数据最相似的若干个历史数据点,对缺失值进行填补

    • RNN:通过循环神经网络拟合时序数据的变化趋势,对缺失数据进行填补。这里一般多使用双向RNN

    • 随机森林:这里以缺失点附近的数据作为特征,缺失数据作为要预测的值,在海量数据中训练一个高拟合随机树,对缺失点进行预测。

    • 时序生成:近些年随着生成对抗网络(GAN)的兴起,许多方法开始尝试做时间序列的生成,通过生成模型捕捉时间序列的分布特征,对时序数据进行再生成,进而填补数据。

    多值插补

    多值插补是近些年兴起的时序数据补缺方法,其主要应用于包括时空数据在内的多维时间序列问题。其补全数据不仅只关注自身的时序演变,同时关注相邻时序,特别是有影响关系的时序指标之间的影响。例如在交通中,某一路段的交通量与其上游、下游路段的交通量直接相关。这类方法依赖于缺失数据不同属性间关系,寻找最类似样本,对于突发情况下的数据丢失,异常数据点(离群点)的补全有更好的适应性。

    • 矩阵分解:不同的时间序列之间往往相互关联,通过矩阵分解等方法学习时序矩阵的整体特征,对时间特性矩阵进行低秩逼近,从而修补缺失数据。该类方法计算复杂度低 , 可以处理较大规模的数据。

    图 | 时序正则化矩阵分解: TRMF[2](NeurIPS 2016)

    • 组合分析:不同学科的数据补缺可能都有默认或者建议的方法,比如社会学或者人口学对于无应答的问卷数据,就是假定用类似用户数据进行填补。很多的场景下的数据填补需要给出填补数据的合理性。面对这样的情况,矩阵分解这类方法难以给出直观的解释。因此,近年来一些方法考虑分析多源时序数据实体之间的外在属性,构建可解释的关联关系,组合多源时序及其关系进行数据的填补。

    图 | 基于社群关系的电力系统时间序列补缺[3](WWW 2019)

    上图所示的WWW 2019的工作,其基于用户的邻里关系,关联不同用户的用电数据,对缺失的数据进行填补。

    03

    开源工具

    开源社区有许多优秀的项目可以帮助我们对缺失数据进行补全。这里简单为大家列举若干热门的项目:

    • https://sklearn.org/modules/generated/sklearn.preprocessing.Imputer.html

    Sklearn实现了多种基于统计方法的缺失数据补全算法

    • https://github.com/amices/mice

    该仓库实现了基于链式方程法的多维时序补缺算法

    • https://github.com/stekhoven/missForest

    该仓库实现了基于随机森林的一种非参数混合类型补缺算法

    • https://github.com/cran/softImpute

    该仓库实现了通过迭代软阈值SVD的完成矩阵进行补缺的算法

    • https://github.com/zjunet/STI

    该仓库实现了基于社群关系进行多源时间序列补缺的算法

    • https://github.com/xinychen/transdim

    该仓库实现了当前主流的基于矩阵分解的时间序列缺失值填充算法和预测算法

    • ...

    04

    总结

    时间序列数据的补缺有很多不同的方法。在进行补缺之前,第一步需要我们对缺失的性质做出判断:如果是Missing at Random还是Missing Not at Random,一般前者删除,后者填充。但是填充不一定能带来更好结果,要先自己根据缺失比例和原因进行判断。

    再者,如果你对数据生成机制很熟悉的情况下,可能一些简单方法就可以实现很好的数据补缺。对于本身纯粹依赖算法,不能给出解释机制的时间序列补缺是不能完全信服的,因为缺失本身表明这些样本信息不足。这里常常需要增加专业知识的判断,因为专业知识判断就相当于额外增补信息。

    参考

    [1] Inci M. Baytas, Cao Xiao, Xi Zhang, Fei Wang, Anil K. Jain, and Jiayu Zhou. Patient Subtyping via Time-Aware LSTM Networks. KDD 2017.

    [2] Yu, H. F., Rao, N., & Dhillon, I. S.Temporal regularized matrix factorization for high-dimensional time series prediction. NeurIPS 2016.

    [3] Zongtao, L; Yang, Y; Wei, H; Zhongyi, T; Ning, L and Fei, W. How Do Your Neighbors Disclose Your Information: Social-Aware Time Series Imputation. WWW 2019

    END

    公众号:AI蜗牛车

    保持谦逊、保持自律、保持进步

    个人微信

    备注:昵称+学校/公司+方向

    如果没有备注不拉群!

    拉你进AI蜗牛车交流群

    展开全文
  • 时间序列数据处理2——时间序列聚类算法

    千次阅读 多人点赞 2021-07-02 11:40:59
     本文主要实现对时间序列聚类算法研究和相关...时间序列数据是实值型的序列数据,具有数据量大、数据维度高以及数据是不断更新的等特点。 时间序列聚类方法的分类: 什么是聚类?聚类是一种无监督学习方法,聚类就..



     本文主要实现对时间序列聚类算法研究和相关搬运工作

    1. 时间序列(Time Series,TS)聚类概述

    时间序列:
    时间序列是按照时间排序的一组随机变量,它通常是在相等间隔的时间段内,依照给定的采样率,对某种潜在过程进行观测的结果。是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列,其中隐藏着一些过去与未来的关系。
    时间序列分析试图通过研究过去来预测未来。
    时间序列数据是实值型的序列数据,具有数据量大、数据维度高以及数据是不断更新的等特点,高度异质性,即包含噪声、缺失值、异常值,长度、采样率、变化速率不一,不能简单地视为高维向量,传统的基于欧式空间的聚类算法不能被直接利用。。

    时间序列聚类方法的分类:
    什么是聚类?聚类是一种无监督学习方法,聚类就是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使类内差异最小,类间差异最大。其目的是根据某种相似度度量对数据集进行划分,将没有类别的数据样本划分成若干个不同的子集,这样的一个子集称为簇(cluster),聚类使得同一个簇中的数据对象彼此相似,不同簇中的数据对象彼此不同,即通常所说的“物以类聚”。
    传统的聚类方法针对静态数据,所谓静态数据就是其特征不随时间变化。
    由于时间序列的特征包含随时间变化的值,所以不是静态数据。
    对于时间序列的聚类来说,有两种思路

    • 一种是修改现有的聚类方法以适用于时间序列
    • 一种是将时间序列转换为静态数据,然后在使用现有的聚类方法

    前一种思路直接作用于原始数据,称为基于原始数据的方法,难点在于要找到适用于时间序列的距离/相似性度量。
    第二种思路首先将原始的时间序列数据转换为低维的特征向量或若干模型参数,称为基于特征的或基于模型的方法。

    基于模型的方法认为相似的时间序列应该产生相似的模型,所以通过比较模型之间的相似性可以达到时间序列聚类的目的。困难在与模型选择和参数确定两个问题。常用的模型:

    • ARMA模型
    • HMM模型
    • 马尔科夫链

    基于特征提取的聚类主要应用于高维时间序列,特别是高频金融时间序列,经过特征提取后可有效降维。针对时间序列的数学特性。对时间序列进行特征提取,用提取的特征项对时间序列进行时间序列的重新描述,然后对重新描述的时间序列聚类。

    现有的聚类方法大致可以分为以下三类:

    1. 基于统计的聚类
      这类方法从时序数据中抽取统计特征,如平均值、方差、倾斜度,以及一些高阶特征等,如ARIMA模型的系数、分形度量(fractal measures)等。或是划分窗口,在每个窗口内计算这些统计特征,再进行汇总。

    2. 基于形状的聚类
      许多时序数据往往具有相同的变化模式(如上升、下降、上升等),因此可以根据这些时序数据的形状相似性将变化模式相似的序列聚在同一个类,可以忽略数据在整幅、时间尺度等的差异。
      一些人工定义的距离(如DTW)具有尺度和平移不变性,因此被广泛用于基于形状的聚类。由于人工定义的距离是数据无关的,方便利用到各种领域的数据上,一个研究方向是定义新的距离度量,然后结合一个现成的聚类算法(k-means或层次化聚类等)。

      这类方法中最先进的是[1], 该方法利用现有的距离度量的特性(scale-, translate-, and shift-invariant),提出了一种计算聚类中心的算法。

      现有方法主要有两方面的缺点:
      (1)时间复杂度高;
      (2)易受到异常值、噪声的干扰

      另一类是基于shapelets的方法[2,3],shapelets即一些短的序列,这些序列能够体现出整条序列的局部变化模式。

      基于形状的聚类方法基本都有开源实现,python包tslearn中基本都包含了。

    3. 基于深度学习的聚类
      该类方法主要基于autoencoder模型将时序数据转换为低维的隐空间,现有的变分自编码器(variational autoencoder)等虽然能够在一定程度上容忍噪声、异常值等。但目前存在两方面的不足:

      缺乏一种通用的方法来捕获时序数据的特性,从而得到有效的隐空间。
      在得到的隐空间中需要一种合适的相似性度量考虑时间上的特性。
      目前最先进的方法是[4],该方法同时训练一个autoencoder和k-mean(基于KL散度的loss)。autoencoder模型中先用1D卷积,然后接一个双向的LSTM,因此考虑了时序数据的局部和时间上的特征,但这也是时序数据常用的处理套路。

      目前基于静态数据(向量数据)的聚类算法也有一定的发展,主要可分为以下几类:

      (1)联合优化stacked autoencoder和k-means目标[5-7]。其中k-mean目标是基于KL散度计算的。(论文[6]和[7]貌似发生了撞车 )

      (2)将变分自编码器(VAE)和高斯混合模型(K个聚类对应K个高斯分量)结合[8]。

      (3) 同时训练K个autoencoders,每条数据根据哪个autoencoder得到的重建误差最小,该数据就属于哪个类[9,10]。(论文[9]和[10]貌似也发生了撞车 )

      总结:基于深度学习的时序数据聚类还有较大的发展空间,目前基于静态数据的方法不能很好的考虑到时间序列在时间上的平移、伸缩等特性。
      更多信息见参考资料6.

    2. TS聚类应用

    如果关注不同序列在统计特性上的差异,那么可以提取时序的统计特征,基于提取的统计等特征进行计算欧式距离的KMeans的聚类,如果关注形状的相似,那么可以使用执行SBD计算距离的k-shape聚类。另外,如果想要捕捉时序的动态特性,也是可以使用深度学习的seq2seq对隐式向量进行聚类。

    聚类的步骤:

    1. 数据简化
    2. 两个时间序列相似性的度量
    3. 时间序列聚类的通用算法
    4. 评估聚类结果的标准

    2.1 数据简化

    • DFT 离散傅里叶变换
    • DWT 离散小波变换
    • SVD 奇异值分解
    • PLA 分段线性估计
    • PAA 分段聚合近似
    • SAX 符号化聚合近似

    2.2 相似性/距离度量

    • 欧氏距离、Minkovski距离
    • Pearson相关系数
    • DTW(Dynamic time warping)
      在这里插入图片描述

    2.3 聚类方法

    常用于时间序列的聚类算法可以划分为如下几类:

    • 距离聚类 例如k-means算法:是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚类中的一个点,该算法只能处理数值型数据
    • 层次聚类 例如CRUE算法:采用抽样技术先对数据集D随机抽取样本,再采用分区技术对样本进行分区,然后对每个分区局部聚类,最后对局部聚类进行全局聚类
    • 基于模型的方法 主要是指基于概率模型的方法和基于神经网络模型的方法,例如SOM神经网络

    2.4 评估聚类结果的标准

    • 有ground truth 将聚类结果与ground truth比较
      Rand Index
      Mutual Information
      Cluster Similarity Measure (CSM)
      Cluster purity
      Jaccard Score
      ……
    • 无ground truth 用于比较不同聚类方法得到的结果
      SSE(均方误差):对每个时间序列来说,就是到最近的集群的距离
      Silhouette Coefficient(轮廓系数) 
      ……
      更多信息见参考资料1.

    3. TS特征提取

    1. 时间序列的统计特征
      提到时间序列的统计特征,一般都能够想到最大值(max),最小值(min),均值(mean),中位数(median),方差(variance),标准差(standard variance)等指标,不过一般的统计书上还会介绍两个指标,那就是偏度(skewness)和峰度(kuriosis)。

    2. 时间序列的熵特征
      为什么要研究时间序列的熵呢?请看下面两个时间序列:

      时间序列(1):(1,2,1,2,1,2,1,2,1,2,…)

      时间序列(2):(1,1,2,1,2,2,2,2,1,1,…)

      在时间序列(1)中,1 和 2 是交替出现的,而在时间序列(2)中,1 和 2 是随机出现的。在这种情况下,时间序列(1)则更加确定,时间序列(2)则更加随机。并且在这种情况下,两个时间序列的统计特征,例如均值,方差,中位数等等则是几乎一致的,说明用之前的统计特征并不足以精准的区分这两种时间序列。

      通常来说,要想描述一种确定性与不确定性,熵(entropy)是一种不错的指标。对于离散空间而言,一个系统的熵(entropy)可以这样来表示:
      在这里插入图片描述
      如果一个系统的熵(entropy)越大,说明这个系统就越混乱;如果一个系统的熵越小,那么说明这个系统就更加确定。

      提到时间序列的熵特征,一般来说有几个经典的例子,那就是 binned entropy,approximate entropy,sample entropy。下面来一一介绍时间序列中这几个经典的熵。

    3. 时间序列的分段特征

    更多信息见参考资料8.

    4. 相似性度量——DTW(动态时间规整)

    如下图所示,实线和虚线分别是两个时间序列,但在时间轴上却是不对齐的。例如在第20个时间点的时候,实线波形的a点会对应于虚线波形的b’点,这样传统的通过比较距离来计算相似性很明显不靠谱。因为很明显,实线的a点对应虚线的b点才是正确的:
    在这里插入图片描述

    DTW是一种将时间规整和距离测度相结合的一种非线性规整技术。主要思想是把未知量均匀地伸长或者缩短,直到与参考模式的长度一致,在这一过程中,未知量的时间轴要不均匀地扭曲或弯折,以使其特征与参考模式特征对正。DTW距离可以帮助我们找到更多序列之间的形状相似。
    在这里插入图片描述
    具体计算过程如下:
    在这里插入图片描述
    更多信息见参考资料2、7.

    总结:

    (1)时间序列的聚类和普通的横截面数据聚类不一样;

    (2)时间序列聚类的难点在于如何衡量两个时间序列之间的距离(相似性);

    (3)使用欧式距离等传统的距离衡量方式去衡量时间序列之间的距离是不可靠的;

    (4)可以使用DTW(动态时间规整)的方法去衡量时间序列的距离(相似性);

    (5)当求出了时间序列之间的距离矩阵后,用啥聚类方法就问题不大了,层次聚类都行。

    更多信息见参考资料3.

    5. k-shape时间序列聚类实战(tslearn)

    k-shape算法的核心是迭代增强过程,可以生成同质且较好分离的聚类。该算法采用标准的互相关距离衡量方法,基于此距离衡量方法的特性,提出了一个计算簇心的方法,在每一次迭代中都用它来更新时间序列的聚类分配。
    优点就是针对形状计算距离,优点很鲜明,同时不得不说的是计算复杂度很高,且我们使用tslearn包进行聚类,是需要不同的序列长度一致的。
    不同形状的时序聚类效果:
    在这里插入图片描述
    实现步骤:

    1. 数据读取与预处理(序列填充,使每条序列等长)
    2. 计算轮廓系数,求出轮廓系数最大时的聚类个数k
    3. 使用最佳聚类个数,得到序列聚类标签
    4. 可视化,绘制elbow线图辅助检验聚类个数是否合理,同时绘制不同序列的聚类效果图。

    参考数据和代码更多详细介绍见参考资料9.

    安装依赖:

    pip install tslearn
    

    tslearn和sklearn一样,是一款优秀的机器学习框架,tslearn更偏向于处理时间序列问题,如其聚类模块就包含了DTW(Dynamic Time Warping)等算法及变种,也提供了轮廓系数对聚类效果评估,十分方便,使用文档。

    更多信息见参考资料2.

    参考资料

    1. 时间序列的聚类方法
    2. 【TS技术课堂】时间序列聚类
    3. 聊一聊时间序列聚类
    4. 时间序列知识整理
    5. 时间序列
    6. 时序数据聚类
    7. 时间序列的搜索
    8. 时间序列的表示与信息提取
    9. k-shape时间序列聚类(tslearn)
    10. tslearn使用轮廓系数(silhouette_score)评估KShape聚类效果
    展开全文
  • 时间序列是按照一定的时间间隔排列的一组数据,其时间间隔可以是任意的时间单位,如小时、日、周月等。比如,每天某产品的用户数量,每个月的销售额,这些数据形成了以一定时间间隔的数据。 通过对这些时间序列的...
  • 作为数据分析最重要的任务之一,异常值检测在时间序列数据上有多种应用,例如欺诈检测、故障检测和网络安全攻击检测。例如,雅虎 [1] 和微软 [2] 已经建立了自己的时间序列异常值检测服务来监控他们的业务数据并触发...
  • Python中的时间序列数据可视化的完整指南

    千次阅读 多人点赞 2020-11-20 10:00:15
    时间序列数据在许多不同的行业中都非常重要。它在研究、金融行业、制药、社交媒体、网络服务等领域尤为重要。对时间序列数据的分析也变得越来越重要。在分析中有什么比一些好的可视化效果更好呢?没有一些视觉效果,...
  • 面板数据(PanelData)是将截面数据和时间序列数据综合起来的一种数据类型,该数据具有横截面和时间序列两个维度,当这类数据按两个维度进行排列时,数据都排在一个平面上,与排在一条线上的一维数据有着明显的不同,...
  • 开源时间序列数据

    千次阅读 2021-01-21 09:22:19
    数据是驱动科技发展的源泉,我们平常科研中也常常需要在各种开源数据上验证自己模型的效果。时间序列目前可以使用的开源数据集有哪些呢?本期为大家做一次梳理。
  • 时间序列数据的多元回归No matter what kind of data science project one is assigned to, making sense of the dataset and cleaning it always critical for success. The first step is to understand the data ...
  • 特征工程之处理时间序列数据

    千次阅读 2020-09-05 09:40:25
    特征工程在这个领域的重要性是因为(原始)时间序列数据通常只包含一个表示时间属性的列,即日期时间(或时间戳)。 对于日期时间数据,特征工程可以看作是从独立的(不同的)特征数据中提取有用的信息。例如,从...
  • 在数据相关的职业生涯中遇到最痛苦的事情之一就是必须处理不同步的时间序列数据集。差异可能是由许多原因造成的——日光节约调整、不准确的SCADA信号和损坏的数据等等。在相同的数据集中,在不同的点上发现几个差异...
  • 前言数据是驱动科技发展的源泉,平时我们科研中也经常需要在各种开源数据上验证自己模型的效果。那时间序列目前可以使用的开源数据集有哪些呢?本期为大家做一次较为全面的整理汇总。UCR Time ...
  • 使用 TimeGAN 建模和生成时间序列数据

    万次阅读 热门讨论 2021-09-09 09:20:12
    在本文中,我们将研究时间序列数据并探索一种生成合成时间序列数据的方法。 时间序列数据 — 简要概述 时间序列数据与常规表格数据有什么不同呢? 时间序列数据集有一个额外的维度——时间。 我们可以将其视为 3D ...
  • R语言处理时间序列数据

    千次阅读 2020-07-20 11:54:25
    R语言处理时间序列数据
  • 时间序列数据分析

    千次阅读 2021-08-29 16:56:18
    时间序列数据分析 参考知乎文章:时间序列数据分析101,作者:厉建扬 除此之外还添加了分类、聚类的评估方法汇总+python实现。 文章目录时间序列数据分析1 准备和处理时间序列数据1.1 准备数据集1.2 寻找时间轴1.3...
  • 时间序列数据挖掘

    千次阅读 2018-11-14 12:40:44
    时间序列是一种重要的高维数据类型,它是由客观对象的某个物理量在不同时间点的采样值按照...利用时间序列数据挖掘,可以获得数据中蕴含的与时间相关的有用信息,实现知识的提取[1]。时间序列数据本身所具备的高维...
  • 时间序列数据的平稳性检验

    千次阅读 2021-10-07 17:15:47
    目录时间序列预测时间序列的平稳严平稳宽平稳三级目录 时间序列预测 按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。 x1,x2,x3,x4,...,xt 对时间序列进行观察、研究,找寻他变化发展的规律...
  • 什么是时间序列数据

    万次阅读 2018-10-24 16:47:00
     什么是时间序列(Time Series,以下简称时序)数据?从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个...
  • 时间序列数据的特征提取

    千次阅读 2020-04-03 15:56:17
    当你想对时间序列数据做分类时,有两种选择,一个是用时间序列特定的方法,比如说说LSTM模型。另外一种方法就是来从时间序列中提取特征从而将这些特征用在有监督的模型上。在这篇文章中,我们来看下如何使用tsfresh...
  • 时间序列数据的采样和画图

    万次阅读 2020-08-14 20:09:11
    时间序列数据的采样和画图时间序列数据的采样和画图引入相关库时间序列数据的采样时间序列数据的画图 时间序列数据的采样和画图 引入相关库 import numpy as np import pandas as pd from pandas import Series,...
  • 序列数据(具有时间依赖性的数据)在业务中非常常见,从信用卡交易到医疗保健记录再到股票市场价格。 但是,隐私法规限制并极大地减慢了对研发至关重要的有用数据的访问。 这就产生了对具有高度代表性但又完全私有的...
  • 时间序列预测 | Python实现Transformer时间序列数据预测 目录时间序列预测 | Python实现Transformer时间序列数据预测基本介绍Transformer设计Transformer预测参考资料 基本介绍 Transformer模型最初由Google团队于...
  • Stata:时间序列数据的回归和预测

    千次阅读 2021-07-11 13:37:19
    虽然时间序列数据常用于预测分析的研究,但需要提醒大家的是,数据并不限于使用时间序列数据。   1. 建立模型 让我们以静态线性回归模型为例, 全文阅读:https://www.lianxh.cn/news/95e9f20
  • 横截面数据、时间序列数据、面板数据

    万次阅读 多人点赞 2018-03-20 15:12:40
    面板数据(Panel Data)是将“截面数据”和“时间序列数据”综合起来的一种数据类型。具有“横截面”和“时间序列”两个维度,当这类数据按两个维度进行排列时,数据都排在一个平面上,与排在一条线上的一维数据有着...
  • 用Pandas和Streamlit对时间序列数据集进行可视化过滤 介绍 我们每天处理的数据最多的类型可能是时间序列数据。基本上,使用日期,时间或两者同时索引的任何内容都可以视为时间序列数据集。在我们工作中,可能经常...
  • 基于ARIMA实现时间序列数据预测 流程 1.导入数据 2.模型训练 3.模型保存 4.模型预测 5.模型评估 不提供数据,需要自己导入实际需要的数据集,本文图片仅展示ARIMA的预测效果。 数据样式为一维数组如[1 2 3 4 5],...
  • 时间序列数据的处理

    万次阅读 2018-05-30 16:11:15
    摘要: 随着云计算和IoT的发展,时间序列数据的数据量急剧膨胀,高效的分析时间序列数据,使之产生业务价值成为一个热门话题。阿里巴巴数据库事业部的HiTSDB团队为您分享时间序列数据的计算分析的一般方法以及优化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 877,937
精华内容 351,174
关键字:

时间序列数据