2. 在线教育课程推荐分析

3.2在线教育课程推荐分析 - 图1背景介绍
最近几年在线教育特别火, 我们可以通过便捷的互联网知识付费就可以多渠道的获取丰富多彩的知识与理论。对于平台方来说,吸引培养优秀的老师,打造高质量的课程,是非常关键的,在线教育拼 的就是教学质量和口碑,只有有了口碑,在线教育平台才能有更好的收入。
这里涉及的业务知识与数据模型对象: 在线教育业务的用户有:“学员”,”教师” 。教师 讲授 “课程”,学员看课程 有 行为 “用户课程观看时长”。
那我们如何来分析哪些学员对于平台来讲是高质量的学员,这些学员高质量的学员是每天坚持学习 的,有很好的课程完成度,非常有学习欲望的学员。我们可以给他们来持续推荐优质的课程,那什么样 课程对他们来说会更有吸引力的,这涉及到推荐策略的选择,我们这里介绍其中一种推荐策略,推荐所 学课程老师的另外一门销量特别好的一门课程。
以上就是我们要做的一个分析和推荐的过程。当然这里的推荐策略可以有很多种的常识,我们可以 进行ABtest试验 (这个在后面统计学知识里会给大家介绍), 选择最好的推荐策略。使得推荐后学员购买成交率更高。

3.2在线教育课程推荐分析 - 图2数据准备

学员课程订单表
(user_course_order)
备注
id 主键
order_no 订单号
user_id 用户id
course_id 课程id
activity_course_id 活动课程id
source_type 订单来源类型: 1 用户下单购买 2 后台添加专栏

status
当前状态: 0已创建 10已支付 20已完成 30已取消 40已过期
create_time 创建时间
update_time 更新时间
is_del 是否删除


课程播放历史记录(course_play_history) 备注
id id
user_id 用户id
course_id 课程id
section_id 部分id
lesson_id 课时id
history_node 历史播放节点(s) 5
history_highest_node 最高历史播放节点 10:25
create_time 记录创建时间 2020-3-20 10:15:15
update_time 更新时间 2020-3-20 10:30:1
is_del ‘是否删除’


课程信息表(course) 备注
id id
course_name 课程名
brief 课程一句话简介
price 原价
price_tag 原价标签
discounts 优惠价
discounts_tag 优惠标签
course_description_mark_down 描述markdown
course_description` longtext 课程描述
course_img_url 课程分享图片url
is_new 是否新品
is_new_des 广告语
last_operator_id 最后操作者
auto_online_time 自动上架时间
create_time 记录创建时间
update_time 更新时间
is_del 是否删除
total_duration 总时长(分钟)
course_list_img 课程列表展示图片
status 课程状态,0-草稿,1-上架
sort_num 课程排序,用于后台保存草稿时用到
preview_first_field 课程预览第一个字段
preview_second_field 课程预览第二个字段
sales 销量


课程部分表(course_section) 备注
id id
course_id 课程id
section_name 章节名
description 章节描述
create_time 记录创建时间
update_time 更新时间
is_de 是否删除
order_num 排序字段
status 状态,0:隐藏;1:待更新;2:已发布


课程章节表(course_lesson) 备注
id id
course_id 课程id
section_id 部分id
theme 课时主题
duration 课时时长(分钟)
is_free 是否免费
create_time 记录创建时间
update_time 更新时间
is_del 是否删除
order_num 排序字段
status 课时状态0-隐藏,1-未发布,2-已发布



3.2在线教育课程推荐分析 - 图3需求查询

  1. 3.2在线教育课程推荐分析 - 图4所购课程学完, (总课时 0.95) 小于等于 学习总时长(同一章节听课时长大于章节总时长的,按章节时长计算)
    2. 课程在未来一周内能够完成 (总课时
    0.95) 小于等于 (7+ 学习总时长)

    3. 为每个学员推荐一个所学课程教师的一门课程
    要求:以老师课程占比顺序, 老师课程销量 为顺序进行推荐

    create table temp as select from (
    select a.
    ,(select sum(course_lesson.duration) from course_lesson where a.course_id = course_lesson.course_id) as total_duration from(
    select uco.user_id,uco.course_id,if(day(max(play.create_time)- max(uco.create_time))<1 ,1, day(max(play.create_time)-max(uco.create_time))) as day_count,sum(day(play.update_time - play.create_time)) * 24 + sum(hour(play.update_time - play.create_time)) as play_count from user_course_order as uco
    inner join course_play_history as play on uco.user_id = play.user_id and uco.course_id = play.course_id
    group by uco.user_id,uco.course_id) as a where play_count/day_count >=1 ) as b
    where total_duration/60 0.95 <= day_count or total_duration/60 0.95<=7+ day_count

    create table teacher_id as
    select last_operator_id from temp
    inner join course on temp.course_id = course.id



    create table teacher_course as
    select distinct last_operator_id, course.id,count(distinct course.id) over(partition by last_operator_id) as course_count,count(distinct user_course_order.id) over(partition by last_operator_id, course.id) as quntanty from course
    left join user_course_order on course.id = user_course_order.course_id order by course_count desc, quntanty desc;

    where last_operator_id in (select last_operator_id from teacher_id)





    select user_id, course_id as user_course_id,last_operator_id,id as teacher_course_id from temp,teacher_course
    where last_operator_id in (select last_operator_id from teacher_id) and id not in(select a.course_id from temp as a where a.user_id =
    temp.user_id )
    and last_operator_id = (select last_operator_id from course as b where b.id = course_id)






    同一章节听课时长大于章节总时长的,按章节时长计算 这个条件同学们可以尝试添加到语句中