DataWhale AI夏令营 电力day3

关键特征提取和分析方式的详细介绍:

  1. 日期变量:时间序列数据通常包含日期或时间信息。这可以细分为不同的时间尺度,如年、月、周、日、小时、分钟等。在特征提取时,可以将这些日期变量转换为数值型特征,以便于模型处理。
  2. 周期性:许多时间序列数据表现出周期性,例如,一天中的小时数、一周中的天数、一年中的月份等。识别并利用这些周期性特征可以帮助模型捕捉数据的内在规律。
  3. 趋势性:趋势性是指时间序列数据随时间推移呈现的上升或下降的总体模式。 这可以通过诸如移动平均或线性回归等方法来提取,并作为特征输入模型。
  4. 距离某天的时间差:这涉及到从特定日期(如产品发布日、重要事件日等)计算时间差。 这种特征可以帮助模型了解数据点与特定事件的相对位置。
  5. 时间特征组合:将不同的时间单位组合起来(如年和周、月和日)可以提供更丰富的时间上下文信息,有助于揭示数据中的复杂模式。
  6. 特殊日期:识别时间序列中的特殊日期或事件(如节假日、促销活动等)并将其作为特征,可以帮助模型解释与这些事件相关的数据波动。
  7. 异常点:时间序列中可能存在异常点,这些点与其他数据点显著不同。正确识别并处理这些异常点对于提高预测精度至关重要。
  8. 时序相关特征:
  • 历史平移:将过去的值作为当前值的函数,例如,使用前一天的值来预测后一天的值。
  • 滑窗统计:使用时间窗口内的统计数据(如平均值、中位数、标准差等)作为特征,这有助于捕捉局部时间范围内的数据特性。
  1. 强相关特征:识别与目标变量强烈相关的特征,并利用这些特征来构建预测模型。

1 强相关性特征:

  • 强相关性特征是指与目标变量有明显线性或非线性关系的输入特征。在时间序列中,这些特征可能包括:
    • 滞后特征:使用过去的值作为当前预测的特征,例如,使用前一天的销售数据来预测后一天的销售。
    • 滚动统计特征:计算时间序列的滚动窗口内的统计量,如平均值、最大值、最小值、总和等。
  1. 趋势性特征:
  • 趋势性特征反映了时间序列随时间推移的长期变化方向或速率。
  • 构建趋势性特征的方法包括:
    • 时间戳转换:将时间戳转换为数值,如从时间戳中提取年份、月份、星期等。
    • 移动平均:使用时间序列的移动平均值来平滑短期波动,突出长期趋势。
    • 多项式拟合:拟合一个多项式模型来捕捉趋势。
  1. 周期性特征:
  • 周期性特征反映了时间序列数据在固定时间间隔内重复出现的模式。
  • 构建周期性特征的方法包括:
    • 时间戳的周期性转换:将时间戳转换为周期性变量,如一周中的星期几、一月中的日子等。
    • 季节性分解:使用季节性分解方法来识别和提取时间序列的季节性成分。
    • 周期性函数:使用正弦和余弦函数来模拟周期性变化。
  1. 异常点特征:
  • 异常点是指与正常数据模式显著不同的数据点,它们可能由错误、突变或特殊事件引起。
  • 处理异常点的方法包括:
    • 简单标注:在数据集中标记异常点,以便在分析时考虑。
    • 剔除:从数据集中删除异常点,特别是在它们可能影响模型训练的情况下。
    • 修正:更正异常点,如果它们是由于可识别的错误造成的。
  1. 特殊事件特征:
  • 特殊事件如“双十一”、“618”、“春节”等,会在时间序列中产生显著的峰值。
  • 构建特殊事件特征的方法包括:
    • 事件指示器:创建一个二进制特征,当时间序列中的点与特殊事件对应时,该特征值为1,否则为0。
    • 事件前后的时间窗口:考虑事件前后的时间窗口,以捕捉事件的影响。
  1. 上下时段信息:
  • 上下时段信息指的是在时间序列中,特定时间段之前或之后的数据点
  • 这可以通过创建特征来表示数据点与特定时间段的距离来实现。
  1. 存在峰值与峰值距离:
  • 识别时间序列中的峰值点,并计算其他数据点与这些峰值点的距离,可以作为特征输入模型。
  1. 时间尺度特征:
  • 根据需要预测的时间尺度(如1天、3天、5天等),创建相应的滞后特征和滚动统计特征。

特征优化
这里主要构建了历史平移特征、差分特征、和窗口统计特征;每种特征都是有理可据的,具体说明如下:
(1)历史平移特征:通过历史平移获取上个阶段的信息;
(2)差分特征:可以帮助获取相邻阶段的增长差异,描述数据的涨减变化情况。在此基础上还可以构建相邻数据比值变化、二阶差分等;
(3)窗口统计特征:窗口统计可以构建不同的窗口大小,然后基于窗口范围进统计均值、最大值、最小值、中位数、方差的信息,可以反映最近阶段数据的变化情况。

# 合并训练数据和测试数据
data = pd.concat([train, test], axis=0).reset_index(drop=True)
data = data.sort_values(['id','dt'], ascending=False).reset_index(drop=True)

# 历史平移
for i in range(10,36):
    data[f'target_shift{i}'] = data.groupby('id')['target'].shift(i)

# 历史平移 + 差分特征
for i in range(1,4):
    data[f'target_shift10_diff{i}'] = data.groupby('id')['target_shift10'].diff(i)
    
# 窗口统计
for win in [15,30,50,70]:
    data[f'target_win{win}_mean'] = data.groupby('id')['target'].rolling(window=win, min_periods=3, closed='left').mean().values
    data[f'target_win{win}_max'] = data.groupby('id')['target'].rolling(window=win, min_periods=3, closed='left').max().values
    data[f'target_win{win}_min'] = data.groupby('id')['target'].rolling(window=win, min_periods=3, closed='left').min().values
    data[f'target_win{win}_std'] = data.groupby('id')['target'].rolling(window=win, min_periods=3, closed='left').std().values

# 历史平移 + 窗口统计
for win in [7,14,28,35,50,70]:
    data[f'target_shift10_win{win}_mean'] = data.groupby('id')['target_shift10'].rolling(window=win, min_periods=3, closed='left').mean().values
    data[f'target_shift10_win{win}_max'] = data.groupby('id')['target_shift10'].rolling(window=win, min_periods=3, closed='left').max().values
    data[f'target_shift10_win{win}_min'] = data.groupby('id')['target_shift10'].rolling(window=win, min_periods=3, closed='left').min().values
    data[f'target_shift10_win{win}_sum'] = data.groupby('id')['target_shift10'].rolling(window=win, min_periods=3, closed='left').sum().values
    data[f'target_shift710win{win}_std'] = data.groupby('id')['target_shift10'].rolling(window=win, min_periods=3, closed='left').std().values
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值