说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。
1.项目背景
时间序列分析中,LOESS(局部加权回归平滑)和STL(Seasonal and Trend decomposition using Loess)是两种用于分解时间序列数据以提取其内在趋势、季节性和随机波动的方法。
LOESS(Locally Weighted Scatterplot Smoothing)是一种非参数回归技术,它对数据点周围的一个小窗口内的数据进行加权最小二乘回归,以得到该点的平滑估计值。LOESS通过自适应地改变每个数据点的邻域权重来反映局部结构,从而有效地捕获复杂曲线上的模式。
STL算法利用了LOESS方法的特性来进行时间序列的季节性趋势分解。STL将时间序列分解为三个主要组成部分:
趋势(Trend):长期变化的趋势成分,反映了数据随时间推进的基本走向。
季节性(Seasonality):周期性的重复模式,如每日、每周、每月或每年的规律性波动。
残差(Residuals/Noise):除去趋势和季节性后的随机波动,通常被视为“不规则”或“异常”。
在STL分解过程中,首先使用一个循环过程来估计并去除季节性分量,然后应用LOESS方法估算趋势分量,最后从原始数据中减去趋势和季节性分量,得出残差。这个过程是迭代进行的,直到各个组件达到一定的稳定状态。
总的来说,STL算法基于LOESS实现了一种灵活且稳健的时间序列分解方法,能够有效处理各种复杂的时间序列数据,并且特别适用于具有复杂季节性特征的数据集,以便于进一步的分析和预测工作。
本项目通过STL算法来构建时间序列分析使用LOESS(STL)模型进行季节性趋势分解。
2.数据获取
本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:
编号 | 变量名称 | 描述 |
1 | DATE | |
2 | y |
数据详情如下(部分展示):
3.数据预处理
3.1 用Pandas工具查看数据
使用Pandas工具的head()方法查看前五行数据:
关键代码:
3.2 数据缺失查看
使用Pandas工具的info()方法查看数据信息:
从上图可以看到,总共有1个变量,数据中无缺失值,共257条数据。
关键代码:
3.3 数据描述性统计
通过Pandas工具的describe()方法来查看数据的平均值、标准差、最小值、分位数、最大值。
关键代码如下:
4.探索性数据分析
4.1 变量直方图
用Matplotlib工具的hist()方法绘制直方图:
从上图可以看到,变量主要集中在70~130之间。
4.2 折线图
从上图中可以看到,数据有一定的波动性。
5.构建LOESS(STL)模型进行季节性趋势分解
主要使用STL算法,用于时间序列分析使用LOESS(STL)模型进行季节性趋势分解。
5.1 构建模型
编号 | 模型名称 | 参数 |
1 | LOESS(STL)模型进行季节性趋势分解 | period=12 |
2 | seasonal_deg=0 | |
3 | trend_deg=0 | |
4 | low_pass_deg=0 | |
5 | robust=True |
- 模型评估
6.1 STL分解后的趋势、季节性和残差部分的折线图一
采用鲁棒的方法来处理离群值和不采用鲁棒的方法来处理离群值进行绘图。
6.2 绘制鲁棒性STL分解的权重图
6.3 STL分解后的趋势、季节性和残差部分的折线图二
不使用多项式拟合季节性部分,不使用多项式拟合趋势,低通滤波器进行绘图。
7.结论与展望
综上所述,本文采用了STL算法来构建时间序列分析使用LOESS(STL)模型进行季节性趋势分解,最终证明了我们提出的模型效果良好。此模型可用于日常产品的预测。
# 本次机器学习项目实战所需的资料,项目资源如下:
# 项目说明:
# 获取方式一:
# 项目实战合集导航:
https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
# 获取方式二:
链接:https://pan.baidu.com/s/1r-N6XulWjWBfEcDRPCMTDA
提取码:f8gt