美文网首页
在线教育付费用户流失预警

在线教育付费用户流失预警

作者: 风图莫 | 来源:发表于2020-08-22 18:06 被阅读0次

    一. 背景:

    • 2018年度,新生52.6万人,盈利19.74亿; 在线教育产品的增长,不是看流量,而是看 留存
    • 在线教育产品有一些特点:
      -- 就是超低频和使用周期长,学生学习的频次往往以周来计,学习的时间少则两三个月,多则半年一年甚至更长,再这样长的使用周期内,用户中途退出是在所难免的

      * 全生命周期 image.png

    二.目标:

    -- 提升留存率

    -- 留存率=「复购用户数+召回用户数」/(复购前用户数+退费用户数)

    -- 两件事:

    -- 减少退费,
    -- 积极续班和拓科

    -- 提升付费用户留存,根据据学员学习过程中的表现以及数据反馈,提前预判学员的退费可能性在使用周期内能降低流失比例即退费率,可以为业务部门提供规则, 然 后做有针对性的运营工作, 可以显著提升留存率

    三.数据指标搭建

    数据指标搭建.png

    四. 构建付费用户流失预警模型:

    1. 业务理解:

    ①到底流失客户的哪些特性最显著?
    ②该问题为二分类问题, 有监督学习模型可选择;
    --(LR; RF,xgboost等)
    -- 不能用knn, svm ,基于实例的算法
    ③流失用户一定少量的;反应到数据上;负样本一定会少
    需要进行过采样

    2.数据获取及预处理

    • 导入库
    # # 导入库
    
    import pandas as pd
    from sklearn.model_selection import train_test_split
    
    import xgboost as xgb                             #confusion_matrix,混淆矩阵
    from sklearn.metrics import  accuracy_score, auc, confusion_matrix, f1_score, \
        precision_score, recall_score, roc_curve  # 导入指标库   # 
    
    from imblearn.over_sampling import SMOTE# 过抽样处理库SMOTE
    
    import matplotlib.pyplot 
    
    • 1.数据预处理

    # 读取数据
    
    data = pd.read_csv('classification.csv', delimiter=',')   # 读取文件
    
    X, y = data.iloc[:, :-1], data.iloc[:, -1] # X,为特征,  y为目标(是否流失)
    
    n_samples, n_features = X.shape  # 总样本量,总特征数
    
    print('样本: {0}| feature: {1} | Na_count: {2}'.format(n_samples, n_features, data.isnull().any().count()))
    
    • ①数据类型转换

    字符串类型的特征需要处理成数值型才能建模,

    • ②.异常值,极值处理

    1.指标性特征值域会有业务部门在需求清单里注明
    2.极值一般特征分别使用1%和99%分位数替换超过上下限的值.
    ③ 缺失值处理
    缺失比例大于30%就删除
    其他分别以均值和中位值填充

    • ④ 过采样: 保持样本均衡

    # 样本均衡处理,过采样
    
    model_smote = SMOTE()  # 建立SMOTE模型对象
    X, y = model_smote.fit_sample(X,y)  # 输入数据并作过抽样处理
    

    3.特征工程

    • 3.1相关性分析
      • 热力图 image
    • 3.2特征筛选
      • 1.移除低方差的特征
        from sklearn.feature_selection import VarianceThreshold
        VarianceThreshold(threshold=(.8 * (1 - .8))),
        threshold=方差阈值 ,低于多少删除
        传入的参数 方差阈值 每一列都会计算一个方差 如果方差低于这个阈值,这一列就会被删掉
      • 2.验证特征和目标之间是否有关联
        卡方检验: 对于分类问题 (y离散)
        卡方检验的目的:确定样本对象落入各类别的比例是否与随机期望比例相等.
    • 3.3数据标准化
    StandardScaler
    

    4.多模型拟合;确定评价函数

    • 1.拆分数据集

      • 将数据分为训练集和测试集

      • X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3, random_state=0)

    • 2. 评价指标

      • 精确率

      • 召回率

      • F1-Score

      • AUC 指标

    • 3.多模型拟合

      • LR二分类

        image
        • 随机森林

          image
        • xgboost

          image.png

    5.根据评价函数;调整模型;对模型调参

    • 基于准确率和精准率; 选用xgboost;

    • RF模型降低的是方差, Xgboost降低的是模型偏差

    • 使用 GridSearchCV网格交叉验证,寻求最优参数

    • 画特征重要性条状图及树状图

      • xgb.plot_importance(model_xgb, height=0.5, importance_type='gain', max_num_features=10,xlabel='Gain Split',grid=False)

        image
      • xgb.to_graphviz(model_xgb, num_trees=9, yes_color='#638e5e', no_color='#a40000')

        image
      • 树状图中,流失标记的是1,未流失标记的是0。对应到图中就是左侧线;否则为False。那么,我们就是沿着左侧线条一直寻找即可

    6.取出规则

    • 01.树状图中,流失标记的是1,未流失标记的是0。对应到图中就是左侧线;否则为False。那么,我们就是沿着左侧线条一直寻找即可取出前五个规则
       *  1.一周内未完成课时>3
      
       *   2.一周内未登录>=2: 
      
       *   3. 未完成作业和未完成月考>=3: 
      
       *   4. 连续未进行评价>=15: 
      
       *   5. 联系无响应>=3: 
      
           *   明显提出退费意向
      
    • 02.制定规则;遍历数据得到百分比
    • 前5条规则对应的用户数据

    # 前5条规则对应的用户数据
    rule_depth_1 = X_test['NO_completed_week']>=3   # 满足的为true,不满足的为Flase
    rule_depth_2 = X_test['NO_login_week']>2
    rule_depth_3 = X_test['NO_test_month']>=3
    rule_depth_4 = X_test['NO_evaluate_day']>=15
    rule_depth_5 = X_test['contact']>3
    rule_list = [rule_depth_1,rule_depth_2,rule_depth_3,rule_depth_4,rule_depth_5]
    
    
    rule_pd = [pd.DataFrame(i) for i in rule_list]# 获取一个特征列表
    
    #合并
    rule_pd_merge = pd.concat(rule_pd, axis=1)
    rule_pd_merge
    
    • 计算 满足条件的占比

    dyn_rules 第一次取前1个特征集,  比较他们每行的值是否都是True, 
    dyn_rules 第二次取前2个特征集,  比较他们每行的值是否都是True,
    dyn_rules 第三次取前3个特征集,  比较他们每行的值是否都是True,
    dyn_rules 第四次取前4个特征集,  比较他们每行的值是否都是True,
    dyn_rules 第五次取前5个特征集,  比较他们每行的值是否都是True,
    
    for i in range(5):
        dyn_rules = rule_pd_merge.iloc[:,:i+1] # 取出top规则
        dyn_rules['is_true']=[all(i)==True for i in dyn_rules.values]# 得到都为true的record
        
        # 2. 取出y_test中的数据集(同时满足True, 流失)
        y_test_selected = y_test[dyn_rules['is_true']]
        # 3.取出概率 中 对应同时满足True  的数据集
        y_pre_selected = y_score[dyn_rules['is_true']]
    #     4. 看 ==1,预计流失的概率中  >0.5的为true, 反之为Flase
        y_pre_cal = y_pre_selected[:,1] >=0.5
        #5.计算 总得 的个数
        total_samples = len(y_pre_cal)
        #6. 计算 为True的个数
        is_churn = y_pre_cal.sum()
        #7.计算  预计>0.5的 除以  真实为true  的占比
        churn_rate = float(is_churn)/total_samples
         # 计算样本比例
        print('出现前{}种情况, 预计流失情况'.format(i+1))
        print('total samples: {}'.format(total_samples))
        print('churn samples: {} | rate: {:.0%} '.format(is_churn,churn_rate))
        print('unchurn samples: {} | rate: {:.0%} '.format((total_samples-is_churn),(1-churn_rate)))
        print('-'*40)
    

    出现前1种情况, 预计流失情况
    total samples: 8362
    churn samples: 2341 | rate: 28%
    unchurn samples: 6021| rate:72%


    出现前2种情况, 预计流失情况
    total samples: 8362
    churn samples: 3521| rate: 42%
    unchurn samples: 4850| rate: 58%


    出现前3种情况, 预计流失情况
    total samples: 8362
    ...............................


    出现前4种情况, 预计流失情况
    total samples: 8362
    ..........................


    出现前5种情况, 预计流失情况
    total samples: 8362
    churn samples: 7442| rate: 89%
    unchurn samples: 920| rate: 11%

    7.结果报告

    • 结论:

      * 1.一周内未完成课时三次以上: (True: 28%,  false: 72%)
        2.一周内未登录2次及以上: (True: 42%, false: 58%)
        3. 3次及以上未完成作业和未完成月考: (True: 71%, false: 29%)
        4. 连续15天未进行评价: (True: 82%, false: 18%)
        5. 三次以上联系无响应: (True: 89%, false: 11%)
                明显提出退费意向
      
    • 运营建议

      • (1)建议逐步增强挽回运营

        • 从第一步规则达到
          *通过APP设备温馨提示
        • 第二步规则
          • 1.做针对性服务, 单独发一些鼓励的话,提供单独反馈渠道
          • 2.根据性格等,匹配学伴,相互监督
        • 第三步规则
          • 一对一诊断; 一个小时以上;完成详尽的诊断报告;提供解决渠道
        • 第四/5步规则
          • 1.直接走入谈判渠道;讲明利害,拉长退费流程时间
      • (2)超预期服务 情感粘性

        • 提高服务
          • 1.老师指定KPI:
        • 周评率/月评率/单门课程评价
          • 2.产品:层次
      • (3)召回:

    相关文章

      网友评论

          本文标题:在线教育付费用户流失预警

          本文链接:https://www.haomeiwen.com/subject/tjivjktx.html