在时间序列预测领域,近年来出现了机器学习算法,如梯度提升树框架(XGBoost、LightGBM)、深度学习(LSTM、GRU、TCN)算法。 在进行时间序列建模时,机器学习算法与深度学习的区别在于是否预处理特征。 例如,在我们获得包含“日期时间”时间戳的原始数据后,机器学习算法通常会对时间戳进行细粒度的时间特征提取,以帮助模型更好地理解时间模式和趋势。 一般的深度学习模型不会对原始数据的时间特征进行预处理,而是依靠模型自身对时间特征的理解来进行特征提取和变换。
数据处理
- 检查数据:
预测分为首先,我们必须观察提供/收集的时间序列数据。 检查它是否是按时间顺序排列的连续观察序列。 因为时间序列模型的假设即是连续时间数据,所以如果所得到的时间序列数据过于离散,需要对时间单位进行细粒度化,以提高数据的连续性。
2、数据清洗:
- 重复数据:去除重复信息,删除不相关的数据,删除例如 order_id 或 row_id,等只代表序列含义的列,无法对预测做出贡献。
- 处理缺失值:数据缺失在一定阈值内需要删除或估算。 一般来讲,从技术人员角度,缺失数据超过40-50%即可界定为缺失大部分有效信息。但如果项目有业务人员参与,缺失百分比也取决于先验知识。如果数据缺失比例少于既定阈值,需要考虑填充,一般可以通过0、均值、众数、中位数等填充缺失值。在必要时也可以考虑少样本分类、回归模型预测出改缺失特征的缺失值,进而完成填充。
- 纠正格式错误:确保输入数据格式正确。比如数据集中的“日期”数据可能是“object”格式,而对于建模来说,日期数据应该是应为“datetime”格式。
- 检测和处理异常值数据:通常模型对于异常值的敏感度会显著影响模型性能。例如决策树对异常值较为敏感,因为在构建树的过程中,异常值可能导致节点的划分发生变化,进而导致建模失败。但适当的构建模型结构可以提高鲁棒性。诸如决策树的集成模型(随机森林、梯度提升树)则相对不容易受到异常值的干扰。因此请识别异常值并确定适当的操作来处理它们。
- 标准化:不同的特征可能有不同的尺度和单位。例如,在数据集中,一个特征的范围可能是从 0 到 1,而另一个特征的范围可能是从 1 到100。如果模型不适应这种差异,则可能会导致训练不稳定或某些特征可能产生过大的影响。标准化,例如对数变换、归一化等是考虑稳定数据方差的好方法
3、数据分析:
分析数据集的特征,例如季节性、趋势、周期性等,因为它有助于进行进一步的特征工程(如果有必要)。
具体代码
通常细粒度的时间特征可以通过以下方式抽取,具体取决于业务需求:
- 细粒度时序特征
import pandas as pd
def get_season(month):
if 3 <= month <= 5:
return 'Spring'
elif 6 <= month <= 8:
return 'Summer'
elif 9 <= month <= 11:
return 'Fall'
else