1 Star 0 Fork 5

ai_predict_analysis / times_series

forked from allen / times_series 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
note.md 12.57 KB
一键复制 编辑 原始数据 按行查看 历史
allen 提交于 2020-08-03 17:45 . 微小调整

输入图片说明

  • 时序分析

    • 平稳:围绕常值波动

      • 简单平均
      • MA:SMA(simple),WMA(weight)
      • 指数平滑
        • 一次平滑/单一指数平滑:只有一个平滑系数,且观察值离预测时期越久越,权重就越小。

          • 一次指数平滑是将一段时期的预测值与观察值的线性组合作为$t + 1$时期的预测值,模型:$F_t = \alpha \times Y_t + (1 - \alpha) \times F_{t-1}, \alpha \in [0, 1]$
          • 模型推导预测
            • $F_1 = Y_1$
            • $F_2 = \alpha \times Y_1 + (1 - \alpha) \times F_1 = Y_1$
            • $F_3 = \alpha \times Y_2 + (1 - \alpha) \times F_2 = \alpha \times Y_2 + (1 - \alpha) \times Y_1$
            • $F_4 = \alpha \times Y_3 + (1 - \alpha) \times F_3 = \alpha \times Y_3 + \alpha \times (1 - \alpha) \times Y_2 + (1 - \alpha^2) \times Y_1$
          • 参数$\alpha$
            • $\alpha \to 0$,上次的预测值比重大,模型对时序变化反应慢
            • $\alpha \to 1$,上次的实际值比重大,模型对时序变化反应快
            • 当时序有较大随机波动时,选取较大$\alpha$,以便于能跟上近期变化
            • 特点:平滑值即为预测值,只能预测下一期
        • 二次指数平滑法:对一次指数平滑的再平滑。它适用于具线性趋势的时间数列

          • 公式
            • 计算
              • $S_t^{(1)} = \alpha \times y_t + (1 - \alpha) \times S_{t - 1}^{(1)}$
              • $S_t^{(2)} = \alpha \times S_t^{(1)} + (1 - \alpha) \times S_{t - 1}^{(2)}$
            • 预测
              • $a_t = 2 \times S_t^{(1)} - S_t^{(2)}$
              • $b_t = \frac{\alpha}{1 - \alpha} \times (S_t^{(1)} - S_t^{(2)})$
              • $F_{t+m} = a_t + b_t \times m$
            • 评估
              • MSE = $\sum_{t=1}^n{\frac{(y_t - F_t)^2}{n}}$
              • MAPE = $\sum_{t=1}^n{\mid \frac{y_t - F_t}{y_t} \mid / n}$
          • 参数
            • $S_t^{(1)}$: 第$t$期的一次指数平滑值
            • $S_t^{(2)}$: 第$t$期的二次指数平滑值
            • $a_t, b_t$: 线性平滑模型参数
            • $F_{t+m}$: 第$t+m$期的预测值
            • $m$:预测超前期数
        • 三次指数平滑法:在前两次指数平滑的基础上,使用两次平滑值再进行一次平滑,得到其关于时间的非线性发展趋势模型

          • 公式
            • 计算
              • $S_t^{(1)} = \alpha \times y_t + (1 - \alpha) \times S_{t - 1}^{(1)}$
              • $S_t^{(2)} = \alpha \times S_t^{(1)} + (1 - \alpha) \times S_{t - 1}^{(2)}$
              • $S_t^{(3)} = \alpha \times S_t^{(2)} + (1 - \alpha) \times S_{t - 1}^{(3)}$
            • 预测
              • $a_t = 3 \times S_t^{(1)} - 3 \times S_t^{(2)} + S_t^{(3)}$
              • $b_t = \frac{\alpha}{2 \times (1 - \alpha)^2} \times ((6 - 5 \times \alpha) \times S_t^{(1)} - (10 - 8 \times \alpha) \times S_t^{(2)} + (4 - 3 \times \alpha) \times S_t^{(3)})$
              • $c = \frac{\alpha^2}{(1 - \alpha)^2} \times (S_t^{(1)} - 2 \times S_t^{(2)} + S_t^{(3)})$
              • $F_{t+m} = a_t + b_t \times m + 0.5 \times c_t \times m^2$
        • 评估:均方误

    • 趋势型序列

      • 线性趋势预测:$\hat{Y_t} = b_0 + b_1 \times t$
      • 非线性趋势预测
        • 指数曲线(exponential curve):$\hat{Y_t} = b_0 \times b_1^t$,取对数成线性拟合
      • 多阶曲线
    • 复合型序列(趋势、季节、周期和随机成分):$Y_t = T_t \times S_t \times I_t$

      • 参数
        • $T$:趋势
        • $S$:季节性
        • $C$:周期性或循环波动
        • $I$:随机性或不规则波动
      • 方法
        • 季节性多元回归模型

        • 季节性自回归模型

        • 时间序列分解法

          • 要点:确定并分离季节成分:计算季节指数,以消除季节性
          • 计算季节指数(seasonal index)
            • 移动平均趋势剔除法
              • 计算方法
              • 计算移动平均值(季度数据采用4项MA,月度数据采用12项MA),并对其结果进行中心化处理(CMA二项移动平均)
              • 计算移动平均的比值,即季节比率。将序列的观察值 除以 相应的去中心化移动平均值,然后计算出各比值的季度/月份均值
              • 季节指数调整。由于各季节指数的平均数应应等于1或100%,若根据第二步计算的季节比率的平均值不等于1,则需要进行调整。具体方法:将第二步计算的每个季节比率的平均值除以它们的总平均值
              • 分离季节成分:$\frac{Y}{S} = \frac{T \cdot S \cdot I}{S} = T \cdot I$
              • 预测
                • 对剔除季节性后数据,建立预测模型并预测
                • 计算预测值,最终值 = 预测值 * 季节指数
            • 简单季节指数法
              • 收集历年(通常至少三年)各月/季的统计值
              • 求出各年同月/季观察值的均值(A)
              • 求出历年所有月份/季度的均值($B = \frac{\sum{y_t}}{n}$)
              • 计算各月/季的季节指数:$C = \frac{A}{B}$
              • 预测:根据未来年度的全年趋势预测值,平均后得出月/季的趋势预测值,然后乘以相应的季节指数即可
                • 公式
                • $a = \frac{\sum{y_t}}{n}$
                • $b = \frac{\sum(y_t \times T)}{\sum T^2}$
                • $\hat(y_t) = a + b * T$,最终的结果为:$\hat(y_t) \times C$
                • 参数
                  • $y_t$:第$t$期的观察值
                  • $n$: 总期数
                  • $T$: $\sum T = 0$,故当$n$为奇数时,median(T) = 0
        • Holt趋势法

          • statsmodels api
            • Holt线性趋势:将simple指数平滑模型进行扩展,能够预测包含趋势的数据
              • 公式
                • 水平:$L_t = \alpha \times y_t + (1 - \alpha) \times (l_{t-1} + b_{t-1})$
                • 趋势:$b_t = \beta \times (l_t - l_{t-1}) + (1 - \beta) \times b_{t-1}$
                • 预测:$F_{t+h} = l_t + h \times b_t$
              • 参数
                • $l_t$:时刻$t$的估计水平
                • $b_t$:时刻$t$的预测趋势
                • $\alpha$:水平平滑参数
                • $\beta$:趋势平滑参数
            • 指数趋势
              • 公式
                • 水平:$L_t = \alpha \times y_t + (1 - \alpha) \times (l_{t-1} \times b_{t-1})$
                • 趋势:$b_t = \beta \times \frac{l_t}{l_{t-1}} + (1 - \beta) \times b_{t-1}$
                • 预测:$F_{t+h} = l_t \times b^h_t$
              • 参数:$b_t$:时刻$t$的预估增长类(相对)
            • 阻尼趋势模型(乘法阻尼同指数趋势)
              • 公式
                • 水平:$L_t = \alpha \times y_t + (1 - \alpha) \times (l_{t-1} + \phi \times b_{t-1})$
                • 趋势:$b_t = \beta \times (l_t - l_{t-1}) + (1 - \beta) \times b_{t-1} \times \phi$
                • 预测:$F_{t+h} = l_t + b_t \times \sum_{i=1}^h(\phi^i)$
              • 参数:阻尼系数$\phi \in (0, 1]$
        • Holt-Winters季节性预测模型

          • statsmodels api
          • 构成
            • 预测函数
            • 三次平滑函数
              • 水平函数$L_t$
              • 趋势函数$b_t$
              • 季节分量$S_t$
              • 平滑参数:$\alpha, \beta, \gamma$
          • 公式
            • 水平(季节性调整的观测值和时间点t处非季节预测之间的加权平均值):$L_t = \alpha \times (y_t - S_{t-s}) + (1 - \alpha) \times (L_{t-1} + b_{t-1})$
            • 趋势(同Holt线性趋势):$b_t = \beta \times (L_t - L_{t-1}) + (1 - \beta) \times b_{t-1}$
            • 季节(当前季节指数和去年同一季节的季节性指数之间的加权平均值):$S_t = \gamma \times (y_t - L_t) + (1 - \gamma) \times S_{t-s}$
            • 预测:$F_{t+k} = L_t + k \times b_t + S_{t + k - s}$
          • 参数
            • $s$:季节循环长度
            • $\alpha \in [0, 1], \beta \in [0, 1], \gamma \in [0, 1]$
            • $k$:预测期
        • 自回归移动平均模型(ARIMA)

          • statsmodels api
          • 指数平滑模型都是基于数据中的趋势和季节性的描述
          • ARIMA的目标是描述数据中彼此之间的关系
          • R 语言中的 auto.arima
    • RNN

    • LTSM

  • 时序分析statsmodels.tsa.api相关介绍

    • 统计测试
      • statsmodels.tsa.stattools.acf: 计算自相关性
      • statsmodels.tsa.stattools.acovf: 估计自协方差
      • statsmodels.tsa.stattools.bds: 时序独立性的BDS测试
      • statsmodels.tsa.stattools.ccf: cross-correlation
      • statsmodels.tsa.stattools.ccovf: 两个时序间的cross协方差
      • statsmodels.tsa.stattools.coint: 测试单变量的非协整
      • statsmodels.tsa.stattools.kpss: 平稳性的Kwiatkowski-Phillips-Schmidt-Shin检验
      • statsmodels.tsa.stattools.periodogram: 计算x的固有频率的周期。
      • statsmodels.tsa.stattools.q_stat: LBQ统计量。
    • 单变量时序分析
      • statsmodels.tsa.ar_model.AR:AR模型
      • statsmodels.tsa.arima_model.ARIMA:ARIMA模型
      • statsmodels.tsa.arima_model.ARMA
      • statsmodels.tsa.statespace.sarimax.SARIMAX:具有季节回归模型的季节性自回归综合移动平均线
        • predict的参数默认值dynamic=False样本内时,滞后值用于预测:模型被训练到上一个值进行下一个预测
        • 带有季节性的ARIMA模型,通常,将模型参数设置为D不得超过1。并且总的差异'd + D'永远不会超过2。如果模型具有季节性成分,请尝试仅保留SAR或SMA项
    • 多变量时序分析
      • statsmodels.tsa.statespace.dynamic_factor.DynamicFactor:动态因素模型
      • statsmodels.tsa.vector_ar.var_model.VAR:拟合VAR(p)过程并进行滞后顺序选择
    • 指数平滑
      • statsmodels.tsa.holtwinters.ExponentialSmoothing:Holt Winter指数平滑
      • statsmodels.tsa.holtwinters.Holt:Holt指数平滑
      • statsmodels.tsa.holtwinters.SimpleExpSmoothing:simple
    • 过滤器和分解
      • statsmodels.tsa.seasonal.seasonal_decompose:ma进行季节分解
      • statsmodels.tsa.seasonal.STL:LOESS进行季节趋势分解
      • statsmodels.tsa.filters.bk_filter.bkfilter:使用Baxter-King带通滤波器对时间序列进行滤波
      • statsmodels.tsa.filters.cf_filter.cffilter:Christiano Fitzgerald不对称随机游走滤波器
      • statsmodels.tsa.filters.hp_filter.hpfilter:Hodrick-Prescott过滤器
    • 马尔科夫
      • statsmodels.tsa.regime_switching.markov_autoregression.MarkovAutoregression:马尔科夫switching自回归模型
      • statsmodels.tsa.regime_switching.markov_regression.MarkovRegression:一阶k体制马尔科夫switching回归模型
  • /code/python/learn

    • run.py: 主程序
    • load_data.py:文件读取
    • algorithm
      • arima.py:自回归移动平均模型
      • exp_smoothing.py:指数平滑
        • 一次指数平滑
        • 二次指数平滑
        • 三次指数平滑
      • holt.py: holt模型
      • holt_winters.py:Holt-Winters季节性预测模型
      • seasonal_index.py:季节指数
        • 移动平均趋势剔除法
        • 简单季节指数法
      • simple_ma.py:简单移动平均
Python
1
https://gitee.com/ai_center/times_series.git
git@gitee.com:ai_center/times_series.git
ai_center
times_series
times_series
master

搜索帮助