我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

对我们来说,了解学生在培训期间发生的情况以及这些事件如何影响结果非常重要,因此我们构建了客户旅程地图 - 客户体验地图。 毕竟,学习过程不是连续的、完整的,而是学生的一系列相互关联的事件和行动,并且这些行动在不同的学生之间可能有很大差异。 现在他已经完成了他的课程:接下来他要做什么? 它会去做作业吗? 它将推出移动应用程序吗? 他会改变路线,要求更换老师吗? 你会直接进入下一课吗? 还是他会失望地离开? 通过分析这张地图,是否有可能识别导致学生成功完成课程或相反导致学生“辍学”的模式?

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

通常,使用专门的、非常昂贵的闭源工具来构建 CJM。 但我们想提出一些简单的东西,需要最少的努力,并且如果可能的话,开源。 因此,我们提出了使用马尔可夫链的想法 - 我们成功了。 我们构建了一张地图,以图表的形式解释了学生行为的数据,看到了全球商业问题完全不明显的答案,甚至发现了隐藏得很深的错误。 我们使用开源 Python 脚本解决方案完成了这一切。 在这篇文章中我将讨论两个结果非常不明显的案例,并将脚本分享给大家。

因此,马尔可夫链显示了事件之间转换的概率。 这是维基百科的一个原始示例:

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

这里“E”和“A”是事件,箭头是它们之间的转换(包括从事件到相同事件的转换),箭头的权重是转换的概率(“加权有向图”)。

你用了什么?

该电路使用标准 Python 功能进行训练,并提供学生活动日志。 所得矩阵上的图形由 NetworkX 库构建。

日志如下所示:

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

这是一个 csv 文件,包含一个三列表:学生 ID、事件名称、事件发生时间。 这三个字段足以追踪客户的移动、构建地图并最终得到马尔可夫链。

该库以 .dot 或 .gexf 格式返回构造的图形。 为了可视化前者,您可以使用免费的 Graphviz 包(gvedit 工具),我们使用 .gexf 和 Gephi,也是免费的。

接下来我想举两个使用马尔可夫链的例子,这让我们能够重新审视我们的目标、教育过程和 Skyeng 生态系统本身。 嗯,修复 bug。

第一个案例:移动应用

首先,我们通过最受欢迎的产品——普通课程探索了学生的旅程。 当时,我在 Skyeng 的儿童部门工作,我们想看看移动应用程序如何有效地与我们的儿童受众合作。

获取日志并通过脚本运行它们,我得到如下结果:

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

起始节点是“开始常规”,底部有三个输出节点:学生“睡着了”、改变课程、完成课程。

  • 睡着了,“睡着了”——这意味着他不再上课了,很可能他摔倒了。 我们乐观地称这种状态为“睡眠”,因为…… 理论上,他还有继续学业的机会。 对我们来说最糟糕的结果。
  • 放弃了将军,改变了路线——从将军转向了其他东西,并迷失了我们的马尔可夫链。
  • 完成课程,完成课程 - 理想状态,该人已完成 80% 的课程(并非所有课程都是必需的)。

进入成功上课节点,意味着与老师一起顺利完成我们平台上的课程。 它记录了课程的进度以及达到预期结果的方法——“完成课程”。 对我们来说,让学生尽可能多地参加很重要。

为了获得移动应用程序(应用程序会话节点)更准确的定量结论,我们为每个最终节点构建了单独的链,然后逐对比较边权重:

  • 从应用程序会话返回到它;
  • 从应用程序会话到成功的课程;
  • 从成功的课程到应用程序会话。

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本
左边是完成课程的学生,右边是“睡着了”的学生

这三个边缘显示了学生的成功与他们对移动应用程序的使用之间的关系。 我们希望看到完成课程的学生比睡着的学生与应用程序有更强的联系。 然而,实际上我们得到了完全相反的结果:

  • 我们确保不同的用户群体与移动应用程序的交互方式不同;
  • 成功的学生较少使用移动应用程序;
  • 入睡的学生更积极地使用移动应用程序。

这意味着睡着的学生开始在移动应用程序中花费越来越多的时间,并最终永远留在其中。

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

起初我们很惊讶,但仔细想想,我们意识到这是一个完全自然的效果。 曾经,我使用两种工具自学法语:移动应用程序和 YouTube 上的语法讲座。 起初,我把时间按照50比50的比例划分。但是应用程序更好玩,有游戏化,一切都很简单,快速,清晰,但是在讲座中你必须深入研究它,写一些东西,在笔记本上练习。 渐渐地,我开始花更多的时间在智能手机上,直到它的份额增长到 100%:如果你在上面花费三个小时,你就会产生一种完成工作的错觉,因此你不想去听任何东西。

但这怎么可能呢? 毕竟我们专门创建了一个移动应用程序, 内置艾宾浩斯曲线,将其游戏化,使其具有吸引力,以便人们愿意花时间在其中,但事实证明这只会分散他们的注意力? 事实上,原因是移动应用程序团队处理得太好了,结果它变成了一个很酷的、自给自足的产品,并开始脱离我们的生态系统。

研究结果表明,移动应用程序需要以某种方式进行更改,以减少对主要学习课程的干扰。 而且无论是儿童还是成人。 这项工作目前正在进行中。

第二种情况:引导错误

入职培训是注册新生时的一个可选附加程序,可消除未来潜在的技术问题。 基本场景假设一个人已经在登陆页面上注册,获得了对其个人帐户的访问权限,被联系并接受了介绍性课程。 同时,我们在入门课程中注意到很大一部分技术困难:浏览器版本错误、麦克风或声音不起作用、老师无法立即提出解决方案,而这一切在真正发生时尤其困难给孩子们。 因此,我们在您的个人帐户中开发了一个额外的应用程序,您可以在其中完成四个简单的步骤:检查您的浏览器、摄像头、麦克风并确认家长在入门课程期间会在附近(毕竟,他们是支付费用的人)孩子的教育)。

这几个入门页面显示了这样的漏斗:

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本
1:起始块具有三个略有不同(取决于客户端)的登录和密码输入表单。
2:同意附加入职程序的复选框。
2.1-2.3:检查家长是否存在、Chrome 版本和声音。
3:最后一块。

看起来很自然:在前两步中,大多数访问者离开,意识到有一些东西需要填写、检查,但没有时间。 如果客户已经到达了第三步,那么他几乎肯定会到达最后一步。 没有任何理由怀疑漏斗上的任何内容。

尽管如此,我们决定不使用经典的一维漏斗来分析我们的入职,而是使用马尔可夫链。 我们打开了更多事件,运行脚本并得到:

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

在这片混乱中,只有一件事可以清楚地明白:出了问题。 入职过程是线性的,这是设计中固有的,其中不应该有这样的连接网络。 在这里,很明显用户被抛出到步骤之间,而这些步骤之间根本不应该有任何转换。

我们如何使用马尔可夫链来评估解决方案和查找错误。 使用Python脚本

出现这个奇怪的画面可能有两个原因:

  • 浅滩潜入日志数据库;
  • 产品本身就存在错误——入职。

第一个原因很可能是正确的,但测试它是相当耗费人力的,并且更正日志无助于改善用户体验。 但对于第二个,如果存在的话,就必须紧急采取行动。 因此,我们去查看节点,找出不应该存在的边,寻找它们出现的原因。 我们看到有的用户被卡住了,绕圈子走,有的用户从中间掉到了开头,还有的用户原则上走不出前两步。 我们将数据传输给质量检查 - 是的,事实证明,入职过程中存在足够多的错误:这是一个副产品,有点拐杖,它没有经过足够深入的测试,因为...... 我们没想到会出现任何问题。 现在整个录音过程已经改变了。

这个故事向我们展示了马尔可夫链在 QA 领域的一个意想不到的应用。

自己尝试!

我发布了我的 用于训练马尔可夫链的 Python 脚本 在公共领域 - 为了您的健康而使用它。 文档在GitHub上,有问题可以在这里提问,我会尽力回答一切。

嗯,有用的链接: NetworkX 库, Graphviz 可视化工具。 和这里 有一篇关于哈布雷的文章 关于马尔可夫链。 文章中的图表是使用 杰斐.

来源: habr.com

添加评论