用Python做早教机构学员留存预测从特征工程到XGBoost模型的完整实操
背景早教托管机构的学员留存有特殊性决策者是家长使用者是2到6岁的孩子续费周期通常为3到6个月。跟K12不同早教学员没有成绩作为续费依据留存更多取决于家长的感受和体验。帮一个早教客户做留存分析时发现他们的整体续费率只有54%低于行业平均的65%。通过建立留存预测模型提前识别高流失风险学员并干预三个月后续费率提升到了67%。今天分享完整的建模过程。一、数据准备与特征工程import pandas as pdimport numpy as npfrom datetime import datetime, timedelta# 加载数据enrollment pd.read_csv(enrollment.csv) # 报名记录attendance pd.read_csv(attendance.csv) # 考勤记录communication pd.read_csv(communication.csv) # 家校沟通记录payment pd.read_csv(payment.csv) # 缴费记录# 定义标签报名后180天内是否续费enrollment[renewed] (enrollment[next_enroll_date].notna() (pd.to_datetime(enrollment[next_enroll_date]) -pd.to_datetime(enrollment[enroll_date])).dt.days 180).astype(int)特征工程是早教留存预测最关键的一步。经过多轮筛选最终使用了四大类共23个特征。第一类学员基础特征features enrollment[[student_id, age_at_enrollment, gender, course_type]].copy()# 年龄分组早教阶段年龄影响大features[age_group] pd.cut(features[age_at_enrollment],bins[0, 2, 3, 4, 5, 6],labels[0-2, 2-3, 3-4, 4-5, 5-6])第二类出勤行为特征这是预测力最强的一类特征。早教学员的出勤模式直接反映家长的参与度和满意度。# 计算每个学员的出勤统计attendance[date] pd.to_datetime(attendance[date])attendance_stats attendance.groupby(student_id).agg(total_sessions(date, count),attended(status, lambda x: (x present).sum()),absent(status, lambda x: (x absent).sum()),leave(status, lambda x: (x leave).sum()),first_date(date, min),last_date(date, max)).reset_index()attendance_stats[attendance_rate] (attendance_stats[attended] / attendance_stats[total_sessions])# 出勤率变化趋势最近4周vs之前4周def calculate_trend(group, student_id, current_date):recent group[(group[student_id] student_id) (group[date] current_date - timedelta(weeks4)) (group[date] current_date)]previous group[(group[student_id] student_id) (group[date] current_date - timedelta(weeks8)) (group[date] current_date - timedelta(weeks4))]recent_rate (recent[status] present).mean() if len(recent) 0 else 0previous_rate (previous[status] present).mean() if len(previous) 0 else 0return recent_rate - previous_rateattendance_stats[attendance_trend] attendance_stats.apply(lambda row: calculate_trend(attendance, row[student_id], row[last_date]), axis1)# 连续缺课天数强流失信号def max_consecutive_absent(group, student_id):student_records group[group[student_id] student_id].sort_values(date)max_streak 0current_streak 0for status in student_records[status]:if status absent:current_streak 1max_streak max(max_streak, current_streak)else:current_streak 0return max_streakattendance_stats[max_absent_streak] attendance_stats[student_id].apply(lambda sid: max_consecutive_absent(attendance, sid))第三类家校沟通特征# 家长主动沟通次数反映关注度comm_stats communication.groupby(student_id).agg(parent_initiated(initiator, lambda x: (x parent).sum()),teacher_initiated(initiator, lambda x: (x teacher).sum()),total_comm(initiator, count),avg_response_time(response_minutes, mean),last_comm_days_ago(date, lambda x: (datetime.now() - pd.to_datetime(x).max()).days)).reset_index()# 沟通频率变化comm_stats[comm_frequency] comm_stats[total_comm] / ((pd.to_datetime(now) - enrollment.set_index(student_id)[enroll_date]).dt.days).reindex(comm_stats[student_id]).values第四类付费行为特征payment_stats payment.groupby(student_id).agg(total_paid(amount, sum),payment_count(amount, count),avg_payment(amount, mean),last_payment_days_ago(date, lambda x: (datetime.now() - pd.to_datetime(x).max()).days)).reset_index()# 课时消耗速度payment_stats[burn_rate] payment_stats[total_paid] / (attendance_stats.set_index(student_id)[attended].reindex(payment_stats[student_id]).values 1)二、模型训练from xgboost import XGBClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_report, roc_auc_score# 合并所有特征model_data features.merge(attendance_stats, onstudent_id) \.merge(comm_stats, onstudent_id, howleft) \.merge(payment_stats, onstudent_id, howleft)model_data model_data.fillna(0)# 划分训练集和测试集X model_data.drop([student_id, renewed], axis1, errorsignore)y enrollment.set_index(student_id).reindex(model_data[student_id])[renewed]# 处理类别变量X pd.get_dummies(X, columns[age_group, course_type, gender])X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)model XGBClassifier(n_estimators200,max_depth5,learning_rate0.1,subsample0.8,colsample_bytree0.8,scale_pos_weightlen(y_train[y_train0]) / len(y_train[y_train1]))model.fit(X_train, y_train)y_pred model.predict(X_test)y_prob model.predict_proba(X_test)[:, 1]print(classification_report(y_test, y_pred))print(fAUC: {roc_auc_score(y_test, y_prob):.4f})模型AUC达到0.82在早教留存预测领域算是不错的水平。三、特征重要性分析from xgboost import plot_importanceimport matplotlibmatplotlib.use(Agg)importance model.feature_importances_feat_df pd.DataFrame({feature: X.columns, importance: importance})feat_df feat_df.sort_values(importance, ascendingFalse).head(10)最重要的5个特征分别是连续缺课天数、出勤率变化趋势、最近沟通天数、出勤率、课时消耗速度。这个结果跟行业经验高度一致早教学员流失不是突然发生的而是有一个渐进过程。先是出勤率下降然后家长沟通减少最后直接不来了。模型的价值在于能在出勤率刚开始下降的时候就发出预警。四、业务落地模型不是用来预测完就结束的关键是把预测结果转化为运营动作。# 按流失风险分级risk_scores model.predict_proba(X)[:, 1]model_data[risk_score] risk_scoresmodel_data[risk_level] pd.cut(risk_scores,bins[0, 0.3, 0.6, 1.0],labels[低风险, 中风险, 高风险])# 高风险学员自动触发干预high_risk model_data[model_data[risk_level] 高风险]for _, row in high_risk.iterrows():create_intervention_task(student_idrow[student_id],risk_scorerow[risk_score],suggested_actionsgenerate_intervention_suggestions(row))干预建议根据风险因素自动生成如果是出勤率下降导致的建议老师主动联系家长了解情况如果是沟通减少导致的建议安排一次课堂观摩让家长看到孩子的进步如果是课时消耗过快导致的建议提前沟通续费方案。五、总结早教学员留存预测的核心不在模型算法有多复杂而在特征工程是否贴合业务实际。出勤率、沟通频率、课时消耗速度这些特征看似简单但组合起来对流失风险的识别力非常强。模型上线后客户机构的续费率从54%提升到67%核心价值是让老师能在家长还没决定不续费的时候就主动介入而不是等家长来退费了才发现问题。

相关新闻

3步搭建CATIA曲面法线自动生成管线:PyCATIA批量处理实战手记

3步搭建CATIA曲面法线自动生成管线:PyCATIA批量处理实战手记

3步搭建CATIA曲面法线自动生成管线:PyCATIA批量处理实战手记 【免费下载链接】pycatia python module for CATIA V5 automation 项目地址: https://gitcode.com/gh_mirrors/py/pycatia 去年秋天,我接手一个离心叶轮叶片曲面的流体分析前处理任务。…

2026/8/14 1:37:57 阅读更多 →
监督学习 vs 聚类

监督学习 vs 聚类

监督学习 vs 聚类 核心一句话:聚类属于无监督学习,不是监督学习。 1、监督学习(Supervised Learning) ✅有标签(label),数据包含「输入特征 + 标准答案」。 模型学习:输入 →预测标签。 分为两类: 分类:输出离散类别 例:猫狗识别、判断图片是不是人脸; 算法:SVM…

2026/8/14 1:36:57 阅读更多 →
Agent 系统完整解析

Agent 系统完整解析

以 Hermes 为例,从 0 到 1 理解 Agent 的组成、原理与设计方法 面向工程实践的 Agent 系统通俗讲解 AI AGENT Agent(智能体)是 AI 领域近年来最重要的概念之一。简单来说,Agent 是一个能理解你的意图、拆解任务、调用工具、执…

2026/8/14 1:36:57 阅读更多 →

最新新闻

本地批量图片处理工具:压缩、水印、格式转换与重命名一体化解决方案

本地批量图片处理工具:压缩、水印、格式转换与重命名一体化解决方案

今天来看一个来自民间开发者的电脑端批量图片处理软件。它主打的功能非常明确:批量压缩、批量添加/去除水印、批量格式转换、批量重命名。核心卖点就是“一步到位”,让你在本地电脑上就能完成这些繁琐的图片处理任务,彻底告别在线工具的上传队…

2026/8/14 2:39:22 阅读更多 →
企业内部网站建设不仅是展示窗口更是数字化的核心引擎

企业内部网站建设不仅是展示窗口更是数字化的核心引擎

很多企业老板或者行政负责人的微信对话框里,最近都躺着这么一条消息:“咱们公司的内部网站能不能搞快点?大家都嫌老系统太难用了。”每当看到这种消息,作为深耕这个行业的从业者,我其实心里是既高兴又担心。高兴的是,大家终于意识到“内部信息化”这块硬骨头该啃了;担心…

2026/8/14 2:39:22 阅读更多 →
基于RK3588与YOLOv8的无人机电力巡检边缘AI系统实现

基于RK3588与YOLOv8的无人机电力巡检边缘AI系统实现

1. 项目概述:当无人机巡检遇上边缘AI最近在折腾一个挺有意思的项目,核心目标就一个:让搭载RK3588芯片的无人机,在电力线巡检时,能实时、准确地发现隐患,比如绝缘子破损、鸟巢或者导线悬挂异物。听起来像是把…

2026/8/14 2:39:22 阅读更多 →
Nacos 3.2 Skill Registry:企业级AI能力安全治理与微服务化实践

Nacos 3.2 Skill Registry:企业级AI能力安全治理与微服务化实践

1. 从“能用”到“敢用”:企业AI能力落地的安全之痛最近和几个做企业级应用开发的朋友聊天,大家不约而同地提到了同一个焦虑:AI能力,尤其是大模型,怎么才能安全、可控地“搬”进自家系统里?这感觉就像家里来…

2026/8/14 2:39:22 阅读更多 →
解锁AMD Ryzen终极潜力:SMUDebugTool免费开源硬件调试完全指南

解锁AMD Ryzen终极潜力:SMUDebugTool免费开源硬件调试完全指南

解锁AMD Ryzen终极潜力:SMUDebugTool免费开源硬件调试完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…

2026/8/14 2:39:22 阅读更多 →
基于MCP协议与优麦云构建广告自动化Skill:从概念到工程实践

基于MCP协议与优麦云构建广告自动化Skill:从概念到工程实践

如果你是一名广告投放工程师,每天要面对几十个广告账户、上百个广告系列,重复着创建广告组、上传素材、设置预算、调整定向的机械操作,那么这篇文章就是为你准备的。 最近,一个名为“Skill”的概念在开发者社区,特别是…

2026/8/14 2:38:22 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →