使用日期作为多目标/多变量回归python的自变量

问题描述

我需要在我的项目中使用多变量线性回归,其中我有两个因变量:mean_1 和 mean_2。自变量是 YYYY-mm-dd 格式的日期。我一直在浏览各种 stackoverflow 帖子,以了解如何在回归中使用日期作为变量。有人建议将日期转换为数值 (https://stackoverflow.com/a/40217971/13713750),而另一种选择是将日期转换为虚拟变量。

我不明白的是如何将数据集中的每个日期转换为虚拟变量并将其用作自变量。甚至有可能还是有更好的方法将日期用作自变量?

注意:我更喜欢在日期格式中使用日期,以便于绘制和分析回归结果。此外,我正在使用 pyspark,但如有必要,我可以切换到 Pandas。所以任何实现的例子都会有帮助。谢谢!

解决方法

您可以创建新列 yearmonthday_of_yearday_of_monthday_of_week。您还可以添加一些二进制列,如 is_weekdayis_holiday。在某些情况下,添加第三方数据是有益的,例如每日天气统计数据(我正在研究一个额外的每日天气数据被证明非常有用的案例)。真的取决于您正在处理的域。这些列中的任何一个都可能揭示数据背后的某种模式。
对于虚拟变量,将 monthday_of_week 转换为虚拟变量是有意义的。
另一种选择是,为每个月建立一个模型。

,

如果您想将日期转换为数字(但我不推荐),您可以这样做:

pd.to_timedelta(df.date).dt.total_seconds().astype(int)

你可以做同样的事情,但总秒数:

pd.to_timedelta(df.date).dt.total_seconds()

此外,您可以使用基线日期并从您的日期变量中减去该日期并获得天数,这将为您提供一个有意义的整数(较大的差异意味着更远的未来,而较小的差异显示较旧的日期)。这个值对我来说在模型中用作自变量是有意义的。

首先,我们创建一个基线日期(可以是您想要的任何日期),并将其添加到数据框的静态列中:

df['static'] = pd.to_datetime(datetime.date(2017,6,28))

然后我们获得静态日期与您的日期的天数差异

df['days'] = (df['static'] - df['date']).dt.days

然后你就有了一个可以用作自变量的数字