机器学习 - 从日期/时间数据进行特征工程

数据挖掘 机器学习 时间序列 特征选择
2021-09-24 20:10:54

处理机器学习应用程序的时间数据的常见/最佳实践是什么?

例如,如果在数据集中有一列带有事件的时间戳,例如“2014-05-05”,如果有的话,如何从该列中提取有用的特征?

提前致谢!

4个回答

我将首先绘制时间变量与其他变量的关系图并寻找趋势。

例如

在此处输入图像描述

在这种情况下,存在周期性的每周趋势和长期的上升趋势。因此,您需要对两个时间变量进行编码:

  • day_of_week
  • absolute_time

一般来说

有几个常见的趋势发生时间范围:

  • absolute_time
  • day_of_year
  • day_of_week
  • month_of_year
  • hour_of_day
  • minute_of_hour

在所有这些中寻找趋势。

奇怪的趋势

寻找奇怪的趋势。例如,您可能会看到罕见但持续的基于时间的趋势:

  • is_easter
  • is_superbowl
  • is_national_emergency
  • etc.

这些通常要求您将数据与将事件映射到时间的某些外部源进行交叉引用。

为什么是图表?

我认为图形如此重要有两个原因。

  • 奇怪
    的趋势 虽然总体趋势可以很容易地自动化(只需每次添加它们),但奇怪的趋势通常需要人眼和对世界的了解才能找到。这是图形如此重要的原因之一。

  • 数据错误
    数据中经常存在严重错误。例如,您可能会发现日期以两种格式编码,并且只有其中一种已正确加载到您的程序中。有无数这样的问题,而且它们出奇地普遍。这是我认为图表很重要的另一个原因,不仅适用于时间序列,而且适用于任何数据。

除了 Ben Haley 所说的一切之外,还要考虑的另一件事是转换为用户本地时间例如,如果您尝试为所有用户预测晚上 8 点左右发生的事情,如果您查看 UTC 时间,将更难预测。

将数据划分为窗口并找到这些窗口的特征,如自相关系数、小波等,并使用这些特征进行学习。

例如,如果您有温度和压力数据,请将其分解为单个参数并计算该窗口中的局部最小值等特征以及其他特征,并将这些特征用于您的模型。

在某些情况下,时间序列中的数据和事件是季节性的。在这种情况下,事件的月份和年份很重要。因此,在这种情况下,您可以使用二进制变量来表示事件是否在给定的月/年期间。

希望这能回答你的问题。如果不是请更具体地说明您要实现的目标