问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ARIMA模型详解:基于历史数据预测未来值的时间序列分析

创作时间:
作者:
@小白创作中心

ARIMA模型详解:基于历史数据预测未来值的时间序列分析

引用
CSDN
1.
https://blog.csdn.net/weixin_48747334/article/details/140000104

时间序列预测的主要目标是基于历史数据模式来预测未来的值。常见的研究方向包括:电池SOC、股票预测、碳价预测、轴承寿命预测、气温、降雨、风速等气象变量预测、道路、铁路或航空的交通流量预测等等!一个模型可以嵌套多种研究方向。广泛发表于高水平期刊上

ARIMA模型

ARIMA模型(自回归差分移动平均模型,AutoRegressive Integrated Moving Average Model)是一种广泛用于时间序列数据分析和预测的统计模型。ARIMA模型结合了三种主要的时间序列建模方法:自回归(AR)、差分(I)和移动平均(MA)。下面将简单地解释每个部分:

  1. 自回归(AR)
    自回归部分表示当前值与其之前的一系列值(滞后值)之间的关系。可以理解为,当前的数据点是基于它之前的一个或多个数据点的加权和。这里的“自”指的是自身,即当前值是它自己过去值的函数。

  2. 差分(I)
    差分是为了使时间序列数据达到平稳状态。平稳意味着时间序列的统计特性(如均值和方差)不随时间变化。在实际应用中,许多时间序列数据(如新能源波动数据、股票价格)会表现出趋势或季节性模式,这会使数据非平稳。通过差分一次或多次,可以消除这些时间依赖的结构,从而简化后续的分析和预测。

  3. 移动平均(MA)
    移动平均部分考虑了模型中的随机误差项及其滞后值的线性组合。这意味着当前的观测值受到一系列过去误差项的影响。这一部分可以帮助模型捕捉时间序列中的随机波动,即使在滞后的误差中也可能存在某种影响或模式。

将这三部分结合起来,ARIMA模型就能够描述和预测具有复杂模式的时间序列数据,包括那些显示出明显趋势或季节性的数据。这使得ARIMA模型成为金融、机械、电气、新能源等预测等领域中非常强大的工具。

数据格式

时间序列预测是用于预测随时间变化的数据的未来趋势,通常用于处理时间相关的数据,如股票预测、房价预测、天气变化等。数据格式为:由时刻1—4的值预测时刻5的值,由时刻2—5的值预测时刻6的值,由时刻3—6的值预测时刻7的值,以此类推。

预测结果

MATLAB代码实现

%% 清空环境变量
warning off             % 关闭警告信息
close all               % 关闭所有打开的图窗
clear                   % 清空所有变量
clc                     % 清空命令行界面

%% 导入数据
data = xlsread('示例数据.xlsx');   % 从xlsx文件中读取数据
step = 24;                     % 设置预报步长
TempData = data;               % 临时存储原始数据
output = data;                 % 输出数据初始化

% 去趋势处理
TempData = detrend(TempData);  % 从数据中移除线性趋势

% 计算趋势函数
TrendData = data - TempData;   % 计算原数据和去趋势后数据的差值

% 差分,平稳化时间序列
[H, PValue, TestStat, CriticalValue] = adftest(TempData);  % 使用ADF测试判断序列是否平稳
difftime = 0;                                             % 初始化差分次数计数器
SaveDiffData = [];                                        % 初始化存储差分数据的数组

while ~H
    % 差分,平稳化时间序列
    SaveDiffData = [SaveDiffData, TempData(1,1)];          % 保存每次差分的首个数据点
    TempData = diff(TempData);                             % 对数据进行差分
    difftime = difftime + 1;                               % 差分次数加一
    [H, PValue, TestStat, CriticalValue] = adftest(TempData);  % 再次进行ADF测试
end

% 模型定阶或识别
test = [];

% 自回归对应PACF,给定滞后长度上限p和q
for p = 0:5
    for q = 0:5
        if (p + q ~= 0)
            m = armax(TempData, [p q]);  % 使用ARMAX模型估计参数
            AIC = aic(m);                % 计算AIC值用于模型比较
            test = [test; p q AIC];
        end
    end
end

for k = 1:size(test, 1)
    % 选择AIC值最小的模型
    if test(k, 3) == min(test(:, 3))
        p_test = test(k, 1);
        q_test = test(k, 2);
        break;
    end
end

% armax(p,q),[p_test q_test]对应AIC值最小
m = armax(TempData, [p_test q_test]);
ARIMA_Predict = predict(m, TempData, step);      % 使用ARIMA模型进行预测
ARIMA_Forcast = forecast(m, TempData, step);     % 使用ARIMA模型进行预测
PreR = [ARIMA_Predict' ARIMA_Forcast'];          % 结合预测结果

部分图片来源于网络,侵权联系删除!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号