我们有一个系统,客户来这里进行交互,触发工作并执行许多操作。我们有 1000 多个这样的用户。每个作业都有一个名称,我们的后端数据库包含有关客户交互的所有数据。
这些工作经常失败。我们知道为什么特定作业会根据其输入失败,但现在我们想知道用户(旅程)在到达失败作业之前所走的路径是什么。我们想看看我们是否可以改善之前的体验,从而避免失败。
示例(假设),登录->创建文件->保存文件->下载文件。下载文件失败并出现一些错误。假设这通常发生在保存刚刚完成时。如果你在保存文件和下载之间做了一些操作,那么下载不会失败。这可能是一个隐藏的错误。
问题是 - 给定 3000 个用户图遍历的历史(采用大小为 5 的路径 [作为移动窗口])构建一个系统,当被问到时**
“到达节点 X 的最可能路径是什么”
给出最有可能到达 X 的前 5 条路径。
我已将节点创建为 [jobName][State],例如,loginSuccess->createFileSuccess->SaveFileSuccess->DownloadFailed。 X 通常是我们将查询的 [Job Name]Failed 节点。 我们有大约 50 个工作和 3 个状态,成功,失败已取消。
知道如何构建这个模型,使用哪种算法,以及如何在询问节点时反向生成概率吗?
增加一些清晰度-
给定一个目标节点,我可以列出最有可能到达的路径吗? 达到长度 5。我不知道开始的起点 迪克斯特拉的。低概率的直接路径也可能从 给定起始节点,直接到目标节点,但我需要找到 长度为 5.
的路径
我要采取的第一步是构建一个长度为 5 的记录列表,其中每个这样的记录包含特定客户在到达节点 X 之前采取的 5 个步骤。然后您可以简单地对该列表进行排序并计算每个可能的记录在其中出现的次数,以计算出最受欢迎的记录。
另一种方法是为每个退出节点的边分配一个分数,该分数是退出该节点并通过该边退出该节点的路径的分数。然后通过将其边的分数相乘来计算路径的总分,并再次采用观察到的得分最高的路径。
据我了解,您需要找到用户最有可能遵循的路径,并且您可以为每个流程创建节点,如果客户从一个流程转到另一个流程,则两个流程相互连接。
STEP 1. Construct a graph for all 3000 users which will be a weighted graph
(as such weight of an edge will be number of times a user goes from
one process to another, so each time you find an already built edge
increment its weight by 1 or else make a new edge with weight =1)
现在,找到从源节点到另一个节点的最可能路径
STEP 2. Apply Dijkstra's algorithm but with small change.
Dijkstra's algo find smallest path from one node to every other
node,so you need to find maximum path from one node to another.
我认为,它应该工作,因为所有边都具有正权重,它会为您提供所有用户从一个节点到另一个节点的最可能路径,并且您可以非常轻松地轻松获取从源节点到目标节点的所有节点的数据。
但它只会给你最可能的路径,而不是其中的前 5 条。
我没有足够的声誉来评论或投票,但我想贡献 prateek 的答案是不正确的。
寻找最长路径并不简单,或者用 Dijkstra 算法无法解决。
这篇文章的其他答案描述了原因: Dijkstra 求 DAG 中的最长路径