1. 时间序列预测
时间是构成世界的一个维度,很难找到哪个现象或哪个事物和时间无关。气象、金融、工业、市场以及个人健康等众多领域中,时间序列预测都得到了大量应用。尤其是在工业领域,预测性维护,能耗预测与优化已得到了广泛应用。
尤其在数字孪生(DT)领域,原来都是基于物理方程算法,如CAE计算获得外部载荷下的数字响应模拟,时间长,计算代价大,也造成DT逐渐变成了3D可视化大屏。近10年,一些基于机器学习的代理模型算法逐渐多起来,在DT上应用广泛。但代理模型的采用也逃不出只能对部件和设备级仿真的限制。要想进行产线级、车间级的仿真,运行参数的模拟,时间序列预测可能会起到一定的作用。
预测模型
预测算法基本可以分为两类:基于统计模型的,比如ARMA、SARIMAX、GBRT、VAR、Prophet,基于神经网络的,如LSTM,CNN,Transformer等。
2. ARIMA实践
2.1 ARIMA介绍
ARIMA模型是差分自回归移动平均模型的缩写,可以对非平稳时间序列进行预测,公式为:
ARIMA(p,d,q) = yt‘=C+φ1yt-1’+…+φpyt-p’ +θ1εt-1’+…+θqεt-q’+εt+μ
其中,
p是AR§自回归过程的阶数
d是积分的阶数
q是MA(q)移动平均过程的阶数
也就是说,它可以退化成自回归模型AR§或移动平均过程MA(q)
MA过程,当前值取决于序列的均值μ、当前误差项εt,以及过去误差项εt-q的线性组合
AR过程,当前值取决于序列过去值yt-p和当前误差项εt的线性组合
2. 2项目实践
2.2.1 项目目标及数据
数据集:从SCADA中导出了30天的电压数据,数据为每15分钟一个。格式如下:

目标:取电压均值Ua进行预测。使用29天的数据进行训练,预测未来1天的每15分钟的电压值。
2.2.2 实验过程
1. 读入数据
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('c:/TSF/voltage.csv')
df.head()
2. 数据处理
读取数据后,查看数据的基本情况,补充缺失值,去掉不完整天数据。
#查看数据,数量,平均值、标准差、四分位、最小最大值
df.describe()
#去掉第一天不完整的数据
df2= df.iloc[61:]
#重置index
df=df.reset_index()
# 时间戳转换为datetime格式
df['Timestamp']=pd.to_datetime(df['Timestamp'])
# 查看空值
df.isna().sum()
rows_with_na=df[df.isna().any(axis=1)]
print(rows_with_na)
# 去掉空值
#df2=df.dropna()
# 回头看,我们预测一天的数据,第一天数据不完整,需要去掉,中间24号数据关键,所以不能简单干掉,要进行填充,用前后5个平均值
uh_aver= np.mean(df['Uh'][109:112])
ua_aver=np.mean(df['Ua'][109:112])
# 数据填充
df['Uh'][113]=uh_aver
df['Ua'][113] =ua_aver
#检查是否还有空值
df.isna().sum()
df.


