未来数字电商趋势研究论文 跨境电商营销策略分析论文

 网络   2022-10-21 19:56   55
一. 项目背景

项目对于京东电商经营数据集施行目标分解以领会用户购物动作性格 为经营决议供给支柱提议。 本文华用了MySQL以及Python两种代码施行目标算计以符合分歧的数据分解开垦境况。

二. 数据集先容

本数据集为京东比赛数据集 精细先容请拜候链接 。 数据集公有五个文件 蕴含了’2021-02-01’至’2021-04-15’之间的用户数据 数据已施行了脱敏处置 本文利用了个中的动作数据表 表中公有五个字段 各字段寄义以下图所示 动作数据表 jdata_action 字段阐明

三. 数据荡涤 # 导入python相干模块import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltfrom datetime import datetimeplt.style.use( ggplot )%matplotlib inline# 树立中文编码以及负号的一般再现plt.rcParams[ font.sans-serif ] [ SimHei ]plt.rcParams[ axes.unicode_minus ] False # 读取数据 数据集较大 假设算计机读取内存没有够用 也许实验kaggle比赛# 中的reduce_mem_usage函数 附正在文末 主要原理是把int64/float64# 类别的数值用更小的int(float)32/16/8来搞定user_action pd.read_csv( jdata_action.csv ) # 因数据集过大 本文截取 2018-03-30 至 2018-04-15 之间的数据告竣本次分解# 注 仅4月份的数据蕴含加购物车动作 即type 5user_data user_action[(user_action[ action_time ] 2018-03-30 ) (user_action[ action_time ] 2018-04-15 )] # 存至要地备用user_data.to_csv( user_data.csv ,sep , ) # 检察原始数据各字段类别behavior pd.read_csv( user_data.csv , index_col 0)behavior[:10] # OUTPUTuser_id sku_id action_time module_id type17 1455298 208441 2018-04-11 15:21:43 6190659 118 1455298 334318 2018-04-11 15:14:54 6190659 119 1455298 237755 2018-04-11 15:14:13 6190659 120 1455298 6422 2018-04-11 15:22:25 6190659 121 1455298 268566 2018-04-11 15:14:26 6190659 122 1455298 115915 2018-04-11 15:13:35 6190659 123 1455298 208254 2018-04-11 15:22:16 6190659 124 1455298 177209 2018-04-14 14:09:59 6628254 125 1455298 71793 2018-04-14 14:10:29 6628254 126 1455298 141950 2018-04-12 15:37:53 10207258 1 behavior.info() # OUTPUT class pandas.core.frame.DataFrame Int64Index: 7540394 entries, 17 to 37214234Data columns (total 5 columns):user_id int64sku_id int64action_time objectmodule_id int64type int64dtypes: int64(4), object(1)memory usage: 345.2 MB # 检察缺失值 behavior.isnull().sum() # OUTPUTuser_id 0sku_id 0action_time 0module_id 0type 0dtype: int64

数据各列完好失值。

# 原始数据中时光列action_time 时光以及日期是正在一统的 没有麻烦分解 对于action_time列施行处置 拆分出日期以及时光列 并推广礼拜字段求出每天对于应# 的礼拜 麻烦后续守时间纬度对于数据施行分解behavior[ date ] pd.to_datetime(behavior[ action_time ]).dt.date # 日期behavior[ hour ] pd.to_datetime(behavior[ action_time ]).dt.hour # 时光behavior[ weekday ] pd.to_datetime(behavior[ action_time ]).dt.weekday_name # 周 # 去除与分解无关的列behavior behavior.drop( module_id , axis 1) # 将用户动作标签由数字类别改为用字符示意behavior_type {1: pv ,2: pay ,3: fav ,4: comm ,5: cart }behavior[ type ] behavior[ type ].apply(lambda x: behavior_type[x])behavior.reset_index(drop True,inplace True) # 检察处置好的数据behavior[:10] # OUTPUTuser_id sku_id action_time type date hour weekday0 1455298 208441 2018-04-11 15:21:43 pv 2018-04-11 15 Wednesday1 1455298 334318 2018-04-11 15:14:54 pv 2018-04-11 15 Wednesday2 1455298 237755 2018-04-11 15:14:13 pv 2018-04-11 15 Wednesday3 1455298 6422 2018-04-11 15:22:25 pv 2018-04-11 15 Wednesday4 1455298 268566 2018-04-11 15:14:26 pv 2018-04-11 15 Wednesday5 1455298 115915 2018-04-11 15:13:35 pv 2018-04-11 15 Wednesday6 1455298 208254 2018-04-11 15:22:16 pv 2018-04-11 15 Wednesday7 1455298 177209 2018-04-14 14:09:59 pv 2018-04-14 14 Saturday8 1455298 71793 2018-04-14 14:10:29 pv 2018-04-14 14 Saturday9 1455298 141950 2018-04-12 15:37:53 pv 2018-04-12 15 Thursday 四. 分解模子构建分解目标 流量目标分解用户破费频率分解用户动作正在时光纬度的散布用户动作转化漏斗用户存储率分解商品销量分解RFM用户价值分层 1.流量目标分解

pv、uv、破费用户数占比、破费用户总拜候量占比、破费用户人均拜候量、跳失率

PV UV # 总拜候量pv behavior[behavior[ type ] pv ][ user_id ].count()# 总访客数uv behavior[ user_id ].nunique()# 破费用户数 user_pay behavior[behavior[ type ] pay ][ user_id ].unique()# 日均拜候量pv_per_day pv / behavior[ date ].nunique()# 人均拜候量pv_per_user pv / uv# 破费用户拜候量pv_pay behavior[behavior[ user_id ].isin(user_pay)][ type ].value_counts().pv# 破费用户数占比user_pay_rate len(user_pay) / uv# 破费用户拜候量占比pv_pay_rate pv_pay / pv# 破费用户人均拜候量pv_per_buy_user pv_pay / len(user_pay) # SQLSELECT count(DISTINCT user_id) UV, (SELECT count(*) PV from behavior_sql WHERE type pv ) PVFROM behavior_sql;SELECT count(DISTINCT user_id)FROM behavior_sqlWHERE emsp;WHERE type pay SELECT type, COUNT(*) FROM behavior_sqlWHERE user_id IN(SELECT DISTINCT user_idFROM behavior_sqlWHERE type pay )AND type pv GROUP BY type; print( 总拜候量为 %i %pv)print( 总访客数为 %i %uv)print( 破费用户数为 %i %len(user_pay))print( 破费用户拜候量为 %i %pv_pay)print( 日均拜候量为 %.3f %pv_per_day)print( 人均拜候量为 %.3f %pv_per_user)print( 破费用户人均拜候量为 %.3f %pv_per_buy_user)print( 破费用户数占比为 %.3f%% %(user_pay_rate * 100))print( 破费用户拜候量占比为 %.3f%% %(pv_pay_rate * 100)) # OUTPUT总拜候量为 6229177总访客数为 728959破费用户数为 395874破费用户拜候量为 3918000日均拜候量为 389323.562人均拜候量为 8.545破费用户人均拜候量为 9.897破费用户数占比为 54.307%破费用户拜候量占比为 62.898%

破费用户人均拜候量以及总拜候量占比都正在平衡值以上 有过破费纪录的用户更承诺正在网站上破费更多时光 阐明网站的购物感受尚可 老用户对于网站有特定依附性 对于没有过破费纪录的用户要让加紧领会产物的利用方式以及价值 强化用户悠闲台的黏连。

# 跳失率 只施行了一次操作就分开的用户数/总用户数attrition_rates sum(behavior.groupby( user_id )[ type ].count() 1) / (behavior[ user_id ].nunique()) # SQLSELECT (SELECT COUNT(*)FROM (SELECT user_id FROM behavior_sql GROUP BY user_id HAVING COUNT(type) 1) A) /(SELECT COUNT(DISTINCT user_id) UV FROM behavior_sql) attrition_rates; print( 跳失率为 %.3f%% %(attrition_rates * 100) ) # OUTPUT跳失率为 22.585%

整体算计周期内跳失率为22.585% 依然有较多的用户仅做了单次操作就分开了页面 须要从首页页面结构和产物用户感受等方面加以改善 进步产物排斥力。

2. 用户破费频率分解 # 单个用户破费总次数total_buy_count (behavior[behavior[ type ] pay ].groupby([ user_id ])[ type ].count() .to_frame().rename(columns { type : total }))# 破费次数前10客户topbuyer10 total_buy_count.sort_values(by total ,ascending False)[:10]# 复购率re_buy_rate total_buy_count[total_buy_count 2].count()/total_buy_count.count() # SQL#破费次数前10客户SELECT user_id, COUNT(type) total_buy_count FROM behavior_sql WHERE type pay GROUP BY user_idORDER BY COUNT(type) DESCLIMIT 10CREAT VIEW v_buy_count AS SELECT user_id, COUNT(type) total_buy_countFROM behavior_sqlWHERE type pay GROUP BY user_id;SELECT CONCAT(ROUND((SUM(CASE WHEN total_buy_count 2 THEN 1 ELSE 0 END)/SUM(CASE WHEN total_buy_count 0 THEN 1 ELSE 0 END))*100,2), % ) AS re_buy_rate FROM v_buy_count; topbuyer10.reset_index().style.bar(color skyblue ,subset [ total ]) # 单个用户破费总次数可视化tbc_box total_buy_count.reset_index()fig, ax plt.subplots(figsize [16,6])ax.set_yscale( log )sns.countplot(x tbc_box[ total ],data tbc_box,palette Set1 )for p in ax.patches: ax.annotate( {:.2f}% .format(100*p.get_height()/len(tbc_box[ total ])), (p.get_x() - 0.1, p.get_height()))plt.title( 用户破费总次数 )

整体算计周期内 最高购物次数为133次 最低为1次 大全体用户的购物次数正在6次以下 可妥善推广扩张 完满购物感受 进步用户破费次数。购物次数前10用户为1187177、502169等 应进步其中意度 增大存储率。

print( 复购率为 %.3f%% %(re_buy_rate * 100) ) # OUTPUT复购率为 13.419%

复购率较低 应强化老用户召回体制 选拔购物感受 也大概因数据量较少 统计周期之内的数据 没法注释齐全的购物周期 进而得出结论有误。

3. 用户动作正在时光纬度的散布 日破费次数、日活泼人数、日破费人数、日破费人数占比、破费用户日人均破费次数 # 日活泼人数 有一次操作即视为活泼 daily_active_user behavior.groupby( date )[ user_id ].nunique()# 日破费人数daily_buy_user behavior[behavior[ type ] pay ].groupby( date )[ user_id ].nunique()# 日破费人数占比proportion_of_buyer daily_buy_user / daily_active_user# 日破费总次数daily_buy_count behavior[behavior[ type ] pay ].groupby( date )[ type ].count()# 破费用户日人均破费次数consumption_per_buyer daily_buy_count / daily_buy_user # SQL# 日破费总次数SELECT date, COUNT(type) pay_daily FROM behavior_sql WHERE type pay GROUP BY date;# 日活泼人数SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date;# 日破费人数SELECT date, COUNT(DISTINCT user_id) user_pay_daily FROM behavior_sql WHERE type pay GROUP BY date;# 日破费人数占比SELECT(SELECT date, COUNT(DISTINCT user_id) user_pay_daily FROM behavior_sql WHERE type pay GROUP BY date) /(SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date) # 日人均破费次数SELECT(SELECT date, COUNT(type) pay_daily FROM behavior_sql WHERE type pay GROUP BY date) /(SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date) # 日破费人数占比可视化# 柱状图数据pob_bar (pd.merge(daily_active_user,daily_buy_user,on date ).reset_index() .rename(columns { user_id_x : 日活泼人数 , user_id_y : 日破费人数 }) .set_index( date ).stack().reset_index().rename(columns { level_1 : Variable ,0: Value }))# 线图数据pob_line proportion_of_buyer.reset_index().rename(columns { user_id : Rate })fig1 plt.figure(figsize [16,6])ax1 fig1.add_subplot(111)ax2 ax1.twinx()sns.barplot(x date , y Value , hue Variable , data pob_bar, ax ax1, alpha 0.8, palette husl )ax1.legend().set_title( )ax1.legend().remove() sns.pointplot(pob_line[ date ], pob_line[ Rate ], ax ax2,markers D , linestyles -- ,color teal )x list(range(0,16))for a,b in zip(x,pob_line[ Rate ]): plt.text(a 0.1, b 0.001, %.2f%% % (b*100), ha center , va bottom ,fontsize 12)fig1.legend(loc upper center ,ncol 2)plt.title( 日破费人数占比 )

日活泼人数与日破费人数无分明稳定 日破费人数占比均正在20%以上。

# 破费用户日人均破费次数可视化# 柱状图数据cpb_bar (daily_buy_count.reset_index().rename(columns { type : Num }))# 线图数据cpb_line (consumption_per_buyer.reset_index().rename(columns {0: Frequency }))fig2 plt.figure(figsize [16,6])ax3 fig2.add_subplot(111)ax4 ax3.twinx()sns.barplot(x date , y Num , data cpb_bar, ax ax3, alpha 0.8, palette pastel )sns.pointplot(cpb_line[ date ], cpb_line[ Frequency ], ax ax4, markers D , linestyles -- ,color teal )x list(range(0,16))for a,b in zip(x,cpb_line[ Frequency ]): plt.text(a 0.1, b 0.001, %.2f % b, ha center , va bottom ,fontsize 12)plt.title( 破费用户日人均破费次数 )

日破费人数正在25000以上 日人均破费次数大于1次。

dau3_df behavior.groupby([ date , user_id ])[ type ].count().reset_index()dau3_df dau3_df[dau3_df[ type ] 3] # 每日高活泼用户数 每日操作数大于3次 dau3_num dau3_df.groupby( date )[ user_id ].nunique() # SQLSELECT date, COUNT(DISTINCT user_id) (SELECT date, user_id, COUNT(type)FROM behavior_sqlGROUP BY date, user_idHAVING COUNT(type) 3) dau3GROUP BY date; fig, ax plt.subplots(figsize [16,6])sns.pointplot(dau3_num.index, dau3_num.values, markers D , linestyles -- ,color teal )x list(range(0,16))for a,b in zip(x,dau3_num.values): plt.text(a 0.1, b 300 , %i % b, ha center , va bottom ,fontsize 14)plt.title( 每日高活泼用户数 )

每日高活泼用户数正在大全体4万以上 2018-04-04以前数目较为稳固 之后数目不断攀升 8号9号到达最高 随即下降 推想数据稳定应为营销震动孕育的。

# 高活泼用户累计活泼天数散布dau3_cumsum dau3_df.groupby( user_id )[ date ].count() # SQLSELECT user_id, COUNT(date) (SELECT date, user_id, COUNT(type)FROM behavior_sqlGROUP BY date, user_idHAVING COUNT(type) 3) dau3GROUP BY user_id; fig, ax plt.subplots(figsize [16,6])ax.set_yscale( log )sns.countplot(dau3_cumsum.values,palette Set1 )for p in ax.patches: ax.annotate( {:.2f}% .format(100*p.get_height()/len(dau3_cumsum.values)), (p.get_x() 0.2, p.get_height() 100))plt.title( 高活泼用户累计活泼天数散布 )

统计周期内 大全体高活泼用户累计活泼天数正在六天以下 但也生存高达十六天的超级活泼用户数目 对于累计天数较高的用户要推出陆续登录惩罚等连续维持其对于平台的黏性 对于累计天数较低的用户要妥善施行推送震动动态等对于其施行召回。

#每日欣赏量pv_daily behavior[behavior[ type ] pv ].groupby( date )[ user_id ].count()#每日访客数uv_daily behavior.groupby( date )[ user_id ].nunique() # SQL#每日欣赏量SELECT date, COUNT(type) pv_daily FROM behavior_sql WHERE type pv GROUP BY date;#每日访客数SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY date; # 每日欣赏量可视化fig, ax plt.subplots(figsize [16,6])sns.pointplot(pv_daily.index, pv_daily.values,markers D , linestyles -- ,color dodgerblue )x list(range(0,16))for a,b in zip(x,pv_daily.values): plt.text(a 0.1, b 2000 , %i % b, ha center , va bottom ,fontsize 14)plt.title( 每日欣赏量 ) # 每日访客数可视化fig, ax plt.subplots(figsize [16,6])sns.pointplot(uv_daily.index, uv_daily.values, markers H , linestyles -- ,color m )x list(range(0,16))for a,b in zip(x,uv_daily.values): plt.text(a 0.1, b 500 , %i % b, ha center , va bottom ,fontsize 14)plt.title( 每日访客数 )

欣赏量以及访客数每日改变趋势大抵不异 2018-04-04日前后用户数目改变稳定较大 4月4日为明朗节假日前一天 各数据量正在当天均有分明下降 但之后渐渐上升 推想应为节假日营销震动或扩张拉新震动带来的作用。

#每时欣赏量pv_hourly behavior[behavior[ type ] pv ].groupby( hour )[ user_id ].count()#每时访客数uv_hourly behavior.groupby( hour )[ user_id ].nunique() # SQL # 每时欣赏量SELECT date, COUNT(type) pv_daily FROM behavior_sql WHERE type pv GROUP BY hour;# 每时访客数SELECT date, COUNT(DISTINCT user_id) uv_daily FROM behavior_sql GROUP BY hour; # 欣赏量随小时改变可视化fig, ax plt.subplots(figsize [16,6])sns.pointplot(pv_hourly.index, pv_hourly.values, markers H , linestyles -- ,color dodgerblue )for a,b in zip(pv_hourly.index,pv_hourly.values): plt.text(a, b 10000 , %i % b, ha center , va bottom ,fontsize 12)plt.title( 欣赏量随小时改变 ) # 访客数随小时改变可视化fig, ax plt.subplots(figsize [16,6])sns.pointplot(uv_hourly.index, uv_hourly.values, markers H , linestyles -- ,color m )for a,b in zip(uv_hourly.index,uv_hourly.values): plt.text(a, b 1000 , %i % b, ha center , va bottom ,fontsize 12)plt.title( 访客数随小时改变 )

欣赏量及访客数随小时改变趋势统一 正在清晨1点到清晨5点之间 大全体用户在休憩 大伙活泼度较低。清晨5点到10点用户结束起床处事 活泼度逐渐推广 之后趋于稳固 下昼6点之后大全体人恢复闲暇 欣赏量及访客数迎来了第二波攀升 正在黄昏8点中到达顶峰 随即逐渐下降。也许思虑正在上午9点及黄昏8点增大商品扩张力度 加大营销震动参预 可取的较好的收益 1点到5点之间顺应做系统维护。

# 用户各操作随小时改变type_detail_hour pd.pivot_table(columns type ,index hour , data behavior,aggfunc np.size,values user_id )# 用户各操作随礼拜改变type_detail_weekday pd.pivot_table(columns type ,index weekday , data behavior,aggfunc np.size,values user_id )type_detail_weekday type_detail_weekday.reindex([ Monday , Tuesday , Wednesday , Thursday , Friday , Saturday , Sunday ]) # SQL# 用户各操作随小时改变 SELECT hour,SUM(CASE WHEN behavior pv THEN 1 ELSE 0 END)AS pv ,SUM(CASE WHEN behavior fav THEN 1 ELSE 0 END)AS fav ,SUM(CASE WHEN behavior cart THEN 1 ELSE 0 END)AS cart ,SUM(CASE WHEN behavior pay THEN 1 ELSE 0 END)AS pay FROM behavior_sqlGROUP BY hourORDER BY hour# 用户各操作随礼拜改变 SELECT weekday,SUM(CASE WHEN behavior pv THEN 1 ELSE 0 END)AS pv ,SUM(CASE WHEN behavior fav THEN 1 ELSE 0 END)AS fav ,SUM(CASE WHEN behavior cart THEN 1 ELSE 0 END)AS cart ,SUM(CASE WHEN behavior pay THEN 1 ELSE 0 END)AS pay FROM behavior_sqlGROUP BY weekdayORDER BY weekday tdh_line type_detail_hour.stack().reset_index().rename(columns {0: Value })tdw_line type_detail_weekday.stack().reset_index().rename(columns {0: Value })tdh_line tdh_line[~(tdh_line[ type ] pv )]tdw_line tdw_line[~(tdw_line[ type ] pv )] # 用户操作随小时改变可视化fig, ax plt.subplots(figsize [16,6])sns.pointplot(x hour , y Value , hue type , data tdh_line, linestyles -- )plt.title( 用户操作随小时改变 )

未来数字电商趋势研究论文 跨境电商营销策略分析论文

用户操作随小时改变纪律与PV、UV随小时纪律如同 与用户作息纪律相干 参加购物车以及付款两条曲线贴合比较为密切 阐明大全体用户风气参加购物车后直接采办。存眷数相对于较少 也许根据用户购物车内商品施行精确推送。指摘数也相对于较少 阐明大全体用户没有是很热心对于购物感受施行反应 也许树立一些惩罚制度进步用户指摘数 增大用用户粘性。

# 用户操作随礼拜改变可视化fig, ax plt.subplots(figsize [16,6])sns.pointplot(x weekday , y Value , hue type , data tdw_line[~(tdw_line[ type ] pv )], linestyles -- )plt.title( 用户操作随礼拜改变 )

周一到周四处事日时期 用户操作随礼拜改变较为稳固 周五至周六投入休憩日 用户操作分明增加 周日又恢复一般。

4. 用户动作转化漏斗 # 导入相干包from pyecharts import options as optsfrom pyecharts.charts import Funnelimport math behavior[ action_time ] pd.to_datetime(behavior[ action_time ],format %Y-%m-%d %H:%M:%S ) # 用户大伙动作散布type_dis behavior[ type ].value_counts().reset_index()type_dis[ rate ] round((type_dis[ type ] / type_dis[ type ].sum()),3) type_dis.style.bar(color skyblue ,subset [ rate ])

用户大伙动作中 有82.6%动作为欣赏 理论支拨操作仅占6.4,除此之外 用户指摘及珍藏的动作占比也较低 理应增强网站实用户之间的互动 进步指摘数目以及珍藏率。

df_con behavior[[ user_id , sku_id , action_time , type ]] df_pv df_con[df_con[ type ] pv ]df_fav df_con[df_con[ type ] fav ]df_cart df_con[df_con[ type ] cart ]df_pay df_con[df_con[ type ] pay ]df_pv_uid df_con[df_con[ type ] pv ][ user_id ].unique()df_fav_uid df_con[df_con[ type ] fav ][ user_id ].unique()df_cart_uid df_con[df_con[ type ] cart ][ user_id ].unique()df_pay_uid df_con[df_con[ type ] pay ][ user_id ].unique() pv - buy fav_cart_list set(df_fav_uid) | set(df_cart_uid) pv_pay_df pd.merge(left df_pv, right df_pay, how inner , on [ user_id , sku_id ], suffixes ( _pv , _pay )) pv_pay_df pv_pay_df[(~pv_pay_df[ user_id ].isin(fav_cart_list)) (pv_pay_df[ action_time_pv ] pv_pay_df[ action_time_pay ])] uv behavior[ user_id ].nunique()pv_pay_num pv_pay_df[ user_id ].nunique()pv_pay_data pd.DataFrame({ type :[ 欣赏 , 付款 ], num :[uv,pv_pay_num]})pv_pay_data[ conversion_rates ] (round((pv_pay_data[ num ] / pv_pay_data[ num ][0]),4) * 100) attr1 list(pv_pay_data.type)values1 list(pv_pay_data.conversion_rates)data1 [[attr1[i], values1[i]] for i in range(len(attr1))] # 用户动作转化漏斗可视化pv_pay (Funnel(opts.InitOpts(width 600px , height 300px )) .add( series_name , data_pair data1, gap 2, tooltip_opts opts.TooltipOpts(trigger item , formatter {b} : {c}% ), label_opts opts.LabelOpts(is_show True, position inside ), itemstyle_opts opts.ItemStyleOpts(border_color #fff , border_width 1) .set_global_opts(title_opts opts.TitleOpts(title 用户动作转化漏斗图 ))pv_pay.render_notebook() pv - cart - pay pv_cart_df pd.merge(left df_pv, right df_cart, how inner , on [ user_id , sku_id ], suffixes ( _pv , _cart )) pv_cart_df pv_cart_df[pv_cart_df[ action_time_pv ] pv_cart_df[ action_time_cart ]]pv_cart_df pv_cart_df[~pv_cart_df[ user_id ].isin(df_fav_uid)] pv_cart_pay_df pd.merge(left pv_cart_df, right df_pay, how inner , on [ user_id , sku_id ]) pv_cart_pay_df pv_cart_pay_df[pv_cart_pay_df[ action_time_cart ] pv_cart_pay_df[ action_time ]] uv behavior[ user_id ].nunique()pv_cart_num pv_cart_df[ user_id ].nunique()pv_cart_pay_num pv_cart_pay_df[ user_id ].nunique()pv_cart_pay_data pd.DataFrame({ type :[ 欣赏 , 加购 , 付款 ], num :[uv,pv_cart_num,pv_cart_pay_num]})pv_cart_pay_data[ conversion_rates ] (round((pv_cart_pay_data[ num ] / pv_cart_pay_data[ num ][0]),4) * 100) attr2 list(pv_cart_pay_data.type)values2 list(pv_cart_pay_data.conversion_rates)data2 [[attr2[i], values2[i]] for i in range(len(attr2))] # 用户动作转化漏斗可视化pv_cart_buy (Funnel(opts.InitOpts(width 600px , height 300px )) .add( series_name , data_pair data2, gap 2, tooltip_opts opts.TooltipOpts(trigger item , formatter {b} : {c}% ), label_opts opts.LabelOpts(is_show True, position inside ), itemstyle_opts opts.ItemStyleOpts(border_color #fff , border_width 1) .set_global_opts(title_opts opts.TitleOpts(title 用户动作转化漏斗图 ))pv_cart_buy.render_notebook() pv - fav - pay pv_fav_df pd.merge(left df_pv, right df_fav, how inner , on [ user_id , sku_id ], suffixes ( _pv , _fav )) pv_fav_df pv_fav_df[pv_fav_df[ action_time_pv ] pv_fav_df[ action_time_fav ]]pv_fav_df pv_fav_df[~pv_fav_df[ user_id ].isin(df_cart_uid)] pv_fav_pay_df pd.merge(left pv_fav_df, right df_pay, how inner , on [ user_id , sku_id ]) pv_fav_pay_df pv_fav_pay_df[pv_fav_pay_df[ action_time_fav ] pv_fav_pay_df[ action_time ]] uv behavior[ user_id ].nunique()pv_fav_num pv_fav_df[ user_id ].nunique()pv_fav_pay_num pv_fav_pay_df[ user_id ].nunique()pv_fav_pay_data pd.DataFrame({ type :[ 欣赏 , 珍藏 , 付款 ], num :[uv,pv_fav_num,pv_fav_pay_num]})pv_fav_pay_data[ conversion_rates ] (round((pv_fav_pay_data[ num ] / pv_fav_pay_data[ num ][0]),4) * 100) attr3 list(pv_fav_pay_data.type)values3 list(pv_fav_pay_data.conversion_rates)data3 [[attr3[i], values3[i]] for i in range(len(attr3))] # 用户动作转化漏斗可视化pv_fav_buy (Funnel(opts.InitOpts(width 600px , height 300px )) .add( series_name , data_pair data3, gap 2, tooltip_opts opts.TooltipOpts(trigger item , formatter {b} : {c}% ), label_opts opts.LabelOpts(is_show True, position inside ), itemstyle_opts opts.ItemStyleOpts(border_color #fff , border_width 1) .set_global_opts(title_opts opts.TitleOpts(title 用户动作转化漏斗图 ))pv_fav_buy.render_notebook() pv - fav - cart - pay pv_fav pd.merge(left df_pv, right df_fav, how inner , on [ user_id , sku_id ], suffixes ( _pv , _fav )) pv_fav pv_fav[pv_fav[ action_time_pv ] pv_fav[ action_time_fav ]] pv_fav_cart pd.merge(left pv_fav, right df_cart, how inner , on [ user_id , sku_id ]) pv_fav_cart pv_fav_cart[pv_fav_cart[ action_time_fav ] pv_fav_cart[ action_time ]] pv_fav_cart_pay pd.merge(left pv_fav_cart, right df_pay, how inner , on [ user_id , sku_id ], suffixes ( _cart , _pay )) pv_fav_cart_pay pv_fav_cart_pay[pv_fav_cart_pay[ action_time_cart ] pv_fav_cart_pay[ action_time_pay ]] uv behavior[ user_id ].nunique()pv_fav_n pv_fav[ user_id ].nunique()pv_fav_cart_n pv_fav_cart[ user_id ].nunique()pv_fav_cart_pay_n pv_fav_cart_pay[ user_id ].nunique()pv_fav_cart_pay_data pd.DataFrame({ type :[ 欣赏 , 珍藏 , 加购 , 付款 ], num :[uv,pv_fav_n,pv_fav_cart_n,pv_fav_cart_pay_n]})pv_fav_cart_pay_data[ conversion_rates ] (round((pv_fav_cart_pay_data[ num ] / pv_fav_cart_pay_data[ num ][0]),4) * 100) attr4 list(pv_fav_cart_pay_data.type)values4 list(pv_fav_cart_pay_data.conversion_rates)data4 [[attr4[i], values4[i]] for i in range(len(attr4))] # 用户动作转化漏斗可视化pv_fav_buy (Funnel(opts.InitOpts(width 600px , height 300px )) .add( series_name , data_pair data4, gap 2, tooltip_opts opts.TooltipOpts(trigger item , formatter {b} : {c}% ), label_opts opts.LabelOpts(is_show True, position inside ), itemstyle_opts opts.ItemStyleOpts(border_color #fff , border_width 1) .set_global_opts(title_opts opts.TitleOpts(title 用户动作转化漏斗图 ))pv_fav_buy.render_notebook()

分歧途径用户破费时光隔断分解

pv - cart - pay pcp_interval pv_cart_pay_df.groupby([ user_id , sku_id ]).apply(lambda x: (x.action_time.min() - x.action_time_cart.min())).reset_index() pcp_interval[ interval ] pcp_interval[0].apply(lambda x: x.seconds) / 3600pcp_interval[ interval ] pcp_interval[ interval ].apply(lambda x: math.ceil(x)) fig, ax plt.subplots(figsize [16,6])sns.countplot(pcp_interval[ interval ],palette Set1 )for p in ax.patches: ax.annotate( {:.2f}% .format(100*p.get_height()/len(pcp_interval[ interval ])), (p.get_x() 0.1, p.get_height() 100))ax.set_yscale( log )plt.title( pv-cart-pay途径用户破费时光隔断 ) pv - fav - pay pfp_interval pv_fav_pay_df.groupby([ user_id , sku_id ]).apply(lambda x: (x.action_time.min() - x.action_time_fav.min())).reset_index() pfp_interval[ interval ] pfp_interval[0].apply(lambda x: x.seconds) / 3600pfp_interval[ interval ] pfp_interval[ interval ].apply(lambda x: math.ceil(x)) fig, ax plt.subplots(figsize [16,6])sns.countplot(pfp_interval[ interval ],palette Set1 )for p in ax.patches: ax.annotate( {:.2f}% .format(100*p.get_height()/len(pfp_interval[ interval ])), (p.get_x() 0.1, p.get_height() 10))ax.set_yscale( log )plt.title( pv-fav-pay途径用户破费时光隔断 )

两种途径下大全体用户均正在4小时内告竣了支拨 大全体用户的购物梦想很清爽 也侧面阐明了网站的商品分类结构以及购物结算办法较为正当。

# SQL# 漏斗图SELECT type, COUNT(DISTINCT user_id) user_numFROM behavior_sqlGROUP BY typeORDER BY COUNT(DISTINCT user_id) DESCSELECT COUNT(DISTINCT b.user_id) AS pv_fav_num,COUNT(DISTINCT c.user_id) AS pv_fav_pay_num((SELECT DISTINCT user_id, sku_id, action_time FROM users WHERE type pv ) AS aLEFT JOIN(SELECT DISTINCT user_id, sku_id, action_time FROM users WHERE type fav AND user_id NOT IN (SELECT DISTINCT user_idFROM behavior_sqlWHERE type cart )) AS bON a.user_id b.user_id AND a.sku_id b.sku_id AND a.action_time b.action_timeLEFT JOIN(SELECT DISTINCT user_id,sku_id,item_category,times_new FROM users WHERE behavior_type pay ) AS cON b.user_id c.user_id AND b.sku_id c.sku_id AND AND b.action_time c.action_time)

较为四种分歧的转化办法 最无效的转化途径为欣赏直接付款转化率为21.46% 其次为欣赏加购付款 转化率为12.47% 也许发明随着结算办法越来越繁复转化率越来越低。加购的办法比珍藏采办的办法转化率要高 推其缘由为购物车接口投入麻烦且也许做分歧商家比价用 而珍藏则须要更噜苏的操作才也许检察到商品 所以转化率较低。

也许优化商品搜寻功能 进步商品搜寻确切度、易用性 削减用户搜寻时光。根据用户喜欢正在首页施行商品引荐 优化重排商品确定揭示页 进步主顾下单理想 供给一键购物等简化购物方法的功能 客服也也许寄望加购及存眷用户 合时推出优惠甜头适时回答用户课题 启发用户采办以进一步进步转化率。

对付用户破费时光隔断 也许经过限时领券采办、限时特惠代价等进一步缩小用户付款时光 进步定单量。

5. 用户存储率分解 #存储率first_day datetime.date(datetime.strptime( 2018-03-30 , %Y-%m-%d ))fifth_day datetime.date(datetime.strptime( 2018-04-03 , %Y-%m-%d ))tenth_day datetime.date(datetime.strptime( 2018-04-08 , %Y-%m-%d ))fifteenth_day datetime.date(datetime.strptime( 2018-04-13 , %Y-%m-%d ))#第一天新用户数user_num_first behavior[behavior[ date ] first_day][ user_id ].to_frame()#第五天存储用户数user_num_fifth behavior[behavior[ date ] fifth_day ][ user_id ].to_frame()#第十存储用户数user_num_tenth behavior[behavior[ date ] tenth_day][ user_id ].to_frame()#第十五天存储用户数user_num_fifteenth behavior[behavior[ date ] fifteenth_day][ user_id ].to_frame() #第五天存储率fifth_day_retention_rate round((pd.merge(user_num_first, user_num_fifth).nunique()) / (user_num_first.nunique()),4).user_id#第十天存储率tenth_day_retention_rate round((pd.merge(user_num_first, user_num_tenth ).nunique()) / (user_num_first.nunique()),4).user_id#第十五天存储率fifteenth_day_retention_rate round((pd.merge(user_num_first, user_num_fifteenth).nunique()) / (user_num_first.nunique()),4).user_id retention_rate pd.DataFrame({ n往后存储率 :[ 第五天存储率 , 第十天存储率 , 第十五天存储率 ], Rate :[fifth_day_retention_rate,tenth_day_retention_rate,fifteenth_day_retention_rate]}) # 存储率可视化fig, ax plt.subplots(figsize [16,6])sns.barplot(x n往后存储率 , y Rate , data retention_rate, palette Set1 )x list(range(0,3))for a,b in zip(x,retention_rate[ Rate ]): plt.text(a, b 0.001, %.2f%% % (b*100), ha center , va bottom ,fontsize 12)plt.title( 用户存储率 )

存储率反应了产物质量以及保全用户的才略 根据Facebook平台风行出存储率“40–20–10”法则 法则中的数字示意的是次日存储率、第7日存储率以及第30日存储率 统计周期内第五日存储率为22.81% 第15日存储率为17.44% 反应出平台的用户依附性较高 也因平台繁华一经到达牢靠阶段 用户保全率没有会产生较大稳定 数据量渊博的状况下也许以年为单元 算计按月的存储率。要正当设计动态推送 推出报到有奖等体制进步用户粘性 进一步进步存储率。

# SQL#n往后存储率 (挂号后的n往后还登录的用户数)/第一天新增总用户数create table retention_rate as select count(distinct user_id) as user_num_first from behavior_sqlwhere date 2018-03-30 alter table retention_rate add column user_num_fifth INTEGER;update retention_rate set user_num_fifth (select count(distinct user_id) from behavior_sqlwhere date 2018-04-03 and user_id in (SELECT user_id FROM behavior_sqlWHERE date 2018-03-30 alter table retention_rate add column user_num_tenth INTEGER;update retention_rate set user_num_tenth (select count(distinct user_id) from behavior_sqlwhere date 2018-04-08 and user_id in (SELECT user_id FROM behavior_sqlWHERE date 2018-03-30 alter table retention_rate add column user_num_fifteenth INTEGER;update retention_rate set user_num_fifteenth (select count(distinct user_id) from behavior_sqlwhere date 2018-04-13 and user_id in (SELECT user_id FROM behavior_sqlWHERE date 2018-03-30 SELECT CONCAT(ROUND(100*user_num_fifth/user_num_first,2), % )AS fifth_day_retention_rate,CONCAT(ROUND(100*user_num_tenth/user_num_first,2), % )AS tenth_day_retention_rate,CONCAT(ROUND(100*user_num_fifteenth/user_num_first,2), % )AS fifteenth_day_retention_ratefrom retention_rate; 6. 商品销量分解 # 商品总额behavior[ sku_id ].nunique() # OUTPUT 239007 # 商品被购前孕育平衡操作次数sku_df behavior[behavior[ sku_id ].isin(behavior[behavior[ type ] pay ][ sku_id ].unique())].groupby( sku_id )[ type ].value_counts().unstack(fill_value 0)sku_df[ total ] sku_df.sum(axis 1)sku_df[ avg_beha ] round((sku_df[ total ] / sku_df[ pay ]), 2) fig, ax plt.subplots(figsize [8,6])sns.scatterplot(x avg_beha , y pay , data sku_df, palette Set1 )ax.set_xscale( log )ax.set_yscale( log )plt.xlabel( 平衡操作次数 )plt.ylabel( 销量 )

左下角操作少采办少 属于冷门采办频次较低的产物。

左上角操作少采办多 属于快消类产物 可挑选品牌少 小量品牌垄断的行业。

右下角操作多采办少 品牌多 不过采办频次低 应为可贵东西类。

右上角操作多采办多 公共品牌 可选多 被采办频率高。

# 商品销量排行sku_num (behavior[behavior[ type ] pay ].groupby( sku_id )[ type ].count().to_frame() .rename(columns { type : total }).reset_index())# 销量大于1000的商品topsku sku_num[sku_num[ total ] 1000].sort_values(by total ,ascending False)# 单个用户共采办商品种数sku_num_per_user (behavior[behavior[ type ] pay ]).groupby([ user_id ])[ sku_id ].nunique() topsku.set_index( sku_id ).style.bar(color skyblue ,subset [ total ])

正在算计周期内定单数均攻破1000以上的公有13款产物 个中152092这款产物定单数最高为1736. 推出商品配合有优惠等 进步单个用户采办产物种数。

# SQL# sku销量排行SELECT sku_id, COUNT(type) sku_num FROM behavior_sql WHERE type pay GROUP BY sku_idHAVING sku_num 1000ORDER BY sku_num DESC; 7. RFM用户分层 #RFM#因为缺乏M 金额 列 仅经过R 迩来一次采办时光 以及F 破费频次 对于用户施行价值分解buy_group behavior[behavior[ type ] pay ].groupby( user_id )[ date ] #将2018-04-13算作每个用户最终一次采办时光来处置final_day datetime.date(datetime.strptime( 2018-04-14 , %Y-%m-%d )) #迩来一次购物时光recent_buy_time buy_group.apply(lambda x:final_day-x.max())recent_buy_time recent_buy_time.reset_index().rename(columns { date : recent })recent_buy_time[ recent ] recent_buy_time[ recent ].map(lambda x:x.days) #近十五天内购物频次buy_freq buy_group.count().reset_index().rename(columns { date : freq }) RFM pd.merge(recent_buy_time,buy_freq,on user_id ) RFM[ R ] pd.qcut(RFM.recent,2,labels [ 1 , 0 ])#天数小标签为1天数大标签为0RFM[ F ] pd.qcut(RFM.freq.rank(method first ),2,labels [ 0 , 1 ])#频次大标签为1频次小标签为0 RFM[ RFM ] RFM[ R ].astype(int).map(str) RFM[ F ].astype(int).map(str) dict_n { 01 : 主要维持客户 , 11 : 主要价值客户 , 10 : 主要挽留客户 , 00 : 普通繁华客户 } #用户标签RFM[ 用户等第 ] RFM[ RFM ].map(dict_n) RFM_pie RFM[ 用户等第 ].value_counts().reset_index()RFM_pie[ Rate ] RFM_pie[ 用户等第 ] / RFM_pie[ 用户等第 ].sum() fig, ax plt.subplots(figsize [16,6])plt.pie(RFM_pie[ Rate ], labels RFM_pie[ index ], startangle 90,autopct %1.2f%% , counterclock False,colors [ yellowgreen , gold , lightskyblue , lightcoral ])plt.axis( square )plt.title( RFM用户分层 )

分歧类别用户占比分裂较小 应选拔主要价值各户的占比 减小普通繁华客户的占比。 经过RFM模子对于用户价值施行分类 对于分歧价值用户应采用分歧的经营政策 对付主要价值客户来讲 要进步该全体用户的中意度 办事进级 散发稀奇甜头 增大该全体用户存储率 正在做经营扩张时也要赠给稀奇存眷 避免引升引户反感。 对付主要维持客户 他们购物频率较高 但迩来一段时光没有破费 也许推送相干其他商品 散发优惠卷、赠品以及匆匆销信息等 唤回该全体用户。 对付主要挽留客户 他们迩来破费过 但购物频率较低 也许经过问卷有礼的办法找出其对于平台的怨恨 选拔购物感受 增大用户粘性。 对付普通繁华客户 做到按期发送邮件或短信唤回 尽力将其转化为主要维持客户或主要挽留客户。

# SQL# RFMCREATE VIEW RF_table ASSELECT user_id, DATEDIFF( 2018-04-14 ,MAX(date)) AS R_days,COUNT(*) AS F_countFROM behavior_sql WHERE type pay GROUP BY user_id;SELECT AVG(R_days), AVG(F_count)FROM RF_tablecreate view RF_ layer asSELECT user_id, (CASE WHEN R_days 7.1697 THEN 1 ELSE 0 END) AS R,(CASE WHEN F_count 1.2129 THEN 0 ELSE 1 END) AS FFROM RF_tableORDER BY user_id DESC;create view customer_value asselect user_id, R, F, (CASE WHEN R 1 and F 1 THEN 主要价值客户 WHEN R 1 and F 0 THEN 主要挽留客户 WHEN R 0 and F 1 THEN 主要维持客户 WHEN R 0 and F 0 THEN 普通繁华客户 ELSE 0 END) as 用户价值FROM RF_ layer;SELECT * FROM customer_value; 五. 归纳

1.也许推广渠道扩张参预 施行精确人群扩张 推出新用户甜头 排斥新用户 推出团购、瓜分有礼等震动匆匆进老带新 推出匆匆销震动刺激老用户 进步访客数以及欣赏量。进步产物质量 进步商品确定页对于用户的排斥力 升高跳失率。

2.根据用户操作随时光改变纪律来进步营销震动 使震动更轻易触达用户 正在用户拜候顶峰期多推送用户感趣味商品。

3.复购率较低 阐明用户对于平台购物感受怨恨 须要找出用户槽点 进步用户购物中意度 优化商品推送体制 对于老用户予以稀奇甜头 进步他们所享用权力。转化率也偏低 须要改善平台搜寻体制升高进步搜寻效用 优化购物途径升高购物繁复度 改善商品确定信息揭示办法便于信息的猎取。

4.存储率相对于牢靠 为进一步进步存储率 也许按期推出秒杀震动 推出专享优惠券 推出报到有礼关节 推广用户欣赏时长以及深度 进步用户粘性。分解用户对于产物的可靠利用感化与评介 进步用户诚恳度。

5.经过RFM对于用户施行分层 将用户从一个大伙拆分成性格分明的群体 有针对于性的采用分歧的营销方式施行精确化营销 用有限的公司资源优先办事于公司最主要的客户。

收起 进展全文
本文地址:http://yz.ziyouea.com/p/38437.html
版权声明:本站文章来自网络,如有违规侵权请联系我们下架。