首页 > 其他分享 >R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

时间:2024-02-22 12:33:58浏览次数:19  
标签:加权 季节性 STL LOESS html 分解 时间 序列

原文链接:http://tecdat.cn/?p=22632 

原文出处:拓端数据部落公众号

这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法。我们将对一种叫做STL的算法进行研究,STL是 "使用LOESS(局部加权回归)的季节-趋势分解 "的缩写,以及如何将其应用于异常检测。

其基本思想是,如果你有一个有规律的时间序列,你可以通过STL算法运行该序列,并分离出规律的模式。剩下的是 "不规则的",而异常检测相当于判定不规则性是否足够大。

例子:航空乘客,1949-1960

让我们在数据集上运行该算法,该数据集给出了1949-1960年期间每月的航空公司乘客数量。首先,这是未经修改的时间序列。

  html
plot(y)

 

 

 

这里显然有一个规律性的模式,但是在这个序列中没有任何明显的下降,无法在异常检测中显示出来。所以我们将设置一个。

  html
y[40] = 150

 

 

跌幅足够大,我们希望异常检测能发现它,但又不至于大到你只看一眼图就会发现。现在让我们通过STL检查它。 

  html
plot(fit)

 

 

首先,我不是在y上运行STL,而是在log(y)上。

该算法将序列分解为三个部分:季节性、趋势和剩余成分。季节性是周期性成分,趋势是一般的上升/下降,剩余成分是剩下的趋势成分。季节性和趋势共同构成了序列的 "常规 "部分,因此是我们在异常检测过程中要剔除的部分。

剩余部分基本上是原始序列的正常化版本,所以这是我们监测异常情况的部分。剩余序列的下降是很明显的。我们在1952年初设置的异常下降很可能算在内。

我们还可以调整每一时期的观测值数量,负责分离季节性和趋势成分的平滑方法,拟合模型的 "稳健性"(即对异常值不敏感)等等。这些参数中的大多数需要对基础算法的工作原理有一定的了解。

下面是一些显示实际数据与阈值的代码。

  html

data <- merge(df, ba, by.x='x')
ggplot(data) +
  geom(aes(x=x, ymin=ymin, ymax=ymax)) 

 

再次,聪明如你可能会注意到通过exp()进行的逆变换。我们现在讨论这个问题。

为什么要进行对数和逆变换?

并非所有的分解都涉及对数变换,但这个分解却涉及。其原因与分解的性质有关。STL的分解总是加法的。

  html
y = s + t + r

但对于某些时间序列,乘法分解更适合。

  html
y = str

这种情况发生在销售数据中,季节性成分的振幅随着趋势的增加而增加。这实际上是乘法序列的标志,航空旅客序列也表现出这种模式。为了处理这个问题,我们对原始值进行对数转换,这使我们进入加法领域,在那里我们可以进行STL分解。当我们完成后,我们再进行逆变换,回到原始序列。

多重季节性的情况如何?

一些时间序列有一个以上的季节性。例如,在酒店预订时间序列有三个季节性:每日、每周和每年。

虽然有一些程序可以生成具有多个季节性成分的分解,但STL并没有这样做。最高频率的季节性被作为季节性成分,而任何较低频率的季节性都被吸收到趋势中。


最受欢迎的见解

1.在python中使用lstm和pytorch进行时间序列预测

2.python中利用长短期记忆模型lstm进行时间序列预测分析

3.使用r语言进行时间序列(arima,指数平滑)分析

4.r语言多元copula-garch-模型时间序列预测

5.r语言copulas和金融时间序列案例

6.使用r语言随机波动模型sv处理时间序列中的随机波动

7.r语言时间序列tar阈值自回归模型

8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类

9.python3用arima模型进行时间序列预测

标签:加权,季节性,STL,LOESS,html,分解,时间,序列
From: https://www.cnblogs.com/tecdat/p/18027069

相关文章

  • C++ STL 容器-string类型
    C++STL第一部分-容器STL的介绍C++的STL分为六大部分容器分为String容器例子1std::stringstr1,str2,str3,str4;str1.assign("abcd");//给str1赋值abcdstr2.assign("abcd",3);//获取abcd中的3个,从0到2str3.assign(str1);//获取str1//注意str3()和str3.a......
  • STL的深浅拷贝问题
    STL的深浅拷贝问题​ STL容器所提供的都是值(value)寓意,而非引用(reference)寓意,也就是说当我们给容器中插入元素的时候,容器内部实施了拷贝动作,将我们要插入的元素再另行拷贝一份放入到容器中,而不是将原数据元素直接放进容器中,也就是说我们提供的元素必须能够被拷贝。#define_C......
  • STL简介
    01.STL的介绍(重点)1.STL(StandardTemplateLibrary,标准模板库)2.STL提供了六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器​ 容器:各种数据结构​ 算法:各种常用的算法(冒泡,排序)​ 迭代器:扮演了容器与算法之间的胶合剂(类似于指针等)​ 仿函数:行为类似函数,可作为算法的某种策略......
  • C++ STL map
    map<int,string>MyMap;//下标方式key值重复进行替换MyMap[0]="233";MyMap[0]="23333";//insert方法key值重复无法插入MyMap.insert(pair<int,string>(1,"zhangsan"));MyMap.insert(pair<int,string>(1,"zhangsan2"))......
  • 【C++】STL string类例题新思路记录(编写一个程序,告诉用户输入的句子包含多少个元音字
    题干:编写一个程序,告诉用户输入的句子包含多少个元音字母。 方案一:1、创建一个普通函数,依次传入5个元音字母对查找字符串进行检测。2、函数通过依次传入的单个元音字母,循环查找整个字符串最后返回统计值。1#include<string>2#include<iostream>3usingnamespace......
  • c++利用 STL解析ini 文件
    ini文件是InitializationFile的缩写,即初始化文件,通常存放的是一个程序的初始化信息,是Windows的系统配置文件所采用的存储格式,统管windows的各项配置。ini文件的后缀名不一定是.ini,也可以是.cfg、.conf或者是.tx*。ini文件是技术人员经常用到的一种系统配置方法,如何读取和快速识别......
  • C++ STL
    listlist的定义与结构极少遇到用list的情况list为双向链表容器,它用节点形式存储元素,并使用指针将节点链接在一起,我们使用时不会用指针,只是list的底层用了指针。它有双向性(可以在常数时间内进行插入,删除与访问操作),动态大小,不连续存储(同链表)。可以用迭代器遍历链表中的元素。l......
  • C转C++速成浅入浅出系列——STL之bitset
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。bitset【bitset:位集,比特集】理解为比特集。特点是①只能存入0与1②小端存储(可参阅计算机组成原理知识,表现为按b[i]增序输出时会倒序输出)需提供头文件#include<bitset> 创建注:①存储时......
  • 【C++入门到精通】C++入门 —— list (STL)
    @TOC前言文章绑定了VS平台下std::list的源码,大家可以下载了解一下......
  • C转C++速成浅入浅出系列——STL之queue
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。queue【queue:队伍,队列】(学过数据结构的熟的不能再熟了吧)理解为队列。特点是①先入先出②只能对队伍的队首进行出队操作,对队伍的队尾进行入队操作。需提供头文件#include<queue>由于队列的......