一、背景描述
小红书是一个生活方式平台和消费决策入口,是当前著名的电商平台。和其他电商平台不同,小红从社区起家。在小红书社区,用户通过文字、图片、视频笔记的分享,记录了这个时代年轻人的正能量和美好生活。
二、方案描述
通过数据分析进行锁定最有价值的用户,有针对性的提供有差异性的服务,吸引更多更有价值的用户使用小红书并下单,从而提高销售额。
三、数据说明
数据集包含29452条数据,数据字段说明
Revenue 用户下单的购买金额
3rd_party_stores 用户过往在app中从第三方购买的数量,为0则代表只在自营商品中购买
Gender 性别 1:男 0:女 未知则空缺
Engaged_last_30 最近30天在app上有参与重点活动(讨论,卖家秀)
Lifecycle 生命周期分为A,B,C (分别对应注册6个月内,1年内,2年内)
days_since_last_order 最近一次下单距今的天数 (小于1则代表当天有下单)
previous_order_amount 以往累积的用户购买金额
四、数据探索
In [106]:
import pandas as pdimport numpy as npimport randomfrom matplotlib import pyplot as pltfrom pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.charts import Boxplotfrom pyecharts.charts import Scatterfrom pyecharts.charts import EffectScatterfrom pyecharts.globals import ThemeType as timport matplotlibimport seaborn as sns%matplotlib inlineplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False sns.set_style('white',{"font.sans-serif":['simhei','arial']})pd.set_option("display.max_column",None)pd.set_option("display.max_row",None)
In [107]:
#导入数据df=pd.read_csv('D:\\Data analysis\\kesci\\31_l2_week2.csv')df.head()
Out[107]:
revenue | gender | age | engaged_last_30 | lifecycle | days_since_last_order | previous_order_amount | 3rd_party_stores | |
---|---|---|---|---|---|---|---|---|
0 | 72.98 | 1.0 | 59.0 | 0.0 | B | 4.26 | 2343.870 | 0 |
1 | 200.99 | 1.0 | 51.0 | 0.0 | A | 0.94 | 8539.872 | 0 |
2 | 69.98 | 1.0 | 79.0 | 0.0 | C | 4.29 | 1687.646 | 1 |
3 | 649.99 | NaN | NaN | NaN | C | 14.90 | 3498.846 | 0 |
4 | 83.59 | NaN | NaN | NaN | C | 21.13 | 3968.490 | 4 |
In [110]:
#查看数据信息df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 29452 entries, 0 to 29451 Data columns (total 8 columns): revenue 29452 non-null float64 gender 17723 non-null float64 age 16716 non-null float64 engaged_last_30 17723 non-null float64 lifecycle 29452 non-null object days_since_last_order 29452 non-null float64 previous_order_amount 29452 non-null float64 3rd_party_stores 29452 non-null int64 dtypes: float64(6), int64(1), object(1) memory usage: 1.8+ MB
In [111]:
#数据总体情况df.shape
Out[111]:
(29452, 8)
In [112]:
#查看数据是否有重复df.duplicated().sum()
Out[112]:
1
In [113]:
#查看数据是否有缺失值df.isnull().sum()
Out[113]:
revenue 0 gender 11729 age 12736 engaged_last_30 11729 lifecycle 0 days_since_last_order 0 previous_order_amount 0 3rd_party_stores 0 dtype: int64
‘gender’,‘age’,‘engaged_last_30’缺失值有点多
In [115]:
#填充‘gender’,‘age’,‘engaged_last_30’#由于填充的值的数量有点多,使填充后的数据与实际情况会有差异,故在分析过程中要考虑到这个因素df['age'].fillna(method='pad', inplace=True) #填充前一条数据df['gender'].fillna(method='bfill', inplace=True) #填充后一条数据df['engaged_last_30'].fillna(method='pad', inplace=True) #填充前一条数据df.head()
Out[115]:
revenue | gender | age | engaged_last_30 | lifecycle | days_since_last_order | previous_order_amount | 3rd_party_stores | |
---|---|---|---|---|---|---|---|---|
0 | 72.98 | 1.0 | 59.0 | 0.0 | B | 4.26 | 2343.870 | 0 |
1 | 200.99 | 1.0 | 51.0 | 0.0 | A | 0.94 | 8539.872 | 0 |
2 | 69.98 | 1.0 | 79.0 | 0.0 | C | 4.29 | 1687.646 | 1 |
3 | 649.99 | 1.0 | 79.0 | 0.0 | C | 14.90 | 3498.846 | 0 |
4 | 83.59 | 1.0 | 79.0 | 0.0 | C | 21.13 | 3968.490 | 4 |
In [116]:
#查看数据类型df.dtypes
Out[116]:
revenue float64 gender float64 age float64 engaged_last_30 float64 lifecycle object days_since_last_order float64 previous_order_amount float64 3rd_party_stores int64 dtype: object
In [117]:
#去重df.drop_duplicates(inplace=True)df.reset_index(drop=True,inplace=True)df.head()
Out[117]:
revenue | gender | age | engaged_last_30 | lifecycle | days_since_last_order | previous_order_amount | 3rd_party_stores | |
---|---|---|---|---|---|---|---|---|
0 | 72.98 | 1.0 | 59.0 | 0.0 | B | 4.26 | 2343.870 | 0 |
1 | 200.99 | 1.0 | 51.0 | 0.0 | A | 0.94 | 8539.872 | 0 |
2 | 69.98 | 1.0 | 79.0 | 0.0 | C | 4.29 | 1687.646 | 1 |
3 | 649.99 | 1.0 | 79.0 | 0.0 | C | 14.90 | 3498.846 | 0 |
4 | 83.59 | 1.0 | 79.0 | 0.0 | C | 21.13 | 3968.490 | 4 |
In [118]:
# 描述性分析df.describe()
Out[118]:
revenue | gender | age | engaged_last_30 | days_since_last_order | previous_order_amount | 3rd_party_stores | |
---|---|---|---|---|---|---|---|
count | 29452.000000 | 29451.000000 | 29452.000000 | 29452.000000 | 29452.000000 | 29452.000000 | 29452.000000 |
mean | 398.288037 | 0.950019 | 60.075615 | 0.073238 | 7.711348 | 2348.904830 | 2.286059 |
std | 960.251728 | 0.217910 | 14.876211 | 0.260531 | 6.489289 | 2379.774213 | 3.538219 |
min | 0.020000 | 0.000000 | 18.000000 | 0.000000 | 0.130000 | 0.000000 | 0.000000 |
25% | 74.970000 | 1.000000 | 50.000000 | 0.000000 | 2.190000 | 773.506250 | 0.000000 |
50% | 175.980000 | 1.000000 | 59.000000 | 0.000000 | 5.970000 | 1655.980000 | 0.000000 |
75% | 499.990000 | 1.000000 | 70.000000 | 0.000000 | 11.740000 | 3096.766500 | 3.000000 |
max | 103466.100000 | 1.000000 | 99.000000 | 1.000000 | 23.710000 | 11597.900000 | 10.000000 |
五、数据分析
In [119]:
# 年龄分组listbins=[0,20,25,30,35,40,45,50,55,60,100]listlabel=['20以下','20-24','25-29','30-34','35-39','40-44','45-49','50-54','55-59','60以上']df['age_group']=pd.cut(df['age'],bins=listbins,labels=listlabel,right=False,include_lowest = True)df.head()
Out[119]:
revenue | gender | age | engaged_last_30 | lifecycle | days_since_last_order | previous_order_amount | 3rd_party_stores | age_group | |
---|---|---|---|---|---|---|---|---|---|
0 | 72.98 | 1.0 | 59.0 | 0.0 | B | 4.26 | 2343.870 | 0 | 55-59 |
1 | 200.99 | 1.0 | 51.0 | 0.0 | A | 0.94 | 8539.872 | 0 | 50-54 |
2 | 69.98 | 1.0 | 79.0 | 0.0 | C | 4.29 | 1687.646 | 1 | 60以上 |
3 | 649.99 | 1.0 | 79.0 | 0.0 | C | 14.90 | 3498.846 | 0 | 60以上 |
4 | 83.59 | 1.0 | 79.0 | 0.0 | C | 21.13 | 3968.490 | 4 | 60以上 |
In [120]:
# 距最近一次下单天数分组listbins=[0,1,5,10,15,20,25]listlabel=['当天','1-5','5-10','10-15','15-20','20以上']df['dslo_group']=pd.cut(df[' days_since_last_order '],right=False,bins=listbins,labels=listlabel,include_lowest = True)df.head()
Out[120]:
revenue | gender | age | engaged_last_30 | lifecycle | days_since_last_order | previous_order_amount | 3rd_party_stores | age_group | dslo_group | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 72.98 | 1.0 | 59.0 | 0.0 | B | 4.26 | 2343.870 | 0 | 55-59 | 1-5 |
1 | 200.99 | 1.0 | 51.0 | 0.0 | A | 0.94 | 8539.872 | 0 | 50-54 | 当天 |
2 | 69.98 | 1.0 | 79.0 | 0.0 | C | 4.29 | 1687.646 | 1 | 60以上 | 1-5 |
3 | 649.99 | 1.0 | 79.0 | 0.0 | C | 14.90 | 3498.846 | 0 | 60以上 | 10-15 |
4 | 83.59 | 1.0 | 79.0 | 0.0 | C | 21.13 | 3968.490 | 4 | 60以上 | 20以上 |
5.1 性别
In [121]:
#男女比例df['gender'].value_counts()
Out[121]:
1.0 27979 0.0 1472 Name: gender, dtype: int64
男女比例不均衡,女性顾客的数量太少了,这是真实情况还是数据采集有问题?
In [122]:
#不同性别的顾客的购买平均金额对比ge_df =df.groupby("gender")['previous_order_amount'].mean().sort_values()ge_df
Out[122]:
gender 0.0 1798.296829 1.0 2377.881596 Name: previous_order_amount, dtype: float64
In [123]:
ge_bar=Bar(init_opts=opts.InitOpts(theme="vintage",width="600px", height="300px"))ge_bar.add_xaxis(["女性","男性"])ge_bar.add_yaxis('',np.round(ge_df.values,2).tolist())ge_bar.set_global_opts(title_opts=opts.TitleOpts(title="不同性别的顾客的购买平均金额对比",pos_left='center'), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(name="性别"), yaxis_opts=opts.AxisOpts(name="购买平均金额/元"))ge_bar.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[123]:
In [124]:
#不同性别的顾客的购买累计金额箱线图ge_poa=list(df.groupby("gender")['previous_order_amount'])ge_poa[0][1]ge_poa_box = Boxplot(init_opts=opts.InitOpts(theme="vintage",width="500px", height="300px"))ge_poa_box.add_xaxis(["女性","男性"])ge_poa_prepare=ge_poa_box.prepare_data([list(ge_poa[i][1])for i in range(0,2)])ge_poa_box.add_yaxis("",ge_poa_prepare)ge_poa_box.set_global_opts(title_opts=opts.TitleOpts(title="不同性别的顾客的购买金额对比",pos_left='center'), xaxis_opts=opts.AxisOpts(name="性别"), yaxis_opts=opts.AxisOpts(name="购买金额/元"))ge_poa_box.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[124]:
结论1:男性的购买平均金额高于女性,但是女性的样本量远远低于男性。
注意事项:小红书注册时的性别是用户自己设定的,不一定是真实的,所以不能草率做出决定!
5.2 年龄段
In [130]:
#各年龄段的人数占比df['age_group'].value_counts()
Out[130]:
60以上 14656 55-59 3753 50-54 3748 45-49 3034 40-44 1986 35-39 1138 30-34 648 25-29 358 20-24 103 20以下 28 Name: age_group, dtype: int64
各年龄段的样本量不均衡,特别是30岁以下的年轻人群样本太少了
In [131]:
#不同年龄段的顾客的购买平均金额对比ag_df =df.groupby("age_group")['previous_order_amount'].mean().sort_values()ag_df
Out[131]:
age_group 20-24 1936.440573 30-34 1985.383650 25-29 2187.309804 60以上 2255.721274 35-39 2257.505216 40-44 2424.379725 50-54 2490.213848 45-49 2491.479405 55-59 2527.986959 20以下 3113.965179 Name: previous_order_amount, dtype: float64
In [132]:
age_bar=Bar(init_opts=opts.InitOpts(theme="vintage",width="600px", height="300px"))age_bar.add_xaxis(ag_df.index.tolist())age_bar.add_yaxis('',np.round(ag_df.values,2).tolist())age_bar.set_global_opts(title_opts=opts.TitleOpts(title="不同年龄段的顾客的购买平均金额对比",pos_left='center'), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(name="年龄段"), yaxis_opts=opts.AxisOpts(name="购买平均金额/元"))age_bar.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[132]:
In [133]:
#不同年龄段的顾客的购买累计金额箱线图age_poa=list(df.groupby("age_group")['previous_order_amount'])age_poa_box = Boxplot(init_opts=opts.InitOpts(theme="chalk",width="800px", height="400px"))age_poa_box.add_xaxis(list(age_poa[i][0] for i in range(0,10)))age_poa_prepare=age_poa_box.prepare_data([list(age_poa[i][1])for i in range(0,10)])age_poa_box.add_yaxis("",age_poa_prepare)age_poa_box.set_global_opts(title_opts=opts.TitleOpts(title="不同年龄段的顾客的购买金额对比",pos_left='center'), xaxis_opts=opts.AxisOpts(name="年龄段"), yaxis_opts=opts.AxisOpts(name="购买金额/元"))age_poa_box.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[133]:
结论2:
20岁以下的顾客购买金额最大,但是20岁以下的样本太少,存在偶然性,应该增加20岁以下年龄段的数据,提高准确性;
25-59年龄段的顾客购买金额差别不大。
注意事项:小红书注册时的年龄是用户自己设定的,不一定是真实的,所以不能草率做出决定!
5.3 是否参与活动
In [134]:
#有无参加活动人数占比df['engaged_last_30'].value_counts()
Out[134]:
0.0 27295 1.0 2157 Name: engaged_last_30, dtype: int64
有无参加活动的样本量不均衡,参加活动的人数偏少
In [135]:
#是否参与活动对顾客购买平均金额影响el3_df =df.groupby('engaged_last_30')['previous_order_amount'].mean().sort_values()el3_bar=Bar(init_opts=opts.InitOpts(theme="dark",width="600px", height="300px"))el3_bar.add_xaxis(["参与重点活动","未参与重点活动"])el3_bar.add_yaxis('',np.round(el3_df.values,2).tolist())el3_bar.set_global_opts(title_opts=opts.TitleOpts(title="是否参与重点活动的顾客的购买平均金额对比",pos_left='center'), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(name="年龄段"), yaxis_opts=opts.AxisOpts(name="购买平均金额/元"))el3_bar.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[135]:
In [136]:
#是否参与活动的顾客购买累计金额箱线图el3_poa=list(df.groupby("engaged_last_30")['previous_order_amount'])el3_poa_box = Boxplot(init_opts=opts.InitOpts(theme="chalk",width="900px", height="400px"))el3_poa_box.add_xaxis(["参与重点活动","未参与重点活动"])el3_poa_prepare=age_poa_box.prepare_data([list(el3_poa[i][1])for i in range(0,2)])el3_poa_box.add_yaxis("",el3_poa_prepare)el3_poa_box.set_global_opts(title_opts=opts.TitleOpts(title="是否参与重点活动的顾客对应的购买金额",pos_left='center'), xaxis_opts=opts.AxisOpts(name="是否参与活动"), yaxis_opts=opts.AxisOpts(name="购买金额/元"))el3_poa_box.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[136]:
结论3:未参与活动的顾客消费金额高,但是参与活动的人数太少,具有偶然性
5.4 生命周期
In [137]:
#不同生命周期的顾客人数占比df['lifecycle'].value_counts()
Out[137]:
C 20201 B 5709 A 3542 Name: lifecycle, dtype: int64
注册两年内的顾客人数远远高于注册一年内和半年内的,说明存在大量注册后就没有再次使用小红书的用户,很有可能就流失了
In [44]:
#不同生命周期的顾客的购买平均金额对比lc_df =df.groupby('lifecycle')['previous_order_amount'].mean().sort_values()lc_bar=Bar(init_opts=opts.InitOpts(theme="chalk",width="800px", height="400px"))lc_bar.add_xaxis(lc_df.index.tolist())lc_bar.add_yaxis('',np.round(lc_df.values,2).tolist())lc_bar.set_global_opts(title_opts=opts.TitleOpts(title="不同生命周期的顾客的购买平均金额对比",pos_left='center'), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(name="生命周期"), yaxis_opts=opts.AxisOpts(name="购买平均金额/元"))lc_bar.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[44]:
In [45]:
#不同生命周期的顾客的购买金额箱线图lc_poa=list(df.groupby('lifecycle')['previous_order_amount'])lc_poa_box = Boxplot(init_opts=opts.InitOpts(theme="chalk",width="900px", height="400px"))lc_poa_box.add_xaxis(["A","B","C"])lc_poa_prepare=lc_poa_box.prepare_data([list(lc_poa[i][1])for i in range(0,3)])lc_poa_box.add_yaxis("",lc_poa_prepare)lc_poa_box.set_global_opts(title_opts=opts.TitleOpts(title="不同生命周期的顾客的购买金额",pos_left='center'), xaxis_opts=opts.AxisOpts(name="生命周期"), yaxis_opts=opts.AxisOpts(name="购买金额/元"))lc_poa_box.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[45]:
结论4:生命周期在6个月的顾客购买平均金额高,说明生命周期在6个月的顾客购买力稍强
5.5 距最近一次下单的间隔天数
In [138]:
#不同最近一次下单的间隔天数的顾客人数占比df['dslo_group'].value_counts()
Out[138]:
1-5 8994 5-10 6577 10-15 4982 当天 4167 15-20 2783 20以上 1949 Name: dslo_group, dtype: int64
最近一次下单的间隔天数分布均衡
In [139]:
# 5.1)距最近一次下单的间隔天数不同的顾客的购买平均金额对比dslo_df =df.groupby('dslo_group')['previous_order_amount'].mean().sort_values()dslo_df_es=EffectScatter(init_opts=opts.InitOpts(theme="chalk",width="900px", height="400px"))dslo_df_es.add_xaxis(dslo_df.index.tolist())dslo_df_es.add_yaxis('', np.round(dslo_df.values,2).tolist())dslo_df_es.set_global_opts(title_opts=opts.TitleOpts(title="不同间隔天数的顾客对应的购买平均金额",pos_left='center'), xaxis_opts=opts.AxisOpts(name="间隔天数"), yaxis_opts=opts.AxisOpts(name="购买平均金额/元"))dslo_df_es.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[139]:
In [140]:
# 5.2)距最近一次下单的间隔天数不同的顾客的购买金额箱线图dslo_poa=list(df.groupby('dslo_group')['previous_order_amount'])dslo_poa_box = Boxplot(init_opts=opts.InitOpts(theme="chalk",width="900px", height="400px"))dslo_poa_box.add_xaxis(list(dslo_poa[i][0] for i in range(0,6)))dslo_poa_prepare=dslo_poa_box.prepare_data([list(dslo_poa[i][1])for i in range(0,6)])dslo_poa_box.add_yaxis("",dslo_poa_prepare)dslo_poa_box.set_global_opts(title_opts=opts.TitleOpts(title="不同间隔天数的顾客对应的购买金额",pos_left='center'), xaxis_opts=opts.AxisOpts(name="间隔天数"), yaxis_opts=opts.AxisOpts(name="购买金额/元"))dslo_poa_box.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[140]:
结论5:间隔时间越短,购买平均金额更高
5.6 第三方购买数量
In [141]:
#不同第三方购买数量的顾客人数占比df['3rd_party_stores'].value_counts()
Out[141]:
0 16211 10 4237 1 2966 2 1882 3 1445 4 1015 5 983 6 314 7 215 8 126 9 58 Name: 3rd_party_stores, dtype: int64
没有在第三方购买的顾客占比高,但是还是有不少第三方购买的顾客
In [142]:
#在第三方购买数量不同的顾客的购买平均金额对比ps_df=df.groupby('3rd_party_stores')['previous_order_amount'].mean()ps_df_es = EffectScatter(init_opts=opts.InitOpts(theme="chalk",width="900px", height="400px"))ps_df_es.add_xaxis(ps_df.index.tolist())ps_df_es.add_yaxis('', np.round(ps_df.values,2).tolist())ps_df_es.set_global_opts(title_opts=opts.TitleOpts(title="在第三方购买数量不同的顾客的购买平均金额对比",pos_left='center'), xaxis_opts=opts.AxisOpts(name="第三方购买数量"), yaxis_opts=opts.AxisOpts(name="购买平均金额/元"))ps_df_es.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[142]:
In [143]:
#在第三方购买数量不同的顾客的购买金额箱线图ps_poa=list(df.groupby('3rd_party_stores')['previous_order_amount'])ps_poa_box = Boxplot(init_opts=opts.InitOpts(theme="chalk",width="900px", height="400px"))ps_poa_box.add_xaxis(list(ps_poa[i][0] for i in range(0,11)))ps_poa_prepare=dslo_poa_box.prepare_data([list(ps_poa[i][1])for i in range(0,11)])ps_poa_box.add_yaxis("",ps_poa_prepare)ps_poa_box.set_global_opts(title_opts=opts.TitleOpts(title="在第三方购买数量不同的顾客的购买金额",pos_left='center'), xaxis_opts=opts.AxisOpts(name="第三方购买数量"), yaxis_opts=opts.AxisOpts(name="购买金额/元"))ps_poa_box.render_notebook()
C:\ProgramData\Anaconda3\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :) super().__init__(init_opts=init_opts)
Out[143]:
结论6:没有在第三方购买的顾客消费金额最高。
六、提出增长方案
6.1 确定目标和量化指标
目标:提高消费金额
量化指标:消费金额的值
6.2 分析结论汇总:
1.性别
男女比例不均衡,女性顾客的数量太少了,这是真实情况还是数据采集有问题?
男性的购买平均金额高于女性,但是女性的样本量远远低于男性。
注意事项:小红书注册时的性别是用户自己设定的,不一定是真实的,所以不能草率做出决定!
2.年龄段
各年龄段的样本量不均衡,特别是30岁以下的年轻人群样本太少了;
20岁以下的顾客购买金额最大,但是20岁以下的样本太少;
25-59年龄段的顾客购买金额差别不大。
注意事项:小红书注册时的年龄是用户自己设定的,不一定是真实的,所以不能草率做出决定!
3.参加活动
有无参加活动的样本量不均衡,参加活动的人数偏少;
未参与活动的顾客消费金额高,但是参与活动的人数太少,具有偶然性。
4.注册生命周期
注册两年内的顾客人数远远高于注册一年内和半年内的,说明存在大量注册后就没有再次使用小红书的用户,很有可能就流失了;
生命周期在6个月的顾客购买平均金额高,说明生命周期在6个月的顾客购买力稍强。
5.最近一次下单的间隔天数
最近一次下单的间隔天数分布均衡;
间隔时间越短,购买平均金额更高。
6.第三方购买的顾客数量
没有在第三方购买的顾客占比高,但是还是有不少第三方购买的顾客;
没有在第三方购买的顾客消费金额最高。
6.3 提出假设
假设该数据集是真实可靠的;
女性的购买处于未开发阶段,还有很大的上升空间;
年轻群体还有很大的上升空间;
有无参加活动对销售额没有影响;
注册两年内的顾客处于睡眠状态,有很大的上升空间;
最近一次下单间隔时间越短的顾客有更强的购买力;
没有在第三方购买的顾客有更强的购买力。
6.4 提出增长方案
方案1:向年轻的女性顾客加大推送力度,且推送的商品是年轻的女性群体需要频次高的,比如化妆品等;
方案2:向注册两年内且半年内没有的顾客加大推送力度;
方案3:向最近一次下单间隔时间短的顾客加大推送力度;
方案4:向没有在第三方购买的顾客提高推送力度。
七、确定优先级
7.1 计算各个方案的投资回报(ROI)
由于不清楚公司的具体实际情况,这一步无法计算,这一步的计算需要根据企业可供给的资源和所预期的汇报来计算
需要考虑三个问题:1、需要投入多少?2、成功概率有多高?3、消费金额能增加多少?
7.2 选出投资回报最高的方案
选取投资回报最高的两个方案作为最后的销售额增长方案,假设为方案A和方案B。
八、开展实验(A/B测试)
将所有的流量分为三组,一组为对照组,一组实施方案A作为实验组一,一组实施方案B作为实验组二。
九、分析结果
对比三组流量最终得到的销售额
十、总结
通过数据分析,了解顾客群体的消费行为情况,并运用AB测试方法,有针对性地为目标顾客群体提供差异性服务,从而提高总体的销售额。
补充:
顾客的年龄和性别是注册时自定义的,与真实情况存在偏差;
数据样本中未提供地区、收入水平、职业、购物偏好等顾客属性,故使解决方案非常有局限性,无法更精准的去洞察顾客。








暂无数据