ARIMA 在电商销售数据的分析应用

NoSQL数据库数据安全机器学习

一、引言

在带有时间序列性质的销售数据,可以帮助我们从历史销售数据中挖掘出潜在的模式和趋势,从而进行有效的预测。我们将介绍自回归积分滑动平均模型(ARIMA)在销售数据分析中的应用。

二、ARIMA 模型原理

  1. 自回归(AR)部分 :ARIMA 模型中的自回归部分表示当前值与过去若干个值之间的线性关系。例如,一个阶自回归模型可以表示为,其中是时间的观测值,是常数项,是自回归系数,是过去个时间点的观测值,是误差项。
  2. 差分(I)部分 :对于非平稳的时间序列数据,需要进行差分处理使其变为平稳序列。差分的次数决定了将原始数据进行几次差分才能达到平稳状态。例如,一阶差分表示。
  3. 滑动平均(MA)部分 :滑动平均部分表示当前值与过去若干个误差项之间的线性关系。一个阶滑动平均模型可以表示为,其中是滑动平均系数,是过去个时间点的误差项。

三、分析过程

  1. 数据准备 :收集历史销售数据,并进行数据清洗和预处理,包括处理缺失值、异常值等。
  2. 平稳性检验 :使用单位根检验(如 ADF 检验)来判断时间序列数据是否平稳。如果数据不平稳,则需要进行差分处理,直到数据变为平稳序列。
  3. 模型定阶 :通过观察自相关函数(ACF)和偏自相关函数(PACF)图,确定 ARIMA 模型的阶数、和。
  4. 模型拟合 :使用确定的阶数对 ARIMA 模型进行拟合,得到模型参数。
  5. 模型诊断 :检查模型的残差是否为白噪声,以确保模型的有效性。可以通过绘制残差的 ACF 和 PACF 图,以及进行Ljung-Box 检验来进行诊断。
  6. 预测 :使用拟合好的模型对未来的销售数据进行预测。

四、案例应用

以某电商企业的月度销售数据为例,进行 ARIMA 模型的应用分析。

  1. 数据准备 :收集了该企业过去两年的月度销售数据,共计 24 个观测值。经过数据清洗和预处理后,得到一个时间序列数据集。
  2. 平稳性检验 :对原始销售数据进行 ADF 检验,结果显示数据不平稳。对数据进行一阶差分后,再次进行 ADF 检验,此时数据变为平稳序列。
  3. 模型定阶 :观察一阶差分后数据的 ACF 和 PACF 图,初步确定 ARIMA 模型的阶数为,,。
  4. 模型拟合 :使用确定的阶数对 ARIMA 模型进行拟合,得到模型参数如下:
  • 常数项
  • 自回归系数,
  • 滑动平均系数
  • 模型诊断 :绘制模型残差的 ACF 和 PACF 图,发现残差在所有滞后阶数上都接近零,且 Ljung-Box 检验的值大于,表明残差为白噪声,模型有效。

  • 预测 :使用拟合好的模型对未来三个月的销售数据进行预测.

五、代码实现


          
            
!pip install statsmodels  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
from statsmodels.tsa.arima_model import ARIMA  
  
# 读取数据  
data = pd.read_csv('/home/mw/project/sales\_data.csv', index_col='date', parse_dates=True)  
  
# 平稳性检验  
from statsmodels.tsa.stattools import adfuller  
result = adfuller(data['sales'])  
print('ADF Statistic:', result[0])  
print('p-value:', result[1])  
  
# 差分处理  
diff_data = data['sales'].diff().dropna()  
  
# 模型定阶  
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf  
plot_acf(diff_data)  
plot_pacf(diff_data)  
plt.show()  
  

        

picture.image


          
            
# 模型拟合  
model = ARIMA(data['sales'], order=(2, 1, 1))  
results = model.fit()  
  
# 模型诊断  
residuals = results.resid  
plot_acf(residuals)  
plot_pacf(residuals)  
plt.show()  
  

        

picture.image


          
            
from statsmodels.stats.diagnostic import acorr_ljungbox  
lb_test = acorr_ljungbox(residuals, lags=[10])  
print('Ljung-Box test p-values:', lb_test[1])  
  
# 预测  
forecast = results.forecast(steps=3)  
print('预测值:', forecast)  

        

picture.image

六、趋势分析

  1. 原始数据 :绘制原始销售数据的时间序列图,观察数据的趋势和季节性特征。

          
            
plt.plot(data['sales'])  
plt.title('原始销售数据')  
plt.xlabel('时间')  
plt.ylabel('销售额')  
plt.show()  

        

picture.image

  1. 差分后数据 :绘制一阶差分后数据的时间序列图,确认数据是否变为平稳序列。

          
            
plt.plot(diff_data)  
plt.title('一阶差分后销售数据')  
plt.xlabel('时间')  
plt.ylabel('销售额差分')  
plt.show()  

        

picture.image

  1. 预测结果 :将原始销售数据和预测值绘制在同一图中,直观展示预测效果。

          
            
# plt.plot(data['sales'], label='实际值')  
plt.plot(pd.date_range(start=data.index[-1], periods=3, freq='M'), forecast[0], label='预测值')  
plt.title('销售数据预测')  
plt.xlabel('时间')  
plt.ylabel('销售额')  
plt.legend()  
# plt.show()  

        

七、结论

ARIMA 模型在销售数据分析中能够有效地捕捉时间序列数据中的趋势和季节性特征,进行准确的预测。


作者介绍:数分36计OpenDogs

目前正在撰写数分工作4部曲: AB实验、因果模型、归因分析、机器学习 等;让同学们在工作、面试中没有短板!

数分必备技能等课程见小红书:数分36计OpenDogs

● 腾讯、滴滴、阿里数据分析专家;

● 帮助上百位同学进入互联网大厂 ;

● 非常了解数据分析关注的核心节能 ;

● 晚上不定期XHS直播,和大家交流心得;

● 微信公众号:数分36计开源狗

本人耗时半年打造的 因果分析-AB实验分析 & 数分高频面试考点 ,欢迎扫码观看学习(或者阅读原文)、本周末上线因果推断模型,涉及4大业务案例,感兴趣的同学欢迎关注

picture.image

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动基于 DataLeap 的 DataOps 实践
随着数字化转型的推进以及业务数仓建设不断完善,大数据开发体量及复杂性逐步上升,如何保证数据稳定、正确、持续产出成为数据开发者核心诉求,也成为平台建设面临的挑战之一。本次分享主要介绍字节对于DataOps的理解 以及 DataOps在内部业务如何落地实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论