数据挖掘建模–时间序列分析
时间序列分析可以处理按照时间序列排序数据并预估出未来数据。要对时间序列进行分析需要首先确定时间序列分布函数,但取得困难,退而求用计算时间序列的特征统计量(低阶距)来研究时间序列性质。
pip install pmdarima
时间序列分析流程
start–数据预处理–平稳性检验–确定周期与差分值–纯随机性检验–(非随机)模型定阶–建模拟合–残差诊断–白噪声–end
数据预处理:
缺失值填充:插值填充data[“value”].interpolate(inplace=True);
异常值处理(离群点暂不处理)
重复值处理(drop_duplicate)
设置日期索引列:pd.todatetime(data[]) data.set_index
时间序列监测:data=data.asfreq(“MS”)#M月度S开始日期,data.isnull().sum()#查看是否缺失
时间序列分析
时间序列可视化
平稳性检验:查看原始数据展示图
纯随机性检验:
效应分解:线性分解和指数分解,分为趋势、周期、随机性(残差)
from statsmodels.tsa.seasonal import seasonal_decompose
r = seasonal_decompose(data["value"])
f = r.plot()
f.set_size_inches(15,15)
plt.subplots_adjust(hspace=0.2)
plt.show()
数据建模
基模型:
切分数据集:训练集和测试集
from pmdarima.model_selection import train_test_split
train,test = train_test_split(data,test_size=12)
计算预测数据集:过去几个月均值预测下一个月
history_size = 3
s = data["value"].iloc[-(test.shape[0]+history_size):]
t = s.rolling(window=history_size).mean()
hat = t.shift(1).dropna()
结果可视化
评估 R²—受量纲影响MSE/MAE/RMSE不采用
特征统计量
均值、方差、自协方差、自相关系数
自协方差 :同一个事件在两个不同时刻的关系
r(t,s) = E[(Xt-μt)(Xs-μs)]
自相关系数:同一个事件在两个不同时刻的关系
ρ(t,s) = r(t,s)/(根号D(Xt)*根号D(Xs))=E[(Xt-μt)(Xs-μs)]/(根号D(Xt)*根号D(Xs))
时间序列检验
主要有平稳性检验和随机性检验
1、平稳性检验:平稳的时间序列有平稳统计量,才能实现根据现有数据预测未来走势,建模才有实践意义。
特性:任意时刻均值、方差为常数;自协方差和自相关系数与时间间隔有关与时间起止点无关;
自协方差令r=s-t ,则r® =r(t,t+r) =E[(Xt-μt)(X(t+r)-μ(t+r))]
当r=0时,自协方差=方差
同理自相关系数也可以改变公式
如果序列平稳,通常只有短期相关性or无相关性,一开始自相关系数不为0,但是很快衰减到0;
如果序列非平稳,通常自相关系数衰减到0速度很慢;
如果序列周期性,自相关系数也会呈现周期性;
自相关系数绘制:
1)plot 自带的
fig,ax = plt.subplots(1,2)
fig.set_size_inches(15,5)
pd.plotting.autocorrelation_plot(y,ax=ax[0])
pd.plotting.autocorrelation_plot(y2,ax=ax[1])
plt.show()
2)statsmodels
from statsmodels.graphics.tsaplots import plot_acf
fig,ax = plt.subplots(1,2)
f