在线教育产品中,怎么用简单的状态机替代复杂的机器学习模型来做流失预警
做在线教育产品的团队经常会遇到一个问题——要不要上机器学习模型做流失预警。XGBoost跑一遍、特征工程搞一堆,模型给出的"用户A将在7天内流失的概率为73%"。然后呢?运营拿着这个概率不知道该干什么——73%算高危还是中危?要不要发Push?发什么内容?模型给出的一个浮点数离可执行的运营指令之间还隔着一整套产品逻辑。
有相当一部分流失预警场景其实不需要模型。一套设计良好的状态机模型不仅能替代机器学习做流失预警,而且可解释性更好、维护成本更低、运营团队可以直接根据状态名做动作。本文拆开一套用在在线教育产品里的学员状态机的设计思路、状态定义和转移规则,顺便以一个公考培训产品的实际落地为案例。
一、流失预警的本质不是"预测谁会走",是"判断谁正在走的路上并且还在可挽回的窗口内"
机器学习模型做流失预测的思路是——输入用户过去N天的各种行为特征,输出一个未来M天内的流失概率。这个思路在电商和金融领域很常用——用户三个月没打开App,大概率流失了。但在在线教育场景里,这三个月的窗口太宽了。
一个备考的学员从"昨晚加班没做题"到"我已经不是每天学习的人了"的心理状态转变——只在一个很短的窗口期内是可逆的。过了这个窗口期你发给他的任何Push都是反向骚扰——他已经用自我放弃来把备考这件事从日常里彻底剥离了。
所以在线教育产品的流失预警不需要预测"两周后会不会流失"——需要判断的是"这个人现在是不是正在滑向放弃的那条轨迹上,如果是的话,他现在滑到了哪一步"。做这个判断不需要复杂的机器学习模型——一套状态机可以把滑落过程和每一步对应的运营动作讲得清清楚楚。
二、把"流失"切成三个独立状态——活跃、衰减、中断——每个状态的触发条件和产品回应都不一样
很多团队把用户二分成"活跃"和"流失"两个桶。这种粗粒度分类在运营上基本不可用——你无法对"即将流失的人"和"正在远离的人"以及"已经走了的人"做完全不同的触达策略。一套更可用的状态机至少需要三个状态。
活跃状态——学员的做题量、正确率和登录频率在自身的历史基准线附近正常波动。系统对他维持日常触达即可,不需要额外干预。
衰减状态——做题量在连续的时间段内呈缓慢下降趋势,某个模块出现了回避型学习的特征(薄弱模块的做题量占比持续走低,强项模块占比走高),正确率平走或微跌。触发条件不是"某一天做题量低于N",而是"近十到十四天的做题量移动平均跌破他自己过去一两个月的基线的某个比例"。衰减状态的运营动作——不是发Push催学习。是给一条不含半句"加油"的消息,带两个信息——"你的X子题型最近偏低"和"这是一组专项练习"。不是叫他多学——是告诉他"你哪卡住了,怎么过去"。衰减期的干预目标只有一个——不让他跌入中断。
中断状态——做题量连续几天为零。触发条件比较明确——做题量连续两天为零就触发。但中断状态是三个状态里最危险的,也是运营最容易做错的。最坏的应对是——"你已经断了几天了,快补上"。最好的应对是——"如果是因为XX那就只做几道保持手感就行"。降量,不是追量,把任务量一次性降到最低。操作语言轻量化,不说"你欠了多少天",只说"今天随便做几道"。中断状态的运营目标是——帮他重新打开APP一次。打开的阻力被打掉之后,内稳态的恢复是他自己会完成的。
三、状态机在工程上怎么落地——不需要模型训练,只需要定时脚本
活跃→衰减的判定逻辑是做题量的移动平均是否跌破了基线的一定比例加模块分布是否出现回避型偏。衰减→中断的判定很简单——做题量连续几天为零。中断→衰减(恢复)——做题量重新回到基线的某个比例以上。各状态和运营动作全放一张表里。
|
当前状态 |
触发操作 |
触发依据 |
目标 |
|
活跃 |
维持日常触达——系统推送正常任务量 |
无需额外数据 |
保持学习节奏 |
|
衰减 |
推子题型专项侧重的练习 + 诊断条消息——"X偏低,这组题是专项" |
做题量、模块分布和子题型正确率的联合异常 |
防止滑向中断,修复正反馈 |
|
中断 |
任务降量至最低门槛 + 带零负债感的触达消息 |
做题量连续两天为零,介入窗口原则上不超过四十八小时 |
帮学员打开APP一次 |
|
中断→恢复 |
监控恢复后第一天或前两天的做题量是否回到基线附近,若持续异常则保持关注 |
近几天做题量恢复趋势 |
确认恢复是稳定的 |
这套状态机不需要模型训练、不需要GPU、每天跑一次定时脚本扫描全部学员的做题量和正确率数据就够了。维护成本低,解释成本零——运营团队一看就知道每个学员当前处在什么状态下、对应的动作是什么。相比之下,模型输出的一个浮点数至今都没能被运营有效使用。
四、一个实际的落地案例——某公考培训产品的状态机运转两年多了
有一个公考培训产品把这套三状态模型跑在学管师的工作台后面已经超过两年了。每天早上凌晨跑定时脚本扫描所有学员过去N天和过去两周的做题量和正确率数据,刷新每个学员的状态标签。刷新结果直接推进学管师工作台的预警队列——红色代表中断状态、黄色代表衰减状态——学管师打开工作台之后看到的是按优先级排序的预警列表而不是几百个学员的数据面板,首屏直接看当天最需要关注的学员。
因为状态机跟数据面板之间有双向校验——学管师看完热度图之后可以手动把状态机自动标记的"中断"状态给撤了——"这个学员只是周末放假没做题,不是真中断"。学管师的人工判断会覆盖机器的硬规则。反之模型如果跑出来一个0.73的流失概率,学管师没有任何能力去校验这个数值是正确的还是一个误报——黑盒的输出根本不能和人工判断交互。状态机不替代人的判断——它只帮你快速筛出今天需要你判断的
更多推荐
所有评论(0)