精华内容
下载资源
问答
  • 数据分析 - 时间序列分析 - 预测销售环境准备数据准备正文 环境准备 EDA过程中使用了的环境和第三方库:: python 3.7.2 Jupyter Notebook(代码均在此测试成功) pandas 0.23.4 numpy 1.15.4(数据处理) ...

    数据分析 - 时间序列分析 - 预测销售

    环境准备

    EDA过程中使用了的环境和第三方库::

    • python 3.7.2
    • Jupyter Notebook(代码均在此测试成功)
    • pandas 0.23.4
    • numpy 1.15.4(数据处理)
    • matplotlib 3.0.2
    • seaborn 0.9.0(数据可视化)

    数据准备

    数据字段简介,训练集与测试集下载地址:
    https://www.kaggle.com/c/8587/download-all.

    正文

    开工前准备,导入第三方库:

    # data processing
    import pandas as pd
    import numpy as np
    import random as rd
    import datetime
    # visulization
    import matplotlib.pyplot as plt
    import seaborn as sns
    # Time series analysis
    from statsmodels.tsa.arima_model import ARIMA
    from statsmodels.tsa.statespace.sarimax import SARIMAX
    from pandas.plotting import autocorrelation_plot
    from statsmodels.tsa.stattools import adfuller, acf, pacf,arma_order_select_ic
    import statsmodels.formula.api as smf
    import statsmodels.tsa.api as smt
    import statsmodels.api as sm
    import scipy.stats as scs
    # settings
    import warnings
    warnings.filterwarnings("ignore")
    pd.set_option('max_columns',None)
    

    该案例的任务是根据历史日常销售数据,预测测试集中每个商店的商品销售额,其中商品或商店可能每个月会有细微的变化,要求模型具备一定的鲁棒性来应对这种情况。
    数据集简介:

    • sales_train: 训练集,近300万行,包含从2013.1到2015.10的历史销售数据;
    • item_cat: 商品分类信息;
    • item: 商品补充信息;
    • shops: 商店信息;
    • test: 测试集,近20万行;
    • sample_submission: 提交样例;

    第一步,加载数据:

    # train
    sales=pd.read_csv("dataset/sales_train.csv")
    item_cat=pd.read_csv("dataset/item_categories.csv")
    item=pd.read_csv("dataset/items.csv")
    shops=pd.read_csv("dataset/shops.csv")
    # test
    test=pd.read_csv("dataset/test.csv")
    sub=pd.read_csv("dataset/sample_submission.csv")
    

    先看一下表sales:

    sales.head()
    
    datedate_block_numshop_iditem_iditem_priceitem_cnt_day
    002.01.201305922154999.001.0
    103.01.20130252552899.001.0
    205.01.20130252552899.00-1.0
    306.01.201302525541709.051.0
    415.01.201302525551099.001.0

    日期格式不规范,用strptime方法将其转化成标准日期格式:

    sales['date']=sales['date'].apply(lambda d: datetime.datetime.strptime(d,'%d.%m.%Y'))
    

    统计销量前十的商品分类,发现item_category_id="40"的销量最高:

    x=item.groupby('item_category_id').count()
    x=x.sort_values(by=['item_id'],ascending=False)
    x=x.iloc[:10].reset_index()
    
    plt.figure(figsize=(10,4))
    ax=sns.barplot(x['item_category_id'],x['item_id'],alpha=0.7)
    plt.title('Number of Items per Category')
    plt.xlabel('Category Id',fontsize=12)
    plt.ylabel('Number of Items',fontsize=12)
    plt.show()
    

    在这里插入图片描述
    通过以上简单了解数据,以下直接进入正题,时间序列分析。
    案例目标是预测每个商店-商品组合在下一个月的销售额,因此先熟悉如何单序列预测,这里以总销售额为例,首先计算该公司每个月的总销售额:

    monthlyall=sales.groupby(['date_block_num'])['item_cnt_day'].sum()
    plt.figure(figsize=(10,4))
    plt.title('Number of Saled Itemsper Month')
    plt.xlabel('date_block_num',fontsize=12)
    plt.ylabel('Number of Items',fontsize=12)
    plt.plot(monthlyall)
    

    在这里插入图片描述
    尝试以移动平均和移动标准差分析数据,消除周期性波动,观察整体趋势,取窗口大小为12个月:

    plt.figure(figsize=(16,6))
    plt.plot(monthlyall.rolling(window=12,center=False).mean(),label='Rolling Mean')
    plt.plot(monthlyall.rolling(window=12,center=False).std(),label='Rolling Std')
    plt.legend()
    

    在这里插入图片描述
    也可以通过以下方法快速分离趋势、季节性、残差,选择不同的model参数,会有不同的分离结果。
    当model=‘additive’,即 观察值=趋势值+季节性值+残差,如下所示:

    res=sm.tsa.seasonal_decompose(monthlyall.values,freq=12,model='additive')
    fig=res.plot()
    

    在这里插入图片描述
    当model=‘multiplicative’,即 观察值=趋势值x季节性值x残差,如下所示:

    res=sm.tsa.seasonal_decompose(monthlyall.values,freq=12,model='multiplicative')
    fig=res.plot()
    

    在这里插入图片描述
    那么如何判断时间序列是否满足模型要求?这里将引入“稳定”的概念,如果时间序列是稳定的,那么建模也将更容易,而且一般统计模型都要求或认为输入的时间序列是稳定的。稳定的时间序列有以下三个特征:

    • 该时间序列的移动平均值与时间无关;
    • 该时间序列的移动标准差值与时间无关;
    • 该时间序列的任意两个区间的协方差与时间无关;

    判断时间序列是否稳定主要有以下三个方法:

    • ADF( Augmented Dicky Fuller Test)
    • KPSS
    • PP (Phillips-Perron test)

    比较常用的是ADF检验,statsmodels提供了ADF检验接口,以下对每月销售总额序列进行检验:

    # Stationarity tests
    def test_stationarity(timeseries):
        # Perform Dickey-Fuller Test
        print("Result of Dickey-Fuller Test:")
        dftest=adfuller(timeseries,autolag='AIC')
        dfoutput=pd.Series(dftest[:4],index=['Test Statistics','p-value','Lags Used','Number of Observations Used'])
        for key,value in dftest[4].items():
            dfoutput[f'Critical Value {key}']=value
        print(dfoutput)
    
    test_stationarity(monthlyall)
    

    Result of Dickey-Fuller Test:
    Test Statistics -2.395704
    p-value 0.142953
    Lags Used 0.000000
    Number of Observations Used 33.000000
    Critical Value 1% -3.646135
    Critical Value 5% -2.954127
    Critical Value 10% -2.615968
    dtype: float64

    在去除趋势和季节性因素前,ADF检验发现,t检验值比10%关键值大,所以无法拒绝原假设(即非稳定)。
    尝试去除趋势和季节性因素:

    
    def difference(dataset,interval=1):
        diff=list()
        for i in range(interval,len(dataset)):
            diff.append(dataset[i]-dataset[i-interval])
        return Series(diff)
        
    # 原时间序列
    ts=sales.groupby(['date_block_num'])['item_cnt_day'].sum()
    ts.astype('float')
    plt.figure(figsize=(16,16))
    plt.subplot(311)
    plt.title('Original')
    plt.xlabel('Time')
    plt.ylabel('Sales')
    plt.plot(ts)
    # 去除趋势性因素
    plt.subplot(312)
    plt.title('After De-Trend')
    plt.xlabel('Time')
    plt.ylabel('Sales')
    new_ts1=difference(ts)
    plt.plot(new_ts1)
    # 去除季节性因素
    plt.subplot(313)
    plt.title('After De-seasonalization')
    plt.xlabel('Time')
    plt.ylabel('Sales')
    new_ts2=difference(ts,12)   # assuming the seasonality is 12 months long
    plt.plot(new_ts2)
    

    在这里插入图片描述
    去除趋势性因素后时间序列,ADF检验:

    # 去除趋势性因素的时间序列
    test_stationarity(new_ts1)
    

    Result of Dickey-Fuller Test:
    Test Statistics -1.363622e+01
    p-value 1.686395e-25
    Lags Used 1.000000e+01
    Number of Observations Used 2.200000e+01
    Critical Value 1% -3.769733e+00
    Critical Value 5% -3.005426e+00
    Critical Value 10% -2.642501e+00

    去除季节性因素后时间序列,ADF检验:

    test_stationarity(new_ts2)
    

    Result of Dickey-Fuller Test:
    Test Statistics -3.270101
    p-value 0.016269
    Lags Used 0.000000
    Number of Observations Used 21.000000
    Critical Value 1% -3.788386
    Critical Value 5% -3.013098
    Critical Value 10% -2.646397
    dtype: float64

    两次检验的t值都在5%内,且p值也很小,可以认为输入的时间序列是稳定的,即以上的处理方式可以得到稳定的时间序列。

    建模分析

    Prophet

    使用prophet进行时间序列分析。

    层次时间序列

    展开全文
  • 时间序列分析法,就是将经济发展、购买力大小、销售变化等同一变数的一组观察值,按时间顺序加以排列,构成统计的时间序列,然后运用一定的数字方法使其向外延伸,预计市场末来的发展变化趋势,确定市场预测值。时间...

    前言

    我国快消品市场空间大。根据数据,2016 年我国包含包装食品、含酒精饮料、软饮料、日化品在内的快消品零售额为 3.2 万亿元,同比增长 5.1%,市场空间庞大。从流通渠道看,快消品的流通渠道总共可以分为三大类,一类是现代流通渠道,包括大卖场、超市、连锁便利店、品类专卖店;二是电商渠道;三是传统通路,即夫妻店,店主即店员,店面积大小不一,一般在 200 平米以内,主要销售食品饮料烟酒等商品。目前的快消品销售渠道除了传统通路外,还新进入了许多现代通路,比如微商代理。线上快消品销售在整个零售交易额的比重逐年递增,如图1-1 

    零售业快消品销售渠道的元化不仅要求商家对产品本身销量预测的高准确性,同时也要求整个零售业快消品供应链上的各节点企业的紧密配合。本文根据零售业所处背景,选择销售渠道单一,内部组织结构较为稳定的大型超市为研究对象,在仅考虑一个企业在某一地区的连锁超市快消品的历史销售数据,采用时间序列分析方法对其销售得快消品进行预测,通过对快消品种类的进一步细分,将大型连锁超市的某一件产品作为预测的对象。本文选取某一大型连锁超市的牛奶历史销售数据进行研究,通过多方验证保证时间序列模型模拟的精确性后,利用最终的模型对牛奶销量进行预测,以得出超市后两年每个月的牛奶销量。本文的意义在于,通过现实条件选择时间序列模型,根据牛奶销量预测的案例阐述快消品预测的过程,进而把这一方法推广到所有快消品销量预测中去。本文不足:对快消品所处背景简单化,仅考虑处于稳定条件下的某一销售渠道下的快消品销量预测。销售预测是指根据以往的销售情况以及使用系统内部内置或用户自定义的销售预测模型获得的对未来销售情况的预测。销售预测可以直接生成同类型的销售计划。销售计划的中心任务之一就是销售预测,无论企业的规模大小、销售人员的多少,销售预测影响到包括计划、预算和销售额确定在内的销售管理的各方面工作。

    1、时间序列分析方法

    1.1 时间序列方法介绍

    在统计研究中,常用按时间顺序排列的一组随机变量 ...X1X2....,Xt,...来表示一个随机时间的时间序列,简记为,或者。用{x1,x2,...,xnxt,t=1,2,...xn}表示该随机序列的n个有序观测值,称之为序列长度n的观测值序列。时间序列分析法,就是将经济发展、购买力大小、销售变化等同一变数的一组观察值,按时间顺序加以排列,构成统计的时间序列,然后运用一定的数字方法使其向外延伸,预计市场末来的发展变化趋势,确定市场预测值。时间序列分析法的主要特点,是以时间的推移研究来预测市场需求趋势,不受其他外在因素的影响。时间序列分析方法的分类如图2-1所示。

    本文主要介绍时域分析法。时域分析法主要是从序列自相关的角度揭示时间序列的发展规律。相对于频谱分析法,时域分析法具有理论基础扎实、操作步骤规范、分析结果易于解释的优点。目前它已广泛应用于自然科学和社会科学的各个领域,成为时间序列分析的主流方法。时域分析方法的基本理论思想是源于事件的发展通常具有一定关系。这种惯性统计的语言来描述就是序列值之间存在一定的相关关系,且这种相关关系具有某种统计规律。时域分析方法的分析步骤如下:

    1. 考查观测值序列的特征

    2. 根据序列的特征选择适当的拟合模型;

    3. 根据序列的观测数据确定模型;

    4. 利用拟合好的模型来推断序列其他的统计性质或预测序列将来的发展。

    时域分析方法的模型根据时间序列pqd来进行确定.p为自回归项,可以看自相关图来估计;MA为移动平均,q为移动平均项数,可以看偏相关图来估计,d为时间序列成为平稳时所做的差分次数。pdq与模型选择的关系如表2-1ARIMA实质是差分运算与ARMA的组合。ARIMA模型要求pqd三项大于零。也即原始时间序列具有波动大、存在季节性等稳定时间序列不具备的特征。下文用于牛奶销量预测的时间序列经过验证应该采用ARIMA模型进行分析,所以此处仅针对ARIMA模型进行详细研究。ARIMA模型建模流程图如图2-3

    2-1 pdq与模型选择

    时间序列模型

    p平稳性

    q为移动平均项数

    D(差分次数)

    AR

    >0

    =0

    =0

    MR

    =0

    >0

    =0

    ARMA

    >0

    >0

    =0

    ARIMA

    >0

    >0

    >0

    特点

    均值、方差为为常数,量间隔k时段的数据组的协方差相同

    时序图无上升或下降的趋势

    呈周期性变化

     

    R软件判别方法

    1. Augmented Dickey-Fuller(ADF)-test

    2.Kwiatkowski-Philips-Shin(KPSS)-test

    1.acfpacf图(直观判断)

    2.Mann-Kendal(MK)-test

    时序图

    R软件判别函数

    tseries包中的函数adf.test()acf()

    forecast包中pacf()

    plot()

    library(xlsx)

    Data<-read.xlsx(“源数据路径”)

    #把原始数据转化为时间序列

    Data1<-ts(data,frequency=12,start=c(2004,1))

    #绘制时序图、acfpacf

    Plot(data1)

    Acf(data1)

    Pacf(data1)

    #自动获取时间序列模型

    Auto.arima(data1)

    Arima1<-arima(data1,order=c(),seasonal=list())

    #白噪声检验判断数据是否有分析意义

    Box.test(data1)

    #模型拟合原始时间序列

    Dataforecast<-HoltWinters(data1)

    Plot(dataforecast)

    #模型预测销量图绘制

    Dataforecast1<-HoltWinters(dataforecast)

    Plot(dataforecast)

    1. 假设原始数据命名为data1,利用R软件,流程中涉及的函数表示如下:

    1.2原始数据平稳性检验

    经归纳总结,不平稳时间序列主要可以分为三种:

    第一种情况:时间序列波动大(var大)。此时可采取的使时间序列平稳的方法是对数据取对数:log(data)

    第二种情况:时间序列存在明显趋势(一条直线、上升或下降)。采取办法是做一阶差分:diff(data)

    第三种情况:存在s期季节性。做法是做s阶差分,消除季节性。

    三种情况下指数平滑α值的选择分别为α=0.1~0.4α=0.6~0.8α=0.6~1.此外,对于平稳时间序列,由于过去数据与当前一致,此时α取较小的值,一般为α=0.05~0.2.

    1.3 白噪声检验

    经平稳性检验,判定牛奶销量时间序列具有增长性和季节性,为非平稳数据,通过R软件中forecast程序包自动建模,得出04年到17年的牛奶销量的(p,q,d)值分别为(1,0,1)。在时间序列分析中,只有具有密切相关关系、历史数据对未来的发展有一定影响的序列才值得分析。如果序列值彼此之间没有相关性,则意味着该序列是一个没有记忆的序列,过去的行为对将来的发展没有丝毫影响,这种讯我们称之为纯随机序列。从统计分析的角度来看,纯随机序列是没有任何分析价值的序列。纯随机序列也称为白噪声序列,原因是最初人们发现白光具有纯随机序列的一切特征,如图2-4为随机产生1000个服从标准正态分布的白噪声序列观察值的时序图。

    为了确定平稳序列值不值得继续分析下去,我们需要对平稳序列进行纯随机性检验。 

    1.3.1白噪声序列的性质

    白噪声是最简单的纯随机序列,它有两个重要性质在分析中经常要用到。

    一、纯随机性

    纯随机性指纯随机序列各项之间没有任何相关关系:

    1.3.2方差齐性

    方差齐性,是指序列中每个变量的方差都相等: 

    时间序列分析中,方差齐性是一个非常重要的限制条件。因为根据马尔可夫定理,只有方差齐性假定成立时,我们用最小二乘法得到的未知参数估计值才是准确的、有效的。如果假定不成立,那么最小二成估计值就不是方差最小线性无偏估计,拟合模型的预测精度会受到很大影响。所以在进行模型拟合时,检验内容之一就是要检验拟合模型的残差是否满足方差齐性。如果假定不成立,那么最小二乘估计值就不是方差最小线性无偏估计,拟合模型的预测精度会受到很大影响。

    纯随机想检验的方法有两个:Q统计量和LB统计量。根据正态分布和卡方分布之间的关系,我们很容易推导出Q统计量近似服从自由度为m的卡方分布:Q统计量大于,或该统计量的P值小于a时,则可以以1-a的置信水平拒绝原假设,认为该序列为非白噪声序列;否则,接受原假设,认为该序列为纯随机序列。

    LB统计量。经证明,LB统计量同样近似服从自由度为m的卡方分布。

    1.4差分运算

    拿到观察值序列之后,无论是采用确定性时序分析方法还是随机时序分析方法,分析的第一步都是要通过有效的手段提取序列中蕴涵的确定性信息。 
    确定性提取的方法有很多,前面介绍的构造季节指数、拟合长期趋势模型、移动平均、指数平滑等诸多信息的提取方法,但是它们对确定性信息的提取都不够充分。 
    BoxJenkins特别强调差分方法的使用,而Cramer分解定理则在理论上保证了适当阶数差分一定可以充分提取确定性信息d 
    R语言中,diff函数可以完成各种差分运算。diff的命令格式如下: diff(x , lag = ,differences = )序列蕴涵显著的线性趋势,1阶差分就可以实现趋势平稳序列蕴涵趋势,通常低阶(2阶或者3阶)差分就可以提取曲线趋势

    3、案例分析

    本文从UCI-MRL上提取了CE超市2004-2017年牛奶销量进行时间序列分析。采用的数据分析工具为R3.3.4,涉及的R函数分析包有forecasttseriesTTR

    首先对把牛奶销量数据转化为时间序列值,并画出未处理过的牛奶销量时间序列值的时序图对时间序列值进行初步判断,相关的图有时间序列散点图、acf图、pacf图。

     从图中可以看出,04年到17年的牛奶销量是稳定增加的,说明CE超市从04

    17年运营状况良好

    acfAutocorrelation Function相关系数度量的是两个不同事件彼此之间的相互影响程度;而自相关系数度量的是同一事件在两个不同时期之间的相关程度,形象的讲就是度量自己过去的行为对自己现在的影响。自相关函数等同于自协方差(autocovariance)。在多元相关分析中,简单相关系数可能不能够真实的反映出变量XY之间的相关性,因为变量之间的关系很复杂,它们可能受到不止一个变量的影响。这个时候pacf偏相关系数是一个更好的选择。
    偏相关系数是在排除了其他变量的影响下计算变量间的相关系数。假设我们需要计算XY之间的相关性,Z代表其他所有的变量,XY的偏相关系数可以认为是XZ线性回归得到的残差RxYZ线性回归得到的残差Ry之间的简单相关系数,即pearson相关系数。从图3-2看出,时间序列值的相关系数并没有急速降到规定范内,说明相关系数存在拖尾现象,拖尾是在acfpacf图中主要的描述。上述的pacf图中的拖尾现象并不明显,超出范围的部分可能是由于异常值导致的。同时相关系数只存在于0的上侧,说明时间序列值呈单调递增的趋势。初步判断可以选择AR模型。

    我们用时间序列值的分解图近一步进行说明,如图3-4

    时间序列分解图从时间序列的随机性、季节性、趋势性、原始时间序列描述四个方面对时间序列进行描述。时间序列分析主要有确定性变化分析和随机性变化分析。其中,确定性变化分析包括趋势变化分析、周期变化分析、 循环变化分析。随机性变化分析:有ARMAARMA模型。时间序列的随机性是指时间序列各项之间没有相关关系的特征。可以使用自相关分析图判断。图3-4表明时间序列为具有一定随机性、明显的季节性、单调递增且具有较大的波动性的时间序列。

    清楚时间序列的具体特征后,我们对时间序列值取对数,并消除其季节性之后,将其拟合为AR模型。消除季节性后的时间序列如图3-5。采用R软件对时间序列进行拟合,得出(p,q,d)(1,0,1)。消除季节性的模型图与原始的时间序列图大致吻合,说明模型具有很好的拟合性。

    得到预测模型为ARIMA(1,0,1)。对预测模型ARIMA(1,0,1)进行自相关系数、偏相关系数检验,发现预测模型不存在过度差分的情况,acfpacf都在规定范围内,系数没有拖尾并均匀分布在0的两侧,说明模型很好地消除了时间序列的趋势性,模型使时间序列变得足够平稳。              

    ARIMA(1,0,1)模型进行纯随机性检验,根据ARIMA(1,0,1)方差的qq图和直方图可以看到拟合模型的方差呈正态分布,方差基本在一条直线上。说明时间序列值具有正相关性,进行平稳后的时间序列拟合的模型ARIMA(1,0,1)具有预测意义。我们利用ARIMA(1,0,1)预测CE超市2018年、2019年的牛奶销量,如图3-10,预测部分未蓝色部分,从中得出,预测部分和历史数据具有相同的趋势和季节性。

    预测得到2018年到2019年每月的销量具体如表3-1R软件给出了预测置信度为0.8和置信度为0.95的最小销量和最大销量。

    3-1  CE超市2018年到2019年每月牛奶销量预测

    year

    month

    Point Forecast

    Lo 80

    Hi 80

    Lo 95

    Hi  95

    2018

    Jan

    870.31

    859

    880

    854

    886

    2018

    Feb

    828.6

    815

    841

    809

    848

    2018

    Mar

    937.1

    922

    951

    914

    959

    2018

    Apr

    947.09

    930

    963

    922

    972

    2018

    May

    1007.7

    989

    1025

    980

    1035

    2018

    Jun

    977.99

    958

    997

    948

    1007

    2018

    Jul

    934

    913

    954

    902

    965

    2018

    Aug

    891.29

    869

    913

    857

    924

    2018

    Sep

    842.72

    819

    865

    807

    878

    2018

    Oct

    846.97

    822

    871

    809

    883

    2018

    Nov

    813.88

    788

    839

    775

    852

    2018

    Dec

    858.2

    831

    884

    818

    898

    2019

    Jan

    885.64

    857

    913

    842

    928

    2019

    Feb

    843.93

    815

    872

    799

    888

    2019

    Mar

    952.44

    922

    982

    906

    998

    2019

    Apr

    962.43

    931

    993

    915

    1009

    2019

    May

    1023.04

    991

    1054

    974

    1071

    2019

    Jun

    993.34

    960

    1025

    943

    1042

    2019

    Jul

    949.64

    916

    982

    898

    1000

    2019

    Aug

    906.63

    872

    940

    854

    958

    2019

    Sep

    858.06

    823

    892

    804

    911

    2019

    Oct

    862.31

    826

    897

    807

    916

    2019

    Nov

    829.21

    792

    865

    773

    884

    2019

    Dec

    873.54

    836

    910

    816

    930

     

    展开全文
  • 商品销量预测介绍 一、商品销量预测: 在充分考虑未来各种影响因素的基础上,根据历史销量以及市场上对产品需求的变化情况,对未来一定时期内产品的产品销量变化所进行的科学预计和推测。 二、商品销量预测三大特点...

    商品销量预测介绍

    一、商品销量预测:

    在充分考虑未来各种影响因素的基础上,根据历史销量以及市场上对产品需求的变化情况,对未来一定时期内产品的产品销量变化所进行的科学预计和推测。

    二、商品销量预测三大特点:

    1.连贯性:把过去、现在与未来的发展联系起来,用现有的情况对预测未来发展变化。

    2.相关性:从宏观市场需求、家庭收入水平、商品、价格渠道等因素相关,找出影响力较大的因素进行预测。

    3.混沌性:企业本身是一个复杂的开放系统,同时环境也是瞬息万变的。预测要把我时效性。

    三、销量预测的作用

    1、指导运营策略:产品定位、定价策略、分销渠道、促销方式、库存运输、生产计划、原料采购

    2、指定战略决策:消费需求、小微行为、目标人群、总体动态、资金投向、经营方针、发展规模

    3、提高企业竞争力:掌握规律、扬长避短、挖掘潜力、及时应变、知己知彼、见招拆招、竞争策略。

    销量预测如何指导运营策略:

    1.预测不到位时,常常出现畅销品缺货&滞销品积压。

    2.需求价格弹性是指需求量对价格变动的反映程度。如何解决库存问题,确定优惠、打折等促销手段。预测销量时,有必要将定价因素考虑进来。

    销量预测的流程

    1.确定预测目标:项目目标、预测范围、准确性要求

    2.分析整理数据:收集数据、数据字典、数据流关系

    3.选择预测方法:定性(调查分析法,专家集合意见法、产品生命周期法)分析法、定量(因果预测法、时间序列法)分析法

    4.建立预测模型:数学模型表达各种变量之间的函数关系

    5.编写预测报告:解释与论证,讨论模型的可用性与泛用性。报告要求完整、简介明了。

    常见预测方法

    **一、因果预测法(回归法):**根据事物之间的因果关系来预测事务的变化与发展,通过预测目标有直接或间接影响因素的分析找出其变化的规律,并根据这种变化规律来确定预测值。可分为:一元线性回归(指分析一个因变量与自变量之间的关系,然后用一元回归方程预测,如根据居民的收入预测某种消耗品的需求量),多元线性回归(分析因变量与多个自变量之间的关系,运用多元回归方程预测因变量的变化,如商品的销售手段、优惠幅度来预测商品的销售量),自回归(目标的历史数据在不同时间取值的依存关系,建立回归方程进行预测,比如根据消费者历史消费水平预测未来消费水平)

    二、时间序列法(时间数列、历史复数或动态数列),将某种统计指标的数值,按时间先后顺序排到所形成的数列。

    (一)时间序列预测法通过编制和分析时间序列,根据时间序列所反映出来的发展过程、方向和趋势,进行类推或延伸,借以预测下一段时间或以后若干年内可能达到的水平。

    (二)时间序列预测计算方法

    1、简单平均法:即将N时期的值求算数平均数用于预测下一阶段的数据。这种方法预测的本质是过去与今后相一致,仅适用于变化不大的数据预测。

    2、指数平滑法:根据历史数据中上期实际值与预测值进行预测,优点是只需要上期的实际值与预测值,通过加权的方法就能预测下期的数值,可以节省数据收集与处理的时间。缺点是没有包含远期数据,可能丢失重要信息造成数据不够准确。

    3、移动平均法:相继移动计算若干时期的算数平均数作为下期预测值

    4、季节趋势法:根据每年出现的季节性周期变动,预测未来的季节性变动趋势。一般使用月度或季度的平均法。如三年的第一季度平均值来预测来年的第一季度值。

    (三)时间序列分解

    对于时间序列进行分解能够捕捉的4中模式:

    1、长期趋势(Trend)现象在较长时期内受某种根本性因素作用而形成的总的变动趋势,表现为一段时间内持续向上或向下的平稳趋势,比如产品的生命周期或社会的总体经济形势。

    2、季节变动(Seasonality)现象在一年内随季节的变化人发生有规律性的周期性变动。

    3、循环变动(Cycle)现象以若干年为周期所呈现出的波浪起伏形态的有规律的变动。

    循环变动与季节变动的区别:季节变动是有固定周期的,循环变动无固定周期。

    4、不规则变动(Random Error)一种无规律可循的变动,多为受偶然因素影响形成。

    三、ARIMA

    (一)定义:自回归移动平均模型(Autoregressive Intergrated Moving Average Model),时间序列预测法,是统计模型(Statistic model)中最常见的一种用来预测的模型。

    (二)参数和数学形式

    P-采用的时间序列数据本身的滞后数(lags)也叫Auto-Regressive项。

    D-时间薛烈变为平稳时所作的差分次数,也叫Integrated项。

    Q-移动平均项数,也叫Moving Average项

    (三)基本思想

    将预测对象随时间推移而形成的非平稳时间序列转化为平稳时间序列,然后对因变量的滞后值以随机误差项的限制和滞后值进行回归。这个模型一旦被识别后,就可以从时间序列的过去只即现在值来预测未来值。

    优点:短期数据预测准确度较高

    缺点:无法预测定价与促销对销售的影响。
    时间序列分解模型详解

    一、时间序列Xt可以表示为五个因素的函数

    (一)Xt=f(U,Tt,St,Ct,Rt),其中U代表了序列的平均值,时间序列分解的方法通常有加法模型和乘法模型,如:

    1、加法模型Xt=U+Tt+St+Ct+Rt适用于四个因数对现象的发展影响是相互独立的。

    2、乘法模型Xt=U×Tt×St×Ct×Rt适用于四个因素对现象的发展影响是相互作用的,大多数采用乘法模型。乘法模型的步骤分解:

    Xt=U×Tt×St×Ct×Rt

    (1)移除平均值U

    第一步计算序列的平均值U,然后将序列中所有个体的值来移除平均值:Yt=Xt/U,创建了一个值在1左右的新序列Y。(如果U的绝对值小于0.0000001则不用进行除法运算)

    (2)计算移动平均值M

    这一步计算Yt的L步移动平均,其中L是季节变动S的周期长度(如季度序列L=4),由于移动平均算的是一年的平均值,季节性因素被移除:Mt=(Y1+……+Yn)/n

    (3)计算长期趋势T

    这一步根据移动平均Mt计算该序列的长期趋势Tt,对移动平均Mt进行线性回归:Mt=a+b×t+et(其中a是截距,b是斜率,et是线性拟合的残差),上述等式的线性部分用于定义长期趋势:Tt=a+b×t

    (4)计算循环变动C

    循环变动等于移动平均Mt除以长期趋势Tt:Ct=Mt/Tt

    (5)计算季节变动

    季节变动K等于Y序列除以移动平均Mt:Kt=Yt/Mt(注意:K序列是由季节变动和随机变动组成的)

    为了计算季节变动S,取时间t所属“季节”的K序列平均值:St=avg(Kt)

    (6)计算不规则变动

    将K序列除以S序列:Rt=Kt/St

    3、生成预测,一旦时间序列分解完成,就可以很容易的生成预测Xt=U×Tt×St×Ct×Rt

    (1)长期趋势Tt=a+b×t

    (2)季节变动St=avg(Kt)(St=St-L)

    (3)循环变动Ct是手动输入的(或取训练集Ct的平均值)

    (4)不规则变动Rt则设为1

    销量预测的挑战

    1、海量计算:海量商品交易数据,可能还要下钻到更细的维度,计算量和成本比较可观

    2、数据挖掘:需要一定的数据开发能力,能够实现数据清洗,特征处理,调解参数,回归和预测等。

    3、部署调度:由于长期预测的进度不够,所以必须周期性地根据更新的数据重跑模型,最好能自动化调度和监控报警。

    4、数据仓库:不同的业务数据可能存放在不同的系统中,不能互相连通,没法及时更新,形成了数据孤岛。

    MaxCompute大数据计算服务提供海量数据、实时性要求不高的分布式处理能力。

    DataIDE大数据开发套件,基于maxcompute,提供全面托管的工作流服务,一站式开发管理的界面,可对数据进行数据传输、数据转换等相关操作,从不同的数据存储引入数据,对数据进行转化处理,最后将数据提取到其他数据系统,完成整个数据的分析流程。(特点:1.可视化开发,多人协作;2.丰富任务类型支持数据集成ODPSSQL\ODPSMR\机器学习\Shell多种任务类型;3.强大调度:百万级任务病发支持,支持小时、天、周、月多种调度周期;4.任务监控报警:监控任务运行状态,出错可及时报警,避免业务故障)

    机器学习PAI,一站式机器学习平台,包括数据预处理、特征工程、常规机器学习算法、深度学习框架。

    展开全文
  • 时间序列分析预测实战之指数平滑法

    万次阅读 多人点赞 2018-10-31 14:50:25
    在工作中,常常要对数据进行预测,确定业务未来的发展趋势,进而配置相关的营销策略、制定业务目标,由此引申出了一个重要的用数据预测未来的方法——时间序列分析,今天和大家分享就是实战中难度系数比较高的时间...

    一、什么是时间序列分析?

    在工作中,常常要对数据进行预测,确定业务未来的发展趋势,进而配置相关的营销策略、制定业务目标,由此引申出了一个重要的用数据预测未来的方法——时间序列分析,今天和大家分享就是实战中难度系数比较高的时间序列分析,一种根据一段时间内数据的趋势,进行预测的模型方法,实际中主要用于对销售数据、金融数据的预测。

    一般来说,要对数据进行预测,需要分析时间段内数据的影响因素是哪种,这里的影响因素从科学角度来讲有四种(因为我没对时间序列分析进行过进一步的理论研究,所以和大家分享时就根据我大学专业课所学以及日常工作中的思考来讲解,欢迎批评指正):

    一、长期趋势(Trend)

    二、季节变化(Season)

    三、循环波动(Cyclic)

    四、不规则波动(Irregular)

    四种影响因素通常有两种组合方式,一种是加法模型:Y=T+S+C+I,认为数据的发展趋势是4种影响因素相互叠加的结果

    一种是乘法模型:Y=T*S*C*I,认为数据的发展趋势是4种因素相互综合的结果

    二、如何去预测数据?

    拿到一组数据,要对一组数据进行预测,通常需要如下的步骤:

    1.对数据进行清洗,去掉缺失值和异常值;

    2.观察数据的时序图,确定数据是否存在周期性;

    3.确定数据模型(指数平滑法还是自回归移动平均);

    4.对模型效果进行比对,选择最优模型;

    5.对模型的预测值根据实际业务再次进行优化,得到最终结果,应用到业务当中去。

    三、该用哪个预测模型?

    这里我介绍两个常用的预测模型,一个是指数平滑法,一个是自回归移动平均模型。

    指数平滑法的基本公式是:S_t=a\cdot y_t+(1-a)S_{t-1} ,其中

    • St--第t期的预测值(或指数平滑值);
    • yt--第t期的实际值;
    • St − 1--第t-1期的预测值(或指数平滑值);
    • a--平滑常数,其取值范围为[0,1];

    简单来说就是:任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均,也可以理解为下一期数据的预测值与本期的实际值和上一期的预测值相关.

    指数平滑模型包括一次指数平滑、二次指数平滑、三次指数平滑,究竟使用哪个方法要根据实际情况:

    一次指数平滑:当时间序列无明显的趋势变化,可用一次指数平滑预测。其预测公式为:

      yt+1'=ayt+(1-a)yt' 式中,

    • yt+1'--t+1期的预测值,即本期(t期)的平滑值St ;
    • yt--t期的实际值;
    • yt'--t期的预测值,即上期的平滑值St-1;

    即下一期的预测值等于本期的实际值与本期的预测值的加权平均

    二次指数平滑:对一次指数平滑的再平滑,它适用于具线性趋势的时间序列。其预测公式为:

      yt+m=(2+am/(1-a))yt'-(1+am/(1-a))yt=(2yt'-yt)+(yt'-yt) a/(1-a)m

      式中,yt= ayt-1'+(1-a)yt-1

      二次指数平滑是一直线方程,其截距为:(2yt'-yt),斜率为:(yt'-yt) a/(1-a),自变量为预测天数。

    三次指数平滑:在二次平滑基础上的再平滑。其预测公式为:

      yt+m=(3yt'-3yt+yt)+[(6-5a)yt'-(10-8a)yt+(4-3a)yt]*am/2(1-a)2+ (yt'-2yt+yt')*a2m2/2(1-a)2

      式中,yt=ayt-1+(1-a)yt-1

      它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权,新数据给较大的权,旧数据给较小的权

    四、如何使用指数平滑法建模

    了解指数平滑法的理论知识后,接下来了解如何实际操作,得出预测结果,指数平滑法我个人觉得直接用spss就可以很好解决,

    根据我在实践中的总结,当数据具有明显的季节性规律的时候,并且数据量不大,比如100个月的销售数据,我认为指数平滑法

    能够很好解决销售预测的问题。举个例子:

    数据我用的是张文彤老师《spss统计分析基础教程》中的汽车销量数据,如下所示:

    这里是1988年到2001年14年间的数据,如果我们要预测未来5年,也就是2002年到2006年的汽车销量,应该如何去做?

    首先第一步:定义日期

    设定初始年份为1988,因为这里数据只涉及到年,因此只选择年,如果数据涉及月数据,那么应该选择年份、季度、月份

    第二步:描绘序列图,观察数据的长期趋势,

    随着时间的增加,汽车销量呈现增长的趋势,并且1999年—2001的增长幅度超过了前面几年,呈现线性增长趋势

    第三步:创建模型

    选择预测——创建模型——指数平滑法

    指数平滑条件可以看到,因为数据没有季节性,所以只支持在非季节性条件中选择,这里我们四种模型都选择一遍,从中选择最优的模型

    在选项中,指定数据预测到2006年,保存预测值

     

    上图从左到右分别是:简单非线性指数平滑模型、holt线性趋势指数平滑模型、Brown线性趋势指数平滑模型以及阻尼趋势指数平滑模型,直观上看,简单非线性模型被淘汰!因为已经明确知道未来趋势是线性,现在要确定剩下三个模型用哪个,

    第四步:确定模型

    从剩下三个模型的拟合结果来看,阻尼趋势模型的R方(即拟合优度)=0.951,最高,其次是holt线性和brown线性,均为0.948,

    拟合结果差距不大,接下来进一步看三个模型的具体预测值:

    未来5年,3个模型预测值如上,holt线性和brown线性的预测结果完全一致,阻尼趋势的结果较为保守,这时候应该根据公司的实际发展规划确定使用哪个结果,公司处于快速发展期,可以考虑线性模型的结果;公司处于稳定增长期,可以考虑阻尼趋势的结果,不去选择过高的销售目标,同时,结合当地社会平均消费水平以及全国的汽车市场发展前景等等因素,综合得出结果,不必局限于直接使用模型给出的数据,可以根据实际调整增长幅度,这样才能得出真正为业务所用的预测值。

    这里举出的实例属于指数平滑法中最简单的一种,数据量小,考虑因素单一,因此能直观得出结果,实际业务中,还要涉及每个月的具体值,每年的重大节假日,双11,6.18等等,需要综合考虑的因素更多,这时,直接套用模型给出的结果远远不行,必须根据实际情况进行调整。

    对于预测值超过100个,用指数平滑法就无法满足需求,这时候就用到了自回归移动平均模型(ARIMA模型),限于篇幅,我将放到下一次的分享,自回归移动平均模型是时间序列预测的精华之所在,非常值得思考和探索,敬请期待。

    展开全文
  • 使用时间序列分解模型预测商品销量 1.商品销量预测:  连贯性:把过去,现在,未来的发展联系起来,通过过去和现在的数据推导出将来的变化  相关性:从宏观上讲,市场需求和国家经济状况,家庭收入水平,消费需求...
  • 这段时间开始接触时间序列,觉得挺有意思的,jupyter notebook 笔记这里记录一下 预测方式选用两种大类 统计学方式:ARIMA 神经网络:NLP,LSTM 加载数据集+shape import numpy as py import pandas as pd import ...
  • # 本次比赛目标:通过时间序列模型,预测接下来一个月,俄罗斯某商超集团每件商品在各个商店的总销售额。 # 听说 Eviews 和 MATLAB 是经济金融界的利器,特别是在时间序列方面,二者优势得天独厚。 # 我估摸着,就...
  • 时间序列分析预测实战之ARIMA模型

    千次阅读 2018-11-09 16:40:21
    接着上一章的内容,当数据超过100个,要对数据进行更加精准的预测,该用什么样的方法呢? 这时候ARIMA模型就登场了,全称是自回归差分移动平均模型,使用这个模型建模,具体的操作步骤如下: 1)观察时序的平稳性...
  • SPSS工具:时间序列分析---商业销量预测

    万次阅读 多人点赞 2018-09-14 16:07:30
    下面是操作过程:   下面来进行对比分析 接下来我们来预测吧. 至此,时间序列分析终于全部结束了。    
  • 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小...
  • R中时间序列分析-趋势预测ARIMA

    千次阅读 2017-07-25 17:46:20
    时间序列预测(time series forecasting) ARIMA模型(Autoregressive Integrated Moving Average Model) ARIMA模型,将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和...
  • 参见教程python数据分析与挖掘实战
  • 时间序列预测方法最全总结!

    万次阅读 多人点赞 2021-03-12 00:15:38
    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。需要明确一点的是,与回归分析预测模型...
  • https://blog.csdn.net/weixin_41931826/article/details/80382898    
  • 1. 时间序列模型 2. 时间序列论文
  • 使用时间序列分解模型预测商品销量1.1实验目的1.2实验概述1.3 实验目标1.4 实验工具1.5 实验准备实验资源============== 这是一条分割线 ==============必看:想要直接开始操作点击这里 发布本博客皆是为了做笔记,...
  • 用时间预测分解模型预测商品销量1.1实验目的1.2实验概述1.3 实验目标1.4 实验工具1.5 实验准备实验资源============== 这是一条分割线 ==============必看:想要直接开始操作...另一部分为时间序列分解建模,对线性回归
  • 用来处理不同样式的预测问题。
  • spss时间序列预测销量

    万次阅读 多人点赞 2018-06-02 02:28:27
    首先,对时间序列概念有一个大致的了解,即根据变量过去的观测值来预测同一变量的未来值,就是根据已有的历史数据预测未来。时间序列的特点:1、现实的、真实的一组数据,而不是数理统计中做实验得到的。既然是真实...
  • 预测目标:时间序列预测的目标,可以分为值预测与概率预测。值预测就是直接输出预测的值。概率预测不止输出预测的值,也会输出预测值的分布,举一个亚马逊的货物需求预测案例,与直接去预测未来具体的需求值不同,...
  • 迷你型洗衣机价格便宜,使用方便,近年来销售量不断增加。缺点是功能单一导致消费受众...通过对三种模型预测结果的对比分析,表明经由遗传算法优化参数的灰色神经网络能较好的预测销量未来变化,辅助企业决策订单生产计划。
  • 时间序列预测

    千次阅读 2021-01-27 21:26:58
    时间序列分析的核心就是挖掘该时间序列中的自相关性 平稳性:经由样本时间序列得到的拟合曲线,未来一段时间内仍能顺着现有形态的“惯性”延续下去 平稳性要求序列的均值和方差不发生明显变化 (1)一个随机时间序列...
  • 信息时代,最不缺的是学习资源,最缺的是系统的学习资源。——于我心有戚戚焉常有粉丝留言问我,有没有系统的、可供小白、初学者快速上手时间序列预测的学习资源——教材书籍、视频直播、或者论文都行。...
  • 序列分解1、非季节性时间序列分解 移动平均MA(Moving Average)①SAM(Simple Moving Average) 简单移动平均,将时间序列上前n个数值做简单的算术平均。 SMAn=(x1+x2+…xn)/n②WMA(Weighted Moving Average) ...
  • 本文接上一篇使用时间序列分解模型预测商品销量———数据预处理 发表本博客的目的在于记录笔记,分享经验,无其他任何目的 2.1 数据预处理 这一步将会使用PAI中的四个组件: “源/目标”–“读数据表”:从...
  • 指数平滑和ARIMA模型是时间序列预测中应用最为广泛的两种方法,它们是解决这一问题的补充方法。指数平滑模型是基于对数据趋势和季节性的描述,而ARIMA模型则是为了描述数据的自相关性。 在讨论ARIMA模型之前,我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,045
精华内容 818
关键字:

时间序列分析预测销量