精华内容
下载资源
问答
  • 提出了一种基于复杂网络的多维时间序列分析建模方法。 分析了收盘价的回报率顺序和上证指数,深成指,标准普尔500指数和道琼斯工业平均指数的交易量波动顺序。 二维时间序列被转换成一个复杂的网络。 我们分析网络的...
  • 此存储库包含用于时间扭曲多维时间序列的研究代码。 它是作为以下手稿的一部分开发的,该手稿着重于对大型神经记录的分析(尽管此代码也可以应用于许多其他数据类型): 。 威廉姆斯AH,普尔B,马埃斯瓦拉纳森N,达...
  • 该模块通过捕获变化和趋势来建立多维时间序列中的事件,以建立旨在识别相关特征的关系,从而有助于从原始传感器信号中选择特征。 此外,为精确检测实时流数据中的异常,还设计了无监督的深度卷积神经网络以及基于...
  • 利用字典学习减少混沌多维时间序列中的噪声
  • 基于多维时间序列的数控加工中心运行状态预测方法研究,张彦如,邓广周,对现代企业数控加工中心运行状态预测是进行故障预警、事前维护、保障设备高效运行的关键。目前针对设备状态预测的研究很多,但是
  • 数据集处理方法之多维时间序列

    千次阅读 2020-11-02 23:24:36
    多维时间序列取出来的值是一个m*n的矩阵。以UCI数据集中RobotFailure为例,数据文件下载下来是这样的: 其中每一段数据的第一行表示状态,其实也就是分类。每一列是一段时间序列,多段时间序列组成了MTS。具体的...

    多维时间序列取出来的值是一个m*n的矩阵。以UCI数据集中RobotFailure为例,数据文件下载下来是这样的:
    在这里插入图片描述
    其中每一段数据的第一行表示状态,其实也就是分类。每一列是一段时间序列,多段时间序列组成了MTS。具体的含义可以到官网上看。
    为了在接下来的程序中对这些时间序列进行聚类以及评估聚类效果,需要读取这些数据,并且将状态(分类)作为标签附在每一段数据上。鉴于标签和时间序列的格式不一致,本人采用了字典格式。
    具体代码如下:

    def seperate(infile):
    	# 读取文件内容,鉴于lp1.data中每一行格式有差异,于是每一行单独处理
        input_file = open(infile, mode="r", encoding="utf-8")
        infile_content = input_file.readlines()
        
        # 定义空列表存储临时数据,将同一组数据存储在同一列表中
        list_temp = []
        # 定义字典存储临时数据
        mydict = {}
        # 定义空列表存储所有数据
        data = []
        # 为了方便后续程序查找,给每一个字典添加了一个序号
        count = 1
        # i用来标记该行是否是标签行
        i = 0
        for each in infile_content:
        	# 因为文件lp1.data中每一段数据间有两行空行,所以作此处理
        	# 遇见空行表示一段数据已经读取完毕,将字典内容存储进data列表
            if each == '\n' and list_temp != []:
                mydict["count"] = count
                mydict["time_series"] = list_temp
                data.append(mydict)
                count +=1
                list_temp = []
                mydict = {}
                i = 0
            elif each != '\n':
                if i == 0:
                # i==0 表示该行是标签行,存储进字典
                    mydict["class"] = each.strip()
                    i = i + 1
                else:
                # 如果不是标签行,则将数据存储进临时列表list_temp
                    list_temp.append(each.split())
        # 关闭文件
        input_file.close()
        return data
    

    本人学艺不精,所以处理过程显得有些繁琐。欢迎有更好的方法的大神们指教指教我。

    展开全文
  • 多维时间序列的图模型中引入信息论方法,提出了多维时间序列中各分量之间直接线性联系存在性的 互信息检验.定义了线性条件互信息图,图中的结点表示多维时间序列的分量,结点间的边表示各分量之间存在的 直接线性相依...
  • 面向不等长多维时间序列的聚类改进算法
  • # 多维时间序列工具箱 - mdtsTooblox 这个工具箱实现了处理多维时间序列的类和方法,即多元时间序列。 目标是支持数据分析师处理和操作数据。 因此,他可以专注于数据本身,而不必关心数据处理。 此外,此工具箱...
  • 在总结前人工作基础上,提出了一种关于多维时间序列门限回归模型的通用建模新方案,并从理论上证明了此新表达式与经典门限回归模型的一致性。将此模型应用于云南五月雨量的预报中,其平均历史拟合和外推预报准确率...
  • 该数据集是一个污染数据集,我们需要用该多维时间序列去预测pollution这个维度,采用80%作为训练集,20%作为测试集。 模型实现 模型使用双层LSTM加一个全连接层实现预测 具体结构如下 def trainModel(trainX,trainY...

    朋友们好,时隔很久我又开始写时间序列相关的博客啦。

    新年新气象,过去的时间序列预测博客采用版本为Keras 2.2 tensorflow-gpu 1.13.1版本实现。

    本次博客的主题是:
    提供一种适用于新手LSTM时间序列预测模型
    十分的有效好用
    同时采用Keras 2 + TensorFlow 2 实现,提供预测和验证全流程。

    版本:
    cuda 10.1
    cudnn 8.0.5
    keras 2.4.3
    tensorflow-gpu 2.3.0

    Keras 2.4版本仅支持TensorFlow 作为后端,参见 Keras 2.4发布,真正成为TensorFlow的Keras ,import 相比之前版本也有一些改动。

    数据介绍

    该数据集是一个污染数据集,我们需要用该多维时间序列去预测pollution这个维度,采用80%作为训练集,20%作为测试集。
    在这里插入图片描述

    开始

    深度学习的第一步

    import tensorflow as tf
    

    相对于旧版本keras 这里有一些改动

    from  tensorflow.keras import Sequential
    from  tensorflow.keras.layers import LSTM,Dense,Activation,Dropout
    from  tensorflow.keras.callbacks import History,Callback,EarlyStopping
    import  numpy as np
    

    模型实现

    模型使用最简单的序贯模型,
    使用双层LSTM加一个全连接层实现预测
    具体结构如下

    然后还添加了一个early stopping 机制

    
    def lstm_model(train_x,train_y,config):
    
        model = Sequential()
        model.add(LSTM(config.lstm_layers[0],input_shape=(train_x.shape[1],train_x.shape[2]),
                       return_sequences=True))
        model.add(Dropout(config.dropout))
    
        model.add(LSTM(
            config.lstm_layers[1],
            return_sequences=False))
        model.add(Dropout(config.dropout))
    
        model.add(Dense(
            train_y.shape[1]))
        model.add(Activation("relu"))
    
        model.summary()
    
        cbs = [History(), EarlyStopping(monitor='val_loss',
                                        patience=config.patience,
                                        min_delta=config.min_delta,
                                        verbose=0)]
        model.compile(loss=config.loss_metric,optimizer=config.optimizer)
        model.fit(train_x,
                       train_y,
                       batch_size=config.lstm_batch_size,
                       epochs=config.epochs,
                       validation_split=config.validation_split,
                       callbacks=cbs,
                       verbose=True)
        return model
    

    同时具体模型的输入输出是根据train_x和 train_y的shape来设置的。所以这是一个自适应的模型 。
    只要确保train_x的维度为3,train_y的维度为2,就能流畅运行。

    具体参数

    #使用类实现一个配置文件
    class Config:
        def __init__(self):
            self.path = './Model/'
            self.dimname = 'pollution'
    
            #使用前n_predictions 步去预测下一步
            self.n_predictions = 30
    
            #指定EarlyStopping  如果训练时单次val_loss值不能至少减少min_delta时,最多允许再训练patience次
            #能够容忍多少个epoch内都没有improvement
            self.patience = 10
            self.min_delta = 0.00001
    
            #指定LSTM两层的神经元个数
            self.lstm_layers = [80,80]
            self.dropout = 0.2
    
            self.lstm_batch_size = 64
            self.optimizer = 'adam'
            self.loss_metric = 'mse'
            self.validation_split = 0.2
            self.verbose = 1
            self.epochs = 200
    
        ## 是一个数组 如[64,64]
        def change_lstm_layers(self,layers):
            self.lstm_layers = layers
    
    

    模型结构如图
    在这里插入图片描述
    由于采用了Early Stopping机制 训练28次就结束了
    Epoch 28/200
    438/438 [==============================] - 10s 23ms/step - loss: 8.4697e-04 - val_loss: 4.9450e-04

    结果

    让我们来看看结果吧
    RMSE为 24.096020043963737
    MAE为 13.384563587562422
    MAPE为 25.183164455025054
    在这里插入图片描述

    在这里插入图片描述

    可以看到我们这个方法虽然简单,但是预测效果是很好的~

    本代码已经上传到了我的github

    同时还附录了本教程的旧版本(梯度搜索部分可能有点小bug 如果使用需要仔细校对一下)

    如果本文点赞过1000或者github 本项目 star 过100
    我就开源 登堂入室LSTM:使用LSTM进行简单的时间序列异常检测
    的新版本 更优实现。

    参考

    tensorflow2_tutorials_chinese

    Anomaly Detection in Time Series Data Using LSTMs and Automatic Thresholding

    展开全文
  • 为提高多维时间序列相似性搜索的效率,利用多维时间序列的协方差矩阵的特征值和特征向量构造加权Frobe- nius范数,将其作为多维时间序列主元之间距离,并将其用于对多维时间序列主元相似度的度量.在相似性搜索算法中...
  • 近些年关于AIOps的研究越来越热门,其中,多维时间序列的异常检测和故障诊断是其中非常重要的一个课题方向。本次和大家分享的,是最近整理的几个基于深度学习进行多维时间序列数据中异常检测/故障诊断的研究工作。 ...

    近几年大数据和人工智能技术逐渐成熟,运维领域多年来面临的困境有望得到突破。AIOps就是在这样一个环境下自然孕育而生。

    IT运维数据天生就有数据量大,维度多,时序等特征,结合人工智能算法,通过训练,就可以让机器自动发现系统异常,快速找到关联的根因,甚至可以根据历史数据提前做出预测。

    近些年关于AIOps的研究越来越热门,其中,多维时间序列的异常检测和故障诊断是其中非常重要的一个课题方向。本次和大家分享的,是最近整理的几个基于深度学习进行多维时间序列数据中异常检测/故障诊断的研究工作。

    AAAI 2019

    A deep neural network for unsupervised anomaly detection and diagnosis in multivariate time series data

    图片

    论文地址:https://ojs.aaai.org//index.php/AAAI/article/view/3942

    论文源码:-

    论文摘要:该论文提出Multi-Scale Convolutional Recurrent Encoder-Decoder (MSCRED),用于多变量时序数据的异常检测。MSCRED首先构建多尺度的signature matrices,用于描述不同时间步对应的=系统状态,然后,在给定的signature matrices上,利用卷积编码器去编码变量之间的相关特性,同时利用基于attention的卷积LSTM(ConvLSTM)去捕获时间依赖特性。最后利用解码器重构特征以及利用residual signature matrices去检测和诊断异常。

    Method

    Problem Statement

    给定n维时序数据 图片,假设数据不存在异常,我们希望达到两个目的:

    1. Anomaly detection:检测T时刻之后某一时刻的异常事件

    2. Anomaly diagnosis:识别最有可能导致异常的时间序列,并且量化异常程度。

    Characterizing Status with Signature Matrices

    有研究表明不同时间序列对之间的相关性对于描述系统状态至关重要。给定 t-w 时刻到 t 时刻的时序段,文中基于该时序段内两个序列的成对内积构建了一个 n x n 的 signature matrix。假设当前的两个序列为图片图片 。计算两个序列的相关性:

    图片

    其中分母是缩放因子。特征矩阵不仅可以捕获两个时间序列之间的形状相似性和值尺度相关性,而且对输入噪声具有鲁棒性,因为某些时间序列的不稳定对特征矩阵的影响很小。通过选择不同的w值,可以获得不同尺度下的特征。文中选取了三个时间尺度:10,30,60。也就是每一个时间步,都有3个特征矩阵。每一个特征矩阵的大小与时序数据的维度一致。所以对于维度较少的时序数据来说,可能会存在问题。

    图片

    Convolutional Encoder

    采用全卷机编码器对Signature Matrices的空间模式进行进一步的编码。经过4层卷积核,将原始Signature Matrices 编码成不同大小的特征图,总共4层,后续会在这4层特征图上分别进行ConvLSTM操作。整个过程如图(a)所示。

    Attention based ConvLSTM

    由于在每一层特征图上都进行ConvLSTM,如果时间步比较长,则LSTM的性能将会下降,因此采用attention机制,对先前的每一个时间步的隐含特征分配权重。文中选择的时间步为5,也就是以当前时间步为基准,考虑之前的5个时间步。对于当前时间步对应的隐含状态,计算先前时间步对其的影响:

    图片

    计算方法是基本的attention计算方法。整个过程如图(b)所示。

    Convolutional Decoder

    最后利用卷积解码器,再反向重构,重构的时候,需要加入ConvLSTM提取的特征,最后得到重构的Signature Matrices。整个过程如图(c)所示。整个过程的损失函数定义为重构误差。后续在原始Signature Matrices和重构Signature Matrices的差异矩阵上,进行异常检测和诊断。

    KDD 2020

    USAD: UnSupervised Anomaly Detection on Multivariate Time Series

    图片

    论文地址:https://dl.acm.org/doi/10.1145/3394486.3403392

    论文源码:https://github.com/manigalati/usad

    论文摘要:该论文提出一种面向多元时序数据的无监督的异常检测方法UnSupervised Anomaly Detection USAD,该方法基于自编码器,同时利用了对抗训练的策略,并在五个公共数据集上进行了实验。USAD 背后的思想是在编码器-解码器架构上进行对抗性训练使其能够学习如何放大异常的输入的重建误差,同时相比与传统的GAN-based方法,更加稳定。

    Method

    Problem formulation

    给定多元时序数据 图片 ,其中 图片 。然后定义在 t 时刻且长度为 K 的时间窗口为 图片 。通过这种方式,我们可以将原始序列 T 分割为多个窗口的集合 图片 ,当存在一个新的时间窗口 图片 ,需要通过窗口的异常得分来对新的未知窗口进行分类,也就是0和1。

    Unsupervised Anomaly Detection

    采用自编码器是一种常用的方法,基于自编码器的异常检测使用重构误差作为异常分数,因为通常训练数据中只有正常的数据,因此出现异常数据时,往往具有较高的重构误差。但是,如果异常比较接近正常数据,则重构误差很小,因此无法有效检测到异常。发生这种情况是因为 自编码器尽可能地重建输入数据。

    为了克服这个问题,理想的自编码器应该能够识别异常输入数据中是否包含正常数据。

    一种可能的方案是利用生成对抗网络Generative Adversarial Networks。与基于自编码器的异常检测类似,基于 GAN 的异常检测使用正常数据进行训练。训练后,鉴别器用作异常检测器。如果输入数据与学习数据分布不同,则鉴别器将其视为来自生成器并将其分类为假数据,即异常。

    USAD的基本框架为自编码器,同时具有两个不同阶段对抗训练策略。USAD包含三个部分,一个编码器网络 E 以及两个解码器网络 D1 和 D2 。如下图所示

    图片

    两个解码器共用一个编码器,具体表示为:

    图片

    训练的时候采用两阶段的训练方式。首先,给定正常输入,训练两个自编码器以实现重构。其次,这两个自编码器 以对抗方式进行训练,其中 AE1 将试图欺骗 AE2,而 AE2 的任务是判断数据是否是真实的(也就是来自输入窗口)或者假的(也就是来自AE1的重构)。

    • Phase 1: Autoencoder training

    在第一阶段,目标是训练每个 AE 来重现输入。即给定 W ,两个编码器的输出分别为AE1(W)和AE2(W),所以目标函数为:

    图片

    • Phase 2: Adversarial training

    首先将来自 AE1 的数据再次由 E 压缩到 Z,然后由 AE2 重建,得到的输出AE2(AE1(W)),这个过程如图中Training阶段中的绿色箭头所示。在对抗训练的策略下,AE1 期望最小化 W 和 AE2(AE1(W)) 之间的差异,而AE2 的目标是最大化这种差异。所以目标函数为

    图片

    这里大概可以这么理解,AE2的目的是为了识别AE1(W)是AE1重构之后的时间窗口,而不是真实的时间窗口W。因此AE2需要最大化AE2(AE1(W)) 与真实W之间的差异,而AE1为了欺骗AE2,则需要最小化AE2(AE1(W)) 与真实W之间的差异。例如如果AE2(AE1(W))与W非常相似,那么可以认为AE1(W)来自与W,因为只有来自与W的数据才能获得较小的重构误差,也就是将AE1(W)判定为真实的W,这其实是错误的,因为AE1(W)是重构的数据。

    • Two-phase training

    在这样的结构中,每个自编码器都双重用途,融合Phase1和Phase2,最终的目标函数为

    图片

    其中n表示训练epoch。两阶段的训练过程如下所示。

    图片

    • Inference or Detection Phase

    异常得分(anomaly score)被定义为

    图片

    其中 图片 。这两个参数决定了模型对异常的敏感度,在实际使用时可以根据场景进行调节。在文中的实验中,通过增加 a ,FP(False Positives)的数量降低,TP(True Positives)的数量上升。也就是说增加 a 可以增加模型的precision,但同时F1 score也降低,也就是说明recall会降低,也就是模型变得更加保守。

    换句话说,当 a 增加,模型逐渐退化为单一的自编码器,也就是仅仅能识别出比较明显的异常,识别的准确率上升,也就是TP会增加,FP会降低,但同时导致的后果是找出的异常数量下降,也就是Recall的值会下将。而增加 b 的值,会使模型变得更加冒险,因此能找到更多的异常,但同时准确率会降低。与文中的实验结果规律相似。而AE2可以视为一个扰动器,为AE1提供了一定的干扰效果。

    KDD 2021

    Practical Approach to Asynchronous Multivariate Time Series Anomaly Detection and Localization

    图片

    论文地址:https://dl.acm.org/doi/10.1145/3447548.3467174

    论文源码:https://github.com/eBay/RANSynCoders

    论文摘要:考虑从现实世界观察到大量时间序列表现出异步和重复变化特点,提出了一种从多元时序数据集中推断异常的实用方法。总的来讲,该解决方案首先利在预训练自动编码器的潜在表示(latent representation)上进行频谱分析从而提取信号中的主要频率,然后将其用于后续网络,该网络学习信号中的相移并生成原始多元变量的同步表示。然后将同步的多元变量的随机子集输入到一组自动编码器中,以最小化分位数重构损失为目标进行学习,然后用于基于投票规则来推断和定位异常。该文提出的是一种无监督的方法,因为监督学习方法面临着无法获得真实标签的问题。相比之下,通过仿真模拟来获得标签无法代表现实世界异常的真实多样性。而异常通常具有模式不一致、稀缺或未标记的特点,因此采用无监督的深度学习方法是合理且实用的。该文所提出方法有两个理论贡献,第一个是无监督方法假设序列的频谱关系是线性相关的,但忽略了隐藏在多元时间序列的固有的非线性特性;第二个是在实际应用中,时间序列的维度经常被异步地观测,这阻碍了模型权重的学习。

    Method

    Latent spectral density estimation

    训练一个隐含空间大小为1的自编码器,目标是最小化50th分位数,定义为 图片 。然后在单变量潜在表示上利用快速傅立叶变换 (FFT) 进行频谱分析来辨识大小为 S 的频率向量 W 。 W 向量包含理论上在序列特征中占主导地位并普遍存在的频率,其中 S 是足以近似多元时间序列 Y 的正弦分量的数量,这里可以定义为 图片

    这部分实际上先将多变量时序数据 Y 编码到单变量的隐含状态 Z ,然后在 Z 上进行快速傅里叶变换,最终得到 Z 的频率成分组成 图片 ,其中包含了 S 个频率成分。

    Asynchronous multivariate signal model

    基于 T 个时间步和 I 个特征对异步多元时序数据进行建模,建模方式如下

    图片

    其中 S 表示频率成分,图片 以及 图片 表示特征的索引,图片 表示频率成分的索引,图片 表示角频率,图片 表示幅度,相位以及特征的偏置,图片 表示噪声。

    w 的初始化是基于自编码器学习到的近似最优值。为了学习 图片 ,首先将模型中的中的角度部分线性化展开为 图片 ,其中图片 。线性化后的形式变得类似于用单位偏置和正弦激活函数训练神经元。这样就可以通过反向传播训练 图片 参数。而噪声项 图片 是通过从拟合的正弦分量中减去原始信号来计算的。

    文中给出了一个例子, 显示了使用具有两个频率分量进行建模的特征例子如下图所示,也就是 图片 。这里将某一个特征序列表示为一个拟合的正弦成分以及噪声。

    图片

    最后还需要将误差表示为时间的函数,文中根据第 i 个特征的第 t 个观测,将噪声表示为

    图片

    其中 w0 是来自谱密度估计的最高功率的角频率,也就是 W 的 w0 。而原始异步时间序列的 图片 表示为

    图片

    其中 图片

    Synchronized representation

    基于上面提到的公式,文中将异步的特征采样时间 图片 ,以及异步的相位差 图片图片 对齐到了参考时间戳 图片 ,如下所示

    图片

    其中 图片 是基于特征的相位移动,它将异步特征上的每一个观测移动至参考时序帧,该操作是特征级别的,也就是说同一个特征的所有观测值具有相同的移动量,图片图片 分别是原始序列和投影噪声的同步表示。文中仍然给了一个例子来说明,该例子显示了 eBay 从 4 个不同时区的用户活动中收集的 4 个异步特征的示例及其同步表示。

    图片

    Embedded representation learning

    将上述参数估计和多元序列同步表征过程嵌入到整个网络学习过程中,如下图所示。

    图片

    上述的网络需要两个输入:一个是多元时序数据 Y ,还有一个是特征对应的时间戳矩阵 T 。最终获得的同步表征 图片 将作为后续RANCoders的输入。

    RANCoders: Bootstrapped autoencoders for feature-bounds construction

    提出了一种利用自动编码器进行异常检测的替代方法。该方法显著利用了同步多元序列增强空间共线性,并且在异步时序数据上表现非常好。

    首先,作者认为输入的较小子集应该包含足够的信息,从而以足够的质量重建整个序列。因此,文中利用具有一组 N 个弱深度编码器(weak deep encoders)作为特征bagging模型。这样的机制可以在异常推理时采用少数服从多数的机制。也就是具有N个编码器,可以同时编码输入。

    其次,作者认为对于异常检测这个任务来讲,重建输入信号的阈值边界更有效,而不是尝试重建输入,然后进行不可靠的阈值选择过程用于异常推断。

    基于以上原则,训练了两组深度解码器,分别为 图片 以及 图片 ,从每个编码器中重建多元时序数据的边界,通过最小化分位数重建损失来进行训练

    图片

    上面这个公式是针对下界的损失函数,其中, 图片 是重构的边界,LB是下界, n 表示自编码器的索引。针对上界的损失函数与下界损失函数相同,将LB换为UB即可。

    Anomaly inference and localization

    采用以上方法的两个突出优势是可以实际推断异常并进一步解释多元数据集中异常的潜在来源。但是文中重点讨论了第一个属性,因为潜在来源在数据集中没有基准。

    对于异常推断,通过将 RANCoders 输入与解码的边界进行比较,这个过程可以表达为

    图片

    对于每一个时间步,输出结果均为2维数组,大小为 图片 ,因为在上一个小节中,采用了 N 个弱深度编码器,每个编码器都会有一个结果。然后采用投票的策略,即输出中的 1 多于 0 时,观察结果被标记为异常。

    以上就是这篇论文的主要内容,总体来说模型部分还是比较好理解的,主要的特点就是将异步时序数据的同步化表征融入到整个模型框架中。

    展开全文
  • 机器学习做多维时间序列预测

    千次阅读 2019-03-16 21:14:21
    时间序列预测, 传统模型:比如ARIMA模型,一次只能对一组时间序列数据进行预测,比如预测某个品牌下某家店未来销售额。 现实情况中需要预测某个品牌下每家店未来的销售额。也就是说,如果这个品牌在某地区一共...

    另一篇博文地址:时间序列arima预测:https://blog.csdn.net/u014281392/article/details/77585419

    做时间序列预测,
    传统模型:比如ARIMA模型,一次只能对一组时间序列数据进行预测,比如预测某个品牌下某家店未来销售额。

    现实情况中需要预测某个品牌下每家店未来的销售额。也就是说,如果这个品牌在某地区一共有100家店,我们就需要给出这100家店分别对应的销售额预测值。
    此时传统模型便不再适合。

    时间序列预测模型建模思路

    1. 初始数据集
      在这里插入图片描述
      一开始拿到的数据可能是分好训练集、测试集的,也可能是没分好的。这里我按照竞赛的情况假设一开始的数据集分有训练集和测试集。

    对于时间序列数据来说,训练集即为历史数据,测试集即为新数据。历史数据对应的时间均在时间分割点之前(如2018年以前某品牌每家店每天的销售数据),新数据对应的时间均在分割点之后(如2018年以后某品牌每家店每天的销售数据)。

    历史数据和新数据均包含N维信息(如某品牌每家店的地理位置、销售的商品信息等),但前者比后者多一列数据:Target,即要预测的对象,如销售额。

    基于给出的数据,我们的预测任务是:根据已有数据,预测测试集的Target(如,根据某品牌每家店2018年以前的历史销售情况,预测每家店2018年1月份头15天的销售额)

    1. 数据处理
      在构建预测特征上,截面数据和时间序列数据遵循的逻辑截然不同。下面两张图分别是二者的数据处理逻辑示意图。

    首先来看针对截面数据的数据处理思路。

    在这里插入图片描述
    对于截面数据来说,训练集数据和测试集数据在时间维度上没有区别,二者唯一的区别是前者包含要预测的目标变量,而后者没有该目标变量。

    一般来说,在做完数据清洗之后,我们用“N维数据”来分别给训练集、测试集构建M维预测特征(维度相同),然后用机器学习算法在训练集的预测特征和Target上训练模型,最后通过训练出的模型和测试集的预测特征来计算预测结果(测试集的Target)。

    此外,为了给模型调优,我们一般还需要从训练集里面随机分割一部分出来做验证集。

    而时间序列的处理思路则有所不同

    在这里插入图片描述
    时间序列预测的核心思想是:用过去时间里的数据预测未来时间里的Target。

    所以,在构建模型的时候,所有过去时间里的数据(训练集里的N维数据和Target,如2018年以前每家店的地理信息、所卖商品信息、日销售额等)都应该拿来构建预测特征。

    而新数据本身的N维数据(如2018年1月头15天每家店的地理信息、所卖商品信息等)也应该拿来构建预测特征。

    前者是历史特征(对应图上的预测特征A),后者是未来特征(对应图上的预测特征B)。二者合起来构成总预测特征集合。

    最后,用预测模型和这个总的预测特征集合来预测未来Target(如未来销售额)。

    看到这里,一个问题就产生了:既然所有的数据都拿来构建预测特征了,那预测模型从哪里来?没有Target数据,模型该怎么构建?

    你可能会说,那就去找Target呗。对,没有错。但这里需要注意,我们要找的不是未来时间下的Target(毕竟未来的事还没发生,根本无从找起),而是从过去时间里构造“未来的”Target,从而完成模型的构建。这是在处理时间序列上,逻辑最绕的地方。

    3. 模型构建
    用机器学习算法构造时间序列预测模型,关键的思路在于,通过时间滑窗,人为地构造“未来”Target,来给算法进行学习。

    有点绕,请看下面的示意图
    在这里插入图片描述
    和之前一样,从时间的角度上来看,我们有历史数据,和新数据。但这里,我们不能简单地把历史数据作为训练集、把新数据作为测试集。

    怎么做呢。

    首先,在历史数据上,我们通过截取不同时间窗口的数据来构造一组或几组数据。比如,我的历史数据是2017年 1月到12月每家店每天的销售数据,那么我可以截取3组数据(见上图的深绿、浅绿部分):2017年1月到10月的数据、2017年2月到11月的数据、2017年3月到12月的数据。

    然后,人为地给每组数据划分历史窗口(对应上图的深绿色部分)和未来窗口(对应上图的浅绿色部分)。比如,对于2017年1月到10月的数据,我把1月到9月作为历史窗口、10月作为未来窗口,以此类推。

    接着,分别给每组数据构建预测特征,包括历史特征(预测特征A)和未来特征(预测特征B)。而此时,每组数据还有预测Target。

    这个时候,我们把得到的所有预测特征(我的例子里是三组预测特征)都合并起来作为训练集特征、把所有预测Target(我的例子里是三组预测Target)合并起来作为训练集Target,之后就可以构建机器学习模型了。

    有了训练集和训练模型,还差测试集。测试集的构建遵循之前的数据处理逻辑,拿历史数据构建历史特征,拿新数据构建未来特征,然后把这些特征加入到从训练集上训练出的预测模型中去,即可得到任务需要的最终预测值。

    这里需要注意,划多少个时间窗口因数据而异。此外,数据的历史窗口(图上深绿部分)和未来窗口(图上浅绿部分)可以是定长也可以是变长,看具体情况。

    以上就是我最近总结出的用机器学习算法构建时间序列预测模型的建模思路。

    时间序列预测竞赛代码:
    https://github.com/wepe/O2O-Coupon-Usage-Forecast

    转载来源:https://blog.csdn.net/weixin_42587745/article/details/82965531

    展开全文
  • 基于SVR的多维时间序列分析及其在农业科学中的应用,袁哲明,张永生,【目的】建立一种基于结构风险最小、既反映样本集动态特征又体现环境因子影响的高精度非线性多维时间序列预测方法。【方法】耦合
  • 是否有模型可以自动的分析多维时间序列之间的关联关系,推导根因呢?来自北京大学、中山大学的研究者们所带来的工作:《AutoMAP: Diagnose Your Microservice-based Web Applications Automatically》就这个问题给出...
  • putation)项目,我们开发了机器学习模型,以帮助解决一些时空数据模型的最严峻的挑战-从丢失的数据归集到时间序列预测。 该项目的战略目标是为时空交通数据插补和预测任务创建准确有效的解决方案。 匆忙? 请查看...
  • 论文研究-多维时间序列的周期分析.pdf, 根据作者提出的能量关联度理论,探讨了多维时间序列的周期分析问题,互能量关联度的计算及频率域上主要影响因素的提取,结合实例...
  • SVM_CAR首先利用SVM以留一法的MSE最小化原则进行时间序列非线性定阶;然后用SVM对害虫发生的影响因子进行非线性筛选,并同时通过强制汰选给出各保留因子对预测结果的相对重要性;最后建立基于保留对预测结果影响较大...
  • keras 多维时间序列预测

    千次阅读 2018-05-24 16:36:50
    原文链接 from math import sqrt from numpy import concatenate from matplotlib import pyplot from pandas import read_csv from pandas import DataFrame from pandas import concat from sklearn....
  • 面向不等长多维时间序列的聚类改进算法.pdf
  • 基于多维时间序列数据挖掘的降雨天气模型研究: 基于多维时间序列数据挖掘的降雨天气模型研究1陈晓云 1,吴本昌 1,牛国鹏 1,韩海涛 2 1 兰州大学信息科学与工程学院,兰州(730...|下载前务必先预览,自己验证一下...
  • 基于多维时间序列数据挖掘的降雨天气模型研究,陈晓云,吴本昌,本文结合气象研究的实际需要,提出了极值斜率分段线性拟合法,运用该方法实现了多维气象数据时间序列的分段、数据压缩及特征值提
  • #资源达人分享计划#
  • Netflix atlas 是管理多维时间序列数据的后端。
  • 基于µσ-DWC特征和树结构M-SVM的多维时间序列分类
  • 如果您记录多维时间序列数据并希望查找周期性,则很有用。 此函数查找轨迹与给定平面相交的点。 % P = poincare_map( X [, 平面] ) % 给定 N 维时间序列数据 X, % 找到穿过给定平面的时间序列的点。 % X ( t, ...
  • 时间序列分析 与matlab实现 时间序列分析 与matlab实现
  • 时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列。分析时间序列的方法构成数据分析的一个重要领域,即时间序列分析。代码
  • 有关多维时间序列数据异常检测的精选论文7篇,最新总结

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,396
精华内容 9,758
关键字:

多维时间序列

友情链接: 附录2.zip