2024/5/5周报

摘要

本周阅读的文献中提出了一种基于趋势分量和随机增量特征的ARIMA模型与K-means聚类模型相结合的水质预测方法,将ARIMA模型与聚类模型相结合,可以弥补单一ARIMA模型的不足。通过聚类分析发现可能存在的影响因素,提高对于具有随机特征的数据预测精度。文献中用到的两种机器学习方法,一是AR模型和MA模型结合的ARIMA模型,能够利用数据本身的历史信息来预测未来,二是K-means聚类分析方法,能够把相似的数据样本分到一组(簇)。最后实现ARIME的代码以及对上周自注意力机智的位置编码内容进行补充学习。

Abstract

In the literature read this week, a water quality prediction method combining ARIMA model with K-means clustering model based on trend components and random incremental features is proposed. Combining ARIMA model with clustering model can make up for the deficiency of single ARIMA model. Through cluster analysis, the possible influencing factors are found, and the prediction accuracy of data with random characteristics is improved. Two machine learning methods used in literature, one is ARIMA model combining AR model and MA model, which can use historical information of data itself to predict the future, and the other is K-means clustering analysis method, which can divide similar data samples into a group (cluster). Finally, the code of ARIME is realized and the position coding content of last week’s self-attention wit is supplemented.

文献阅读

题目

Application of Time Serial Model in Water Quality Predicting

现有问题

ARIMA模型是一种经典的时间序列预测方法,能较好地反映时间序列数据的线性特征。然而,单一的ARIMA模型难以全面有效地处理河流水质的非线性变化,对具有趋势特征的数据有较好的预测效果,但对具有随机特征的数据预测效果较差。

创新点

将ARIMA模型与K-means聚类分析相结合,提出了一种基于趋势分量和随机增量特征的ARIMA模型与聚类相结合的水质预测方法。采用k均值聚类方法分析监测水域降水与TP指数的关系,计算降水对水质变化的随机增量特征,结合趋势分量特征和随机增量特征,计算水质预测结果。

ARIMA(自回归差分移动平均模型)

ARIMA模型,是一种将AR和MA模型结合起来的模型,用于处理更复杂的时间序列问题。

AR(自回归模型)

自回归模型AR,就是使用一个变量的过去值来预测其未来值的模型。自回归模型假设过去的值与未来的值之间存在线性关系。假设你能通过给过去的值加权求和来预测未来的值,这些权重就是模型的参数。

在这里插入图片描述

如果我们要预测时间t+1的值,我们可以使用到时间t为止的所有真实值;但是如果我们要预测时间t+2的值,我们就没有时间t+1的真实值,所以我们必须使用我们在时间t+1的预测值。这个过程将持续下去,因此,越往未来预测,我们依赖的预测值就越多。这也就是为什么时间序列预测中的误差会随着时间的推移而累积。

AR模型与多元线性回归模型在形式上非常相似,但应用的数据类型和各自对数据的假设有很大差别,AR模型自变量之间有严格的时间顺序,而多元线性回归模型则没有。

MA(移动平均模型)

它描述的是当前时间点的数据与过去噪声的关系。白噪声是一种特殊的时间序列模型,每个时间点的数据都是独立且服从相同分布的,且具有常数的均值和方差。
在这里插入图片描述

AR(自回归)模型和MA(移动平均)模型虽然在形式上看起来很相似,但是他们的关键区别在于他们对过去信息的处理方式。

对于AR模型来说,当前值是过去值的函数,是在使用过去的"实际"观察值来预测现在的值。对MA模型来说,当前值是过去噪声(或称之为误差或冲击)的函数。这里的“白噪声”实际上是模型无法解释的随机部分,是未能被模型捕获的信息。MA模型是在试图用过去的"错误"或"冲击"来预测现在的值。

AR模型是使用过去的实际值进行预测,而MA模型是使用过去的预测误差进行预测。举个例子:影响明日会不会下雨的真正因素并不是“今天”或“昨天”这些时间概念本身,而是风、云、日照等更加客观和科学的因素(这些其实就是MA模型认为的“偶然因素”)。

ARIMA模型

ARIMA模型的基本思想是利用数据本身的历史信息来预测未来。一个时间点上的标签值既受过去一段时间内的标签值影响,也受过去一段时间内的偶然事件的影响。这就是说,标签值是围绕着时间的大趋势而波动的,其中趋势是受历史标签影响构成的,波动是受一段时间内的偶然事件影响构成的,且大趋势本身不一定是稳定的。其中:
1)AR部分用于处理时间序列的自回归部分,它考虑了过去若干时期的观测值对当前值的影响。
2)I(差分)部分用于使非平稳时间序列达到平稳,消除了时间序列中的趋势和季节性因素。
在这里插入图片描述

3)MA部分用于处理时间序列的移动平均部分,它考虑了过去的预测误差对当前值的影响。

K-means聚类分析

k-means算法又名k均值算法,是基于划分的聚类,K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述。K 均值聚类是一种分区方法,它将数据中的观测值视为具有位置和相互间距离的对象。它将对象划分为 K 个互斥簇,使每个簇中的对象尽可能彼此靠近,并尽可能远离其他簇中的对象。每个簇的特性由其质心或中心点决定。聚类中使用的距离通常不代表空间距离。

K-Means聚类算法思路

①随机选择k个聚类中心

②计算所有点到k个聚类中心的距离

③选择样本中每个点到每个聚类中心距离的最小值,并将其归类

④重新计算聚类中心,将聚类中心移动至每对于簇的均值点

⑤重复“归类-移动”(以上②③④步骤),直至聚类中心不再移动

研究实验

数据集

数据通过水质监测平台获取某流域2019年1月1日至2020年12月31日的水质数据。共有16876行数据,主要有水温、pH、溶解氧、电导率、浊度、高锰酸盐指数、氨氮、总氮、总氮9项指标。其中,高锰酸盐指标、氨氮、总磷、总氮每4 h采集一次,其他5项指标每小时采集一次。

以某流域水质监测数据为样本,选取水质总磷(TP)指数作为预测对象。

评价指标

检验模型预测精度的常用指标有MAE、MSE和MAPE。其中MAE为绝对误差的平均值,能较好地反映预测误差值的实际情况。MSE即均方误差,是指参数预测值与实际值之差的平方的期望值。MSE评估数据的波动。MSE越小,模型的预测精度越高。MAPE是平均绝对百分比误差。MAPE值越小,模型的预测精度越高。

实验目的

对比ARIM单一模型与ARIMA结合聚类的预测精度,证实ARIMA结合聚类其预测精度高于单一ARIMA模型,说明ARIMA结合聚类可以更好预测具有随机特征的数据。

实验设置

1.首先对样本数据进行清洗、平稳性分析和白噪声分析;
2.其次,根据贝叶斯信息准则(BIC)原理选择合适的参数,利用ARIMA方法获得趋势分量特征,进行水质预测;
3.再次,采用k均值聚类方法分析监测水域降水与TP指数的关系,计算降水对水质变化的随机增量特征。
4.最后,结合趋势分量特征和随机增量特征,计算水质预测结果,比较ARIMA模型与ARIMA结合聚类模型两种方法的预测结果。

实验结果

通过对2020年TP数据进行聚类分析,可以看出TP数据大部分时间分布在0.02 ~ 0.065之间,但也有少量数据分布在这个范围之外。因此可以确定还有其他因素影响着TP指标数据的走势,分析监测水域附近降雨对TP指数的影响,通过相关分析可以确定降雨量增量与TP增量之间存在很强的相关性。
在这里插入图片描述

下面两图分别为单一ARIMA模型的预测结果和ARIMA结合聚类的预测结果。可以看出来TP指数预测值与这一时期实际数据的变化趋势较为接近,说明ARIMA模型结合聚类模型的预测效果更准确。
在这里插入图片描述在这里插入图片描述

从评价指标也可以看出,利用ARIMA模型预测TP指数,其预测精度不高。这是因为ARIMA模型只提取了水质变化的趋势分量特征,而不能提取随机变化特征。与ARIMA水质预测方法相比,ARIMA结合聚类的方法具有更高的精度,其平均绝对误差(MAE)、均方误差(MSE)和平均绝对百分比误差(MAPE)分别降低了44.6%、56.8%和45.8%。
在这里插入图片描述

深度学习

ARIMA模型python实现

使用ARIMA 模型对非平稳时间序列进行建模操作,差分运算具有强大的确定性的信息提取能力, 许多非平稳的序列差分后显示出平稳序列的性质, 这是称这个非平稳序列为差分平稳序列。 对差分平稳序列可以还是要ARMA 模型进行拟合, ARIMA 模型的实质就是差分预算与 ARMA 模型的结合。

#导入数据
import pandas as pd
filename = r'D:\datasets\arima_data.xls'
data = pd.read_excel(filename, index_col = u'日期')
 
#画出时序图
import matplotlib.pyplot as plt     
plt.rcParams['font.sans-serif'] = ['SimHei']    #定义使其正常显示中文字体黑体
plt.rcParams['axes.unicode_minus'] = False      #用来正常显示表示负号
data.plot()
plt.show()
#画出自相关性图
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
plot_acf(data)
plt.show()
 
#平稳性检测
from statsmodels.tsa.stattools import adfuller
print('原始序列的检验结果为:',adfuller(data[u'销量']))
#原始序列的检验结果为: (1.8137710150945268, 0.9983759421514264, 10, 26, {'1%': -3.7112123008648155,'10%': -2.6300945562130176, '5%': -2.981246804733728}, 299.46989866024177)
#返回值依次为:adf, pvalue p值, usedlag, nobs, critical values临界值 , icbest, regresults, resstore 
#adf 分别大于3中不同检验水*的3个临界值,单位检测统计量对应的p 值显著大于 0.05 , 说明序列可以判定为 非平稳序列
#通过AIC确定ARIMA参数,打印原始数据和差分后数据的自相关系数图和偏自相关系数图
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
 
D_data.plot()   #画出差分后的时序图
plt.show()
 
plot_acf(D_data)    #画出自相关图
plt.show()
plot_pacf(D_data)   #画出偏相关图
plt.show()
print(u'差分序列的ADF 检验结果为: ', adfuller(D_data[u'销量差分']))   #平稳性检验
#差分序列的ADF 检验结果为:  (-3.1560562366723537, 0.022673435440048798, 0, 35, {'1%': -3.6327426647230316, '10%': -2.6130173469387756, '5%': -2.9485102040816327}, 287.5909090780334)
#一阶差分后的序列的时序图在均值附近比较平稳的波动, 自相关性有很强的短期相关性, 单位根检验 p值小于 0.05 ,所以说一阶差分后的序列是平稳序列
#对一阶差分后的序列做白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果:',acorr_ljungbox(D_data, lags= 1)) #返回统计量和 p 值
# 差分序列的白噪声检验结果: (array([11.30402222]), array([0.00077339])) p值为第二项, 远小于 0.05
 
#对模型进行定阶
from statsmodels.tsa.arima_model import ARIMA 
 
pmax = int(len(D_data) / 10)    #一般阶数不超过 length /10
qmax = int(len(D_data) / 10)
bic_matrix = []
for p in range(pmax +1):
    temp= []
    for q in range(qmax+1):
        try:
            temp.append(ARIMA(data, (p, 1, q)).fit().bic)
        except:
            temp.append(None)
        bic_matrix.append(temp)
 
bic_matrix = pd.DataFrame(bic_matrix)   #将其转换成Dataframe 数据结构
p,q = bic_matrix.stack().idxmin()   #先使用stack 展开, 然后使用 idxmin 找出最小值的位置
print(u'BIC 最小的p值 和 q 值:%s,%s' %(p,q))  #  BIC 最小的p值和q 值:0,1
#在确保三个基本假设都满足后,即可开始建模,其中ARIMA的三个参数(p,d,q)选用步骤3和5的最优结果
#所以根据得到的q、p可以建立ARIMA 模型,ARIMA(0,1,1)
model = ARIMA(data, (p,1,q)).fit()
model.summary2()        #生成一份模型报告
#forecast()中填入预测期数,开始预测
model.forecast(5)   #为未来5天进行预测,返回预测结果、标准误差和置信区间

Positional Encoding(位置编码)

对于Self-attention结果而言,它可以一次性的将所有的字都当做输入。但是NLP的输入是有特点的,其特点是输入的文本要按照一定的顺序才可以。因为,文本的顺序是带有一部分语义关系的,同一个词在句子中的不同位置可能就代表了不一样的语义。比如下面两句话,不同的语序就有不同的语义。
1.我喜欢吃洋葱
2.洋葱喜欢吃我
在这里插入图片描述
注意力机制没有考虑序列之间的先后关系,即上下文。那如果在序列中随意变换词与词之间的位置,得到的结果肯定是一样的,所以我们需要对每个词加入位置信息。在self-attention这个layer中少了一个position information(位置信息),那么把这个位置信息插入到self-attention中去就需要用到positional encoding这个技术,为每个位置设定一个专属的位置向量,然后将这个位置向量加到上,现在的位置就是已知的了。
在这里插入图片描述

位置编码是需要在最开始输入的时候就进行处理的,最开始的词都被编码成向量如x1,x2,x3,同样要根据位置编码对应的位置向量t1,t2,t3,将x1与t1对应做一个向量加法后生成新的x1,其他编码以此类推,新的向量就包含了位置信息。

位置信息也是通过Embedding进行表示,对于位置编码来说有两种方式可以得到,而Transformer中使用的是后者。

  1. 通过Embedding进行训练
  2. 通过公式计算

相对位置编码的特点,关注一个token与另一个token距离的相对位置(距离差几个token),使用相对位置的方法,可以清晰的知道单词之间的距离远近的关系。
在这里插入图片描述
相对位置表示方法:
在这里插入图片描述

总结

ARIMA模型是一种有效分析时间序列变化趋势的统计模型,它可以用来分析各种有时间序列性质的问题。它具有较高的分析效率和准确性,通过仔细查看和识别噪声,可以得出准确的结论。因此,ARIMA模型是一种优秀的数据分析方法,在很多领域都有广泛的应用。

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值