在線教育BD推廣效果復(fù)盤分析

項目介紹

為了拓展高階課的用戶銷量溶诞,目前通過BD與周邊學(xué)校合作螺垢,開展四節(jié)體驗課促銷活動枉圃,并且會在第三節(jié)體驗課后開展“高階課程講座”并開啟高階課的報名通道,目前項目已經(jīng)完結(jié)返劲,請根據(jù)已有的數(shù)據(jù)源分析并提出優(yōu)化方案篮绿。

項目流程

  1. 用戶行為路徑軌跡
  • 1.1 分析一般在線產(chǎn)品用戶行為路徑亲配,并結(jié)合真實體驗過程吼虎,繪制流程圖
  • 1.2 對數(shù)據(jù)源進行特征轉(zhuǎn)換(將“是”鲸睛,“否”轉(zhuǎn)換為“1”官辈,“0”),方便統(tǒng)計繪制漏斗圖
  • 1.3 漏斗圖繪制
  1. 案例復(fù)盤
  • 2.1 數(shù)據(jù)觀察(去重晴股、查看缺失值电湘、查看數(shù)據(jù)大小及類型)
  • 2.2 清洗數(shù)據(jù)(清洗雜亂學(xué)校名稱字段寂呛、拆分課程報名情況)
  • 2.3 數(shù)據(jù)合并(合并報名信息和上課情況表)
  • 2.4 數(shù)據(jù)分析(從用戶路徑贷痪、學(xué)校劫拢、年級强胰、推廣渠道等維度展開分析)

1.用戶行為路徑軌跡

1.1 用戶路徑

用戶體驗產(chǎn)品路徑一般為:渠道曝光->產(chǎn)生興趣->信息采集->體驗->完成

由于本文僅針對BD推廣后偶洋,通過注冊app涡真,繪制用戶體驗流程圖如下:

1.2 特征轉(zhuǎn)換

為了方便讀取數(shù)據(jù)以及統(tǒng)計各階段人數(shù)缸剪,將數(shù)據(jù)第三列之后根據(jù)是杏节、否進行特征轉(zhuǎn)換為1,0
讀取原始數(shù)據(jù)

# 讀取excel文件
# 查看excel文件表格
wb = openpyxl.load_workbook("數(shù)據(jù).xlsx")
wb.sheetnames
# 讀取數(shù)據(jù)
df2 = pd.read_excel("數(shù)據(jù).xlsx",sheet_name="上課數(shù)據(jù)")

特征轉(zhuǎn)換:

dic = {"是":1,"否":0}
i = 0
for index in df2.columns:
    i += 1
    if i > 3:
        df2[index] = df2[index].map(dic)

處理結(jié)果:
  • 文章一共有973條數(shù)據(jù)

1.3 繪制漏斗圖

導(dǎo)入pyecharts繪制互動性可視化漏斗圖

from pyecharts import options as opts
from pyecharts.charts import Funnel

c = ["總?cè)藬?shù)",'綁定微信','綁定手機號','添加老師','登錄APP','第一節(jié)課完課',
     '第一節(jié)課作業(yè)完成','第二節(jié)課完課','第二節(jié)課作業(yè)完成', '第三節(jié)課完課','第三節(jié)課作業(yè)完成',
     '高階課程點擊數(shù)','高階課程報名數(shù)','第四節(jié)課完課','第四節(jié)課作業(yè)完成']
c1 = [df2.ID.count(),df2["綁定微信"].sum(),df2["綁定手機"].sum(),df2["添加老師"].sum(),df2["登錄APP"].sum(),
      df2["第一節(jié)課是否完課"].sum() , df2["第一節(jié)課是否完成作業(yè)"].sum(),df2["第二節(jié)課是否完課"].sum() , df2["第二節(jié)課是否完成作業(yè)"].sum(),
      df2["第三節(jié)課是否完課"].sum() , df2["第三節(jié)課是否完成作業(yè)"].sum(),df2["高階課報名情況"].value_counts()["點擊未報名"],df2["高階課報名情況"].value_counts()["點擊已報名"],
      df2["第四節(jié)課是否完課"].sum() , df2["第四節(jié)課是否完成作業(yè)"].sum()]
c1 = [round(int(i)/973*100,2) for i in c1]
c = (
    Funnel()
    .add(
        "轉(zhuǎn)換率",
        [list(z) for z in zip(c,c1)],
        sort_="none",
        label_opts=opts.LabelOpts(is_show=True, position="inside"),
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/> : {c}%"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="流程轉(zhuǎn)化",subtitle="計算方式:人數(shù)/總?cè)藬?shù)"),
                    legend_opts=opts.LegendOpts(pos_left='right',pos_top="90%"))

)
c.render_notebook()

2. 案例復(fù)盤

2.1 觀察數(shù)據(jù)

檢驗缺失值:df1.info()
去重:df1.drop_duplicates()

# 檢查是否缺失
df1.info()
# 判斷是否有重復(fù)值
df1 = df1.drop_duplicates("id")

結(jié)果:刪除2條重復(fù)字段后,共有968條數(shù)據(jù)座菠,無缺失值

2.2 字段清洗

由于表單為自主填寫浴滴,存在許多雜亂數(shù)據(jù)升略,需要進行清洗區(qū)分
2.2.1 學(xué)校字段:

df1.學(xué)校.unique()

經(jīng)由業(yè)務(wù)部門溝通品嚣,先將學(xué)校分為以下7所:

  • 邳州春田花花實驗小學(xué)
  • 十堰東風(fēng)八零學(xué)校
  • 北大附屬西瓜小學(xué)
  • 簡陽春田花花小學(xué)
  • 三亞第九小學(xué)
  • 鄭州第九十八中小學(xué)
  • 肇慶第九小學(xué)
    以下字段出現(xiàn)混淆:
  • 【江蘇邳州市春田花花腰根、】【簡陽市春田花花小學(xué)】以及【春田花花小學(xué)】
  • 【三亞第九小學(xué)】、【肇慶第九小學(xué)】以及【第九小學(xué)】
    在數(shù)據(jù)清洗中劣挫,由于數(shù)據(jù)維度不夠压固,將春田花花實驗小學(xué)劃為江蘇邳州春田花花實驗小學(xué) 靠闭,不包含實驗小學(xué)字樣的劃成簡陽市春田花花小學(xué)。
    將包含三亞的統(tǒng)一劃為三亞第九小學(xué) 谣光, 不包含三亞但是包含九小的劃為肇慶市第九小學(xué)
def clean_school(b):
    matchObj_baling = re.search( r'八零', b, re.M|re.I)
    matchObj_xigua = re.search( r'西瓜', b, re.M|re.I)
    matchObj_jiushiba = re.search( r'九十八', b, re.M|re.I)
    matchObj_sanya = re.search( r'三亞', b, re.M|re.I)
    matchObj_shiyan = re.search( r'實', b, re.M|re.I)
    matchObj_chuntian = re.search( r'春田花花', b, re.M|re.I)
    matchObj_jiuxiao = re.search( r'九小', b, re.M|re.I)
    
    if matchObj_baling:
        b = '湖北省十堰市東風(fēng)八零學(xué)校'
    elif matchObj_xigua:
        b = '北大西瓜小學(xué)'
    elif matchObj_jiushiba:
        b = '鄭州市第九十八中小學(xué)部'
    elif matchObj_sanya:
        b = '三亞市第九小學(xué)'
    elif matchObj_shiyan:
        b = '邳州市春田花花實驗小學(xué)'
    elif matchObj_shiyan == None and matchObj_chuntian:  # 如果“邳州市春田花花實驗小學(xué)”匹配失敗萄金,則進行簡陽春天花花匹配
        b = '簡陽市春田花花小學(xué)'
    elif matchObj_sanya == None and matchObj_jiuxiao:
        b = '肇慶市第九小學(xué)'
    return b
# 清洗
df1["學(xué)校"] = df1['學(xué)校'].map(clean_school)


2.2.2 其他字段

df1["年級"].unique()
df1["班級"].unique()
df1["三級渠道"].unique()
df2.高階課報名情況.value_counts()
  • 根據(jù)顯示結(jié)果,發(fā)現(xiàn)均無異常字段孙乖,無需清洗

2.2.3 字段拆分


高階課報名情況中唯袄,存在三種數(shù)據(jù)越妈,“未點擊進入”梅掠,“點擊未報名”店归,“點擊已報名”消痛,為方便區(qū)分秩伞,利用pd.get_dummies將三種數(shù)據(jù)進行特征提取纱新。

df2 = pd.concat([df2,pd.get_dummies(df2["高階課報名情況"])],axis=1)
df2.drop("高階課報名情況",axis = 1,inplace = True)
2.3 數(shù)據(jù)合并

將用戶來源及信息表與用戶上課信息表通過"ID"合并

  • 注意:用戶來源表中字段名稱為“id”脸爱,上課信息表中字段名稱為“ID”
data = pd.merge(df1,df2,left_on="id",right_on="ID")
# 空值檢查
data.isnull().sum().sum()
# 刪除多余字段
data.drop(["ID","電話號碼","序號"],axis = 1,inplace = True)
2.4 數(shù)據(jù)分析

2.4.1 漏斗圖繪制
參照開始流程,使用pyecharts進行漏斗圖繪制

from pyecharts import options as opts
from pyecharts.charts import Funnel

c = ["總?cè)藬?shù)",'綁定微信','綁定手機號','添加老師','登錄APP','第一節(jié)課完課',
     '第一節(jié)課作業(yè)完成','第二節(jié)課完課','第二節(jié)課作業(yè)完成', '第三節(jié)課完課','第三節(jié)課作業(yè)完成',
     '高階課程點擊數(shù)','高階課程報名數(shù)','第四節(jié)課完課','第四節(jié)課作業(yè)完成']
c1 = [df2.ID.count(),df2["綁定微信"].sum(),df2["綁定手機"].sum(),df2["添加老師"].sum(),df2["登錄APP"].sum(),
      df2["第一節(jié)課是否完課"].sum() , df2["第一節(jié)課是否完成作業(yè)"].sum(),df2["第二節(jié)課是否完課"].sum() , df2["第二節(jié)課是否完成作業(yè)"].sum(),
      df2["第三節(jié)課是否完課"].sum() , df2["第三節(jié)課是否完成作業(yè)"].sum(),df2["點擊未報名"].sum(),df2["點擊已報名"].sum(),
      df2["第四節(jié)課是否完課"].sum() , df2["第四節(jié)課是否完成作業(yè)"].sum()]
c1 = [round(int(i)/973*100,2) for i in c1]
c = (
    Funnel()
    .add(
        "轉(zhuǎn)換率",
        [list(z) for z in zip(c,c1)],
        sort_="none",
        label_opts=opts.LabelOpts(is_show=True, position="inside"),
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/> : {c}%"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="流程轉(zhuǎn)化",subtitle="計算方式:人數(shù)/總?cè)藬?shù)"),
                    legend_opts=opts.LegendOpts(pos_left='right',pos_top="90%"))

)
c.render_notebook()


結(jié)果:

  • 從漏斗圖得知,整體符合流程轉(zhuǎn)換規(guī)則迂烁,不過登錄APP到第一節(jié)課完課轉(zhuǎn)換率較低
  • 但在第四節(jié)課完課處開始出現(xiàn)異常递鹉,第四節(jié)課完課率比高階課程報名數(shù)還要高躏结,根據(jù)用戶鏈路媳拴,沒有報名的用戶是不能開始第四節(jié)課的屈溉,這里可能出現(xiàn)數(shù)據(jù)錯誤,需要相關(guān)部門進行檢查重新埋點
  • 第二節(jié)課帆赢、第三節(jié)課作業(yè)完成率均比相應(yīng)完課率較高椰于,一部分同學(xué)沒有聽課直接做作業(yè)瘾婿,推測可能是難度較低偏陪,可以適當(dāng)提升難度
  • 轉(zhuǎn)換率在報名處最低煮嫌,符合規(guī)則立膛,但同樣宝泵,需要調(diào)研用戶原因儿奶,查看是什么原因?qū)е聢竺麛?shù)較低,價格原因還是其他原因

2.4.2 多維度統(tǒng)計分析
(1)整體:


(2)學(xué)校

grouped_school = data.groupby("學(xué)校").count()["id"].reset_index()
# 繪圖
bar = (Bar()
      .add_xaxis(list(grouped_school.學(xué)校))
      .add_yaxis("參與人數(shù)",[int(i) for i in grouped_school.id.values])
      .set_global_opts(title_opts=opts.TitleOpts(title = "各學(xué)校參與人數(shù)"),
                      xaxis_opts=opts.AxisOpts(name = "學(xué)校",axislabel_opts=opts.LabelOpts(rotate = 20)))
      )
bar.render_notebook()
  • 春田花花實驗小學(xué)人數(shù)最多瓤鼻,東風(fēng)八零次之
    (3)三級渠道
grouped_bd_sc = data.groupby(["三級渠道","學(xué)校"]).count()["id"].reset_index()

數(shù)據(jù)導(dǎo)入PowerBI繪制刹绲唬基圖
  • 主要渠道來源為周氏集團祭犯、武漢力公司沃粗、每日優(yōu)鮮效果最好,河南公司和科技公司最次突雪;
  • 其中周氏集團和每日優(yōu)鮮能夠覆蓋兩所學(xué)校挂签;
  • 東風(fēng)八零學(xué)校饵婆、春田花花實驗學(xué)校的生源最多侨核。

(4)年級與完課率

grouped_nianji = pd.concat([data.groupby("年級").sum().iloc[:,5:9],data.groupby("年級").sum()["點擊已報名"]],axis = 1)
# 繪圖
bar = (Bar()
      .add_xaxis(grouped_nianji.columns.tolist())
      .add_yaxis("幼兒園小班", grouped_nianji.loc['幼兒園小班'].tolist(), stack="stack1")
      .add_yaxis("小學(xué)一年級", grouped_nianji.loc['小學(xué)一年級'].tolist(), stack="stack1")
      .add_yaxis("小學(xué)二年級", grouped_nianji.loc['小學(xué)二年級'].tolist(), stack="stack1")
      .add_yaxis("小學(xué)三年級", grouped_nianji.loc['小學(xué)三年級'].tolist(), stack="stack1")
      .add_yaxis("小學(xué)四年級", grouped_nianji.loc['小學(xué)四年級'].tolist(), stack="stack1")
      .add_yaxis("小學(xué)五年級", grouped_nianji.loc['小學(xué)五年級'].tolist(), stack="stack1")
      .add_yaxis("小學(xué)六年級", grouped_nianji.loc['小學(xué)六年級'].tolist(), stack="stack1")
      .add_yaxis("初中一年級",grouped_nianji.loc['初中一年級'].tolist(), stack="stack1")
       .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                    axis_opts = opts.AxisOpts(
                        interval = None,
                        
                    ),
                    )
    .set_global_opts(title_opts=opts.TitleOpts(title="完\n成\n課\n程\n及\n作\n業(yè)\n學(xué)\n員\n年\n級\n分\n布"
                    ,padding = [150,100,5,10]),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
      )
      )
bar.render_notebook()
  • 每節(jié)課均是小學(xué)五年級占比最多,其次是小學(xué)三年級些己、小學(xué)四年級
  • 幼兒園以及小學(xué)五年級以上段标,幾乎沒有人參與活動以及報名逼庞,推測可能是沒有向這些年級的學(xué)生推廣(幼兒園太小、六年級學(xué)生太忙等等)

2.4.3 特征工程處理
使用sklearn對于學(xué)校派任、年級掌逛、三級渠道字段進行特征處理颤诀,將至轉(zhuǎn)換為數(shù)值型

from sklearn.preprocessing import LabelEncoder 
le = LabelEncoder()
data['學(xué)校'] = le.fit_transform(data['學(xué)校'])
data['年級'] = le.fit_transform(data['年級'])
data['三級渠道'] = le.fit_transform(data['三級渠道'])


正相關(guān)部分:第三節(jié)課是否完成作業(yè)與第四節(jié)課是否完成作業(yè)表現(xiàn)出強相關(guān) ,高達0.87心傀。第一次課程到第四次課程拆讯,可以看出他們關(guān)聯(lián)性較大种呐,可謂是環(huán)環(huán)相扣,呈現(xiàn)出了方塊形狀爽室。
負(fù)相關(guān)部分:學(xué)校與三級渠道達到-0.35汁讼。

結(jié)論:

  • 從登錄APP到第一節(jié)課完課 ,用戶流失較嚴(yán)重阔墩,需要對該部分用戶進行調(diào)研 嘿架,看是難度太大還是課程不能引起他們的興趣。

  • 第三節(jié)課作業(yè)完成到高階課程報名這一過程 啸箫, 也出現(xiàn)數(shù)據(jù)異常耸彪,占比從60.8%下降到8%,但是第四節(jié)課的作業(yè)完成率與第四節(jié)課作業(yè)完成率都達到了百分之五十忘苛,甚至作業(yè)完成率高于完課率唱较,這里要和產(chǎn)品部門溝通,對這里的用戶瀏覽軌跡進行專項復(fù)盤召川,是不是數(shù)據(jù)埋點需要重新進行設(shè)計绊汹。

  • 完成作業(yè)及課程的學(xué)員大多分布在小學(xué)三、四扮宠、五年級,幼兒園及小學(xué)六年級狐榔、初中一年級幾乎沒有坛增,根據(jù)二八法則,建議花更多時間在小學(xué)三四五年級身上薄腻,進行高階課程拓展收捣。

  • 逆轉(zhuǎn)集團、河南公司庵楷、科技公司的投放效果有限罢艾,周氏集團與每日優(yōu)鮮的覆蓋效果較好,可以覆蓋兩個學(xué)校尽纽。建議后期選擇周氏集團與每日優(yōu)鮮咐蚯。

  • 根據(jù)真實體驗情況,建議相關(guān)助教部門將發(fā)出的大量網(wǎng)址鏈接及視頻教程弄贿,以小程序或者H5表單形式呈現(xiàn)春锋,以及視頻添加相關(guān)視頻說明。減少一般用戶對網(wǎng)址鏈接的抗拒感差凹,增加品牌認(rèn)知度期奔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市危尿,隨后出現(xiàn)的幾起案子呐萌,更是在濱河造成了極大的恐慌,老刑警劉巖谊娇,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肺孤,死亡現(xiàn)場離奇詭異,居然都是意外死亡邮绿,警方通過查閱死者的電腦和手機渠旁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來船逮,“玉大人顾腊,你說我怎么就攤上這事⊥谖福” “怎么了杂靶?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵梆惯,是天一觀的道長。 經(jīng)常有香客問我吗垮,道長垛吗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任烁登,我火速辦了婚禮怯屉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饵沧。我一直安慰自己锨络,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布狼牺。 她就那樣靜靜地躺著羡儿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪是钥。 梳的紋絲不亂的頭發(fā)上掠归,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音悄泥,去河邊找鬼虏冻。 笑死,一個胖子當(dāng)著我的面吹牛码泞,可吹牛的內(nèi)容都是我干的兄旬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼余寥,長吁一口氣:“原來是場噩夢啊……” “哼领铐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宋舷,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤绪撵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祝蝠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體音诈,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年绎狭,在試婚紗的時候發(fā)現(xiàn)自己被綠了细溅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡嘶,死狀恐怖喇聊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹦狂,我是刑警寧澤誓篱,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布朋贬,位于F島的核電站,受9級特大地震影響窜骄,放射性物質(zhì)發(fā)生泄漏神汹。R本人自食惡果不足惜于颖,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一敌厘、第九天 我趴在偏房一處隱蔽的房頂上張望汹桦。 院中可真熱鬧,春花似錦准验、人聲如沸削解。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腕柜,卻和暖如春济似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盏缤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工砰蠢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唉铜。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓台舱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親潭流。 傳聞我的和親對象是個殘疾皇子竞惋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容