Java中的统计通勤分析

数据挖掘 机器学习 统计数据
2021-10-04 20:56:30

我每天都有相当长的通勤时间——大约一个小时到一个半小时左右的车程。

我一直在跟踪我的驾驶时间,并希望继续这样做。我正在记录日期、我的出发时间、我的到达时间、我所走的路线(有两种或三种可能的路线)、天气状况(潮湿/干燥和晴朗/朦胧/有雾),以及我是否停下来(和如果是这样,出于什么原因 - 每次上下班途中的燃料/厕所休息/食物休息,以及多长时间。

我想创建一个系统来分析这些数据,并根据星期几、天气状况以及我是否需要停下来建议最佳出发时间(下一次旅程)。

有趣的是,我可以看到周二的早晨比其他早晨更糟糕,我越早离开,我就越有可能去上厕所或吃东西,而且很明显,雨天或雾天的旅程比晴天和干燥的时候要长天-但我希望系统凭经验告诉我!

我认为这是一个机器学习和统计分析问题。

但是,我对机器学习或统计方法一无所知。

我应该使用什么样的统计方法来进行这种分析,以至于数据会导致诸如“明天是星期二并且要下雨,所以你必须在 7.50 到 8.00 之间离开家,走 XYZ 路线,去获得最佳驾驶时间。哦,你可能需要上厕所——我已经考虑到了”?(假设我手动输入明天的天气预报 - 我稍后会考虑与天气服务集成)

请注意,这对我来说是一种生活黑客,试图从一个乏味的过程中优化地狱,这是非常个人化的——特定于我和我的习惯,特定于这条路线,特定于早上/晚上的通勤时间。Google Maps with Traffic、TomTom with IQ 和 Waze 在更开放的临时驾驶时间预测情况下表现出色。甚至 Apple 也很乐意在我的 iPhone 通知屏幕上告诉我,如果我现在离开,我需要多长时间才能回家。

另请注意,在我看来,交通不是一个考虑因素——也就是说,我认为我不需要知道实际的交通状况——交通是星期几和天气的函数。例如,周一和周二早上道路上的人更多,人们开得更慢,下雨时更多的人坐在汽车里(选择开车而不是骑自行车或乘坐公共交通工具)。

我可以在多大程度上让数据说话?我有一个有点模棱两可的隐藏议程,从数据中可能看不出来;

  • 我应该每天 9.30(即 9.15 +/- 15 分钟)上班,但偶尔上午 10 点到达是可以的
  • 我想尽可能晚离开家,但尽可能早到工作
  • 我想尽早下班,但至少已经完成了 8 小时的工作
  • 我可以,比如说,一天提前半小时离开,但另一天迟到以补偿

我想我可以想出一个包含所有这些规则的程序公式,但我的直觉是统计分析可以让它变得更聪明。

除了分析方法,技术栈不是问题。Java 是我选择的语言——我非常熟悉用它进行编程以及创建 Web 应用程序。

假设有可能,是否有 Java 库可以提供必要的方法?

有什么限制?我想每天继续捕获越来越多的数据,使数据集更大,希望使预测更准确。

还有什么其他方法可以做到这一点?我可以将这些数据推送到 Wolfram Programming Cloud,或者谷歌提供的东西以获得所需的结果吗?

2个回答

确实希望至少在一个工作日内对流量进行建模,否则您旅行的时间无关紧要!在没有任何数据的情况下,我认为在工作周内没有太大的差异,但这是数据将很快证实或反驳的一件事。如果它是变化的,您可以每天使用不同的模型。

你有两个变量;分别离开家和工作的时间。我们称它们为 t_h 和 t_w。我们将通勤时间称为 T_c(t),其中 t 是一天中的时间。你可以从数据中估计这个函数,所以我假设它是给定的。

您想最大化 c t_h - (1-c) t_w 受限于 t_h + T_c(t_h) < 9.5 和 t_w > t_h + T_c(t_h) + 8

其中 c 是一个常数,您可以设置它来调整早退家相对于早退工作的相对重要性。您应该能够使用 Mathematica、MATLAB 或类似工具解决这个数值优化问题。我不会推荐 Java。这不是为了这个。唯一棘手的部分是估计 T_c。您知道它是一个非负函数,因此您可以使用标准技巧来估计它的对数(例如,使用内核)并求幂。有关 Mathematica 的实现,请参阅平滑数据、填充缺失数据和非参数拟合约束优化

基本上你的机器学习问题是:给定[星期几、天气、出发时间、路线],预测到达时间,然后获得旅行时间。一旦您的模型可靠,您就可以预测每个潜在出发时间和路线的旅行时间,并选择最低的。

如果您认为进站是其余部分的函数,或者完全是一个随机变量,那么您实际上不需要考虑进站。

如果您想要一个可以“开箱即用”的机器学习方面的工具,您应该尝试 Weka。您必须以它期望的特定格式对数据进行编码,但除此之外,您不必进行任何编码(即您不需要对任何实际的机器学习算法进行编码)。

我会离散化您的出发时间,以确保您有足够的数据。Weka 会让你尝试不同的算法,看看哪一个最好。请注意,这是一个回归问题,而不是分类问题,因此只有一部分算法适用。一旦你弄清楚了 Weka 部分,你也可以通过编程方式调用它,这将允许你编写你想要的接口,并可能包括自动天气检索。