Python 包含起始和结束时间数据的二进制预测

Python 包含起始和结束时间数据的二进制预测,python,machine-learning,classification,decision-tree,prediction,Python,Machine Learning,Classification,Decision Tree,Prediction,我有一个关于包裹交付的数据集,包括旅行时间、计划发货时间、实际发货时间、延迟和计划发货时间等列。基于此,我需要预测交货是否会准时。以下是数据集: 我计划使用sklearn的LabelEncoder()进行分类功能,然后将此数据适配到DecisionTreeClassifier()。我的问题是,我应该转换包含时间的特性还是离开它?时间值1955表示19:55,735表示07:35。我使用的是python。由于19:59的1959值与20:00的2000值之间的差异基本上只有1分钟,因此使用这种数

我有一个关于包裹交付的数据集,包括旅行时间、计划发货时间、实际发货时间、延迟和计划发货时间等列。基于此,我需要预测交货是否会准时。以下是数据集:


我计划使用
sklearn
LabelEncoder()
进行分类功能,然后将此数据适配到
DecisionTreeClassifier()
。我的问题是,我应该转换包含时间的特性还是离开它?时间值
1955
表示
19:55
735
表示
07:35
。我使用的是python。

由于19:59的
1959
值与20:00的
2000
值之间的差异基本上只有1分钟,因此使用这种数据表示会失去上下文。例如,您的模型会将这两个示例之间的差异理解为与
1900
1941
之间的差异相同,这根本不是您计划要发生的

我无法从数学上证明这会导致你的训练模型出现错误,但这是非常糟糕的做法。如果可能的话,我会转换成其他更统一的格式,例如从00:00(午夜)开始的分钟数:


当然,要在数据中始终保持一致,以避免任何误传,因为19:59的
1959
值和20:00的
2000
值之间的差异基本上只有1分钟,因此使用这种数据表示会失去上下文。例如,您的模型会将这两个示例之间的差异理解为与
1900
1941
之间的差异相同,这根本不是您计划要发生的

我无法从数学上证明这会导致你的训练模型出现错误,但这是非常糟糕的做法。如果可能的话,我会转换成其他更统一的格式,例如从00:00(午夜)开始的分钟数:


当然,在您的数据中始终要这样做,以避免任何误报,因为您有装运延迟栏,所以不需要实际装运时间和计划装运时间

而且您已经计划了行程时间,因此不需要计划交付时间

但是交付可能取决于一天中的时间(例如:上午、下午或晚上),因此您可以从实际装运时间中划分几个类别,并将这些类别用于建模


因此,在构建模型时不能忽略时间列。

因为有装运延迟列,所以不需要实际装运时间和计划装运时间

而且您已经计划了行程时间,因此不需要计划交付时间

但是交付可能取决于一天中的时间(例如:上午、下午或晚上),因此您可以从实际装运时间中划分几个类别,并将这些类别用于建模


因此,在构建模型时,不能真正忽略时间列。

不需要转换。时间值具有内在顺序(例如19:55>7:35)。此外,如果您使用的模型在最小二乘法实现(例如线性回归)中使用该功能,Ofer的观点也将有效。DT只是在值上进行分割,因此,如果您在1955年或19:55分在几分钟内进行分割,这并不重要。另外,如果你想测试线性回归,你想标准化你的特征,不需要变换。时间值具有内在顺序(例如19:55>7:35)。此外,如果您使用的模型在最小二乘法实现(例如线性回归)中使用该功能,Ofer的观点也将有效。DT只是在值上进行分割,因此,如果您在1955年或19:55分在几分钟内进行分割,这并不重要。此外,如果您想测试线性回归,您需要规范化您的功能。发货延迟可能取决于一天中的时间,因此,可能需要也可能不需要计划发货时间,这取决于。发货延迟实际上是从计划发货时间中减去实际发货时间。同意。但时差可能因一天中的时间而异。例如,很容易把计划安排在深夜,当交通很低,而不是在工作时间,当交通堵塞很频繁的时候,装运延迟可能取决于一天的时间,因此,计划的装运时间可以或不可能要求,这要看情况。发货延迟实际上是从计划发货时间中减去实际发货时间。同意。但时差可能因一天中的时间而异。例如,很容易保持在午夜的时间表,当交通很低,但不是在工作时间,当交通堵塞非常频繁。
def time_converter(time_str):
    hours = int(time_str[:2])
    minutes = int(time_str[2:])
    time_since_midnight = (hours * 60) + minutes
    return time_since_midnight

time_converter('1940') # will return 1180 integer for 1180 minutes since midnight