【问题标题】:Telling two paths apart in a road network graph?在道路网络图中区分两条路径?
【发布时间】:2022-01-13 12:56:42
【问题描述】:

这是一个真实数据集上的图论问题。我有一个大约 100M 点的数据集,是随着时间的推移在城市中对汽车的摄像头目击记录。它们可以粗略地认为是{相机ID、车牌ID、时间戳}元组。城市周围有大约 2000 个摄像头,我们知道它们的位置,在我们掌握数据的一个月内,大约有 1000 万辆独特的汽车(车牌)。我试图根据经验确定任意摄像机(节点)之间有多少条独特的路径。这里的“路径”只是不同相机在时间上接近时连续看到同一车牌。

问题在于,1/3 的摄像头目击都丢失了:大多数摄像头的识别准确率为 80%,少数只有 0-10%。主要问题是:我们如何判断两条路径是否真的不同,而不仅仅是一条缺少一些目击的潜在路径?

例如,考虑一些高容量路线 A->C。如果只有一种从 A->C 到达的方式,比如通过 B,那么您仍然会在 A 看到很多汽车,然后直接在 C,因为相机 B 碰巧没有接它们(大约 1/3总流量将是 AC 只是因为这个缺失数据点的事实),因此 AC 看起来和 ABC 一样是一条流行的路径,而实际上 ABC 是人们从 A->C 采取的唯一真实路径。目标是区分这些路径,以便我们可以在一天结束时计算唯一路径 A->C 的数量,以研究交通网络对道路关闭的稳健性。

一种方法是比较通过路线的平均时间,但是通过空间的两条不同路线可能需要非常相似的时间。以下是我针对特定情况解决问题的方法:考虑从 A 到 C 的两条路线:ABC 和 AB'C,其中没有边 B->B'。我们知道这实际上不可能是一条基础路线 ABB'C,因为这样我们会看到一条边 B->B',而我们没有。我想知道这种启发式是否可以推广(当然,即使 BB' 是一条边,我们仍然想区分路径,因为在这种情况下,我们不能保证 ABB'C 是唯一的真实路径)。

我也愿意使用 Google Maps 等外部 API 来获取更多信息,但不太确定这会如何让问题变得更容易。我的目标是解决两个任意远摄像机之间任意长路径的问题,但我认为大多数此类问题都可以简化为上述 ABC 与 AC 问题的一个版本。

这是一个问题实例的图示示例。左下角可以被认为是节点 A,右上角是节点 C。那么它就变成了一个 AC vs ABC vs ABDC 问题。数据显示,AC 19 次,ABC 46 次,ABDC 86 次。问题是要弄清楚这三种路径中有多少是人们经过的“真实路径”。当然,在地图上,根据道路网络手动计算更容易,但问题是根据手头的所有数据点的数据进行算法计算,而无需绘制。

以下是数据示例。我们将数据分成代表真实汽车旅行的组。因此,不同的摄像机在时间上足够接近(当然是在同一天)看到相同的车牌。这是一个组的示例(与上图无关),还有大约 1000 万其他组。

index     camera_ID   encoded_plate     date      time_seconds   velocity
9200     480301111       660.0       2021-03-11       62000.0          54
9201     480321111       660.0       2021-03-11       62135.0          28
9202     480331111       660.0       2021-03-11       62235.0           5
9203     480341112       660.0       2021-03-11       62302.0          42
9204     450371112       660.0       2021-03-11       62648.0          32

【问题讨论】:

  • 我的问题是,这对 SO 来说如何?您在这里提出了一堆问题和要求,但没有明显的尝试自己解决。
  • 有一个明确定义的问题:AB vs ABC。我有一整段解释了我是如何尝试自己解决的(一种方法……这是我解决的方法……)。
  • 解决这个问题可能是一个不错的博士项目。

标签: python algorithm graph-theory network-flow


【解决方案1】:

这是一种可能的方法:按摄像头点数降序对记录的旅程类型进行排序(例如,ABCD 有四个点,它应该出现在 EFG 之前,而 EFG 有三个点)。然后对于每种旅程类型,估计您希望看到的每个子序列的虚假观测值,并从每个子序列的实际观测值中减去该数字(例如,如果我们认为 ABCD 有 100 个 jouney,那么我们期望100 * p(1-p)^3 对 ABC、ABD、ACD 和 BCD 中的每一个的虚假观测值,等等,对于较短的子序列)。

还要跟踪每次计数的不确定性,最初为零,但每次从某种旅程类型的计数中减去一个估计值时,将该估计值的方差添加到该旅程类型的不确定性中。然后可以使用方差来估计测量值实际上应该为零的可能性;如果是这样,请在遇到该旅程类型时忽略它,然后继续下一个。

归根结底,“真实”旅程类型是那些根据估计的计数和方差不太可能为零的旅程类型。不要忘记向上调整“真实”旅程的计数,例如路径 ABCD 有 (1-p)^4 机会未正确记录,因此您应该将估计计数除以该因子以进行补偿。在估计要从子序列中扣除多少虚假观测值之前,应进行此调整。

【讨论】:

  • 有趣——你建议如何计算方差?你是说较小子序列的虚假观察的数量是从一些二项分布中得出的吗?
  • 是的,如果有 100 个 ABCD 行程,每个行程有 q = p(1-p)^3 的概率被记录为 ABD,那么我们可以将真正 ABCD 的虚假 ABD 的数量视为参数为 100 和 q 的二项分布,因此它的均值为 100q,方差为 100q(1-q)。当 100 也只是一个估计值时,它会变得更加复杂(因为它是按 1/(1-p)^4 的因子调整的测量值,并且可能还通过减去一些估计的虚假观测值来调整),所以如果精度是重要的是,您可能需要咨询数学家以获得正确的详细信息。
  • 另一个问题是,该算法输出的总行程数可能与实际记录的行程总数略有不同,因为当根据方差估计计数为零但其均值不为零时,非- 零均值将从总数中“丢失”。例如。如果您认为有 100 个 ABCD,也许您预计有 10 个虚假 ABD,而您观察到 11 个 ABD,那么您可能会猜到有 0 个真正的 ABD。从逻辑上讲,额外的 1 应该属于 ABCD - 或 ABED 或 ABFD ......所以如果你想正确地做到这一点,还有更多细节。但这大致是我会使用的方法。
  • 我认为您不能那么相信概率(就独立性而言)。在高峰时段(很难看到碰碰车或每秒有太多汽车),相机可能会错过更多,这也是人们可能会改变其他路线的时间。
  • @HansOlsson 是的,这是一个公平的观点,但我认为它没有你想象的那么重要 - 不需要独立性假设来从 n 得到概率的旅程估计 nq q 每次旅程被错误分类;这只是从期望的线性得出的。独立性用于导出nq(1-q) 的方差,但方差仅用于估计是否应将调整后的计数视为零。依赖改变了方差,但它与使用 e.g. 的效果基本相同。 95% 的置信区间而不是 99%,这无论如何都是任意的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多