某电商用户行为分析 您所在的位置:网站首页 gmv数据是什么意思 某电商用户行为分析

某电商用户行为分析

2023-12-29 04:31| 来源: 网络整理| 查看: 265

目录

1. 明确项目背景和需求

项目目的:

分析思路:

2 数据探索(EDA)

2.1 数据集信息

2.2数据预览

2.2.1 new_user

 2.2.2 age

2.2.3 sex

2.2.4 market

 2.2.5 device

2.2.6 operative_system

 2.2.7 source

2.2.8 total_pages_visited

3.数据预处理(Data Processing)

3.1.1 异常值分析

3.1.2 缺失值分析(Miss value)

4.漏斗分析

4.1 漏斗分析:sex纬度​编辑

4.2 漏斗分析:device纬度

5. 特征工程

5.1 特征构建

5.2特征选择

 5.3 特征处理

 6. 建模

6.1 逻辑回归

6.1.1 划分训练集和测试集

6.1.2 用训练集训练模型 

6.1.3 用训练好的模型来预测测试集

6.2决策树

6.2.1划分训练集和测试集

6.2.2 用训练集训练模型

6.1.3 用训练好的模型来预测测试集

 7.调参

7.1 随机搜索模型进行调参

 7.2 重新进行建模

8.回到项目发散

8.1 用户浏览页面数

8.2 年龄​编辑

8.3 不同来源客户的转化率​编辑

 9.决策建议

9.1 提高UV

9.2 提高转化率

9.2.1 影响用户转化率的因素

9.2.2 漏斗分析

10.不足

1. 明确项目背景和需求 项目目的:

项目是为了通过对某电商用户的行为进行分析,从而找到提升GMV方法。

分析思路:

        项目GMV的拆解公式为:GMV=UV(独立访客数)* 用户下单转化率 * 客单价,由于数据集不涉及客单价相关的内容,故优化GMV主要考虑提高UV和提升转化率这两个方面。提高UV的方法就是拉新,这需要对我们的用户进行拆解,找出新客户的来源的主要渠道,拉来更多的新用户。提高转化率主要有两方面:一方面是提高转化率高的那群人的占比,这需要找出哪些因素(随机森林模型)影响了用户的转化率,另一方面是找出转化率的环节,看是否有异常,如果有就优化掉。

2 数据探索(EDA) 2.1 数据集信息

因列数太长,无法完全显示,故一一列出各列的含义: user_id :用户id new_user :是否新用户 是:1、否:0 age :用户年龄 sex :用户性别 market :用户所在市场级别 device :用户设备 operative_system :操作系统 source :来源 total_pages_visited :浏览页面总数 home_page : 浏览过主页的用户 listing_page : 浏览过列表页的用户 product_page : 浏览过产品详情页的用户 payment_page : 浏览过支付结算页的用户 payment_confirmation_page : 浏览过确认支付完成页的用户

NAN值代表用户未浏览该页面,为了方便后面的计算,此处替换为0.

# 数据清洗 # 将不同页面的nan值替换为0 for col in['home_page','listing_page','product_page','payment_page','confirmation_page']: user_info[col].fillna(0,inplace = True) user_info.head()

 可以看到已经转换成功了。

# 便于计算,利用正则表达式将page页面信息转化为数字 for col in ['home_page','listing_page','product_page','payment_page','confirmation_page']: user_info[col].replace(re.compile('page'),1,inplace=True) user_info.head()

 接下来通过info()了解数据类型,查看是否有缺失值(NAN)

可以看到性别、设备、操作系统、来源存在空值,后面需要进行处理。

最大年龄有123岁,属于异常值,还需进一步查看大于100岁的用户个数。

查看数据维度

查看最终转化人数 查看最终转化率

这是我们项目数据集得到的最终转化率2.4%。 

2.2数据预览 2.2.1 new_user plt.figure(figsize=(10,6),dpi=400 ) new_user = pd.DataFrame(user_info['new_user'].value_counts().reset_index(name= 'counts')) g = sns.barplot(x = 'index', y = 'counts',data = new_user) for index,row in new_user.iterrows(): g.text(row.name,row.counts,row.counts,color = 'black',ha = 'center') plt.xlabel('用户新老',fontsize=30) plt.ylabel('数量',fontsize=30) # width=0.1 plt.show()

 68475的新用户,31525万的老用户,为了直观的观察两者之间的比例,用饼图展示。

 2.2.2 age # age 年龄 选择用直方图观察,是连续型数值变量,所以可以用直方图展示 plt.figure(figsize=(8,6),dpi=400) sns.displot(user_info['age'])

 可以看到年龄基本集中在20~36岁,前面观察到的123基本可以确定为异常值了。

2.2.3 sex # 性别 plt.figure(figsize=(10,6),dpi = 400) sex = pd.DataFrame(user_info['sex'].value_counts().reset_index(name='counts')) g = sns.barplot(x = 'index',y='counts',data = sex) for index,row in sex.iterrows(): g.text(row.name,row.counts,row.counts,color = 'black',ha='center') plt.xlabel('用户性别') plt.ylabel('数量')

 女性的用户数更多,同样的,看看男女之间的比例是多少

sex = pd.DataFrame(user_info['sex'].value_counts()) labels = sex.index sizes = sex.values colors = ['green','c','gray','beige','darkkhaki','fuchsia'] explode = (0.05,0) patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors, labeldistance = 1.1,autopct='%2.0f%%',shadow=False, startangle = 90,pctdistance = 0.5) for t in l_text: t.set_size = 30 for t in p_text: t.set_size = 20 plt.axis('equal') plt.legend(loc='upper Right',bbox_to_anchor = (-0.1,1)) plt.grid() plt.show()

2.2.4 market # market 看一下市场,我们看到一线城市的比例明显高于其他城市 plt.figure(figsize=(10,6),dpi = 400) country = pd.DataFrame(user_info['market'].value_counts().reset_index(name='counts')) g = sns.barplot(x = 'index',y='counts',data = country) for index,row in country.iterrows(): g.text(row.name,row.counts,row.counts,color = 'black',ha='center') plt.xlabel('市场级别') plt.ylabel('数量')

 一线城市的用户数量明显多于2、3、4线城市。看看他们分别的占比

 2.2.5 device # device 设备 可以看到用手机登陆的,是比直接用桌面网页登陆的多 plt.figure(figsize=(20,8)) device = pd.DataFrame(user_info['device'].value_counts().reset_index(name ='counts')) g = sns.barplot(x = 'index',y='counts',data = device) for index,row in device.iterrows(): g.text(row.name,row.counts,row.counts,color = 'black',ha='center') plt.xlabel('用户设备') plt.ylabel('数量') plt.show()

用手机登陆的该电商的数量,是比直接用桌面网页登陆的多,看看占比。

2.2.6 operative_system # 操作系统,主流的三个操作系统 plt.figure(figsize=(20,8)) operative_system = pd.DataFrame(user_info['operative_system'].value_counts().reset_index(name ='counts')) g = sns.barplot(x = 'index',y='counts',data = operative_system) for index,row in operative_system.iterrows(): g.text(row.name,row.counts,row.counts,color = 'black',ha='center') plt.xlabel('用户操作系统') plt.ylabel('数量') plt.show()

用户使用的最多的还是目前主流的操作系统:windos、iOS、android。看看各类的占比。 

 2.2.7 source # source 用户来源 plt.figure(figsize=(20,8)) source = pd.DataFrame(user_info['source'].value_counts().reset_index(name ='counts')) g = sns.barplot(x = 'index',y='counts',data = source) for index,row in source.iterrows(): g.text(row.name,row.counts,row.counts,color = 'black',ha='center') plt.xlabel('用户来源') plt.ylabel('数量') plt.show()

Direct 代表直接通过网站或者app访问的用户,Seo通过搜索引擎进入电商网站的,Ads指用户通过广告途径进入我们页面。

2.2.8 total_pages_visited # 页面的访问次数 total_pages_visited plt.hist(user_info['total_pages_visited'],edgecolor = 'k' , alpha = 0.35) plt.title('页面浏览次数分布') plt.xlabel('页面浏览总数') plt.show()

 

访问页面数在5次以下的用户还是挺多的,这与前面得出的2%转化率相符。

3.数据预处理(Data Processing)

数据清洗:删除原始数据集中的无关数据,重复数据,平滑噪音数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等 数据集成:多个数据源合并到一起,存放在一个一致的数据存储位置(数据仓库中), 数据变换:对数据进行规范化处理,将数据转换成适当的形式,以适应于挖掘任务和算法的需求。

简单函数变换:常用来将不具有正态分布的数据转换为具有正态分布的数据。常见方法有对数变换和差分运算。

规范化:为了消除指标之间的量纲和取值范围差异的影响。将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析,对于基于距离的挖掘算法尤为重要,常见方法有:最大-最小值规范化,0-1均值规范化,小数定标规范化【-1,1】,

连续属性离散化:一些挖掘算法,特别是分类算法,长需要讲连续属性变换为分类属性,离散化设计两个字任务,确定分类数以及如何将连续属性映射到这些分类值,常见方法有等宽法和等频法和聚类

属性规约:合并属性,逐步向前选择,逐步向后删除,决策树归纳,主成分分析

数值规约:通过选择代替的,较小的数据来减少数据量,包括参数法(回归模型参数)和无参数法(直方图、聚类、抽样)

3.1.1 异常值分析

异常值分析 : 检验数据是否有录入错误,是否会有不合常理的数据 常用分析方法有: 简单统计量分析:最大值、最小值分析 3sigma原则:如果数据符合正态分布,在3sigma原则下,异常值为一组测定值与平均值的偏差超过三倍标准差的值,属于个别小概率事件,如果数据不符合正态分布,也可以用远离平均值标准差的倍数来表示

箱型图分析:以四分位数和四分位距为基础。

本项目的异常值主要针对数值型变量和 age 和 total_pages_visited

# age 和 total_pages_visited 的箱型图 boxplot = user_info.boxplot(column = ['age','total_pages_visited'])

根据箱型图判断age中存在两个异常值,total_pages_visited没有异常,需要剔除两个异常值。

# 删除两个异常值 user_info = user_info[user_info['age']


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有