├── README.md ├── fig ├── EMD分解.png ├── LN分解.png ├── Wide-Deep Popularity Prediction.jpg ├── base_model.png ├── result_2019-5-15.png └── result_2019-5-17_seed_1000.png ├── 报告.md └── 报告.pdf /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | - [传统时序建模方法](#传统时序建模方法) 5 | - [1.AR](#1ar) 6 | - [2.MA](#2ma) 7 | - [3.ARMA](#3arma) 8 | - [深度学习方法](#深度学习方法) 9 | - [1.TCNN](#1tcnn) 10 | - [2.RNN](#2rnn) 11 | - [注意事项](#注意事项) 12 | - [1.概念漂移](#1概念漂移) 13 | - [2.序列的自相关性](#2序列的自相关性) 14 | - [3.训练集和测试集的划分](#3训练集和测试集的划分) 15 | - [4.序列分解](#4序列分解) 16 | - [具体实践-流行度预测](#具体实践-流行度预测) 17 | - [1.数据描述](#1数据描述) 18 | - [2.时序数据特点](#2时序数据特点) 19 | - [3.时序数据分解方式](#3时序数据分解方式) 20 | - [4.外部特征](#4外部特征) 21 | - [5.模型初步结构](#5模型初步结构) 22 | - [6.现阶段结果](#6现阶段结果) 23 | - [7.问题](#7问题) 24 | - [8.进阶](#8进阶) 25 | 26 | 27 | 28 | ## 传统时序建模方法 29 | 30 | ### 1.AR 31 | 32 | ### 2.MA 33 | 34 | ### 3.ARMA 35 | 36 | ## 深度学习方法 37 | 38 | ### 1.TCNN 39 | 40 | ### 2.RNN 41 | 42 | ## 注意事项 43 | 44 | ### 1.概念漂移 45 | 46 | > 所谓概念漂移,表示目标变量的统计特性随着时间的推移以不可预见的方式变化的现象,也就是每过一段时间序列的规律是会变化的。所以,在这种情况下,拿全部时间内的数据去训练,就相当于是增加了各种噪声,预测精度是会下降的。所以,一种解决办法是不断的取最新的一阶段内的数据来训练模型做预测。 47 | 48 | ### 2.序列的自相关性 49 | 50 | > 做过时间序列的朋友可能常常会有这样的感受,用了某种算法做出来的测试集的平均绝对误差率或者r2系数都很好,但是把测试集的真实值及预测值画出来对比一下,就会发现t时刻的预测值往往是t-1时刻的真实值,也就是模型倾向于把上一时刻的真实值作为下一时刻的预测值,导致两条曲线存在滞后性,也就是真实值曲线滞后于预测值曲线,就像下图右边所显示的那样。之所以会这样,是因为序列存在自相关性,如一阶自相关指的是当前时刻的值与其自身前一时刻值之间的相关性。因此,如果一个序列存在一阶自相关,模型学到的就是一阶相关性。而消除自相关性的办法就是进行差分运算,也就是我们可以将当前时刻与前一时刻的差值作为我们的回归目标 51 | 52 | ### 3.训练集和测试集的划分 53 | 54 | > 在时间序列任务上,如果还跟其他任务一样随机划分训练集和测试集是不合理的。随机划分的测试集,跟训练集的分布会是很接近的,效果肯定比一刀切的方法更好。因此,一般是选取某个时间节点之前作为训练集,节点之后作为测试集 55 | 56 | ### 4.序列分解 57 | 58 | > 对于无明显周期和非平稳时序数据,直接预测难以达到满意效果,可以利用经验模式分解(empirical mode decomposition,EMD)和长短期记忆(long short-term memory, LSTM)的组合算法应用于时序预测。将时序数据通过EMD算法进行分解,然后将分解后的分量数据分别转化为三维数据样本。对归一化的分量数据和原始数据分别进行预测建模及重构。 59 | 60 | ## 具体实践-流行度预测 61 | 62 | ### 1.数据描述 63 | > 用户观看视频的数据。数据格式为:(时间,用户,视频) 64 | 65 | ### 2.时序数据特点 66 | - 稀疏,很多为0 67 | 1. 插值 68 | 2. embedding(因为观看次数取值全为整数) 69 | - 非平稳 70 | 1. 时间序列分解 71 | 解决方案:**分解-->预测-->重组** 72 | 73 | ### 3.时序数据分解方式 74 | 75 | - LN分解 76 | > 分解成线性项和非线性项。可以理解成ensemble实现。 77 |
78 | 79 | - EMD分解 80 | > 分解成IMF分量。 81 |
82 | 83 | - 小波分解 84 | 85 | ### 4.外部特征 86 | - 视频的文本描述 87 | - 相关外站视频同时间范围的观看序列,依然存在上述时序数据的问题 88 | - 时间位置特征:星期几/当天的第几个周期/距离第一次被看的时间 89 | 90 | ### 5.模型初步结构 91 | 92 | |特征|模型结构| 93 | |----|----| 94 | |主时间序列特征|LSTM-->dropout-->batchnorm| 95 | |外部相关时间序列特征|Attention-->LSTM-->dropout-->batchnorm| 96 | |外部文本特征|Dense-->activation-->dropout-->batchnorm| 97 | |外部时间位置特征|未使用| 98 | 99 | base模型的结构图: 100 |
101 | 102 | ### 6.现阶段结果 103 | 104 | - 2019-5-17 105 |
106 | 107 | > 调参的主要心得: 108 | - 初始学习率很重要。现在使用的学习率为1e-2,当val_loss5次没有提升则将学习率变为十分之一。 109 | - 激活函数也有影响。lstm最好使用tanh,dense的激活函数可以从relu换为selu/prelu。 110 | 111 | > 提升思路: 112 | - wide-deep模型,加入低阶特征, 混合模型是当前主要的提升手段 113 | - embedding+lstm模型,在lstm前加入embedding层 114 | - attention比较,多个attention拼接 115 | - encoder替换:LSTM-->TCNN,Dense-->Transformer 116 | 117 | ### 7.问题 118 | 119 | - 直接的LSTM模型效果比不上线性模型,需要细调模型结构 120 | - 稀疏的数据是否需要数据归一化 121 | 122 | ### 8.进阶 123 | 124 | 对于冷启动视频的预测问题:即主时间序列特征全为0的情况(todo) -------------------------------------------------------------------------------- /fig/EMD分解.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/fig/EMD分解.png -------------------------------------------------------------------------------- /fig/LN分解.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/fig/LN分解.png -------------------------------------------------------------------------------- /fig/Wide-Deep Popularity Prediction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/fig/Wide-Deep Popularity Prediction.jpg -------------------------------------------------------------------------------- /fig/base_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/fig/base_model.png -------------------------------------------------------------------------------- /fig/result_2019-5-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/fig/result_2019-5-15.png -------------------------------------------------------------------------------- /fig/result_2019-5-17_seed_1000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/fig/result_2019-5-17_seed_1000.png -------------------------------------------------------------------------------- /报告.md: -------------------------------------------------------------------------------- 1 | 2 | # 1. 数据预处理 3 | 4 | ## 1.1. 主要参数 5 | 6 | |主要参数|取值| 7 | |----|----| 8 | |采样周期(sample cycle)|6H| 9 | |观测窗长(observation window length)|7| 10 | |预测窗长(prediction window length)|1| 11 | |最低流行度(min popularity)|5| 12 | 13 | ## 1.2. 数据格式 14 | 15 | 数据是2016年10月3号到10月30号某小区对youku和iqiyi视频网站的访问记录,数据格式为三元组的形式(用户,时间,视频ID)。通过记录每个视频在采样周期内的流行度,我们可以把数据转换为流行度随时间变化的时序数据。然后筛选流行度高于最低流行度的视频,并且按预测窗长和观测窗长对数据进行切分,从而整理成可供算法学习的格式。数据基本统计情况如下: 16 | 17 | ||youku|iqiyi| 18 | |----|----|----| 19 | |请求数||| 20 | |用户数||| 21 | |视频数||| 22 | 23 | ## 1.3. 训练集测试集划分 24 | 25 | 由于请求数据有着时间标签,因此测试数据不能出现在训练数据之前。所以我们需要根据时间来对训练集和测试集进行划分。鉴于此,我们将前三周作为训练集,最后一周作为测试集。验证集从训练集中随机抽取。 26 | 27 | ## 1.4. 数据归一化 28 | 29 | 数据归一化是数据预处理的重要组成部分,合适的归一化手段可以加速模型收敛。参考论文[1]的归一化探究,Tanh和Sigmoid的归一化效果比较好。由于Z-score是最常用的归一化方法,因此我们选择这三种归一化方法进行比较。 30 | 31 | - Z-score 32 | - Tanh 33 | - Sigmoid 34 | 35 | # 2. 特征工程 36 | 37 | 对于流行度预测而言,历史的流行度变化可能是最关键的特征。此外一些附加信息也能起到预测的效果,如辅助时间序列、文本特征等等。 38 | 39 | ## 2.1. 历史流行度序列 40 | 历史流行度序列的长度根据观测窗长来确定。对于该时间序列特征我们可以使用一阶差分以及Min,Max,Sum等操作来得到一些额外特征。 41 | 42 | ## 2.2. 相关时间序列 43 | 实际上影响视频流行度的因素可能有很多,单纯的历史流行度序列无法完全预测未来的流行度,一般可以寻找一些相关的时间序列来辅助预测。由于数据集包含同一批用户对youku视频和iqiyi视频的观看记录,因此可以使用基于用户的协同过滤找出与目标youku视频相似的iqiyi视频,从而相似视频的流行度序列即可作为相关时间序列来看待。论文[2][3]对于这种特征给出了SOTA的方案。 44 | 45 | ## 2.3. 时间位置特征 46 | 由于所有的视频流行度预测共用同一个模型,在某些情况下我们需要时间位置特征来对样本进行区分。比如在不同的日期,视频A在观测窗里的时间序列相同,通过模型后的预测值就一样,这显然是不合理的。因此我们需要加入额外的时间特征,如预测窗处于的时段、星期几、是否假期、距离该视频第一次被看的时长等等。 47 | 48 | ## 2.4. 文本特征(需要给一些相关的引用) 49 | 如时间位置特征一样,文本特征也能帮助我们对样本进行区分。考虑同一时间段的不同视频,它们在观测窗里的流行度序列一样,从而通过模型后的预测值也一样,这同样是不合理的。因此需要引入关于视频自身的一些特征,如视频标题、视频标签、视频描述等等。同时文本特征也可以缓解冷启动视频的影响。 50 | 51 | ## 2.5. 时间序列分解 52 | 非平稳时间序列的预测相对平稳时间序列的预测难度更高,直接使用原始时间序列可能难以得到满意的结果。常用的分解方式有LN分解[4]和EMD分解[5]。 53 | - LN分解:LN分解即是将时间序列分解成线性部分和非线性部分。论文[4]的实现方式是先使用线性模型ARIMA对时间序列进行拟合,然后使用ANN对残差部分进行预测,两个模型的加和构成最终的预测结果。 54 |
55 | 56 | - EMD分解:将不稳定的时间序列分解成一系列更稳定的时间序列,即IMF序列。这些子系列有两个重要的属性,可以很容易地建模:(1)每个子系列都有自己的局部特征时间尺度(2)它们是相对固定的子系列。 57 |
58 | 59 | # 3. 模型结构 60 | 由于数据的独特之处主要在于拥有两个不同视频网站的观看记录,因此模型主要聚焦在这个部分。 61 | 62 | ## 3.1. Wide-Deep架构 63 | Wide-Deep架构最开始出现在论文[6]中,被作为推荐系统的架构提出,但之后渐渐发展成一个通用的深度学习框架。我们知道,深度模型如DNN,RNN等擅长提取高阶特征,而浅层模型如LR等擅长提取低阶特征,因此深度模型和浅层模型可以形成一个互补的Wide-Deep模型。此外论文[7]也指出,线性模型如AR,ARIMA等适合预测线性时间序列,而ANN等深度模型适合预测非线性时间序列。这也是我们采取Wide-Deep架构的原因之一,即浅层模型用来预测序列的线性变化部分,深度模型用来预测序列的非线性变化部分。不同于论文[7]中线性模型和深度模型分开训练的方式,Wide-Deep框架的联合训练方式或许能取得更好的效果。此外Wide-Deep也是端到端的模型,相比于论文[7]中的混合模型,训练和预测都更加方便。 64 | 65 | ## 3.2. CNN/RNN/DNN 66 | - CNN:类似于Moving Average的思想,我们使用一维CNN模块来对输入的时间序列特征进行平滑。相比于Moving Average的数据预处理模式,CNN模块不仅可以训练出一个局部加权的参数,而且可以使得整个模型是端到端的。 67 | - RNN:RNN是对时序数据最优的处理方式之一,同时对于RNN的所有隐层状态,同样可以使用Attention机制来组合。此外传统RNN在训练时面临梯度消失的问题,我们使用长短期记忆网络LSTM来替代传统的RNN。 68 | - DNN:DNN主要用作对文本嵌入之后较高维的特征作压缩。 69 | 70 | ## 3.3. Attention(还可以展开) 71 | Attention主要作为一个特征选择的组件出现。在原始论文[8]中,作者使用Attention机制在解码器的不同时间步给编码器的所有状态赋予不同的权重,这种灵活的特征选择方式大大提升了机器翻译的性能。同样的,对于相关时间序列,可以根据目标时间序列的变化趋势来给它们赋予不同的权重。论文[2]采取Input Attention和dencoder-encoder Attention的模式对特征进行选择,取得了当前最优的性能。而相对于论文[2]中固定的相关时间序列,本文将针对不同的观测窗来选取不同的相关时间序列,这对于视频流行度快速变化的情况应该适应的更好。 72 | 73 | ## 3.4. 模型整体结构 74 |
75 | 76 | ## 3.5. 模型超参数 77 | 78 | |模型主要参数|默认值| 79 | |----|----| 80 | |LSTM隐藏层维数|8| 81 | |DNN输出层维数|2| 82 | |Attention模式|乘法Attention| 83 | |LSTM和DNN层是否共享参数|True| 84 | |是否加Wide部分|True| 85 | |是否加CNN|False| 86 | 87 | # 4. 实验结果和分析 88 | 89 | ## 4.1. 数据归一化方式的影响 90 | 91 | ## 4.2. Attention的有效性 92 | 93 | ## 4.3. 模型超参数的影响 94 | 95 | ## 4.4. 特征重要程度分析 96 | 97 | # 5. 参考文献 98 | 99 | [1]Impact of Data Normalization on Deep Neural Network for Time Series Forecasting. 100 | [2]A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction. 101 | [3]Temporal Pattern Attention for Multivariate Time Series Forecasting. 102 | [4]Time Series Forecasting Using a Hybrid ARIMA and Neural Network Model. 103 | [5]The empirical mode decomposition and the Hilbert spectrum for nonlinear and non-stationary time series analysis. 104 | [6]Wide & Deep Learning for Recommender Systems. 105 | [7]Improving forecasting accuracy of time series data using a new ARIMA-ANN hybrid method and empirical mode decomposition. 106 | [8]Neural machine translation by jointly learning to align and translate. 107 | 108 | -------------------------------------------------------------------------------- /报告.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/currylym/time-series-prediction-learning-record/c63fd334530b51705ca05ce5625889c5181c37ee/报告.pdf --------------------------------------------------------------------------------