Airbnb(爱彼迎)用户数据分析——tableau可视化和MySQL分析

时间:2024-03-08 09:16:04

本文利用Airbnb用户的注册、订单和日志行为等数据,从用户画像、营销渠道转化率、订单漏斗分析三方面进行分析。我们需要考虑以下3个问题:

  1. 爱彼迎的目标用户是什么样的人群?有什么特点?
  2. 这些人群接受信息的渠道有哪些?或者说需求对应出现的场景在什么时候什么地方?
  3. 以什么样的方式给他们传递爱彼迎的产品价值是有效的,印象深刻的?

这三个问题分别定义了传播的对象、渠道、效率。
有了要解决的问题,我们就可以据此来定义相应的分析指标。

用户画像描述了Airbnb客户的整体特征,如性别比例、年龄分层、所属地比例、目的地等几个方面进行刻画。同时刻画了注册用户的设备、账号类别等基本信息,掌握用户渠道来源。

营销方面针对不同营销渠道和营销内容(例如网站的不同推广计划)的注册量和下单转化率进行分析,了解更有效的营销渠道和效果,从而有针对性的投放广告,节约成本。

订单漏斗分析根据客户的行为日志数据对用户的活跃程度、下单率、付款率、复购率进行了可视化,可以观察整体流程中的薄弱点,从而有针对性的提高某一方面的转化率。

本文参考了文章 Airbnb(爱彼迎)产品分析报告
里的一些指标观点。

数据描述

数据来源于 [ Kaggle竞赛 ](https://www.kaggle.com/c/airbnb-recruiting-new-user-
bookings/data?select=countries.csv.zip) ,主要包含以下信息:

  • train_users.csv - 用户训练集
    • id: 用户ID
    • date_account_created: 账户创建日期
    • timestamp_first_active: 第一次浏览的时间戳,注意由于用户注册前就可以浏览,因此可能早于注册日期和第一次预定日期。
    • date_first_booking: 第一次预定日期
    • gender:性别
    • age :年龄
    • signup_method :注册方式
    • signup_flow: 注册来源网页
    • language: 语言偏好
    • affiliate_channel: 营销渠道
    • affiliate_provider: 营销来源,例如google等
    • first_affiliate_tracked: 在注册之前,用户与之交互的第一个营销内容
    • signup_app :注册使用的app
    • first_device_type :第一次使用时的设备类型
    • first_browser :第一次使用时的浏览器
    • country_destination:旅行目的地
  • sessions.csv - 用户行为日志
    • user_id: to 与用户表的ID 对应
    • action :用户行为
    • action_type :用户行为类型
    • action_detail :用户行为具体细节
    • device_type:设备类型
  • countries.csv - 数据集中目的地国家的总结统计和地点
  • age_gender_bkts.csv 用户年龄分组、性别、目的地的总结统计

数据预处理

在开始分析之前,首先对数据进行预处理,包括重复值、缺失值、异常值等的处理。

    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import numpy as np
    sns.set(style="darkgrid")
    plt.rcParams[\'font.sans-serif\']=[\'SimHei\'] #用来正常显示中文标签
    plt.rcParams[\'axes.unicode_minus\']=False #用来正常显示负号
    
    data = pd.read_csv(\'train_users_2.csv\')
    sum(data[\'id\'].value_counts() == 1) #观察是否有重复id
    data.info() 

对比ID数量为1 的ID个数和总数据量,发现并没有重复ID ,说明数据中是没有重复ID 的,ID 可以用作主键。
查看16个变量的缺失值情况如下:

    id                         213451 non-null object
    date_account_created       213451 non-null object
    timestamp_first_active     213451 non-null float64
    date_first_booking         88908 non-null object
    gender                     213451 non-null object
    age                        125461 non-null float64
    signup_method              213451 non-null object
    signup_flow                213451 non-null int64
    language                   213451 non-null object
    affiliate_channel          213451 non-null object
    affiliate_provider         213451 non-null object
    first_affiliate_tracked    207386 non-null object
    signup_app                 213451 non-null object
    first_device_type          213451 non-null object
    first_browser              213451 non-null object
    country_destination        213451 non-null object

可以观察到缺失值情况如下,并分别对其制定相应的缺失值补充:

变量 意义 缺失个数 可能原因 缺失填充
date_first_booking 第一次预定日期 124543 没有发生预定 0
age 年龄 87990 注册页面不是必填项 0
first_affiliate_tracked 第一次预定推销内容 6065 未经过推销 untracked
    #缺失值处理
    data[\'age\'] = data[\'age\'].fillna(0)
    data[\'first_affiliate_tracked\'] = data[\'first_affiliate_tracked\'].fillna(\'untracked\')
    data[\'date_first_booking\'] = data[\'date_first_booking\'].fillna(0)
    data.info()

处理后不再具有缺失值。
下面对数据进行简单的描述性统计,以便观察数据形态。

    data.columns
    #\'id\'标识变量 ;\'date_account_created\', 账户创建日期;\'timestamp_first_active\', 第一次活动的时间戳;\'date_first_booking\', 第一次预定日期
    #离散变量:\'gender\', \'signup_method\',\'signup_flow\',\'language\', \'affiliate_channel\',\'affiliate_provider\',\'first_affiliate_tracked\', \'signup_app\',\'first_device_type\', \'first_browser\', \'country_destination\'
    #连续变量\'age\'
    class_column = [\'gender\', \'signup_method\',\'signup_flow\',\'language\', \'affiliate_channel\',\'affiliate_provider\',\'first_affiliate_tracked\', \'signup_app\',\'first_device_type\', \'first_browser\', \'country_destination\']
    continuous_column = [\'age\']
    for column in class_column:
        plt.hist(data[column])
        plt.title(column)
        plt.show()
        print(\'统计值:\',data[column].value_counts())

由于变量较多,这里不再一一列举,用gender这一变量进行举例说明。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709111718124.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)

取值 个数
-unknown- 95688
FEMALE 63041
MALE 54440
OTHER 282

同理可以观察到连续变量age的直方图分布如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709112051149.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
可以很明显的看到其中有一些年龄非常大,这是不合实际的,因此需要进行异常值处理,这里将年龄大于100岁的都当做异常值处理成0

    #异常值处理
    data["age"][data.age>100]=0
    #可视化
    plt.hist(data.loc[data[\'age\'] != 0 ,\'age\'])
    plt.show()
    
    data.to_csv(\'train_users.csv\')

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709112202741.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
此时年龄的分布就比较正常了,虽然有效的年龄数据并不多,但我们仍然可以看做是整体数据的一个随机抽样,是可以代表整体年龄水平的。

用户画像

首先是用户特点的刻画,根据所有的数据,可以从目标旅行地点、客户性别、客户年龄、客户来源地几个方面获取用户的特点。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709174444606.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
上面的动态可视化展示了目标旅行地点、客户性别、客户年龄三个方面的特性,从以上结果中我们大致可以发现几点:

  1. 除了NDF表示的不明确地点外,目标旅行地点以美国为主,有6万以上的游客,其次是意大利、法国等一些欧洲国家,但需要注意的是以上数据截止到2014年,当时Airbnb还没进入中国市场。
  2. 性别上排除未采集到的信息和无效信息,整体男女比例FAMALE:MALE=63041:54440,基本持平,说明在Airbnb上的旅行受众没有明显的男女区分。
  3. 年龄上各个国家的均值及四分位数基本都保持在20-60的范围内,说明用户基本为中青年人群。

以受众最多的美国为例,单独观察其性别和年龄分布:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709175627663.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
可以看到在62374的美国旅行地用户中,有22679的女性和19457的男性,男女比例基本持平,男性用户略低,在年龄分布中大部分用户的年龄分布在30-60岁,也符合中青年的受众群体特点。

下面介绍一下客户来源地。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709180017358.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
可以看到用户几乎都来自说英语的国家,可以狭义的认为是美国或英国,这是由于当时处于Airbnb发展初期,业务范围主要在西方一些国家。

上面只是简单介绍了用户的来源地,但实际上更有用的分析是获客渠道的分析,即人群接受信息的渠道。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709180401206.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
观察上面的图表,可以得到以下信息:

  1. 用户在注册Airbnb账号时大多数会选择通用的注册方式,但同时使用Facebook账号进行注册的用户也不少,而使用Google账号注册的用户则较少,这可以说明旅行产品和社交网络平台的联合可能是一个潜在的功能,可以开发注册,识别好友,一键分享等功能。
  2. 在注册方式中,大部分人会选择使用网页注册,那么在网页中投放Airbnb广告可能会获得比较高的获客量,由于数据中没有提供网页注册的转化率情况,这方面暂时没有数据可以支持。
  3. 在注册设备一方面,注册量比较高的是ipad、iphone、mac三种,这可能是由于本身这三种设备的使用率较高,而且也可以发现的一点是,无论在哪种设备上,注册使用的浏览器前三名分别是Safari、Google、Firefox。

根据以上信息及分析,在Airbnb的广告投放上更好的渠道方案可能是在Safari等常用浏览器的网页投放,可以增加获客量。

营销渠道分析

下面考虑用户的留存效率问题,最直观的指标就是客户的订单转化率,这里我们把客户第一次订单日期为空的用户认为是没有进行下单,从而计算转化率。
先来简单看一下Airbnb2010年-2014年以来用户注册数和订单数变化情况。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709182118935.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
可以很清晰的看到:

  1. 2010-2014无论是用户注册数还是订单数都逐年增加。
  2. 每年的7、8月份都会有注册数和订单数的小高峰,处于旅行旺季。
  3. 自2012年以来,注册数和订单数有明显的快速增长是Airbnb的高速发展期。
  4. 2014年夏天之后,订单数有断崖式下降。

我们可以通过分析不同营销方式和营销内容的转化率来确定之后的营销投放重点:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709182754543.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)
可以看到:

  1. 注册量最多的是direct(直接从应用商店下载),用户可能是从网络上获取到相关信息后自行前往应用商店下载,从这里我们无法明显看到营销的效果。
  2. 还有获客比较高的是Google的sem-brand和sam-non-brand,且相较于sam-non-brand来说sem-brand更高一点。
  3. 如果从转化率的角度分析,baidu、Yahoo、Google、yandex等几个网站的sem系列推广都比较高,其中Google的转化率和获客都比较高
  4. 相对而言获客和转化率不太好的有Facebook的content,baidu的转化率虽然比较高,但获客量却不太多。

漏斗分析

session数据表中关于action_detail这一列中,查看具体有哪些项:

    SELECT DISTINCT
    	action_detail 
    FROM
    	sessions

由于有很多,这里不再一一列出,其中比较重要的几列有:

名称 意义
reservations 下单操作
payment_instruments 支付操作

根据这些变量和数据,我们可以制作转化率漏斗

step1 产生活动的用户数

    SELECT
    	COUNT( DISTINCT user_id ) 
    FROM
    	sessions

共有用户135483。

step2 活跃用户数

规定产生10次以上活动的用户为活跃用户。

    SELECT
    	COUNT( DISTINCT user_id ) 
    FROM
    	sessions 
    WHERE
    	user_id IN ( SELECT user_id FROM sessions GROUP BY user_id HAVING COUNT( user_id ) > 10 )
    

共有活跃用户111977

step3 下单用户数

    SELECT
    	COUNT( DISTINCT user_id ) 
    FROM
    	sessions 
    WHERE
    	action_detail = \'reservations\'

共有10366用户下单。

step4 支付用户数

    SELECT
    	COUNT( DISTINCT user_id ) 
    FROM
    	sessions 
    WHERE
    	action_detail = \'payment_instruments\'

实际共有9018用户支付过。

step5 复购用户数

    SELECT
    	COUNT( DISTINCT user_id ) 
    FROM
    	sessions 
    WHERE
    	user_id IN (
    	SELECT
    		user_id 
    	FROM
    		sessions 
        WHERE
    	    action_detail = \'payment_instruments\'
    	GROUP BY
    		user_id 
        HAVING
    	    COUNT( user_id ) >= 2)

有4153用户多次在Airbnb支付。
将以上数据计算比例转化为图形可以得到:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200709230044603.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE2MjM2NA==,size_16,color_FFFFFF,t_70)

总结分析

同样的,按照文章架构,从用户特点、营销渠道、漏斗分析三个方面稍作总结。

  1. Airbnb的用户特点为大多数为中青年,男女比例均衡,用户多为美国人,采用网页注册的用户居多(如Google、Firefox等),往往会关联Facebook等社交账号。据此可以给出建议:营销重点为中青年人士,且有巨大的海外市场可以继续挖掘,如一些亚洲、东欧国家,广告更适合在搜索引擎投放,可以与社交平台产生联动。
  2. 在营销上,Airbnb自2012年起有大幅度的用户增长,但2015年左右有下滑,需进一步分析原因,这就需要优化拉新的措施,例如邀请新用户获得抽奖机会或‘锦鲤’营销等。营销内容中效果比较好的是Google的sem-brand,当然其他营销也有潜力。
  3. 在漏斗分析中,从活跃用户到下单用户有大幅度下降,转化率仅有9.26%,这是整个链条中需要重点加强的部分,在这方面可以完善推荐系统,例如根据用户的搜索记录,推荐相应的目的地团购、优惠、火爆旅行线路等,增加下单率。

在这里插入图片描述