首页 > 编程知识 正文

时间序列的自回归模型,时间序列arima模型步骤

时间:2023-05-04 23:31:30 阅读:283784 作者:2364

文章目录 知识点梳理1 时间预处理1.1 创造时间序列1.2 选择时间序列1.3 重采样1.4 滑动窗口1.5 差分 2.自回归ARIMA模型1.平稳性(差分)2. ACF与PACF3. ARIMA建模4. 模型预测5. 模型评估

知识点梳理

AR:

MA:

ARIMA:

因此需要指定 p , q , i 的 值:

i的值由图像确定,而使用ACF与PACF确定p与q的值:

1 时间预处理 1.1 创造时间序列 从指定日期开始 time_df = pd.date_range('2020-01-01', periods = 10, freq = 'D')# periods:周期,即生成的时间序列个数# freq:步长,可指定2D:两天;H:小时;M:月 获得起始与终止时间之间 time_df = pd.date_range('2020-01-01','2021-01-01',freq='M')# 得到起始日期至终止日期之间的所有时间 1.2 选择时间序列 # 选择 2020-01-01 之后的日期time_df.truncate(before='2020-01-01')# 选择 2021-01-01 之后的日期time_df.truncate(after='2021-01-01')# 选择从 2020-01-01 到 2021-01-01 的日期time_df['2020-01-01':'2021-01-01'] 1.3 重采样

resample(‘计算时间频率’).观察指标()

升采样:

# 重采样为按月计数,观察总和time_df = time_df.resample('M').sum()# 以三天计数,观察均值time_df = time_df.resample('3D').mean()

降采样:

# 以小时计数,空值填充为 NaNtime_df = time_df.resample('H').asfreq()# 填充出现空缺的num个值,参考 NaN 上面的数值填充time_df = time_df.resample('H').ffill(num)# 填充出现空缺的num个值,参考 NaN 下面的数值填充time_df = time_df.resample('H').bfill(num)# 线性填充所有缺失值time_df = time_df.resample('H').interplate('linear') 1.4 滑动窗口 # 以 20 为单位做滑动窗口roll_windows = time_df.rolling(window=20)# 不能直接使用roll_windows,还需要明确观察指标roll_windows.mean() # 均值roll_windows.std() # 方差roll_windows.max() # 最大roll_windows.min() # 最小roll_windows.median() # 中位数roll_windows.var() # 方差roll_windows.skew() # 偏度 1.5 差分 # 一阶差分dataframe['列名'] = dataframe['列名'].diff(1)# 二阶差分:在一阶差分的基础上再做差分 2.自回归ARIMA模型 1.平稳性(差分) data = data.diff() # 一阶差分data = data.dropna() # 去除NaN 2. ACF与PACF import statsmodels.tsa.api as smtimport seaborn as snssns.set(style='ticks', context='poster')# ACF 曲线smt.graphics.plot_acf(train_data, lags=20)# PACF 曲线smt.graphics.plot_pacf(train_data, lags=20) 3. ARIMA建模 import statsmodels.api as smarima_model = sm.tsa.SARIMAX(train_data, order=(4, 1, 2))arima_result = model.fit() 4. 模型预测 arima一分快三技巧准确率100ime_df = time_df.resample('H').ffill(num)# 填充出现空缺的num个值,参考 NaN 下面的数值填充time_df = time_df.resample('H').bfill(num)# 线性填充所有缺失值time_df = time_df.resample('H').interplate('linear') 1.4 滑动窗口 # 以 20 为单位做滑动窗口roll_windows = time_df.rolling(window=20)# 不能直接使用roll_windows,还需要明确观察指标roll_windows.mean() # 均值roll_windows.std() # 方差roll_windows.max() # 最大roll_windows.min() # 最小roll_windows.median() # 中位数roll_windows.var() # 方差roll_windows.skew() # 偏度 1.5 差分 # 一阶差分dataframe['列名'] = dataframe['列名'].diff(1)# 二阶差分:在一阶差分的基础上再做差分 2.自回归ARIMA模型 1.平稳性(差分) data = data.diff() # 一阶差分data = data.dropna() # 去除NaN 2. ACF与PACF import statsmodels.tsa.api as smtimport seaborn as snssns.set(style='ticks', context='poster')# ACF 曲线smt.graphics.plot_acf(train_data, lags=20)# PACF 曲线smt.graphics.plot_pacf(train_data, lags=20) 3. ARIMA建模 import statsmodels.api as smarima_model = sm.tsa.SARIMAX(train_data, order=(4, 1, 2))arima_result = model.fit() 4. 模型预测 arima_predict = arima_result.predict('起始时间', '终止时间',dynamic=True, typ='levels') 5. 模型评估 # ARIMA各种指标arima_result.summary()# AIC:赤池信息准则,衡量数据与参数之间的关系,越小越好aic = arima_result.aic# BIC:贝叶斯信息准则,同上,都是判断模型的简易性bic = arima_result.bic

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。