精华内容
下载资源
问答
  • GPS坐标时间序列周期性分析.pdf
  • 背景任何事物在两个不同时刻都不可能保持完全相同的状态,但很多变化往往存在着一定的规律,例如 24 小时日出日落,潮起潮落,这些现象通常称为「周期」。周期性,指时间序列中呈现出来的围绕长期趋...

    背景

    任何事物在两个不同时刻都不可能保持完全相同的状态,但很多变化往往存在着一定的规律,例如 24 小时日出日落,潮起潮落,这些现象通常称为「周期」

    周期性,指时间序列中呈现出来的围绕长期趋势的一种波浪形或振荡式变动。准确提取周期信息,不仅能反映当前数据的规律,应用于相关场景,还可以预测未来数据变化趋势。

    时间序列示例

    一般而言,时间序列周期性分为三种:

    • 「符号性周期」,例如序列 fbcnfkgbfopsf 周期为 4;

    • 「部分周期性」,例如序列 ansdcdmncdcacdascdmccd 周期为 4;

    • 「分段周期性」,例如上面给定的时间序列即为分段周期性;

    针对时间序列的周期性检测问题,这篇文章主要介绍「傅里叶变换」「自相关系数」两种方法及其在实际数据中的效果;

    傅里叶变换

    傅里叶变换是一种将时域、空域数据转化为频域数据的方法,任何波形(时域)都可以看做是不同振幅、不同相位正弦波的叠加(频域),详细介绍可以参考:An Interactive Guide To The Fourier Transform,???????? 此处放上经典图镇场!

    傅里叶变换

    对于一条具备周期性的时间序列,它本身就很接近正弦波,所以它包含一个显著的正弦波,周期就是该正弦波的周期,而这个正弦波可以通过傅里叶变换找到,它将时序数据展开成三角函数的线性组合,得到每个展开项的系数,就是傅里叶系数。傅里叶系数越大,表明它所对应的正弦波的周期就越有可能是这份数据的周期。

    自相关系数

    自相关系数(Autocorrelation Function)度量的是同一事件不同时间的相关程度,不同相位差(lag)序列间的自相关系数可以用 Pearson 相关系数计算。其数学表达如下:

    其中 表示相位 的数据延迟 「lag operator」

    自相关系数

    当序列存在周期性时,遍历足够多的相位差,一定可以找到至少一个足够大的自相关系数,而它对应的相位差就是周期。所以对于检测时序周期来说,只需找到两个自相关系数达到一定阈值的子序列,它们起始时间的差值就是我们需要的周期。

    实例说明

    为了保证结果的可靠性,可以将傅里叶分析和自相关系数结合起来判断周期性。主要思路是:先通过傅里叶变换找到可能的周期,再用自相关系数做排除,从而得到最可能的周期。

    给定一份周期性数据,时间间隔为 5 min。从这份数据中可以看出数据大体上具有周期为 1 day。

    示例数据

    下面使用傅里叶变换估计周期,代码如下所示

    from scipy.fftpack import fft, fftfreq
    
    fft_series = fft(data["value"].values)
    power = np.abs(fft_series)
    sample_freq = fftfreq(fft_series.size)
    
    pos_mask = np.where(sample_freq > 0)
    freqs = sample_freq[pos_mask]
    powers = power[pos_mask]
    
    top_k_seasons = 3
    # top K=3 index
    top_k_idxs = np.argpartition(powers, -top_k_seasons)[-top_k_seasons:]
    top_k_power = powers[top_k_idxs]
    fft_periods = (1 / freqs[top_k_idxs]).astype(int)
    
    print(f"top_k_power: {top_k_power}")
    print(f"fft_periods: {fft_periods}")
    

    取 top-3 振幅值为top_k_power: [ 614.8105282 890.33273899 1831.167168 ] 及其对应的周期 fft_periods: [ 72 278 292] 。???? 数据间隔为 5 min 所以真实周期应为 288,从傅里叶变换即可看出估计值 292 已经非常接近真实值。

    现在来计算自相关系数,代码如下所示:

    from statsmodels.tsa.stattools import acf
    
    # Expected time period
    for lag in fft_periods:
        # lag = fft_periods[np.abs(fft_periods - time_lag).argmin()]
        acf_score = acf(data["value"].values, nlags=lag)[-1]
        print(f"lag: {lag} fft acf: {acf_score}")
    
    
    expected_lags = np.array([timedelta(hours=12)/timedelta(minutes=5), timedelta(days=1)/timedelta(minutes=5), timedelta(days=7)/timedelta(minutes=5)]).astype(int)
    for lag in expected_lags:
        acf_score = acf(data["value"].values, nlags=lag, fft=False)[-1]
        print(f"lag: {lag} expected acf: {acf_score}")
    
    

    对应的输出如下:

    lag: 72 fft acf: 0.07405431832776994
    lag: 278 fft acf: 0.7834457453491087
    lag: 292 fft acf: 0.8259822269757922
    lag: 144 expected acf: -0.5942986094704665
    lag: 288 expected acf: 0.8410792774898174
    lag: 2016 expected acf: 0.5936030431473589
    

    通过自相关系数来得到显著分数最大值对应的周期,得出的结果为 292;

    此处实验补充了预设的三个周期值:12 hour、1 day、7 day,发现算出来还是周期 288 对应的相关分数最大,但是傅里叶变换没有估计出周期值 ????

    综上,这个小故事告诉我们:你算出来的还不如我预设的值呢!直接根据先验知识「预设周期」然后计算自相关系数就行了!


    建议阅读:

    高考失利之后,属于我的大学本科四年

    【资源分享】对于时间序列,你所能做的一切.

    【时空序列预测第一篇】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?

    【AI蜗牛车出品】手把手AI项目、时空序列、时间序列、白话机器学习、pytorch修炼

    公众号:AI蜗牛车
    
    保持谦逊、保持自律、保持进步
    
    
    
    个人微信
    备注:昵称+学校/公司+方向
    如果没有备注不拉群!
    拉你进AI蜗牛车交流群
    
    
    
    
    展开全文
  • 近几年间,研究者分析时间序列数据的方式发生了显著的变化。因此,很有必要对这一日益重要的研究领域的新近发展进行综合,并整体呈现出来。作者一次对时间序列分析的相关进展做出详细、全面的梳理与阐述。这些研究...
  • Matlab时间序列分析

    万次阅读 多人点赞 2018-11-13 18:53:46
    在引入时间序列前,先介绍几个matlab函数 matlab中的gallery函数简析 Matlab 中的 gallery 函数是一个测试矩阵生成函数。当我们需要对某些算法进行测试的时候,可以利用gallery函数来生成各种性质的测试矩阵。其用法...
    展开全文
  • 统计时间间隔为5 min的交通流量时间序列有较好的实时性和较强的周期性。交通流量时间序列的周期特性与预测精度正相关,夜间交通流周期性弱,预测精度为87.41%;日间交通流周期性强,预测精度为92.16%。
  • 时间序列小波分析详细步骤
  • 分析协整周期共振,时间序列分析,多只股票同时分析分析协整周期共振,时间序列分析,多只股票同时分析
  • 在我们的研究中,我们考虑了对印度旁遮普省降雨数据进行统计分析的季节性和周期性时间序列模型。 在本研究论文中,我们应用季节性自回归综合移动平均和周期自回归模型来分析旁遮普省的降雨数据。 为了评估模型识别...
  • 周期性时间序列的预测

    万次阅读 2018-08-17 18:00:00
    女主宣言AIOps 从立项到现在已经半年有余,从最开始的 LVS 异常检测,到如今的实时关联分析,智能运维已经渗透到我们日常运维中的许多场景,之后我们会将积累的经验分享出...

    女主宣言

    AIOps 从立项到现在已经半年有余,从最开始的 LVS 异常检测,到如今的实时关联分析,智能运维已经渗透到我们日常运维中的许多场景,之后我们会将积累的经验分享出来,供大家学习参考,本文最先发布于 OpsDev,转载已获取作者授权。

    PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

    640?wx_fmt=jpeg

    At Tranquility Base, 1969

    by NASA IOTD

    最近在研究时间序列的时候,发现很多序列具有很强的周期性,那如何对此类序列进行预测呢?


    1

    数据处理

    挑选一个如下图的具有周期性的时间序列。该序列是取得是过去7天的数据,每小时一个点,一共7*24个点。

    640?wx_fmt=png  

    2

    划分数据集

    我们取前六天的数据做训练,第七天做测试集。


    3

    平滑处理

    时间序列经常会出现毛刺的点,需要做平滑处理才能分析,类似上图中的数据。消除数据的毛刺,可以用移动平均法,但是移动平均有时候处理完后并不能使数据平滑,我这里采用的方法很简单,但效果还不错:把每个点与上一点的变化值作为一个新的序列,对这里边的异常值,也就是变化比较离谱的值剃掉,用前后数据的均值填充:

    640?wx_fmt=jpeg

    经过处理以后,上图的时间序列得到了平滑处理,效果如下图。

    640?wx_fmt=png  

    4

    周期性分解

    具有周期性特征的序列需要将周期性特征提取出来。python里面的statsmodels工具包里面有针对周期性分解的函数seasonal_decompose,我们可以将序列进行分解。seasonal_decompose这个函数里面有个two_sided的参数,默认是True。Trend处理的时候用到移动平均的方法,熟悉此方法的读者就会发现,经过该方法处理以后,序列收尾两段有一部分数据缺失了,但是如果该参数为FALSE,则只有开始的时候有一段缺失值。

    640?wx_fmt=jpeg
    640?wx_fmt=png

    图3中的第一张图是observed,体现的原始数据;第二张是trend,体现的是分解出来的趋势部分;第三张是seasonal,体现的是周期部分;最后是residual,体现的是残差部分。


    本文采用的是seasonal_decompose的加法模型进行的分解,即 observed = trend + seasonal + residual,另还有乘法模型。在建模的时候,只针对trend部分学习和预测,如何将trend的预测结果加工成合理的最终结果?后面会有介绍。


    5

    预测

    我们对trend部分进行预测,最后再加上seasonal部分。对trend的预测,我们采用ARIMA模型。熟悉该模型的都知道,需要确定三个参数p,q和d,可以使用aic和bic的方法进行定阶,可以查阅相关的文献。

    640?wx_fmt=jpeg


    得到模型以后,就可以进行预测。

    640?wx_fmt=jpeg


    下面是预测的结果,从图中可以看到预测的结果将周期性的特征完美地体现出来了。

    640?wx_fmt=png
     

    6

    评估

    对第七天作出预测,评估的指标为均方根误差rmse,本序列的rmse小于5,效果还是不错的。


    7

    总结

    本文介绍了周期性序列的预测方法,你可能会问并不是所有的序列都具有周期性,事实确实如此,接下来几篇博客,我会重点介绍周期性检测的一些方法。希望此博客对您研究时间序列有所帮助。

    HULK一线技术杂谈

    由360云平台团队打造的技术分享公众号,内容涉及云计算数据库大数据监控泛前端自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

    640?wx_fmt=gif
    展开全文
  • P4J是一个python软件包,用于基于信息论目标函数对不规则采样和异方差时间序列进行周期检测。 P4J是为天文光曲线,恒星大小或通量的不规则采样时间序列开发的。 此程序包的核心是一个称为“周期图”的类,该类扫描...
  • 序列分解1、非季节性时间序列分解 移动平均MA(Moving Average)①SAM(Simple Moving Average) 简单移动平均,将时间序列上前n个数值做简单的算术平均。 SMAn=(x1+x2+…xn)/n②WMA(Weighted Moving Average) ...

    序列分解

    1、非季节性时间序列分解

    移动平均MA(Moving Average)

    ①SAM(Simple Moving Average)
    简单移动平均,将时间序列上前n个数值做简单的算术平均。
    SMAn=(x1+x2+…xn)/n

    ②WMA(Weighted Moving Average)
    加权移动平均。基本思想,提升近期的数据、减弱远期数据对当前预测值的影响,使平滑值更贴近最近的变化趋势。
    用Wi来表示每一期的权重,加权移动平均的计算:
    WMAn=w1x1+w2x2+…+wnxn

    R中用于移动平均的API
    install.packages(“TTR”)
    SAM(ts,n=10)

    • ts 时间序列数据
    • n 平移的时间间隔,默认值为10

    WMA(ts,n=10,wts=1:n)

    • wts 权重的数组,默认为1:n
    #install.packages('TTR')
    library(TTR)
    
    data <- read.csv("data1.csv", fileEncoding="UTF8")
    
    plot(data$公司A, type='l')
    
    data$SMA <- SMA(data$公司A, n=3)
    
    lines(data$SMA)
    
    
    
    plot(data$公司A, type='l')
    
    data$WMA <- WMA(data$公司A, n=3, wts=1:3)
    
    lines(data$WMA)

    这里写图片描述

    2、季节性时间序列分解

    在一个时间序列中,若经过n个时间间隔后呈现出相似性,就说该序列具有以n为周期的周期性特征。
    分解为三个部分:
    ①趋势部分
    ②季节性部分
    ③不规则部分
    R中用于季节性时间序列分解的API
    序列数据周期确定

    • freg<-spec.pgram(ts,taper=0, log=’no’, plot=FALSE)
    • start<-which(freq spec==max(freq spec))周期开始位置
    • frequency<-1/freq freq[which(freq spec==max(freq$spec))]周期长度

    序列数据分解
    decompose(ts)

    data <- read.csv("data2.csv", fileEncoding = "UTF8")
    
    freq <- spec.pgram(data$总销量, taper=0, log='no', plot=FALSE);
    
    start <- which(freq$spec==max(freq$spec))
    frequency <- 1/freq$freq[which(freq$spec==max(freq$spec))]
    
    
    data$均值 <- data$总销量/data$分店数
    
    freq <- spec.pgram(data$均值, taper=0, log='no', plot=FALSE);
    
    start <- which(freq$spec==max(freq$spec))
    frequency <- 1/freq$freq[which(freq$spec==max(freq$spec))]
    
    plot(data$均值, type='l')
    
    meanTS <- ts(
      data$均值[start:length(data$均值)], 
      frequency=frequency
    ) 
    ts.plot(meanTS)
    
    meanTSdecompose <- decompose(meanTS)
    plot(meanTSdecompose)
    
    #趋势分解
    meanTSdecompose$trend
    #季节性分解数据
    meanTSdecompose$seasonal
    #随机部分
    meanTSdecompose$random
    

    这里写图片描述

    展开全文
  • 数学建模中的预测方法:时间序列分析模型.pdf
  • SPSS应用——时间序列分析

    万次阅读 多人点赞 2016-11-07 16:58:52
    为什么要预测呢,因为预测可以帮助了解事物发展的未来状况后,人们可以在目前为它的到来做好准备,通过预测可以了解目前的决策所可能带来的后果,并通过对后果的分析来确定目前的决策,力争使目前的决策获得最佳的...
  • 把坑填上,用前后值的均值把缺失值补上,再看一眼: 填充好缺失值的序列 发现这份数据有这样几个特点,在模型设计和数据预处理的时候要考虑到: 1、这是一个周期性时间序列,数值有规律的以天为周期上下波动,图...
  • 我们表明,可以通过几乎周期性相关(APC)时间序列的离散频谱以非参数方式对商业周期的某些特征进行建模。 根据该频谱的估计特征,通过过滤来提取业务周期。 作为说明,我们在波兰经济的工业生产指数中描述了商业...
  • 时间序列分析 我的教授推荐了这本书。 我昨天读和《 。 两者都以自己的方式很好。 前者要先进得多,并提供一些您可能未曾接触过的想法,而后者则是中级的,但是有一些实际的例子,尽管这些例子有些简单化,而且...
  • 根据作者提出的能量关联度理论,探讨了多维时间序列周期分析问题,互能量关联度的计算及频率域上主要影响因素的提取,结合实例验证了理论和方法的可行
  • SPSS(十九)SPSS之时间序列模型(图文+数据集)

    万次阅读 多人点赞 2019-06-17 22:32:38
    SPSS(十九)SPSS之时间序列模型(图文+数据集) 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列...在大数据时代,时间序列分析已经成为 AI 技术的一个分支,通过将时间序列分析与分类模型相结合,更好...
  • 季节性时间序列建模与预测 ,孟玲清,王晓雨,所谓所谓时间序列,就是各种社会、经济、自然现象的数量指标按照时间次序排列起来的统计数据,其有多种构成因素,每种因素对系统
  • 谐波的matlab代码python中时间序列的谐波分析 的答案,源自 。 Brain dump 和有关该过程的更多文档位于 。
  • 基于R的时间序列分析

    2019-01-09 11:50:48
    time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等。...
  • 针对年径流序列存在多年变化周期,但径流时间序列变化受诸多因素影响,存在着多种不确定的情况,笔者采用极大熵谱分析来提取径流时间序列周期成分,对黄河上游贵德站年径流时间序列进行周期分析,得出贵德站具有 12....
  • 时间序列小波分析

    2019-01-23 12:49:25
    不但具有趋势性、周期性等特征, 还存在随机性、突变性以及“多时间尺度” 结构,具有多层次演变规律。 对于这类非平稳时间序列的研究,通常需要某一频段对应的时间信息,或某一时段的频域信息。 显然,时 域分析和...
  • 这是当初刚进公司时,leader给的一个独立练手小项目,关于时间序列预测,情景比较简单,整个过程实现下来代码也仅100多行,但完成过程中踩了很多坑,觉的有必要分(tu)享(cao)一下。完整代码和样例数据放到了我的...
  • 数学建模 时间序列分析源程序,matlab源程序 可供大家数学建模用
  • 第一章 时间序列分析简介按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。对时间序列进行观察、研究、找寻它变化发展的规律,预测它将来的走势就是时间序列分析。描述型时序分析:通过直观的...
  • 时间序列分析之:傅里叶变换找周期

    千次阅读 热门讨论 2021-01-27 11:10:18
    时间序列分析 万万没想到吧,信号处理的技术,能用在数据分析中。谁叫我是学通信出生的呢? 承接上一篇:函数分解 本节承接上文找函数的周期。 文章目录时间序列分析傅里叶变换一、傅里叶变换(FFT)是什么?二、...
  • 时间序列趋势项提取

    2018-04-26 20:42:46
    通过MATLAB对时频特性分析,利用短时傅里叶变换STFT,计算时间序列的短时离散傅里叶变换,得到瞬时频率。Wigner-Ville时频分布图,计算时间序列的Wigner-Ville时频分布图,得到瞬时频率
  • 时间序列分析是一种动态数据处理的统计方法。该方法基于随机过程理论和数理统计学方法,研究随机数据序列所遵从的统计变化规律,以用于解决实际问题。通常影响时间序列变化的4个要素如下: 长期趋势(T):是时间...
  • 我们考虑一些时间序列,例如道路上的交通流量, > plot(T,X,type="l") > reg=lm(X~T) > abline(reg,col="red") 如果存在趋势,我们应该将其删除,然后处理残差 > Y=residuals(reg) > acf(Y...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,998
精华内容 29,599
关键字:

时间序列周期性分析