时空序列分析

常用的数据处理

监督学习往往需要针对样本数据进行特征和标签的划分,对于单维、多维时间序列以及时序图,其划分的方法都比较类似,具体可以分析如下几种情况:

one to one

不论是单维、多维还是时序图,都是把t时刻的数据作为特征,t+1的数据作
为标签,随着t从序列头部到后部不断移动,由此构造出序列的特征和标签。

one to many:

不论是单维、多维还是时序图,都是把t时刻的数据作为特征,t+K的数据作为标签,随着t从序列头部到后部不断移动,由此构造出序列的特征和标签。

many to one:

不论是单维、多维还是时序图,都是把t-k时刻的数据作为特征,t时刻的数据作为标签,随着t从序列头部到后部不断移动,由此构造出序列的特征和标签。

many to many:

不论是单维、多维还是时序图,都是把t-k时刻的数据作为特征,t+K的数据作为标签,随着t从序列头部到后部不断移动,由此构造出序列的特征和标签。

构建时间特征

抽取时间序列中的时间维度特征, 将时间维度数据分解成八个时间特征:

['hour', 'day_of_week', 'quarter', 'month', 'year', 'day_of_year', 'day_of_month', 'week_of_year']

demo

def create_features(df, label=None):
    df['date'] = df.index # index: DatetimeIndex
    df['hour'] = df['date'].dt.hour # dt: DatetimeProperties, hour: Series
    df['day_of_week'] = df['date'].dt.dayofweek
    df['quarter'] = df['date'].dt.quarter
    df['month'] = df['date'].dt.month
    df['year'] = df['date'].dt.year
    df['day_of_year'] = df['date'].dt.dayofyear
    df['day_of_month'] = df['date'].dt.day
    df['week_of_year'] = df['date'].dt.weekofyear

    X = df[['hour', 'day_of_week', 'quarter', 'month', 'year', 'day_of_year', 'day_of_month', 'week_of_year']]
    if label:
        y = df[label]
        return X, y
    return X

评估

1、MSE 对比MAE,MSE可以放大预测偏差较大的值,可以比较不同预测模型的稳定性,应用场景相对多一点。

2、均方根误差 RMSE 因为使用的是平均误差,而平均误差对异常点较敏感,如果回归器对某个点的回归值很不合理,那么它的误差则比较大,从而会对RMSE的值有较大影响,即平均值是非鲁棒的。

改进:使用误差的分位数来代替,如中位数来代替平均数。假设100个数,最大的数再怎么改变,中位数也不会变,因此其对异常点具有鲁棒性。
平均平方差/均方误差是回归任务最常用的性能度量。

MAPE不仅仅考虑预测值与真实值的误差,还考虑了误差与真实值之间的比例,在某些场景下,比如房价从0.5w到5w之间,0.5预测成1.0与5.0预测成4.5的差距是非常大的,在一些竞赛当中,MAPE也是常用的目标函数之一。在统计领域是一个预测准确性的衡量指标。

参考文献

【时空序列分析】第七章 常用数据处理及评估