精华内容
下载资源
问答
  • 数据预测算法
    千次阅读
    2017-11-20 14:42:55
    常见的预测算法有
    1.简易平均法,包括几何平均法、算术平均法及加权平均法;
    2.移动平均法,包括简单移动平均法和加权移动平均法;
    3,指数平滑法,包括 一次指数平滑法和二次指数平滑法,三次指数平滑法;
    4,线性回归法,包括一元线性回归和二元线性回归,下面我一一的简单介绍一下各种方法。 ' i) G7 ?5 Q! R7 c: }5 x


    一,简易平均法,是一种简便的时间序列法。是以一定观察期的数据求得平均数,并以所求平均数为基础,预测未来时期的预测值。简易平均法是最简单的定量预测方法。简易平均法的运算过程简单,不需要进行复杂的模型设计和数学运用,常在市场的近期预测、短期预测中使用。
    1、算术平均法 ' I- [' {7 P$ C7 G# F" W' D/ H9 s
      算术平均法,就是以观察期数据之和除以求和时使用的数据个数(或资料期数),求得平均数进行预测的方法。

      运用算术平均法求平均数,有两种形式:
    ; o% f6 d% t) _
      (一)以最后一年的每月平均值或数年的每月平均值,作为次年的每月预测值 d# A! B% z! x* N/ G1 e) W8 l C

      为了确定合理的误差,用公式估计出预测的标准差。

      按公式计算某种可靠程度要求时的预测区间。

      (二)以观察期的每月平均值作为预测期对应月份的预测值 ( c: G, d, x7 w
    ; L. R0 K1 o0 `) ^
      当时间序列资料在年度内变动显著或呈季节性变化时,用第一种方法求平均值进行预测的话,势必影响预测值的精确度,同时也不能反映出年度内不同月、季的情况。 ' e( t$ e `" K p* \1 C8 ]
    : x2 G6 }4 p- j% " A# W
      2、几何平均法
      几何平均法,就是运用几何平均数求出预测目标的发展速度。

      几何平均数,就是将观察期n个环比速度资料数相乘,开n次方,所得的n次方根。 4 c% x4 D# z7 w! s) u, O0 A4 T# ~- K

      根据几何平均数建立预测模型进行预测。 ) l* O; {, _* b3 x1 i

      3、加权平均法
      加权平均法,就是在求平均数时,根据观察期各资料重要性的不同,分别给以不同的权数后加以平均的方法。 ! o4 D8 _+ D v! K2 Z- H

      其特点是:所求得的平均数,已包含了长期趋势变动。 ( r9 I6 c: }# d


    二,移动平均法
    移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速 增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。移动平均法根据预测时使用的各元素的权重不同
    , H9 |: j$ q' _& N2 B/ |- a1 V
      移动平均法是一种简单平滑预测技术,它的基本思想是:根据时间序列资料、逐项推移,依次计算包含一定项数的序时平均值,以反映长期趋势的方法。因此, 当时间序列的数值由于受周期变动和随机波动的影响,起伏较大,不易显示出事件的发展趋势时,使用移动平均法可以消除这些因素的影响,显示出事件的发展方向 与趋势(即趋势线),然后依趋势线分析预测序列的长期趋势。

    移动平均法的种类 $ V# W3 u/ H; |2 t
      移动平均法可以分为:简单移动平均和加权移动平均。

    1、简单移动平均法 , u% U9 |/ Q) q# P( H
      简单移动平均的各元素的权重都相等。简单的移动平均的计算公式如下: Ft=(At-1+At-2+At-3+…+At-n)/n式中, $ w1 {, g- b" C% r+ _1 n4 U

    •Ft--对下一期的预测值;
    •n--移动平均的时期个数;
    •At-1--前期实际值; # I% V( h4 |7 y. M
    •At-2,At-3和At-n分别表示前两期、前三期直至前n期的实际值。 & |: m* m3 ?- x7 e- w1 p
    2、加权移动平均法 % e9 p$ r# x: M6 p9 J2 W+ \2 L
      加权移动平均给固定跨越期限内的每个变量值以不同的权重。其原理是:历史各期产品需求的数据信息对预测未来期内的需求量的作用是不一样的。除了以n为周期的周期性变化外,远离目标期的变量值的影响力相对较低,故应给予较低的权重。 加权移动平均法的计算公式如下: 0 |' M# M% k! P7 {
    / ^! r {+ u6 |2 ^/ e, r* n
      Ft=w1At-1+w2At-2+w3At-3+…+wnAt-n式中, : g* o4 x* b- W+ T

    •w1--第t-1期实际销售额的权重;
    •w2--第t-2期实际销售额的权重; * f2 g2 |4 @$ n$ e, }% _3 G
    •wn--第t-n期实际销售额的权 $ p& B3 E& o, c4 |- \
    •n--预测的时期数;w1+ w2+…+ wn=1 # t& T$ H5 l- ~( e8 e
      在运用加权平均法时,权重的选择是一个应该注意的问题。经验法和试算法是选择权重的最简单的方法。一般而言,最近期的数据最能预示未来的情况,因而权 重应大些。例如,根据前一个月的利润和生产能力比起根据前几个月能更好的估测下个月的利润和生产能力。但是,如果数据是季节性的,则权重也应是季节性的。
    $ [/ v6 _5 O. X" ~! [
    移动平均法的优缺点
      使用移动平均法进行预测能平滑掉需求的突然波动对预测结果的影响。但移动平均法运用时也存在着如下问题: , x! Z# c* b# o% m% a

      1、 加大移动平均法的期数(即加大n值)会使平滑波动效果更好,但会使预测值对数据实际变动更不敏感;
    * n S8 u& U$ o- m; p( H) k3 c+ h
      2、 移动平均值并不能总是很好地反映出趋势。由于是平均值,预测值总是停留在过去的水平上而无法预计会导致将来更高或更低的波动;
    . L' C: r% | f$ @* [ t
      3、 移动平均法要由大量的过去数据的记录。 \. k: x1 h# [! ]: H) P/ N
    什么是指数平滑法 $ X; Y# b( K3 s$ j: D8 ~! Z3 U( X# q
      指数平滑法是布朗(Robert G..Brown)所提出,布朗(Robert G..Brown)认为时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续到最近的未来,所以将较大的权数放在最近的资料。 + z8 ?$ W2 `5 G E4 ^' j. F

     三,指数平均法 + J- f: I" y# r
    指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去 数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平 均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。 : M9 }+ ~% W+ _$ b
    ) P% S' t5 l/ ^3 N# C+ w
      也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。 # t% c1 d+ [$ x' K; B6 W
    指数平滑法的基本公式是:St=ayt+(1-a)St-1 式中, 5 L7 ^/ ~5 Y" t$ v( f
    $ B ^# z8 C5 M( G, `
    •St--时间t的平滑值; " p9 C3 v, v% k) ^; g- T
    •yt--时间t的实际值;
    •St − 1--时间t-1的平滑值;
    •a--平滑常数,其取值范围为[0,1]; 4 d/ ?% m4 P: R' i8 e
      由该公式可知:
    6 b5 I0 ^) N, d* d; ~1 l7 o
      1.St是yt和 St − 1的加权算数平均数,随着a取值的大小变化,决定yt和 St − 1对St的影响程度,当a取1时,St = yt;当a取0时,St = St − 1。
    7 h S" e) ~7 G
      2.St具有逐期追溯性质,可探源至St − t + 1为止,包括全部数据。其过程中,平滑常数以指数形式递减,故称之为指数平滑法。指数平滑常数取值至关重要。平滑常数决定了平滑水平以及对预测值与实际结果之间差异的响应速度。平滑常数a越接近于1,远期实际值对本期平滑值影响程度的下降越迅速;平滑常数a越接近于 0,远期实际值对本期平滑值影响程度的下降越缓慢。由此,当时间数列相对平稳时,可取较大的a;当时间数列波动较大时,应取较小的a,以不忽略远期实际值的影响。生产预测中,平滑常数的值取决于产品本身和管理者对良好响应率内涵的理解。

      3.尽管St包含有全期数据的影响,但实际计算时,仅需要两个数值,即yt和 St − 1,再加上一个常数a,这就使指数滑动平均具逐期递推性质,从而给预测带来了极大的方便。 * n1 E/ w" j, z" H/ D6 C: I! f
    $ q* E" ~# h8 h' ]
      4.根据公式S1=ay1+(1-a)S0,当欲用指数平滑法时才开始收集数据,则不存在y0。无从产生S0,自然无法据指数平滑公式求出S1,指数平滑法定义S1为初始值。初始值的确定也是指数平滑过程的一个重要条件。 a) V, D/ s# ?1 `

      如果能够找到y1以前的历史资料,那么,初始值S1的确定是不成问题的。数据较少时可用全期平均、移动平均法;数据较多时,可用最小二乘法。但不能使用指数平滑法本身确定初始值,因为数据必会枯竭。 3 | j0 B3 ~+ D5 l" D! H- X
    t6 g+ k: g! ?6 g
      如果仅有从y1开始的数据,那么确定初始值的方法有: ! L/ c$ S- c+ d0 w! p

      1)取S1等于y1; c$ b9 x% F8 Y8 ^( t

      2)待积累若干数据后,取S1等于前面若干数据的简单算术平均数,如:S1=(y1+ y2+y3)/3等等。 " |6 l0 N; J. p# b" ~4 X( L
    % d% v. M) k1 U7 M
    指数平滑的预测公式
      据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法等。
    (一) 一次指数平滑预测 0 R0 S' y4 S2 C
      当时间数列无明显的趋势变化,可用一次指数平滑预测。其预测公式为: 0 O3 W4 E8 s# L/ A8 y! v8 B1 y
    ( f$ m8 D" u- O( ~- ^
      yt+1'=ayt+(1-a)yt' 式中, ! u& n5 o8 r" N- c) J' y

    •yt+1'--t+1期的预测值,即本期(t期)的平滑值St ;
    •yt--t期的实际值;
    •yt'--t期的预测值,即上期的平滑值St-1 。
      该公式又可以写作:yt+1'=yt'+a(yt- yt')。可见,下期预测值又是本期预测值与以a为折扣的本期实际值与预测值误差之和。
    3 M6 ~& o' R2 J8 T
    (二) 二次指数平滑预测 0 a( R8 I/ q! z: U; D' \
      二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列。其预测公式为: . Q+ K: x$ `5 x7 x8 F4 z8 u
    " H0 p+ n! V9 j9 a. b
      yt+m=(2+am/(1-a))yt'-(1+am/(1-a))yt=(2yt'-yt)+m(yt'-yt) a/(1-a) / L6 U( J+ e. V
    # I$ Y% N- N) q0 o
      式中,yt= ayt-1'+(1-a)yt-1
    0 J9 H2 R" S! F- y5 d7 P
      显然,二次指数平滑是一直线方程,其截距为:(2yt'-yt),斜率为:(yt'-yt) a/(1-a),自变量为预测天数。 ( L* l Z; G w/ K! I

    (三) 三次指数平滑预测
      三次指数平滑预测是二次平滑基础上的再平滑。其预测公式是:

      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
    / I3 }; W* }4 k& P( e
      式中,yt=ayt-1+(1-a)yt-1

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

    [编辑]指数平滑法的趋势调整
      一段时间内收集到的数据所呈现的上升或下降趋势将导致指数预测滞后于实际需求。通过趋势调整,添加趋势修正值,可以在一定程度上改进指数平滑预测结果。调整后的指数平滑法的公式为:

      包含趋势预测(YITt)=新预测(Yt)+趋势校正(Tt) " ^1 x: C& u Y* F

      进行趋势调整的指数平滑预测有三个步骤:
    4 G s- e/ _4 F. E
      1、 利用前面介绍的方法计算第t期的简单指数平滑预测(Yt); % K* ?6 \* ~0 a% X7 `

      2、 计算趋势。其公式为: Tt=(1-b)Tt-1+b(Yt-Yt-1)其中, / e( r+ C3 G3 u. X

    •Tt=第t期经过平滑的趋势; ; f& r2 e, L2 D' L* A, p
    •Tt-1=第t期上期经过平滑的趋势;
    •b=选择的趋势平滑系数; & t" p: p* k* A/ D
    •Yt=对第t期简单指数平滑预测; 8 @8 M5 R# N; i
    •Yt-1=对第t期上期简单指数平滑预测。 & C* L2 J1 D- I8 y2 R$ P7 d |
      3、计算趋势调整后的指数平滑预测值(YITt)。计算公式为:YITt=Yt+Tt。

    四,线性回归法 5 a( p& a/ S% O' a
    1. 一元线性回归预测模型 8 q7 L7 r. E2 E( h- p
     一元线性回归预测法是分析一个因变量与一个自变量之间的线性关系的预测方法。 常用统计指标:平均数、增减量、平均增减量。

      确定直线的方法是最小二乘法 最小二乘法的基本思想:最有代表性的直线应该是直线到各点的距离最近。然后用这条直线进行预测。 + Z! E8 n+ M( m, j8 ^# d l! Q0 ~
    ) g% x; _7 m) i( U' e
    1、选取一元线性回归模型的变量 ;    ' |0 w: T! |3 N, F% B7 A
    2、绘制计算表和拟合散点图 ;    $ x8 h/ N% K9 a# A
    3、计算变量间的回归系数及其相关的显著性 ;   
    4、回归分析结果的应用 。

    、经济意义检验:就是根据模型中各个参数的经济含义,分析各参数的值是否与分析对象的经济含义相符。   ) u! ?5 i! Q) T; R
    2、回归标准差检验    $ u- V6 C+ }* U" f
    3、拟合优度检验  
    4、回归系数的显著性检验 0 D" U" K2 D' Q8 s% n* z/ x1 I
    利用回归预测模型进行预测 N: A" H) D% C9 | t, P p) ?4 t+ P
      可以分为:点预测和置信区间预测法    6 O9 k8 M3 t( X o r! T" Z b
    1、点预测法:将自变量取值带入回归预测模型求出因变量的预测值。   : q8 a& a! p& w9 c8 n) ^
     2、置信区间预测法:估计一个范围,并确定该范围出现的概率。置信区间的大小的影响的因素:a、因变量估计值;b、回归标准差;C、概率度t。 a5 x4 c6 ?0 z# ~
    模型分析 " s" x$ |( ^5 p0 Y

      一元线性回归分析预测法,是根据自变量x和因变量Y的相关关系,建立x与Y的线性回归方程进行预测的方法。由于市场现象一般是受多种因素的影响,而并 不是仅仅受一个因素的影响。所以应用一元线性回归分析预测法,必须对影响市场现象的多种因素做全面分析。只有当诸多的影响因素中,确实存在一个对因变量影 响作用明显高于其他因素的变量,才能将它作为自变量,应用一元相关回归分析市场预测法进行预测。一元线性回归分析法的预测模型为:yt=b+axt 式中,xt代表t期自变量的值;yt代表t期因变量的值; a、b代表一元线性回归方程的参数。 a、b参数由下列公式求得(用代表):  为简便计算,我们作以下定义:   (2)   式中:   这样定义a、b后,参数由下列公式求得:   将a、b代入一元线性回归方程Yt = a + bxt,就可以建立预测模型,那么,只要给定xt值,即可求出预测值。   在回归分析预测法中,需要对X、Y之间相关程度作出判断,这就要计算相关系数Y,其公式如下:   相关系数r的特征有:   ①相关系数取值范围为:-1≤r≤1 。   ②r与b符合相同。当r>0,称正线性相关,Xi上升,Yi呈线性增加。当r<0,称负线性相关,Xi上升,Yi呈线性减少。   ③|r|=0,X与Y无线性相关关系;|r|=1,完全确定的线性相关关系;0<|r|<1,X与Y存在一定的线性相关关系;|r|& gt;0.7,为高度线性相关;0.3<|r|≤0.7,为中度线性相关;|r|≤0.3,为低度线性相关.

    更多相关内容
  • 一种通过实际值与上一次预估值进行比较计算就可以得出下一次预估值的中短期预测算法。 它的思想是利用近期的发展趋势,利用上一次的实际值和预测值之间的误差,来决定滑动指数a的权重大小,以此进行不断修正,来预测...

    应用场景自己想,这里只讨论技术实现。

    (1)什么是指数平滑算法?

    一种通过实际值与上一次预估值进行比较计算就可以得出下一次预估值的中短期预测算法。
    它的思想是利用近期的发展趋势,利用上一次的实际值和预测值之间的误差,来决定滑动指数a的权重大小,以此进行不断修正,来预测中短期未来的发展趋势。
    滑动指数a 取值 范围是0~1之间。
    a 越大,新数据占比越大,上一个预测值占比越小。
    a 越小,新数据占比越小,上一个预测值占比越大。
    在所有主流的预测算法中,指数滑动算法是运用最多,最广的算法。

    (2)指数平滑算法跟其他一些简易平均法(算术平均/加权平均/几何平均/移动平均等)有什么区别?

    上述简易平均算法无一例外都必须保留一定量的真实历史数据,这样会占一大部分内存用于存储。
    上述简易平均算法只能大概计算一个平均数,无法有效体现升降趋势和不能准确抓住增量规律,无法通过近期的发展趋势动态修正。
    上述简易平均算法受极端数据影响较大,且无法区分新旧数据的重要程度占比,混为一谈容易使得预测数据更容易受无用旧数据影响。

    (3)指数平滑算法的优点和缺点?

    优点:
    1:能针对不同时间的数据分配不同的权重,根据上一次预测值动态评估调整修正。预测更加准确。
    2:只需要保留上一次的预测值和实际值,节省了大量的内存空间,无需保存大量历史数据。
    3:对平稳的升/降/水平发展趋势预测准确率非常高,预测模型能够自动识别数据模型变化自己调整。
    缺点:
    1:转折点处的预测不准确,所以针对波浪形的,上下浮动非常大,升降频率非常频繁的趋势预测会不准确。
    2:长期预测不准,所以多用于中短期的预测。

    概念背完,例子整起:

    先看公式:

    在这里插入图片描述

    上源码:
    	@PostMapping("/singleExponentialSmoothingMethod")
        public String singleExponentialSmoothingMethod(@RequestBody SingleSmoothingEntity singleSmoothingEntity){
            /** 一次指数平滑公式:
             * F(t+1)=a*Xt+(1-a)*Ft
             */
            // (1)获取实际观察值列表和最后一次的预测值
            List<Double> realParamList = singleSmoothingEntity.getRealDataList();
            Double lastPredictParam = singleSmoothingEntity.getLastPredictParam();
            // 定义结果集合类
            Map<Double,Double> resultMap = new HashMap<>();
            List<Map> resultList = new ArrayList<>();
            List<Double> gapList = new ArrayList<>();
            Map<Double,Double> gapMap = new HashMap<>();
            DecimalFormat decimalFormat = new DecimalFormat("#.0");
            // (2)平滑值区间 [1~10]
            for (double a = 2; a < 10; a++) {
                for (Double realData: realParamList) {
                    double smoothParam = a/10;
                    System.out.println("平滑指数:"+smoothParam+",实际值是:"
                            + realData+",上次预测值是:"
                            +lastPredictParam+",误差为:"
                            + decimalFormat.format(Math.abs(realData-lastPredictParam)));
                    // 将误差值装进list方便统计平均误差
                    gapList.add(Math.abs(realData - lastPredictParam));
                    lastPredictParam = smoothParam * realData + (1-smoothParam)*lastPredictParam;
                    // 保留一位小数
                    lastPredictParam = Double.valueOf(decimalFormat.format(lastPredictParam));
                    System.out.println("预测下次为:"+lastPredictParam);
                }
                // 计算误差的平均值
                double totalGap = 0.0;
                for (Double gap: gapList) {
                    totalGap = totalGap + gap;
                }
                System.out.println(gapList.size()+";"+totalGap);
                gapMap.put(a,totalGap/(double) gapList.size());
                // 每更换一个平滑值,预估值都要复位
                lastPredictParam = singleSmoothingEntity.getLastPredictParam();
                // 清空当前list装的误差值
                gapList.clear();
            }
            return gapMap.toString();
        }
    

    SingleSmoothingEntity

    public class SingleSmoothingEntity implements Serializable {
    	private static final long serialVersionUID = 1L;
    
    	private List<Double> realDataList;
    
    	private Double lastPredictParam;
    
    	public List<Double> getRealDataList() {
    		return realDataList;
    	}
    
    	public void setRealDataList(List<Double> realDataList) {
    		this.realDataList = realDataList;
    	}
    
    	public Double getLastPredictParam() {
    		return lastPredictParam;
    	}
    
    	public void setLastPredictParam(Double lastPredictParam) {
    		this.lastPredictParam = lastPredictParam;
    	}
    }
    

    测效果:

    例一:

    假设应用A数据量大且趋于平稳,波动较少,求下一期的预测值大约为多少,入参为:
    {
    “real_data_list”:[203.8,214.1,229.9,223.7,220.7,198.4,216.5,214.8,204.9,200.8,200,200,200],
    “last_predict_param”:203.8?
    }
    获得滑动指数和每个滑动指数的平均误差:
    在这里插入图片描述
    也就是当 a = 0.7 时,误差最小,预测最准。
    在这里插入图片描述

    得到预测结果 Yt+1 = 200.1
    例二:

    假设应用A数据量较大且上升和下降趋势平稳单一,求未来一期的预测值:
    入参:
    {
    “real_data_list”:[203.8,204.1,209.9,213.7,219.9,226.9,230,228.1,226.4,220.0,215,210,205.9,198.4],
    “last_predict_param”:203.8
    }
    获得滑动指数和每个滑动指数的平均误差:
    在这里插入图片描述
    可以看出当a =9.0时,误差值最小
    在这里插入图片描述

    以上例子,都是只能预测未来一期的结果,为什么呢?

    因为受实际值的限制,所以一次指数平滑算法就是只能做未来一期的预测,在没有获得下一期的实际值前,没法再进行预测计算。如果要做往后几期的预测,只能使用二次和三次的指数平滑才能完成。

    初始值,也就是上期预期值怎么确定?

    如果发展变化趋势比较平稳的观察值,初始值可以直接用第一个数据(例如我的例子就是用了第一个数据)。如果变化趋势起伏较大,则要用平均值做初始值。(减少初始值对平滑值的影响)

    展开全文
  • 常见的预测模型及算法

    万次阅读 多人点赞 2020-05-01 13:22:18
    如果得到一份数据集,任务是要预测出一系列的值,而在预测任务中,我们大多数都采用的是拟合的方法,这篇文字主要介绍三种预测方法时间序列分析,灰色预测模型,神经网络。 时间序列分析 时间序列也叫动态序列,数据...


    如果得到一份数据集,任务是要预测出一系列的值,而在预测任务中,我们大多数都采用的是拟合的方法,这篇文字主要介绍三种预测方法时间序列分析,灰色预测模型,神经网络。

    1. 时间序列分析

    时间序列也叫动态序列,数据是按时间和数值性成的序列。而时间序列分析有三种作用,大致可以描述为描述过去,分析规律,预测将来。接下来将会讲到三种模型(季节分解,指数平滑,ARIMA模型)。
    一般情况下时间序列的数值变化规律有四种(长期趋势T,循环变动C,长期趋势T,不规则变动I)。我们先要对数据做出时间序列图,观察数据随周期的变化,进而判断序列是否随周期波动大,如果说整体序列随周期波动大,或波动不大,我们对其进行季节性分解,分别采用乘法和叠加模型。
    在这里插入图片描述
    在这里插入图片描述

    至于缺失值可以自己选择方法填补,这里主要介绍该模型的思想以及步骤。下面介绍具体预测模型。
    首先介绍的是指数平滑模型
    指数平滑大致分为简单平滑,Holt线性趋势模型,阻尼趋势模型,简单季节性温特模型

    简单平滑模型
    这里截取了一个文章的段落。在这里插入图片描述
    这里说明一下平滑参数α的选择:(1)如果时间序列不规则起伏但长期趋于一个较稳定的数,那么α在(0.05,0.2)之间,(2)如果序列有明显的变化,那么α在(0.3,0.5)之间,(3)如果序列变化比较缓慢则,α在(0.1,0.4)之间。要注意的是,这个模型只能预测一期数据,原因是他的预测公式。在这里插入图片描述
    这里我们的第一项是要预测的。如果预测出来,再想要预测t+2时的数据,可见我们需要Xt+1的真实数据,而我们不存在它的真实数据,最终预测t+2时只能用t+1预测值代替,带入方程中就会得到Xt+2=Xt+1。就会有下面的现象。在这里插入图片描述
    当再到2014后面时都为一个数。各个模型的具体介绍及比较
    Hole现象趋势模型
    Hole对简单的指数平滑模型进行了延申,能够预测包含趋势的数据,该方法包含一个预测方程和两个平滑方法。适用条件:线性趋势,不含季节成分。此外还有Brown线性趋势模型是此模型的特例。
    在这里插入图片描述

    阻尼趋势模型
    适用条件:线性趋势逐渐减弱且不含季节成分。Hole的线性趋势模型对未来预测值过高,这此基础上对该模型调整,加入阻力效应有效缓解较高的线性趋势。
    模型如下:在这里插入图片描述
    如下是两模型的比较,红色指的是加入阻尼后的模型,蓝色指的是Hole线性趋势模型。在这里插入图片描述
    简单季节性
    适用条件:含有稳定的季节性,不含趋势。模型如下:在这里插入图片描述
    温特加法与温特乘法
    他们的适用条件均是含有季节性和稳定的季节成分,但是前面提到过,加法和乘法的选择是要看时间序列的波动性,呈周期波动大的则是乘法,反之是加法。下面分别是温特加法和温特乘法。温特加法
    在这里插入图片描述
    从图中更清楚的看到他们的区别,一者预测波动较大的另一个预测波动较为平缓的。在这里插入图片描述
    此外运用这些模型要需要时间序列的平稳性,若平稳度低,并时间序列间隔与预测无关即协方差为0则说明Xt是个白噪声序列。一般用ACF和PACF检测但是这两种检测偶然情况太多,很难判断出来,下文会提到,如果是ARMA模型,根本判断不出来。
    由上面的指数平滑模型,这里预测女装的销售额,在这里插入图片描述
    首先对数据做出时间序列图:在这里插入图片描述
    从中发现整体序列呈周期波动越来越大,因此,本文采用叠加模型对周期进行季节性分解。因时间序列数据受季节性影响较大和数据的波动规律,本文选取温特的乘法模型。

    通过观察数据,在每年中三月和十二月中,在一个周期内明显比其他月份的销售额大,并且随着周期的进行,我们发现整体时间序列数据随周期波动逐渐升高,因而,我们对该时间序列采用乘法模型的季节性分解,分解后如下图:在这里插入图片描述
    在这里插入图片描述
    由于时间序列数据受季节性波动影响较大,本文采用温特乘法(Winter’s multiplicative)模型对数据建模在这里插入图片描述
    说明温特乘法序列模型的三个参数α,β,γ的值分别为0.034,2.4.6E-7,0.001,且此时Q检验服从原假设,并且做出残差ACF以及残差PACF图如下,可见在ACF检验中,所由滞后性阶数均与0无差异,而PACF中可能存在少许误差,说明扰动项噪声数据基本属于白噪声,温特乘法能够较好低识别本数据。

    在这里插入图片描述
    根据温特乘法,预测出的数据如下图所示,实际值与拟合值趋势基本符合,根据上表,拟合优度有0.815,说明拟合效果良好,预测出来的数据也显示出了周期性和波动的趋势。
    最后预测出十年女装销售额的数据如下:在这里插入图片描述
    在这里插入图片描述

    2.机器学习预测模型

    2.1 决策树

    这篇博客介绍决策树还可以,借助这篇博客,用sklearn实现回归树
    决策树介绍

    from sklearn.datasets import load_diabetes
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import cross_val_score
    from sklearn.tree import DecisionTreeRegressor
    #导入内置数据集
    X, y = load_diabetes(return_X_y=True)
    #切分训练集和测试集
    train_x,test_x,train_y,test_y = train_test_split(X,y,test_size=0.3)
    #构建回归树模型
    regressor = DecisionTreeRegressor(random_state=0).fit(train_x,train_y)
    #十折交叉验证模型的性能
    cross_val_score(regressor, X, y, cv=10)
    #预测
    regressor.predict(test_x)
    

    另外可以对决策树可视化,效果图:
    在这里插入图片描述
    附上实现的连接:可视化

    2.2 支持向量机回归(SVR)

    支持向量分类产生的模型(如上所述)仅依赖于训练数据的一个子集,因为构建模型的成本函数不关心超出边界的训练点。类似地,支持向量回归生成的模型仅依赖于训练数据的一个子集,因为成本函数忽略了预测接近其目标的样本。

    支持向量回归有 3 种不同的实现: SVR、NuSVR和LinearSVR。LinearSVR 提供比SVR但仅考虑线性内核更快的实现,同时NuSVR实现与SVR和略有不同的公式LinearSVR。
    具体实现如下:

    from sklearn.model_selection import train_test_split
    import numpy as np
    from sklearn.svm import SVR
    from sklearn import metrics
    from sklearn.metrics import accuracy_score,precision_score, recall_score
    '''
    X:特征向量
    y:样本的目标值
    trn_x:训练集的特征
    val_x:测试集的特征
    trn_y:训练集的目标值
    val_y:测试集的目标值
    '''
    trn_x, val_x, trn_y, val_y = train_test_split(X, y, test_size=0.3, random_state=42)
    '''
    kernel参数可选:{'linear','rbf','sigmoid'...}
    '''
    clf2 = SVR(kernel='linear',C=15,gamma='auto',probability=True,random_state=42).fit(trn_x,trn_y)
    
    resu = clf2.predict(val_x)
    y_pred_gbc = clf2.predict_proba(val_x)[:,1] 
    y_pred = clf2.predict(val_x)
    y=np.array(val_y)
    
    print('-'*10,'svm','-'*10)
    fpr, tpr, thresholds = metrics.roc_curve(y,y_pred_gbc,pos_label=1)
    #输出测试集的Accuracy
    print('acc',accuracy_score(val_y,y_pred))
    
    
    展开全文
  •   灰色预测算法是一种对含有不确定因素的系统进行预测的方法。在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即成为生成列。灰色系统常用的数据处理方式有累加和累减两种。...

    引言

      灰色预测算法是一种对含有不确定因素的系统进行预测的方法。在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即成为生成列。灰色系统常用的数据处理方式有累加和累减两种。灰色预测以灰色模型为基础,在众多灰色模型中,GM(1,1)模型最为常用。下面展示灰色预测算法的过程及代码实现

    1.灰色预测模型

      设特征 X ( 0 ) = { X ( 0 ) ( i ) , i = 1 , 2... , n } X^{(0)}=\{X^{(0)}(i),i=1,2...,n\} X(0)={X(0)(i),i=1,2...,n}为一非负单调原始数据序列,建立灰色预测模型如下:

    1. 首先对 X ( 0 ) X^{(0)} X(0)进行一次累加,得到一次累加序列 X ( 1 ) = { X ( 1 ) ( k ) , k = 0 , 1 , 2... , n } X^{(1)}=\{X^{(1)}(k),k=0,1,2...,n\} X(1)={X(1)(k),k=0,1,2...,n}
    2. X ( 1 ) X^{(1)} X(1)可建立下述一阶线性微分方程,即 G M ( 1 , 1 ) GM(1,1) GM1,1模型
      在这里插入图片描述
    3. 求解微分方程,即可得到预测模型
      在这里插入图片描述
    4. 由于 G M ( 1 , 1 ) GM(1,1) GM1,1模型得到的是一次累加量,将 G M ( 1 , 1 ) GM(1,1) GM1,1模型所得的数据 X ^ ( 1 ) ( k + 1 ) \hat{X}^{(1)}(k+1) X^(1)(k+1)经过累减还原 X ^ ( 0 ) ( k + 1 ) \hat{X}^{(0)}(k+1) X^(0)(k+1),即 X ( 0 ) X^{(0)} X(0)的灰色预测模型
      在这里插入图片描述
    5. 后验差检验模型精度
      在这里插入图片描述

      灰色预测法的通用性强,一般的时间序列场合都适用,尤其适合那些规律性差且不清楚数据产生机理的情况。灰色预测模型的优点是预测精度高,模型可检验、参数估计方法简单、对小数据集有很好的的预测效果;缺点是对原始数据序列的光滑度要求很高,在原始数据列光滑性较差的情况下灰色预测模型的预测精度不高,甚至通不过检验,结果只能放弃使用灰色模型进行预测。

    2.python实现

    import numpy as np
    
    #自定义灰色预测函数
    def GM11(x0): 
        # 数据处理
        x1 = x0.cumsum() #1-AGO序列
        z1 = (x1[:len(x1)-1] + x1[1:])/2.0 #紧邻均值(MEAN)生成序列
        z1 = z1.reshape((len(z1),1))
        # 计算参数
        B = np.append(-z1, np.ones_like(z1), axis = 1)
        Yn = x0[1:].reshape((len(x0)-1, 1))
        [[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) 
        # 还原值
        f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) 
        # 后验差检验
        delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))
        C = delta.std()/x0.std()
        P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
        return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率
    

    参考于《python数据分析与挖掘实战》


    如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!
    在这里插入图片描述


    展开全文
  • 数据分析】利用机器学习算法进行预测分析(一):移动平均(Moving Average) 【数据分析】利用机器学习算法进行预测分析(二):线性回归(Linear Regression) 【数据分析】利用机器学习算法进行预测分析(三)...
  • 时间序列预测算法总结

    万次阅读 多人点赞 2018-10-18 10:30:48
    time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等。...
  • 数据分析】利用机器学习算法进行预测分析(一):移动平均(Moving Average) 【数据分析】利用机器学习算法进行预测分析(二):线性回归(Linear Regression) 【数据分析】利用机器学习算法进行预测分析(三)...
  • LSTM算法+数据预测

    万次阅读 多人点赞 2018-11-06 20:43:20
    传统的神经网络一般都是全连接结构,且非相邻两层之间是没有连接的。对输入为时序的样本无法解决,因此引入了RNN(可以查看具体... LSTM:是对RNN算法的改进,通过不同三个门控制之前信息对当前信息的影响即(1:那...
  • 数据分析基础--预测模型

    千次阅读 2021-12-09 16:36:24
    (1)BP神经网络预测模型 (2)灰色预测模型 (3)拟合插值预测(线性回归) (4)时间序列模型 (5) 马尔科夫模型 (6)支持向量机模型 (7)Logistic模型 (8)组合预测模型 (9)微分方程预测 (10)...
  • 一、引言二、线性回归算法2.1 算法介绍目的:预测数值型的目标值得到求取目标值的回归方程、回归系数求这些回归系数w的过程称为回归数据存放在矩阵X,回归系数存放在向量W中对于给定的输入数据X’,预测结果如何确定...
  • 一文读懂数据挖掘建模预测

    万次阅读 多人点赞 2022-06-12 21:47:36
    数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。听起来比较抽象,我们举个例子。傍晚小街路面上沁出微雨后的...
  • 趋势预测算法大PK!

    千次阅读 2020-05-28 16:56:02
    趋势预测在很多应用场景中都会起到至关重要的作用,比如淘宝商家会考虑库存量应该保持在多少才能够满足客户需求,商场希望得知假期会迎来多大的客流量...在实时监控系统中会采集到大量的数据,有些数据具有周期性等时
  • 常用的趋势预测算法

    万次阅读 2021-10-28 16:09:56
    用传统机器学习算法预测:使用回归分析,比如:CART回归、LASSO回归、线性回归、支持向量机回归、最近邻回归、随机梯度下降法回归; 使用统计学方法:ARIMA; 使用深度学习算法预测:RNN、LSTM等; 欢迎关注...
  • 常用的分类与预测算法

    万次阅读 2018-12-11 11:37:27
    确定预测属性与其他变量间相互依赖的定量关系最常用的统计学方法 决策树 自顶向下的递归方式,在内部节点进行属性值的比较,并根据不同的属性值从该节点下分支,最终得到的叶节点是学习划分的类 人工神经...
  • 总第434篇2021年 第004篇近日,美团无人车配送中心团队获得NeurIPS 2020 INTERPRET轨迹预测挑战赛Generalizability赛道冠军、Regular赛道亚...
  • 从使用的广义角度上看,数据挖掘常用分析方法主要有分类、聚类、估值、预测、关联规则、可视化等。从数据挖掘算法所依托的数理基础角度归类,目前数据挖掘算法主要分为三大类:机器学习方法、统计方法与神经网络方法...
  • 你也能看懂的:灰色预测算法

    万次阅读 多人点赞 2020-02-11 10:46:33
    灰色预测是就灰色系统所做的预测。所谓灰色系统是介于白色系统和黑箱系统之间的过渡系统。其具体的含义是:如果某一系统的全部信息已知为白色系统,全部信息未知为黑箱系统,部分信息已知,部分信息未知,那么这一...
  • 数据挖掘主要分为分类算法,聚类算法和关联规则三大类,这三类基本上涵盖了目前商业市场对算法的所有需求。而这三类里又包含许多经典算法。市面上很多关于数据挖掘算法的介绍深奥难懂,今天就给大家用简单的大白话来...
  • Java调用weka神经网络算法预测股票,含有代码及数据,代码有详细解释,数据为大量数据
  • 初勘数据处理之预测算法(随机森林random forest) 集成学习方法 集成学习方法,是整合多个分类方法的预测结果,以提高分类准确率。集成学习方法先用训练数据构建一组基分类器,再对所有基分类器的预测进行投票,...
  • 来了来了!趋势预测算法大PK!

    万次阅读 2020-05-26 21:03:13
    作者 |王哲责编 |Carol头图 | CSDN 付费下载自视觉中国趋势预测在很多应用场景中都会起到至关重要的作用,比如淘宝商家会考虑库存量应该保持在多少才能够满足客户需求,商场希望...
  • 分类与预测 餐饮企业经常会碰到下面的问题: 如何预测未来一段时间内,哪些顾客会流失,哪些顾客最...常见的分类预测算法 贝叶斯 贝叶斯(Bayes)分类算法是一类利用概率统计知识进行分类的算法,如朴素贝叶斯(...
  • (Python)时序预测的七种方法

    万次阅读 2018-03-29 13:58:52
    摘要:大多数人都听说过关于Cryptocurrency...时序模型是预测的一种方法。介绍大多数人都听说过关于Cryptocurrency,许多人也许会投资他们的加密货币。但是,投资这种不稳定的货币安全吗?怎样才能确保现投资这些硬...
  • 数据挖掘算法

    千次阅读 2020-03-18 15:42:41
    3.时序预测方面典型的算法有哪些?各有什么特点? 4.根据研究的方式分类,可将时间序列预测与挖掘分为哪些类?  5.什么是序贯模式挖掘SPMGC算法? 6.数据挖掘的常用算法有哪几类?有哪些主要算法? 7.数据挖掘...
  • 轨迹预测数据集:ETH数据

    万次阅读 2021-12-23 09:43:38
    数据集链接:https://data.vision.ee.ethz.ch/cvl/aess/ ...ETH数据集 1. 数据集大致情况介绍 新单词: post-doctoral 博士后 scenario 场景,情节 interpret 解释,理解 assess 评估 perspective 角度 obtain 获得
  • 本文档为技术公开课《以性别预测为例,谈谈数据挖掘中常见的分类算法》的讲演PPT。以实例的形式,用尽量通俗的方式,针对性别预测这个分类问题,来谈一下数据挖掘基本的处理流程,常见的算法算法的选择等
  • 现在给你一组数据{ a 1 ,a 2, ⋯ ,a n},比如这组数据表示的是第1个月到第n个月的电量使用情况现在让你根据这组数据使用KNN算法预测a n+1的值,也就是第n+1个月的电量使用情况由于任何一个月的用电量总是和前几个...
  • 数据挖掘,就是从数据中学习到规律,再将学习到的规律对未知的数据进行预测。但是我们最开始获取的数据其中绝大多数是“有毛病”的,不利于后期进行分析,所以我们在分析前需要进行数据的预处理。sklearn....
  •  监督学习算法的目标就是为了让目标变量y的预测值和真实值尽量吻合,定义预测值与真实值之间的差异方法就叫损失函数。损失函数值越小,说明差异越小,模型的预测效果越好。线性回归中最小二乘法就是这个损失函数。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 380,768
精华内容 152,307
关键字:

数据预测算法

友情链接: ucos51.zip