第一种方法的简单版本(基于时间)的问题在于它没有考虑到通过商店花费不同的时间:如果您花费大量时间等待熟食店,那么获得的时间之后的鸡蛋会根据您在熟食店等待的时间而有很大差异。因此,根据您检查它们的平均时间来订购东西可能并不理想。
如果您能找出产品的组别,那么进行这种排序会容易得多,即香蕉和葡萄在一个部分中,您通常将它们放在一起,牛奶和鸡蛋在不同的部分中,您可以将它们放在一起。这个模型有一些问题(你可能会从高档奶酪区或普通区的其他乳制品中获得切达干酪),但订购会容易得多(如果 A 组在 B 组之前您通常先从 A 组获取项目,然后再从 B 组获取项目;一旦您有了组定义,就根据它进行排序)。
当你输入一个新项目时,这也可能会有所帮助:如果你以前从未吃过黑莓,但你的应用搜索网络或其他东西发现黑莓更像是水果类别而不是肉类类别,它知道将它们放入水果组。
那么,如何进行分组呢?一种简单的方法是对列表中的项目进行聚类,使用项目之间的平均时间差作为距离度量(我不确定这在技术上是一个指标,但它可能并不重要)。您可以在此处使用 k-means 或任何其他聚类方法。这也可以通过某种基于网络或语料库的相似性度量来增强,以便对新商品或您在商店的前几次运行中更有用。也许你也可以使用 GPS 数据来帮助解决这个问题。
您可能会执行某种 EM 过程来在将事物分配给组和对组进行排序之间进行迭代,但我不确定这是否会很有帮助。当此过程出错时,您还可以支持手动将事物分配给组。
这是一个很酷的主意!如果你释放它,也许我会使用它。:)