如何在机器学习数据预处理中处理日期变量

ukd*_*hub 9 python r machine-learning feature-selection logistic-regression

我有一个数据集,其中包含其他变量的事务时间戳,格式为26-09-2017 15:29:32.我需要找到销售的可能相关性和预测(比如在逻辑回归中).我的问题是:

  1. 如何处理日期格式?我可以将它转换为一个数字(如excel自动执行)吗?我应该把它分成更多变量,如日,月,年,小时,分钟,秒?任何其他可能的建议?
  2. 如果我想每年添加不同的周数怎么办?我应该添加变量如342017(2017年第34周)?
  3. 我可以在第二季的问题2中做同样的事情吗?
#         Datetime               Gender        Purchase
1    23/09/2015 00:00:00           0             1
2    23/09/2015 01:00:00           1             0
3    25/09/2015 02:00:00           1             0
4    27/09/2015 03:00:00           1             1
5    28/09/2015 04:00:00           0             0
Run Code Online (Sandbox Code Playgroud)

Rya*_*ohn 17

一些随意的想法:

日期是特征工程的良好来源,我认为没有一种方法可以在模型中使用日期.业务用户的专业知识会很棒; 是否观察到可以编码到数据中的趋势?

可能的功能建议包括:

  • 周末与工作日
  • 营业时间和一天中的时间
  • 季节
  • 一周的一周数
  • 月末(支付日)
  • 25美分硬币
  • 往返行动事件的日子(距离)
  • 数据丢失或不完整
  • 等等

所有这些都取决于数据集,大多数都不适用.

一些链接:

http://appliedpredictivemodeling.com/blog/2015/7/28/feature-engineering-versus-feature-extraction

https://www.salford-systems.com/blog/dan-steinberg/using-dates-in-data-mining-models

http://trevorstephens.com/kaggle-titanic-tutorial/r-part-4-feature-engineering/


Plu*_*ile 14

循环特征编码

具有一组在循环中重复的唯一值的数据称为循环数据。与时间相关的特征本质上主要是循环的。例如,一年中的几个月、一周中的几天、几小时、几分钟等......这些特征具有一组值,并且所有观察结果都将仅具有该组中的值。在许多机器学习问题中,我们都会遇到这样的特征。事实证明,正确处理这些特征有助于提高准确性。

执行

def encode(data, col, max_val):
    data[col + '_sin'] = np.sin(2 * np.pi * data[col]/max_val)
    data[col + '_cos'] = np.cos(2 * np.pi * data[col]/max_val)
    return data

data['month'] = data.datetime.dt.month
data = encode(data, 'month', 12)

data['day'] = data.datetime.dt.day
data = encode(data, 'day', 31)
Run Code Online (Sandbox Code Playgroud)

逻辑

对循环数据进行编码的常见方法是使用正弦和余弦变换将数据变换为二维。将每个循环变量映射到一个圆上,以便该变量的最小值出现在最大值旁边。我们使用 sin 和 cos 三角函数计算该点的 x 和 y 分量。

对于处理月份,我们考虑从 0 到 11,并参考下图。

在此输入图像描述

我们可以使用以下转换来做到这一点:

有关特征工程循环特征的更多信息

  • 这个答案值得更多的信任! (2认同)