我正在使用AWS机器学习回归来预测餐厅排队等候时间,预测基于特定工作日和时间。今天我有大约80万条数据。
示例数据:
restaurantID (rowID)weekDay (categorical)time (categorical)tablePeople (numeric)waitingTime (numeric - target)
1 sun 21:29 2 23
2 fri 20:13 4 43
…
我有两个问题:
1)我应该将时间设置为分类数据还是数值数据?将时间拆分为分钟和秒钟两个字段是否更好?
2)我想在同一个模型中获取所有餐厅的预测结果。
示例:我期望发送rowID标识符,并根据每个餐厅的数据返回不同的预测结果(忽略其他餐厅的数据)。
我尝试过,但对于任何rowID返回的预测结果都相同。为什么会这样?
我是否应该为每个餐厅建立一个模型?
回答:
您设置模型的方式存在几个问题
1) 以您当前的形式,时间绝不应被视为分类数据。您的模型会将12:29和12:30视为两个完全独立的属性。因此,它永远不会将在12:29学到的知识用于预测12:30将会发生什么。在您的情况下,您应该将时间设置为数值数据。不确定Amazon ML是否能为您自动转换。如果不能,您可以将小时乘以60再加上分钟。另一个有趣的做法是将时间分桶,选择每半小时或更宽的时间间隔。您可以通过将(h*60+m)除以某个数字来实现,这取决于您想要多少个桶。例如,使用120来得到2小时的间隔。一般来说,您的数据越多,您可以设置的间隔就越小。关键是要确保每个桶中有大量样本。
2) 您真的应该考虑从输入数据中移除restaurantID。保留它会导致模型对其过拟合。因此,模型将无法基于从id:3或id:9的餐厅学到的知识来预测id:5的餐厅。如果您对每个餐厅有大量数据,并且您不在乎将预测扩展到训练集中没有的餐厅,那么保留餐厅ID可能还可以接受。
3) 您永远不应该发送restaurantID来预测关于它的数据。通常的做法是您需要选择要预测什么。在您的情况下,’waitingTime’可能是最有用的属性。因此,您需要发送工作日、时间和人数,模型将输出等待时间。