文章目录
知识点梳理
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()
降采样:
# 以小时计数,空值填充为 NaN
time_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 smt
import seaborn as sns
sns.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 sm
arima_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