精华内容
下载资源
问答
  • 算法模型---时间序列模型

    万次阅读 多人点赞 2018-01-16 09:04:58
    时间序列与常见的回归问题的不同点在于: 1、时间序列是跟时间有关的;而线性回归模型的假设:观察结果是独立的在这种情况下是不成立的。 2、随着上升或者下降的趋势,更多的时间序列出现季节性趋势的形式;常用的...

    文章来源

    时间序列

    时间序列是时间间隔不变的情况下收集的不同时间点数据集合,这些集合被分析用来了解长期发展趋势及为了预测未来。
    时间序列与常见的回归问题的不同点在于:
    1、时间序列是跟时间有关的;而线性回归模型的假设:观察结果是独立的在这种情况下是不成立的。
    2、随着上升或者下降的趋势,更多的时间序列出现季节性趋势的形式;

    常用的时间序列模型有AR模型(Autoregressive model:自回归模型)、MA模型(moving average model:滑动平均模型)、ARMA模型(Auto-Regressive and Moving Average Model:自回归滑动平均模型)和ARIMA模型(Autoregressive Integrated Moving Average Model:自回归积分滑动平均模型)等。

    时间序列的预处理(使数据平稳化和随机化)

    拿到一个观察值序列之后,首先要对它的平稳性和纯随机性进行检验,这两个重要的检验称为序列的预处理。根据检验的结果可以将序列分为不同的类型,对不同类型的序列我们会采用不同的分析方法。

    平稳化处理

    平稳 就是围绕着一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显的趋势或周期性,那它通常不是平稳序列。序列平稳不平稳,一般采用三种方法检验:

    时序图检验

    这里写图片描述

    看看上面这个图,很明显的增长趋势,不平稳。

    利用自相关系数和偏相关系数

    自相关系数和偏相关系数的概念可参考《算法模型— 概率论基础—相关系数相关》
    下面是不平稳数据的自相关和偏相关系数的一种情形。
    这里写图片描述
    左边第一个为自相关图(Autocorrelation),第二个偏相关图(Partial Correlation)。
    平稳的序列的自相关图和偏相关图要么拖尾,要么是截尾。截尾就是在某阶之后,系数都为 0 。怎么理解呢,看上面偏相关的图,当阶数为 1 的时候,系数值还是很大, 0.914;二阶长的时候突然就变成了 0.050. 后面的值都很小,认为是趋于 0 ,这种状况就是截尾。什么是拖尾,拖尾就是有一个缓慢衰减的趋势,但是不都为 0 。
    自相关图既不是拖尾也不是截尾。以上的图的自相关是一个三角对称的形式,这种趋势是单调趋势的典型图形,说明这个序列不是平稳序列。
    平稳序列的自相关系数会快速衰减。

    单位根检验

    单位根检验是指检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列。
    单位根检验:ADF是一种常用的单位根检验方法,他的原假设为序列具有单位根,即非平稳,对于一个平稳的时序数据,就需要在给定的置信水平上显著,拒绝原假设。ADF只是单位根检验的方法之一,如果想采用其他检验方法,可以安装第三方包arch,里面提供了更加全面的单位根检验方法,个人还是比较钟情ADF检验。以下为检验结果,其p值大于0.99,说明并不能拒绝原假设。

    利用差分将序列数据转换为平衡序列

    差分可以将数据转换为平稳序列。
    一阶差分指原序列值相距一期的两个序列值之间的减法运算;k阶差分就是相距k期的两个序列值之间相减。如果一个时间序列经过差分运算后具有平稳性,则该序列为差分平稳序列,可以使用ARIMA模型进行分析。
    确定不平稳后,依次进行1阶、2阶、3阶…差分,直到平稳为止。

    随机化处理

    对于纯随机序列,又称白噪声序列,序列的各项数值之间没有任何相关关系,序列在进行完全无序的随机波动,可以终止对该序列的分析。白噪声序列是没有信息可提取的平稳序列。对于平稳非白噪声序列,它的均值和方差是常数。通常是建立一个线性模型来拟合该序的发展,借此提取该序列的有用信息。ARMA模型是最常用的平稳序列拟合模型。

    平稳时间序列建模

    某个时间序列经过预处理,被判定为平稳非白噪声序列,就可以进行时间序列建模。
    建模步骤:
    (1)计算出该序列的自相关系数(ACF)和偏相关系数(PACF);
    (2)模型识别,也称模型定阶。根据系数情况从AR§模型、MA(q)模型、ARMA(p,q)模型、ARIMA(p,d,q)模型中选择合适模型,其中p为自回归项,d为差分阶数,q为移动平均项数。
    若平稳序列的偏相关函数是截尾的,而自相关函数是拖尾的,可断定序列适合AR模型;若平稳序列的偏相关函数是拖尾的,而自相关函数是截尾的,则可断定序列适合MA模型;若平稳序列的偏相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。(截尾是指时间序列的自相关函数(ACF)或偏自相关函数(PACF)在某阶后均为0的性质(比如AR的PACF);拖尾是ACF或PACF并不在某阶后均为0的性质(比如AR的ACF)。)
    (3)估计模型中的未知参数的值并对参数进行检验;
    (4)模型检验;
    (5)模型优化;
    (6)模型应用:进行短期预测。

    混合自回归移动平均过程(公式表达)

    差分方程
    所谓差分方程即将变量 yty_t与它的滞后期联系起来的表达式。
    研究变量在第t期的值记为yty_t。假定给出的动态方程将变量y第t期的值与另外的变量wtw_t以及y的前一期联系起来:
    yt=ϕyt1+wty_t=ϕy_{t−1}+w_t
    上述称为一阶差分方程是因为仅仅只有变量的一阶滞后(yt1)(y_t−1)出现在方程中。
    移动平均
    “移动平均”的含义源于YtY_t是最近两期的ϵ\epsilon的加权平均。
    ϵt{\epsilon_t}是一个白噪声序列。
    Yt=μ+ϵt+θϵt1Y_t=μ+\epsilon_t+θ\epsilon_{t−1}
    其中μ和θ可以是任意的常数。这个时间序列称为一阶移动平均过程,记为MA(1)MA(1)
    自回归过程
    一阶自回归过程
    一个一阶自回归,记作AR(1)AR(1)满足下面的差分方程
    Yt=c+ϕYt1+ϵtY_t=c+ϕY_{t−1}+\epsilon_t
    ϵt{\epsilon_t}是一个白噪声序列。
    p阶自回归过程
    一个p阶自回归,记作AR(p)AR(p)满足下式
    Yt=c+ϕ1Yt1+ϕ2Yt2+...+ϕpYtp+ϵtY_t=c+ϕ_1Y_{t−1}+ϕ_2Y_{t−2}+...+ϕ_pY{t−p}+\epsilon_t
    混合自回归移动平均过程
    一个ARMA(p,q)ARMA(p,q)过程包括自回归和移动平均项:
    Yt=c+ϕ1Yt1+ϕ2Yt2+...+ϕpYtp+ϵt+θ1ϵt1+θ2ϵt2+...+θqϵtqY_t=c+ϕ_1Y_{t−1}+ϕ_2Y_{t−2}+...+ϕ_pY{t−p}+\epsilon_t+θ_1ϵ_{t−1}+θ_2ϵ{t−2}+...+θ_qϵ_{t−q}

    利用statsmodels库实现时间序列的分析处理

    Time Series analysis tsa
    statsmodels.tsa.arima_model.ARIMA
    AR(I)MA时间序列建模过程——步骤和python代码
    Seasonal ARIMA with Python
    Python 3中使用ARIMA进行时间序列预测的指南
    Python_Statsmodels包_时间序列分析_ARIMA模型
    时间序列实战(一)
    How to Make Predictions for Time Series Forecasting with Python
    How to Use and Remove Trend Information from Time Series Data in Python
    时间序列分析之ARIMA上手-Python
    [python] 时间序列分析之ARIMA

    python中有专门的库statsmodels可以用来作时间序列分析,但spark中则没有现成的。

    #-*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    import pandas as pd
    data=pd.read_csv('./HIS_MONTH.csv')
    b=data['fData']
    plt.plot(data['fData'])
    plt.show()
    

    数据结构如下
    这里写图片描述

    #自相关图
    from statsmodels.graphics.tsaplots import plot_acf
    plot_acf(data['fData']).show()
    

    如下所示
    这里写图片描述
    从图上可以自相关系数基本是拖尾的,稍做调整就可以使用。

    #偏自相关图
    from statsmodels.graphics.tsaplots import plot_pacf
    plot_pacf(data['fData']).show()
    

    如下图所示
    这里写图片描述
    偏相关系数也基本符合拖尾。

    #平稳性检测
    from statsmodels.tsa.stattools import adfuller as ADF
    print('原始序列的ADF检验结果为:')
    print(ADF(data['fData']))
    #返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore
    

    如下所示

    原始序列的ADF检验结果为:
    (-6.561077625309946, 8.378411469638636e-09, 0L, 47L, {'5%': -2.925338105429433, '1%': -3.5778480370438146, '10%': -2.6007735310095064}, 273.5266547319719)
    

    p值远小于0.05,拒绝原假设(原假设认为存在单位根),所以该序列为平衡时间序列。

    #白噪声检验
    from statsmodels.stats.diagnostic import acorr_ljungbox
    print('差分序列的白噪声检验结果为:')
    print(acorr_ljungbox(data['fValueData'], lags=1))
    

    结果如下

    差分序列的白噪声检验结果为:
    (array([0.05198092]), array([0.81965149]))
    

    P=0.81965149,统计量的P值大于显著性水平0.05,则接受原假设(原假设认为为白噪声序列)。

    下面对原序列做一阶差分运算

    #差分后的结果
    D_data = data['fValueData'].diff().dropna()
    D_data.columns = ['fValueData']
    #时序图
    D_data.plot()
    

    结果如下:
    这里写图片描述
    从图上看,一阶差分后,感觉数据分布更对称为随机了。

    #自相关图
    plot_acf(D_data).show()
    plt.show()
    

    结果如下
    这里写图片描述
    从图上看,一阶差分对数据有改善,振荡衰减更明显

    #偏自相关图
    plot_pacf(D_data).show()
    

    结果如下
    这里写图片描述
    从图上看,偏相关系数虽然没有自相关系数好,但基本能满足平稳序列的要求。

    #平稳性检测
    print('差分序列的ADF检验结果为:')
    print( ADF(D_data))
    

    结果如下

    差分序列的ADF检验结果为:
    (-4.595500765524432, 0.0001316587309452837, 10L, 36L, {'5%': -2.9459512825788754, '1%': -3.626651907578875, '10%': -2.6116707716049383}, 270.35268975914374)
    

    p值远小于0.05,拒绝原假设(原假设认为存在单位根),所以该序列为平衡时间序列。

    #白噪声检验
    from statsmodels.stats.diagnostic import acorr_ljungbox
    #返回统计量和p值
    print('差分序列的白噪声检验结果为:')
    print(acorr_ljungbox(D_data, lags=1))
    

    结果如下:

    差分序列的白噪声检验结果为:
    (array([12.35619393]), array([0.00043953]))
    

    P=0.00043953,统计量的P值小于显著性水平0.05,则拒绝原假设(原假设认为为白噪声序列),所以一阶差分后该序列为非白噪声序列,有进一步分析的价值。

    Holt-Winters模型原理及python实现

    本部分来源,也可以参考该文

    原理分析

    公式前面也写过,这里再表述一下,有时间再来整理
    假设随机时间序列为:
    xt(t=1,2,,N,N=n)x_t(t=1,2,\ldots,N,N=n)
    时间序列数据一般有以下几种特点:1.趋势(Trend) 2. 季节性(Seasonality)。
    趋势描述的是时间序列的整体走势,比如总体上升或者总体下降。下图所示的时间序列是总体上升的:
    这里写图片描述
    季节性描述的是数据的周期性波动,比如以年或者周为周期,如下图:
    这里写图片描述
    三次指数平滑算法可以对同时含有趋势和季节性的时间序列进行预测,该算法是基于一次指数平滑和二次指数平滑算法的。

    移动平均(The simple moving average (MA))

    直观上,最简单的平滑时间序列的方法是实现一个无权重的移动平均,目前已知的方法是用窗口函数,平滑统计量 StS_t就是最近k个观察值的均值。公式如下:

    st=1kn=0k1xtn=xt+xt1++xtk+1k=st1+xtxtkk s_t=\frac{1}{k} \sum_{n=0}^{k-1} x_{t-n}=\frac{x_t+x_{t-1}+\ldots + x_{t-k+1}}{k}=s_{t-1}+\frac{x_t -x_{t-k}}{k}

    这样的方法存在明显的缺陷,当k比较小时,预测的数据平滑效果不明显,而且突出反映了数据最近的变化;当k较大时,虽然有较好的平滑效果,但是预测的数据存在延迟。而且最少需要k个值(窗口有限)。

    加权移动平均

    一种稍微复杂的方法是先选择一组权重因子来计算加权移动平均
    ω1,ω2,,ωk,n=1kωn=1 {\omega_1,\omega_2,\ldots,\omega_k},满足\sum_{n=1}^{k}\omega_n=1
    然后用这些权重来计算这些平滑统计量:
    st=n=1kωnxtn+1=ω1xt+ω2xt1++ωkxtk+1 s_t=\sum_{n=1}^{k}\omega_n x_{t-n+1}=\omega_1x_t+\omega_2 x_{t-1}+\ldots+\omega_{k}x_{t-k+1}
    在实践中,通常在选择权重因子时,赋予时间序列中的最新数据更大的权重,并减少对旧数据的权重。这个方法也需要最少k个值,并且计算复杂。

    简单指数平滑法

    幸运地是有一种方法可以避免上述问题,它叫做指数平滑法。最简单的指数平滑法如下:
    si=αxi+(1α)si1 s_i = \alpha x_i + (1-\alpha)s_{i-1}
    其中α\alpha是平滑因子,0<α<10 < \alpha < 1sis_i是当前时刻的平滑值。换句话说,平滑统计值SiS_i是当前统计值XtX_t与上一时间平滑值Si1S_{i-1}加权平均。这个简单指数平滑是很容易被应用的,因为只要有两个观察值就能计算了。这里α的选取,我们可以采用最小二乘来决定α\alpha(最小化(stxt)2(s_t-x_t)^2)。
    一次指数平滑算法进行预测的公式为:
    xi+h=six_{i+h}=s_i
    其中i为当前最后的一个数据记录的坐标,亦即预测的时间序列为一条直线,不能反映时间序列的趋势和季节性。

    为什么被称为“指数”平滑法
    从它的递推公式就能发现:

    简单指数平滑法适用于没有总体趋势的时间序列。如果用来处理有总体趋势的序列,平滑值将往往滞后于原始数据,除非α的值接近1,但这样一来就会造成不够平滑。

    二次指数平滑(HoltWinters-无季节趋势)

    为了解决上述问题,于是引出了二次指数平滑,能够保留总体趋势信息。因为将指数平滑应用了两次,所以被称为二次指数平滑。与简单指数平滑相比,二次指数平滑加入了时间趋势统计量tit_i,公式如下:
    si=αxi+(1α)(si1+ti1)ti=β(sisi1)+(1β)ti1 s_i=\alpha x_i + (1-\alpha)(s_{i-1}+t_{i-1})\\ t_i=\beta (s_i-s_{i-1}) + (1-\beta)t_{i-1}
    sis_i添加了与一次指数平滑相比,添加了一个新的趋势项tit_i;而tit_i的表达式与一次指数平滑形式上是一样的,只不过用将xix_i换成(sisi1)(s_i-s_{i-1}),趋势可以想像成增量,就是在此刻与上一刻的差值,趋势当然应该用平滑后的数据的差值;同时将一次平滑中的si1s_{i-1}换成ti1t_{i-1}
    二次指数平滑的预测公式为
    xi+h=si+h ti x_{i+h}=s_i+h \ t_i
    二次指数平滑的预测结果是一条斜的直线

    三次指数平滑

    三次指数平滑将时间序列的季节性这一特征也考虑进去了。
    季节性被定义为时间序列数据的趋势,它表现出每一个周期重复自身的行为,就像任何周期函数一样。“季节”这个词用来表示行为每隔时间段L就开始自我重复。在自然界中有不同类型的季节性“累加性”(additive)和“累乘性“(multiplicative),就像加法和乘法是数学的基本运算。
    如果每个12月都比每个11月多卖出1000套公寓,我们就说这样的季节趋势是“累加性”的。可以用绝对增⻓来表示。如果我们在夏季比冬季多卖出10%的公寓,那么季节趋势在自然中是“累乘性”的。
    累乘性公式如下:
    下面的式子中kk表示季节频率,这个还需要查资料进行理解
    si=αxipik+(1α)(si1+ti1)ti=β(sisi1)+(1β)ti1pi=γxisi+(1γ)ptk s_i=\alpha \frac{x_i }{p_{i-k}} +(1-\alpha)(s_{i-1}+t_{i-1})\\ t_i=\beta (s_i-s_{i-1}) + (1-\beta)t_{i-1}\\ p_i=\gamma \frac{x_i}{s_i} + (1-\gamma)p_{t-k}\\
    上式中k为周期, 累乘三次指数平滑的预测公式为:
    xi+h=(si+h ti)pik+(h mod k) x_{i+h}=(s_i+h\ t_i)p_i-k+(h\ mod\ k)
    或者
    xi+h=(si+h ti)pik+1+(h1) mod k x_{i+h}=(s_i+h\ t_i)p_{i-k+1+(h-1) \ mod \ k}
    两个公式还需要确认下
    累乘性公式初始值的计算
    sk=1k(s1+s2++sk)tk=1k[xk+1x1k+xk+2x2k++xk+kxkk]p1=x1sk,p2=x2sk,,pk=xksk s_k=\frac{1}{k} (s_1+s_2+\cdots+s_k)\\ t_k=\frac{1}{k}\left[ \frac{x_{k+1}-x_1}{k}+\frac{x_{k+2}-x_2}{k}+\cdots+\frac{x_{k+k}-x_k}{k} \right]\\ p_1=\frac{x_1}{s_k},p_2=\frac{x_2}{s_k},\cdots,p_k=\frac{x_k}{s_k}

    累加性公式如下:
    si=α(xipik)+(1α)(si1+ti1)ti=β(sisi1)+(1β)ti1pi=γ(xisi)+(1γ)pikxi+h=si+hbi+pik+h mod k s_i=\alpha (x_i-p_{i-k} )+(1-\alpha)(s_{i-1}+t_{i-1})\\ t_i=\beta (s_i-s_{i-1}) + (1-\beta)t_{i-1}\\ p_i=\gamma (x_i-s_i) + (1-\gamma)p_{i-k}\\ x_{i+h}=s_i+hb_i + p_{i-k+h \ mod \ k}
    或者
    xi+h=si+hbi+pik+1+(h1) mod k x_{i+h}=s_i+hb_i + p_{i-k+1+(h-1) \ mod \ k}
    两个公式还需要确认下
    累加性公式初始值的计算
    sk=1k(s1+s2++sk)tk=1k[xk+1x1k+xk+2x2k++xk+kxkk]p1=x1sk,p2=x2sk,,pk=xksk s_k=\frac{1}{k} (s_1+s_2+\cdots+s_k)\\ t_k=\frac{1}{k}\left[ \frac{x_{k+1}-x_1}{k}+\frac{x_{k+2}-x_2}{k}+\cdots+\frac{x_{k+k}-x_k}{k} \right]\\ p_1=x_1-s_k,p_2=x_2-s_k,\cdots,p_k=x_k-s_k
    其中 α\alpha是数据平滑因子, 0<α<10 < \alpha < 1;β\beta是趋势平滑因子,0<β<10 < \beta < 1; γ\gamma是季节改变平滑因子0<γ<10 < \gamma < 1
    αβγ\alpha,\beta,\gamma的值都位于[0,1]之间,可以多试验几次以达到最佳效果。

    s,t,ps,t,p初始值的选取对于算法整体的影响不是特别大,通常的取值为s0=x0,t0=x1x0s_0=x_0,t_0=x_1-x_0,累加时p=0p=0,累乘时p=1p=1.
    对三次指数平滑法而言,我们必须初始化一个完整的“季节”pip_i的值,不过我们可以简单地设置为全1(针对累乘式)或全0(针对累加式)。只有当序列的⻓度较短时,我们才需要慎重考虑初始值的选取。
    我们这里讲的Holt-Winters模型就是三次指数平滑法。哇,终于切入正题了。
    所有的指数平滑法都要更新上一时间步⻓的计算结果,并使用当前时间步⻓的数据中包含的新信息。它们通过“混合”新信息和旧信息来实现,而相关的新旧信息的权重由一个可调整的拌和参数来控制。各种方法的不同之处在于它们跟踪的量的个数和对应的拌和参数的个数。三次指数平滑法,功能最强大,既能体现趋势性又能体现季节性,所以三次指数平滑法的参数最多,有三个。
    下图为使用累加三次指数平滑进行预测的效果:其中红色为源时间序列,蓝色为预测的时间序列,αβγ\alpha,\beta,\gamma的取值为0.45,0.2,0.95:

    下图为累乘三次指数平滑进行预测的效果,αβγ\alpha,\beta,\gamma的取值为0.4,0.05,0.9:

    可以看到三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息,在International Airline Passengers数据集上累乘平滑指数算法的效果更好。

    python代码实现

    我们知道HoltWinters模型有三个可调参数,我们的目的就是训练出有效的α,β, γ
    。我们有两种方法,一种就是自己取值来试试,一种就是采用数值优化的思想,比如
    前面我们提到的最小二乘来最小化误差来求参数(注意不一定能全局收敛!这个问题
    实在是让人头痛。。。)我们就采用最小二乘法(L-BFGS)。

    RMSE的实现

    statsmodels中的holtwinters

    statsmodels.tsa模块
    statsmodels.tsa.holtwinters源码
    statsmodels.tsa.holtwinters.ExponentialSmoothing
    ExponentialSmoothing - 指数平滑算法

    基于SVM作短期时间序列的预测

    传统的做法是提取1、2、3、4、5、7、9、13个单位时间的数据作为特征进行预测;
    举个例子进行分析,比如每天都有口香糖的销量,那么如何通过几周的数据预测明天的数据,
    就可以选择前1、2、3、4、5、7、14天的数据作为特征,从而预测明天的数据,
    通过构建特征,再选择核函数进行预测,其中调参的参数尽量要进行最优化,
    参考方法:如果选择RBF核函数,那么其中就会有三个参数,固定两个,然后不停的优化另外一个,直到得到最优解。

    具体应用的例子:

    (1)SVM预测风场:http://wenku.baidu.com/link?url=SCCIJJe8tXLbTjLMZ81x5Qy6elsceAKIOwtkZ0QxfSCQQ4KaWKwo8Biepjs3Ss2LJ2ewhisNR0ixrDY4kV1Rd7BcqWRenuTaG85K80E-30y
    (2)SVM预测股票指数:基于SVM修正的模糊时间序列模型在沪指预测中的应用
    (3)SVM预测时间序列其他方面:http://www.docin.com/p-233353900.html

    LSTM模型分析及对时序数据预测的具体实现(python实现)

    来源:2017年09月30日 10:28:08

    如何用LSTM自编码器进行极端事件预测?(含Python代码)

    时间序列的并行实现

    spark里面的库是没有时间序列算法的,但是国外有人已经写好了相应的算法。其github网址是:https://github.com/sryza/spark-timeseries
    sryza/spark-timeseries
    Spark-TimeSeries使用方法
    A New Library for Analyzing Time-Series Data with Apache Spark
    【Spark Summit East 2017】使用Spark进行时间序列分析

    基于小波变换的时间序列预测,Python实现,来自雪球

    清华AIOps算法:KPI聚类

    其他资料

    时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
    Holt-Winters原理和初始值的确定
    时间序列模型Prophet使用详细讲解

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

    万次阅读 多人点赞 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))
    
    
    展开全文
  • 数学建模:十大模型与四十种常见算法

    万次阅读 多人点赞 2019-09-13 12:22:32
    十大模型与四十种算法 十大模型 涉及算法 评价模型 层次分析法、优劣解距离法(TOPSIS) 插值与拟合模型 多项式插值、分段插值、Hermite插值、样条插值(一维)、N维数据插值、cftool工具箱 相关模型 ...

    十大模型与四十种算法

    十大模型 涉及算法
    评价模型 层次分析法、优劣解距离法(TOPSIS)
    插值与拟合模型 多项式插值、分段插值、Hermite插值、样条插值(一维)、N维数据插值、cftool工具箱
    相关模型 相关系数、典型相关分析
    回归模型 多元回归分析、逐步回归模型、岭回归和Lasso回归
    图论模型 Dijlstra算法、Floyd算法
    分类问题 二分类(logistic回归、Fisher判别分析、SVM),多分类(多分类Logistic回归模型)
    聚类模型 K-means算法和K-means++、DBSCAN聚类算法
    时间序列模型 AR、MA、ARMA模型,ARCH模型和GARCH模型,单位根时间序列
    预测模型 插值预测、时间序列预测、灰色预测、BP神经网络
    降维模型 SVD奇异值分解(主要用于图像处理)、主成分分析、因子分析
    展开全文
  • 机器学习常见算法整理

    万次阅读 2019-12-06 16:56:01
    XGBoost支持并行化计算,使得算法模型训练及模型计算时运行速度快,效率高。XGBoost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。 1.2 案例链接 ...

    欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

    1.XGBoost算法

    1.1 算法特性

        用于解决二分类问题,同时通过使用许多策略能够防止过拟合现象发生,模型准确率比普通算法要高。XGBoost支持并行化计算,使得算法在模型训练及模型计算时运行速度快,效率高。XGBoost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。

    1.2 案例链接

    https://blog.csdn.net/kwame211/article/details/81098025

    https://blog.csdn.net/HHTNAN/article/details/81079257#6-xgboost%E5%AE%9E%E6%88%98

    2.基于用户的协同过滤推荐算法

    2.1 算法特性

        这种算法给用户推荐和他感兴趣相似的其他用户喜欢的物品,基于用户的偏好进行推荐,从全量数据集中找出哪些人有相同偏好,针对人群之间的相似偏好性进行推荐。最大的优点是算法简单,工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。

        在现今很流行的社交网络站点中,基于用户的协同过滤推荐算法是一个更不错的选择,基于用户的协同过滤推荐算法加上社会网络信息,可以增加用户对推荐解释的信服程度。

    2.2 案例链接

    https://blog.csdn.net/shixiaoguo90/article/details/80253567

    https://www.jianshu.com/p/79d24fa3664f

    3.基于物品的协同过滤推荐算法

    3.1 算法特性

        基于物品的协同过滤推荐算法不是根据物品内容的属性计算物品之间的相似度,而是通过分析用户的行为记录来计算用户的相似度。从物品角度找到相似度高的商品,进行推荐。最大的优点是算法简单,工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。

        在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。同时,基于物品的协同过滤推荐算法便于为推荐做出解释。

    3.2 案例链接

    https://cloud.tencent.com/developer/article/1366089

    https://blog.csdn.net/u011630575/article/details/78649331

    4.ALS算法

    4.1 算法特性

        ALS算法适用于推荐系统。ALS是alternating least squares的缩写 , 意为交替最小二乘法。交替最小二乘法是对最小二乘法处理多个变量时的扩展。其基本原理是如果有两个变量需要确定,那ALS先固定第一个变量,然后求解第二个变量。之后固定第二个变量,求解第一个变量。如此交替迭代直至收敛或者达到最大迭代次数。ALS算法属于User-Item CF,也叫做混合CF。它同时考虑了用户和物品两个方面,相当于融合了基于用户的协同过滤推荐算法和基于用户的协同过滤推荐算法。ALS能够解决稀疏矩阵分解的问题。

    4.2 案例链接

    https://www.cnblogs.com/jackchen-Net/p/6648274.html#_label0

    https://www.cnblogs.com/lengyue365/p/5689219.html

    5.算法组合——ALS+随机森林算法

    5.1 算法特性

        传统推荐系统中直接使用协同过滤推荐算法或ALS算法对用户进行产品推荐,无法实现“千人千面”的推荐以及实时变化推荐,即不同用户不同场景推荐不同产品。对于不同推荐算法触发出来的候选集,只是根据算法的历史效果决定算法产生的item的位置显得有点简单粗暴了,同时在每个算法的内部,不同item的顺序也只是简单的由一个或者几个因素决定,因此这些排序结果需要使用随机森林算法,综合多方面的因素来决定。这样一方面通过使用ALS算法融合候选集,提高推荐的覆盖率,多样性和精度,另一方面通过使用随机森林算法,解决了候选集增加以后deal之间排列顺序的问题。

    5.2 案例链接

    https://blog.csdn.net/wangqi880/article/details/49838619/

    6.深度学习算法——DeepFM

    6.1 算法特性

        DeepFM主要包括两个部分,神经网络部分和因子分解机部分,分别负责提取低阶特征和高阶特征。并且这两部分共享权重矩阵,即共享Embedding层。通过引入深度学习,能够解决模型计算复杂度以及特征复杂组合的问题,另外不需要人工特征工程,能同时学习低阶和高阶的组合特征。通过结合FM模块和Deep模块共享Feature Embedding部分,可以加快模型训练速度,以及更精准的训练学习。

    6.2 案例链接

    https://blog.csdn.net/maqunfi/article/details/99635620

    https://mp.weixin.qq.com/s/vI1t_Z_0WVE_u--ruOaREA

    欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

    展开全文
  • 人工智能之机器学习常见算法

    万次阅读 多人点赞 2016-05-22 15:47:54
    摘要之前一直对机器学习很感兴趣,一直没时间去研究,今天刚好是...这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考。 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有
  • 人工智能常见算法简介

    万次阅读 2019-02-15 13:17:32
      人工智能的三大基石—算法、数据和计算能力,算法作为其他之一,是非常重要的...一、按照模型训练方式不同可以分为监督学习(Supervised Learning),无监督学习(Unsupervised Learning)、半监督学习(Semi-...
  • 我们常说,办事情要“名正言顺”,而数据领域的名字则是格外的多,商业分析、数据分析、数据挖掘、算法模型……经常把大家绕晕,今天系统科普一下。商业分析VS 数据分析广义上...
  • 机器学习分类算法模型评价指标

    千次阅读 2019-10-14 11:18:13
    目前,业内对于机器学习,数据挖掘,推荐系统等算法模型都有比较流行的评价标准,这些评价标准在一定程度上反映了模型性能的优劣,如准确率(Prescision-rate),召回率(Recall-rate)还有F值(F-measure)。...
  • 机器学习常见算法分类

    千次阅读 2021-02-03 19:32:43
    “机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 “机器学习是对能通过经验自动改进的计算机算法的研究”。 “机器学习是用数据或以往的经验,...
  • 算法模型好坏的评价通用标准: 1、解的精确性与最优性。基于正确性基础上。 2、计算复杂度,时间成本。 3、适应性。适应变化的输入和各种数据类型。 4、可移植性。 5、鲁棒性。健壮性。 鲁棒性(robustness...
  • 常见模型优缺点比较,包括对缺失值极端值敏感性的对比记录
  • 常见算法复杂度对比

    千次阅读 2018-02-26 12:02:28
    常见算法复杂度对比 快速排序 nlogn 堆排序 nlogn 冒泡排序 在改良的冒泡下 最优时间复杂度为n 插入排序 最优下n 选择排序 n*n 归并 nlogn …… 下面上图 测试: 对N个数进行排序,在各自最优条件下...
  • 机器学习常见算法分类汇总
  • 常用的时间序列算法模型

    千次阅读 2017-09-12 10:32:53
    其建模思想可概括为:逐渐增加模型的阶数,拟合较高阶模型,直到再增加模型的阶数而剩余残差方差不再显著减小为止。 4. GARCH模型 回归模型。除去和普通回归模型相同的之处,GARCH对误差的方差进行...
  • 之前记录了一下,常见的四种网络模型——ER、BA、WS、规则图,以及如何使用python实现,具体请移步: https://blog.csdn.net/un357951/article/details/103514682 当时因为对轮盘赌算法还不熟悉,所以没有把轮盘赌...
  • 算法模型---树相关---决策树

    万次阅读 多人点赞 2017-11-01 17:50:39
    本部分内容来源《数据挖掘导论》4.3节一、决策树生成算法所谓决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个属性的测试,树的分支代表该属性的每一个测试结果,而树的每一个叶子节点...
  • 机器学习常见算法

    千次阅读 2018-08-21 21:47:27
    由于预测建模主要关注最小化模型的误差,或者以可解释性为代价来做出最准确的预测。 我们会从许多不同领域借用、重用和盗用算法,其中涉及一些统计学知识。 线性回归用一个等式表示,通过找到输入变量的特定权重(B...
  • 10种常见AI算法

    千次阅读 2019-10-08 12:55:39
    二分类的线性分类模型,也是判别模型。 目的是求出把训练数据进行线性划分的分离超平面。 感知机是神经网络和支持向量机的基础。 学习策略:极小化损失函数。损失函数对应于误分类点到分离超平面的总距离。 基于随机...
  • 常见分类算法

    万次阅读 2018-05-17 11:38:48
    常见分类算法 朴素贝叶斯网络、贝叶斯信念网络、随机森林、k-最近邻分类 云聚类算法引擎 k-Means、Canopy、Fuzzy K-Means、Mean Shift 云关联规则算法引起 FP-Growth关联规则 云智能推荐算法引擎 基于内存的...
  • 这里IT经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考。 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给...
  • 机器学习常见算法分类,算法优缺点汇总

    万次阅读 多人点赞 2017-04-14 12:08:13
    本文为您总结一下常见的机器学习算法,以供您在工作和学习中参考。  机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,856
精华内容 94,342
关键字:

常见的算法模型