内容目录
写在前面的话
稍微总结一下,时间序列中的特征,主要针对机器学习树模型,因为是时序数据,所以和寻常的机器学习特征略有不同,比如关注时间特征,滞后特征,滑窗特征等。
1.与时间特征有关的那些事
1.1时间序列特征
import datetime
import pandas as pd
df['ds']=df['ds'].astype(str)
df['ds'] = df['ds'].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d"))
df['year']=df['ds'].dt.year
df['quarter']=df['ds'].dt.quarter
df['month']=df['ds'].dt.month
df['dayofweek']=df['ds'].dt.dayofweek
df['week']=df['ds'].dt.week
诸如此类,更多相信内容请参照一下文档https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
还有格外需要手工生成的时间段切分:比如讲一天分为上午,下午,晚上这样的特征,可以使用apply,配合lambda匿名函数
df['half']=df['hour'].apply(lambda x: 1 if x<'12' else 0)
对于出现的异常值,年底出现促销,导致销售波动,对该天的数据做异常标记
df['outlier']=df['ds'].apply(lambda x: 1 if x=='2018-12-31' else 0)
还如,定义是否为春节月,是否为月末等,对这类具有明显销售波动的带有时间点打标签。这部分特征是十分基础且重要。
1.2类别mean encoding特征
- 针对类别变量可以有如下方法
- Mean Encoding
- 比如门店预测
- 带有城市标签,如果用OneHotEncoder转换为0-1特征就太多了
- 我们可以使用mean encoding方式,构建均值特征
city_mean=df.groupby(['city']).agg({
'y': ['mean']})
city_mean.reset_index(inplace=True)
city_mean.columns = ['city','city_mean']
其他的信息,比如省份等亦是如此
df = pd.merge(df,city_mean,on='city',how='inner')
还有一种类似的count encoding,
其实应该归于统计特征
至于实现方式那就是
city_count=df.groupby(['city']).agg({
'y': ['count']})
1.3统计特征
如mean, median, max, min, std
如果是月的话,建议选择三 如果是日,且有周的规律性,则应该选择7,也可以同时存在多个颗粒度的滑窗特征。比如,选择了滑窗4,同时使用滑窗12,那就是季度。当然你也可是多尝试,所以调参侠的乐趣/苦逼,也就在这里了。滑窗也是一种对数据的平滑。一定不要忘记,把数据的顺序换过来。
df.sort_values(['store_code','ds'],ascending=[T

本文详细介绍了时间序列特征工程的多种方法,包括时间序列特征、类别meanencoding、统计特征、滞后历史特征、序列特征、高阶特征和外部特征的构建。通过实例展示了如何使用Python对数据进行预处理,如调整数据类型以减少内存占用,并介绍了Facebook的Prophet库进行时间序列预测。此外,还探讨了数据探索的重要步骤,如数据类型检查、缺失值处理和可视化。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



