一、分析背景与目的
1.1、分析背景
Airbnb成立于2008年,短短9年时间成为了短租民宿行业的巨头,并且强烈的冲击着传统酒店行业的格局。目前Airbnb作为一款社区平台类产品,其业务遍布了191个国家,并且经常出现在商业分析的优秀案例中。Airbnb在做好了产品体验、房源美感、民宿共享服务之后,这款产品和背后的业务是否存在可以改进的地方?
1.2、提出分析问题
针对分析的目的,提出以下三个问题:
1.airbnb的目标用户群体具有什么样的特征?
2.当前的转化率和流失率中哪里哪一个环节存在问题,或者有较大的改进空间?
二、分析维度
2.1、根据问题,提出两个分析维度:
1、用户画像分析
-用户性别的分布特征;
-用户年龄的分布特征;
-用户地区的分布分布;
-中国地区去国外预定的地区占比;
2、转化漏斗分析
-注册用户占比
-活跃用户(非僵尸用户)占比
-下单用户占比
-实际支付用户占比
-复购用户占比
三、数据清洗3.1、数据集描述数据集名称:Airbnb顾客预订数据数据集来源:kaggle Airbnb产品数据集 数据集简介:此数据集是kaggle上的一个竞赛项目,主要用来制作目的地信息的预测模型。此数据聚集包含两张数据表,其中train_users_2表中为用户数据,sessions表中为行为数据。数据集量:21w * 15(train_users_2)、104w * 6(sessions)
3.1、列名称理解原数据表的字段的列名非常规范,无需对列名称进行重命名,数据分析之前需要理解每个列名称的含义。
数据表一:数据表名称:train_users_2
id:用户ID
date_account_created:帐户创建日期date_first_booking:首次预订的日期
gender:性别
age:年龄
signup_method:注册方式
signup_flow:用户注册的页面
language:语言偏好
affiliate_channel:营销方式
affiliate_provider:营销来源,例如google,craigslist,其他
first_affiliate_tracked:在注册之前,用户与之交互的第一个营销广告是什么
signup_app:注册来源
first_device_type:注册时设备的类型
first_browser:注册时使用的浏览器名称country_destination:目的地国家
数据表二:数据表名称:sessions
user_id:与users表中的“id”列连接
action:埋点名称
action_type:操作事件的类型
action_detail:操作事件的描述
device_type:此次会话所使用的设备
3.2、重复值的处理
-train_users为用户表中主键,所以每个用户只生成一条记录,所以如果train_users中id存在重复值,则需要处理。
-sessions 为用户会话记录表,存在一个用户多条记录结论:只需要排查train_users中是否存在重复值。
执行SQL后得出:count_id = 0。说明train_users_2数据表中不存在重复值。
3.3、缺失值处理数据缺失数量较多,以下为存在缺失值的列:
date_first_booking(首次预定时间)存在缺失值数量:124544个。
gender(性别)存在缺失值数量:95688个。
age(年龄)存在缺失值数量:87991个。first_affiliate_tracked(用户通过那个营销广告注册)存在缺失值数量:6065个。
first_browser(注册时浏览器)存在缺失值数量:27266个。
action_type(埋点的操作类型)存在缺失值数量:1126204个。
action_detail(用户操作行为的描述)存在缺失值数量:1126204个。
缺失原因推测及处理
date_first_booking(首次预定时间)数据如果缺失,在业务上可以理解为此用户为“未预定用户”,也就是没有下单的用户。
性别、年龄由于客户端中这部分信息选填,空值为用户未填写。
其他四个数据是由于前端统计时数据没有统计到。
处理:实际分析中需要在where条件排除掉空数据,再进行分析。
3.4异常值处理
age(年龄)异常值处理:
age(年龄)的异常数据非常多;0~150之间的数值都有,并且包含了2014、2015等数值。推测这些"脏数据"产生的原因是用户在客户端随意填写造成。
3.5数据清洗中使用的SQL
# 检查数据中是否包含重复值
SELECT id, COUNT(id) AS count_id
FROM mysql.train_users_2
GROUP BY id
HAVING count_id > 1;
#通过以下SQL对每一列进行查询,通过替换where之后的条件,查询每一列包含的空值数量。
SELECT date_first_booking, COUNT(date_first_booking)
FROM mysql.train_users_2
WHERE date_first_booking IS NULL;
#通过查看数据的极值(极大值、极小值)是否符合实际情况,来判断数据中是否存在异常值。
SELECT min(age), max(age)
FROM mysql.train_users_2;
#异常值处理:对于年龄不在7~75区间的数据删除(设置为0-空值)
UPDATE mysql.train_users_2
SET age = 0
WHERE id NOT IN (
SELECT id
FROM (
SELECT id
FROM mysql.train_users_2
WHERE age <= 75
AND age >= 7
) a
);
四、用户画像分析
4.1、用户的性别分布特征
执行以下SQL得出:女性用户数量=54440;男性用户数量=63041
从以上可视化可以看出:
airbnb的男女用户占比差别不大,其中男性用户多于女性用户。
4.2、用户的年龄分布
airbnb的用户主要为“中青年群体”,其中用户数量最多的是80后~(29岁~39岁),其次为90后,然后为75后。
4.3、用户不同地区的分布
SQL执行的结果可以看出:使用最多的语言排名前5的分别是英文、中文、法文、西班牙文、朝鲜文。
从可视化结果可以看出:
-airbnb的产品真的很国际化,用户遍布多个地区。
-有超过90%的用户是英语国家(欧美);airbnb是2013年开始进入中国市场的(此数据集止于2014年),所以此时中文用户数量虽然排名第二,但是占比却非常小。
4.4、中国用户去国外预定的地区占比
从SQL执行的结果可以看出,中国人去国外预定民宿最主要集中在韩国、然后是美国。
从可视化结果可以看出:
中国用户去国外预定,占比最多的是韩国,其次是美国。其余国家占比很小,总和不到20%。
4.5用户画像分析使用的SQL语句
# 女性用户数
SELECT COUNT(id) AS '女性用户数'
FROM mysql.train_users_2
WHERE gender = 'MALE';
# 男性用户数
SELECT COUNT(id) AS '男性用户数'
FROM mysql.train_users_2
WHERE gender = 'FEMALE';
# 用户不同年龄的数量
SELECT age, COUNT(id)
FROM mysql.train_users_2
GROUP BY age
HAVING age <> 0
ORDER BY age;
# 用户不同语言分布
SELECT language, COUNT(language) AS lg_num
FROM mysql.train_users_2
GROUP BY language
ORDER BY lg_num;
# 中国用户去国外预定的地区
SELECT language, country_destination, COUNT(country_destination) AS cd_num
FROM mysql.train_users_2
GROUP BY language, country_destination
HAVING language = 'zh'
ORDER BY cd_num DESC;
五、转化漏斗分析
执行SQL得出:用户总数量 = 135484。
6.1、活跃用户(非僵尸用户)占比
执行SQL得出:活跃用户总数量 = 114002。
计算可得:活跃用户占比 = 活跃用户总数量/用户总数量 = 84.144%
6.2、注册用户占比
-执行SQL得出:注册用户总数量 = 73815。
-计算可得:注册用户占比 = 注册用户总数量 / 用户总数量 = 54.482%
6.3、下单用户占比
-执行SQL得出:下单用户总数量 = 10367。
-计算可得:下单用户占比 =下单用户总数量 / 用户总数量 = 7.651%
6.4、实际支付用户占比
-执行SQL得出:实际支付用户总数量 = 9019。
-计算可得:付款用户占比 =实际支付用户总数量/用户总数量 = 6.656%6.5、
复购用户占比
-执行SQL得出:复购用户总数量 = 5447。
-计算可得:复购用户占比 = 复购用户总数量 / 用户总数量 = 4.0204%
airbnb的漏斗模型:
从可视化图表中可以看出:
-注册用户到下单用户是airbnb转化漏斗中流失率最高的一个环节。仅有14%的注册用户下单、仅占全部用户的7.651%。
-活跃和复购环节表现的好,其中有60%的下单用户复购,说明airbnb的产品和服务做的非常好。
-下单用户中有大约13%的用户没有最终支付,需要产品研发介入排查。
6.5、SQL漏斗分析过程
#用户总数量:对sessions表中的user_id进行group by,再统计数量,得出sessions表中所有的用户数量。
SELECT COUNT(*) AS '用户数量'
FROM (
SELECT user_id
FROM mysql.sessions
GROUP BY user_id
) new_sessions;
#活跃用户的定义:按照用户的操作总次数,如果用户操作产品大于等于10次,就可以说明用户为偏活跃的用户,另一方面说明此用户不是僵尸用户。
SELECT COUNT(*) AS '活跃用户数'
FROM (
SELECT user_id
FROM mysql.sessions
GROUP BY user_id
HAVING COUNT(user_id) >= 10
) active
#注册用户:通过sessions表中的用户与注册用户表进行内关联,统计出sessions表中已注册用户数量
SELECT COUNT(*) AS '注册用户总数'
FROM (
SELECT user_id
FROM mysql.sessions
GROUP BY user_id
) new_sessions
INNER JOIN mysql.train_users_2 tu
ON new_sessions.user_id = tu.id;
#下单用户:用户行为中“reservations”为预定(下单)操作,通过统计进行了“reservations”的用户(group by去重),得出下单用户的数量
SELECT COUNT(*) AS '下单用户数'
FROM (
SELECT user_id
FROM mysql.sessions
WHERE action_detail = 'reservations'
GROUP BY user_id
) booking
#实际支付用户:用户行为中“payment_instruments”为支付操作,通过统计进行了“payment_instruments”的用户(group by去重),得出实际支付用户的数量
SELECT COUNT(*) AS ‘实际支付用户总数量’
FROM (
SELECT user_id
FROM mysql.sessions
WHERE action_detail = 'payment_instruments'
GROUP BY user_id
) payed;
#复购用户:通过统计进行了“payment_instruments”操作次数大于1次的用户(group by去重),得出实际复购用户的数量
SELECT COUNT(*) AS ‘复购支付用户总数量’
FROM (
SELECT user_id
FROM mysql.sessions
WHERE action_detail = 'reservations'
GROUP BY user_id
HAVING COUNT(user_id) >= 2
) re_booking;
六、分析结论汇总
7.1、用户画像总结
-用户性别中,男性用户多于女性用户,但是差别不大(7.3%的差距量)
-用户年龄以中青年为主,用户数量最多的是80后~(29岁~39岁),其次为90后,然后为75后。
-用户分布地区最多的为欧美地区,其次是中国,但欧美占比达到了90%以上。(截止2014年)
-中国用户预订的最多的其他国家是美国,占比高达90%以上。
7.3、转化漏斗总结
-airbnb转化漏斗中流失率最高的一个环节是“用户下单”,仅有14%的注册用户下单。
-下单用户中有大约13%的用户最终没有支付成功。
-注册率有待提高。
-活跃和复购环节表现的好,说明airbnb的产品和服务做的非常好。
七、业务和产品上的建议
建议一:用户画像
根据年龄分布特征,建议SEO或者付费广告投放时,投放对象细化至年龄在29~39岁的男性。
建议二:转化漏斗方面
-注册用户到下单用户是airbnb转化漏斗中流失率最高的一个环节,仅有14%的注册用户真正下单,此环节作为企业营收的主要来源之一,建议围绕提高下单率做更多的工作。例如针对活跃用户的用户轨迹定期推送(产品push+短信邮件)优质房源,此外提高下单转化率是一项长期工作、需要结合多种策略并行。
-下单用户中有大约13%的用户最终没有支付,需要排查具体原因(为什么已经下单啦,还是十分之一的用户没有结算),建议进行用户调研、或者在产品上统计用户未支付原因(是用户自身决策导致、还是产品流程的原因、还是支付类型不满足个别地区等)。