亚马逊AWS官方博客
Amazon SageMaker Canvas 在翻转课堂中的二分类预测应用
1. 案例背景
1.1 背景介绍
在线教育的一种新形态,利用建构主义来推进更好学习效果的达成。
而形态上,更多以翻转课堂的形式来落地。它的真正达成需要一些要素,其中一个比较重要的点在于同学们之间能够互相讨论启发,这样才能发挥出教学内容的更好吸收效果。
在引入正式的分析之前,简单介绍一下翻转课堂,是一种讲练结合的方式,先老师讲一段内容,然后同学讨论,通过同学与同学之间对前面内容的讨论,达到对内容的更好的理解,这种互相碰撞能对概念理解的更深刻,对使用边界更明确,对过往经验的复盘与未来使用方面都能有一些不错的联系与触动。
1.2 当前问题卡点
而当前的中间过程的问题卡点,同学们进入翻转课堂时讨论不起来,而讨论不起来的原因是很少的人进入房间内发言,会有一个房间 1 个人发言,其他人沉默的情况。
2. 分析框架确定
2.1 基本假设
为了能够达到更好的效果,那么需要让同学在听讲之后,针对前面学过的内容进行讨论。大家可以回忆想象一下高中的场景,老师台上讲完了内容,台下前后桌分组讨论。讨论起来,互相碰撞思想时才是此时的精髓。
因为线下的过往关系积累以及线下的关系压力等,所以大家发言讨论不是难事儿,但线上的场景里,有些难度。在尝试了通过数据瞄定线上关系,通过关系分组失败之后,将视角转移到了人的方面,在这里首先有两个假设:
- 发言是需要有过往积累的。
- 发言的人在过去的迹象中有做出一些不同的表现,更活跃更愿意参与各种意见表达。
2.2 确定分析目标
在结合问题方面,锁定分析目标就有两个:
- 通过同学历史数据进行建模,最终能够预测用户发言与否的模型。
- 能够尝试确定哪些行为对识别发言比较重要,作为后续产品运营的一个考虑抓手。
3. 数据介绍
3.1 基于假设的指标选择
为了能够相对准确地做出发言与否的预测,那么从两个假设里去找到相关的可量化的数据指标。最终选定了四大类数据。分别是基础数据、历史此类活动的数据、历史学习情况以及互动情况。
根据上面的四大方面,确定了如下的指标:
基础信息情况 | |
user_id | 用户 id |
pay_money_user | 是否是付费同学 |
pay_money_to_now | 付费到当前时间 |
fill_information | 填写信息情况 |
历史此类学习活动的情况 | |
learn_all_num | 总参与次数 |
watch_the_kind_course_send_message_num | 看同类课时发消息互动数量 |
write_topic_num | 曾经写相关作业数量 |
stay_all_time_min_sum | 参与总时长 |
stay_course_time_min_sum | 听课停留时长 |
stay_talkroom_time_min | talk 厅总时长 |
stay_course_talk_teacher | 听课间举手回答问题次数 |
历史学习状态 | |
watch_other_course_num | 看起其他课数量 |
share_other_course_num | 分享其他课数量 |
remark_other_course_num | 评论其他课数量 |
watch_other_course_send_message_num | 看其他课时发消息互动数量 |
score | 积累学分 |
互动情况 | |
follow_other_users_num | 关注其他人的数量 |
inviter_other_user_pay_money_num | 邀请他人付费人数 |
3.2 目标值确定
除了上述的变量之外,目标字段为 talk,判断条件是在 talk 厅发言超过 1min 计为 1,小于等于 1min 的计为 0。
3.3 数据量备注
因为使用 Canvas 的过程中会需要上传文件,所以进行了脱敏,使该数据集既能保留了数据原本有用的部分,又能得到一定的保护。
由于是新业务初期,所以能够拿到的只有 2000+ 条数据。虽然看起来比较少,但能够用于做最初的简单模拟。
四. 利用 Canvas 建立机器学习模型
4.0 操作总结
在 Canvas 建立模型的操作分为以下 5 个步骤:
- 构建 Amazon S3 数据存储;
- 导入数据;
- 通过目标区分回归与预测模型;
- 建立模型;
- 完成模型,回归结果。
4.1 构建数据存储
首先打开控制台,打开 S3,在 buckets 下创建数据存储位置,点击“create bucket”来创建存储数据的桶。
![]() |
图中是我创建的三个 bucket,我在本次操作中使用的是 sagemarker-studio-l,点击打开它,在里面上传本地 csv。此处需要注意:只能上传 csv,像 xlsx 这样的格式上传之后后续也是无法使用的,需要格外注意。
![]() |
![]() |
通过 upload 来打开下一个上传页面,通过 add files 打开我们要用的 csv 的文件夹,点击上传完成文件添加。
4.2 导入数据
在左侧控制台中搜索 Canvas 回到这个页面,点击左侧边栏的 Canvas 启动 Canvas 功能。
![]() |
打开后的页面就如下方图的界面。
![]() |
理论上来说,都是有数据才有模型,不过在 Canvas 里并没有完全固定的顺序,先添加数据或者先添加模型都是可以的。
现在我们先建立一个模型,点击“new model”,对 model 起一个可辨识的名字。方便后续查看。
我会以我的目标以及版本操作来命名。在此次操作中,起名为 talk-vx(下图是第 3 次建立模型,所以命名为 talk-v3)。
![]() |
在页面中选择 import 数据的方式,将 S3 中 bucket 下 sagemarker-studio-l 中存储的 csv 导入到模型可选范围中,并选中对应数据集。下图为操作示意图。
![]() |
![]() |
![]() |
![]() |
在所有操作都结束后,选择对应的数据集,点击“select dataset”来确定数据集。
4.3 通过目标区分回归与预测模型
![]() |
在我的数据集中,talk 是这个用户发言 or 没有发言,再次明确一下这个目标字段的含义,在 talk 厅发言 1min 以上的为 1,否则计为 0。
在 select a column to predict 的栏目下,选择 talk 为最终目标字段。Canvas 很智能地识别到了是二分类模型。
4.4 建立模型
可以快速查看一下我们指标的情况,之后可以通过 quick build 快速构建模型,之后会自动定位到 analysis 页等待一段时间。
这个过程中我们只需要等待,别的操作是没有的。
4.5 完成模型,回归结果
如下图所示,Canvas 已经完成了模型模拟,并返回了准确率的结果。
![]() |
4.5.1 准确率概念明晰
准确度在 85.681%,看起来是不错的情况了。但这里需要明确一个问题,什么是准确率?
机器学习中的准确率=预测对的个数/整体的个数。
我们这里举个例子。在这个实验中,假如有 10 个数据,6 个是 0,4 个是 1;而预测出的 10 个结果,6 个 0 中预测出了 5 个 0,4 个 1 中预测出了 2 个 1,那么这里的正确率就是(5+2)/10 = 70%。
4.5.2 不使用准确率作为评判标准的原因
Canvas 也提供了准确率部分的查询。可以打开 scoring 的页面来看整个模型的预测情况。
在下图中,能够看到最左边的数据是 400+ 的数据量,而在前文中,放到模型里的数据是 2000+ 的数据。
这里就类似我们在使用机器学习中切分训练集和测试集数据的操作,切出来一部分用做训练模型的预测。
![]() |
通过颜色与条状宽度我们可以分辨到 1 是个小部分,0 是个大部分,但在预测错误的情况中,1 预测为 0 的与 0 预测为 1 的这两种错误情况,图上的宽度看起来是相近的。
但这里有我们需要兼顾看真实的 0 和 1 的宽度分布,可以知道 1 预测错误的数量/实际为 1 的数量 > 0 预测错误的数量/实际为 0 的数量。
所以可以很清晰地看到不均衡的数据用准确率的衡量方式并不靠谱。说个极端点儿的例子,1000 条数据中,999 个 0,1 个 1,就算把所有都预测为 0,也能保证其较高的准确率——99.9%。但在这种情况下,99.9% 的准确率对我们实在预测时并没有什么用处,因为 1 才是我们希望准确预测出来的。
4.5.3 选择混淆矩阵作为评判依据
所以这里我们要用另一种方式来看,用混淆矩阵的方式来判断模型的好坏。当然Canvas 也提供了查看混淆矩阵的入口。点击“advanced metrics”来查看混淆矩阵。
![]() |
混淆矩阵中,我们需要定义什么是正例,正例就是我们期望的那个记过,在我们这个案例中,
因为我们要看到的预测人是发言的人,也就是 talk = 1。于是在左上角“positive class”下选择“1”,那么我们可以很容易看到该模型在准确率与召回率两方面的情况,分别是 62.887% 和 70.115%。都不是特别高的情况。
4.5.4 混淆矩阵快速理解
关于混淆矩阵,为了方便理解,通过一个小例子强调几个基本概念。
比如我们从一群人中通过数据预测出女生。
混淆矩阵 | 真实值 | ||
女 | 男 | ||
预测值 | 女 | TP | FP |
男 | FN | TN |
那么准确率就是 TP/(TP+FP),这个值低就是把男生也预测为女生,说明把我们不想找到的也找出来了。
召回率就是 TP/(TP+FN),这个值低就是把女生预测为了男生,说明把我们想找到的也没能找出来。
4.5.5 Canvas 可以在更短时间有更高的模型效果
回到前面的案例,可以看到这准确率和召回率这两个都不是特别高的水平,低于80%。那么这样的例子,可以说是 Canvas 的模型模拟水平不足吗?
当然不可以这么武断地下结论。因为机器学习模型的结果不行,有两种可能:
- 第一种是数据不行,所谓“garbage in,garbage out”。
- 第二种是模型选取的不行,每个模型都有其适用边界,表现的好坏。
当然这两个可能都没有办法完全断定。但用另一种方法来判断,拿这个数据通过 python 做过模型,利用自己做的模型选择的算法选择了逻辑回归模型。下方的 LR 即为选择的结果。
![]() |
![]() |
经过调参后,准确率 60.85%,召回率 65.84%。在不断调参之后效果并不如 Canvas 处理的好。
如果去使用 Canvas的话,也就是消耗了 1/10 的时间与精力,就足以得到更好的效果,那么就可以大大提升日常工作效率。
回到上面的话题,通过这两次的比较,基本断定的是数据质量不高导致的。
需要对数据指标或者数据量需要有所改进。可以考虑:
- 用更多的指标或替换更有用的指标。
- 更多的数据量来重新训练。
五. 回归分析目标
那么回归最初的分析目标。
- 通过同学历史数据进行建模,能够构建预测用户发言与否的模型。
- 能够尝试确定哪些行为对识别发言比较重要,作为后续产品运营的一个考虑抓手。
5.1 第一个分析目标回归
在第一个分析目标上,没有达成得非常好。但 Canvas 的结果比自己做的效果好,且时间更短。所以可以采用 Canvas 的结果,用 Canvas 建构的模型来预测后续的情况。
同时这里可以考虑两个迭代方向:
- 一个是在选择数据指标方面,能够思考找到更多逻辑上相关的可能数据指标;
- 另一个是在数据量方面,积累更多的业务数据来训练模型。
但是,在没有更好的策略时,Canvas 的模型结果是一个当前可以考虑采纳的结果。
5.2 第二个分析目标回归
在第二个分析目标上,可以初步找到需要关注的指标。
![]() |
可以从这个左边指标影响程度上看到哪些指标是对预测发言情况有作用的指标。
前6个指标分别是:
- 停留在 talk 厅的时长;
- 停留在课程与 talk 厅的总时长;
- 看其他课程并发送消息互动的数量;
- 付费到现在的时间天数;
- 停留在老师讲课处的时长;
- 周活跃天数。
这些是可以考虑的前 6 个指标,但有个额外注意的内容,单纯地提升 talk 厅的时长是没有意义的,所以需要接下来去看什么与 talk 厅停留时长相关,那些停留时长更长的与更短的区别在哪些方面等等。
当然这些都是与业务集合推进的步骤,但确实是找到了接下来可以考虑的抓手方向。
六. 期望与总结
期望:
在使用过程中对 Canvas 有两个期望:
- 能够连上公司的数据库,拿到数据更方便,这样能够更快去选取数据并构建训练模型。
- 能够将数据预测结束后的结果返回,例如有返回结果 API 接口。这样就能辅助后续线上的互动教育做到更快速又合适的分组了。
总结:
Canvas 是一个非常方便快捷高效的工具,它的好处如下:
- 简单快捷易操作,通过导入数据、quick build 等快捷完成短时间高效果的模型训练。相比于自己模型写代码,训练模型且不断调参,canvas 达到更好的效果也就消耗 1/10 的时间。
- 因为模型的效果更好,训练速度更快,可以在特征工程做完之后,快速对数据情况有个把握,这些数据能够训练到什么程度。当然没有特别好的特征工程处理的话,就可以用逻辑缩小范围,不断构建模型尝试,找到最合适的用于分类的要素。
- 能够在模型结果输出后,得到模型中的指标重要性,可以考虑作为相关的抓手要素。
以上内容为人人都是产品经理社区比赛《亚马逊云科技 智能数据分析产品测评大赛》一等奖获奖作品。其他获奖作品可参考: