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

掌握时间序列分析,从零基础到ARIMA高手

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

掌握时间序列分析,从零基础到ARIMA高手

引用
CSDN
9
来源
1.
https://blog.csdn.net/fenglingguitar/article/details/141927949
2.
https://blog.csdn.net/windowshht/article/details/137715108
3.
https://blog.csdn.net/qq_33375598/article/details/137740852
4.
https://cloud.baidu.com/article/3328834
5.
https://cloud.baidu.com/article/3328665
6.
https://blog.csdn.net/Morse_Chen/article/details/144793235
7.
https://blog.csdn.net/weixin_39753819/article/details/135863541
8.
https://cloud.baidu.com/article/3064036
9.
https://www.feishu.cn/content/timeseries-database-use-cases

时间序列分析是数据分析领域的重要工具,广泛应用于金融、经济、物联网等多个领域。其中,ARIMA模型作为经典的时间序列预测方法,因其强大的预测能力和广泛的适用性而备受青睐。本文将从零基础开始,逐步讲解时间序列分析的基本概念和ARIMA模型的具体应用,帮助读者快速掌握这一重要工具。

01

时间序列分析基础

什么是时间序列分析?

时间序列分析是一种统计方法,通过观察和预测数据随时间的变化趋势来揭示潜在规律。其核心思想是寻找系统的当前值与其过去的运行记录(观察数据)的关系,建立能够比较精确地反映时间序列中动态依存关系的数学模型,并借此对系统的未来行为进行预报。

应用场景

时间序列分析在多个领域都有广泛应用:

  • 金融市场:股票价格预测、汇率预测
  • 经济预测:GDP预测、失业率预测
  • 物联网数据:传感器数据预测
  • 库存管理:销售预测、库存优化

数据预处理

在进行时间序列分析之前,需要对数据进行预处理,主要包括:

  1. 平稳性检验:检查数据是否具有稳定的均值、方差等特性。常用的方法有ADF检验(Augmented Dickey-Fuller Test)。
  2. 白噪声检验:判断数据是否存在显著变化。白噪声序列无预测价值,需停止分析。
  3. 差分处理:对非平稳数据进行差分,使其达到平稳状态。
02

ARIMA模型详解

ARIMA模型(Autoregressive Integrated Moving Average model)是时间序列预测分析的重要工具,特别适用于具有趋势但无明显季节性的数据。其模型形式为ARIMA(p,d,q),其中:

  • p:自回归阶数
  • d:差分次数
  • q:滑动平均阶数

模型建立步骤

  1. 数据预处理:确保数据平稳,必要时进行差分处理。
  2. 参数选择
    • 通过自相关函数(ACF)和偏自相关函数(PACF)图确定p和q的值
    • 使用AIC(赤池信息量准则)或BIC(贝叶斯信息准则)帮助选择最优参数组合
  3. 模型训练:使用选定的参数建立ARIMA模型,并通过残差检验评估模型拟合效果。
  4. 模型预测:对未来数据进行预测,并计算预测区间。
03

实际案例分析

以某公司年度销售额数据为例,演示ARIMA模型的建立和预测过程。

数据准备

假设我们有一组年度销售额数据:

年份
销售额(万元)
2010
120
2011
130
2012
145
2013
150
2014
160
2015
175
2016
180
2017
195
2018
205
2019
220
2020
230
2021
245

Python代码实现

import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.stattools import acf, pacf
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt

# 数据准备
data = {'Year': [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021],
        'Sales': [120, 130, 145, 150, 160, 175, 180, 195, 205, 220, 230, 245]}
df = pd.DataFrame(data)
df.set_index('Year', inplace=True)

# 平稳性检验
result = adfuller(df['Sales'])
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
    print('\t%s: %.3f' % (key, value))

# 差分处理
df['Sales_diff'] = df['Sales'].diff().dropna()
result_diff = adfuller(df['Sales_diff'].dropna())
print('ADF Statistic (after differencing): %f' % result_diff[0])
print('p-value (after differencing): %f' % result_diff[1])

# ACF和PACF图
lag_acf = acf(df['Sales_diff'].dropna(), nlags=10)
lag_pacf = pacf(df['Sales_diff'].dropna(), nlags=10, method='ols')

plt.subplot(121)
plt.plot(lag_acf)
plt.axhline(y=0, linestyle='--', color='gray')
plt.axhline(y=-1.96/np.sqrt(len(df['Sales_diff'].dropna())), linestyle='--', color='gray')
plt.axhline(y=1.96/np.sqrt(len(df['Sales_diff'].dropna())), linestyle='--', color='gray')
plt.title('Autocorrelation Function')

plt.subplot(122)
plt.plot(lag_pacf)
plt.axhline(y=0, linestyle='--', color='gray')
plt.axhline(y=-1.96/np.sqrt(len(df['Sales_diff'].dropna())), linestyle='--', color='gray')
plt.axhline(y=1.96/np.sqrt(len(df['Sales_diff'].dropna())), linestyle='--', color='gray')
plt.title('Partial Autocorrelation Function')
plt.tight_layout()

# 模型训练
model = ARIMA(df['Sales'], order=(1, 1, 1))
model_fit = model.fit()

# 模型预测
forecast = model_fit.forecast(steps=5)
print('Forecast for next 5 years:')
print(forecast)

结果分析

通过ADF检验发现原始数据非平稳,差分后数据达到平稳状态。根据ACF和PACF图选择合适的p和q值,最终建立ARIMA(1,1,1)模型。预测结果显示未来5年销售额将持续增长,具体数值如下:

年份
预测销售额(万元)
2022
260.5
2023
276.3
2024
292.4
2025
308.8
2026
325.5
04

总结与展望

通过本文的学习,读者应该掌握了时间序列分析的基本概念和ARIMA模型的具体应用。ARIMA模型虽然强大,但也有其局限性:

  1. 要求数据具有稳定性,或通过差分达到稳定
  2. 本质上只能捕捉线性关系
  3. 参数选择较为复杂

未来可以进一步学习:

  1. 季节性ARIMA(SARIMA)模型,用于处理季节性数据
  2. 深度学习方法在时间序列预测中的应用
  3. 组合模型,将多种方法结合以提高预测精度

希望本文能为读者在时间序列分析领域提供一个良好的开端,激发进一步学习的兴趣。

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