本文利用Airbnb用户的注册、订单和日志行为等数据,从用户画像、营销渠道转化率、订单漏斗分析三方面进行分析。我们需要考虑以下3个问题:
这三个问题分别定义了传播的对象、渠道、效率。
有了要解决的问题,我们就可以据此来定义相应的分析指标。
用户画像描述了Airbnb客户的整体特征,如性别比例、年龄分层、所属地比例、目的地等几个方面进行刻画。同时刻画了注册用户的设备、账号类别等基本信息,掌握用户渠道来源。
营销方面针对不同营销渠道和营销内容(例如网站的不同推广计划)的注册量和下单转化率进行分析,了解更有效的营销渠道和效果,从而有针对性的投放广告,节约成本。
订单漏斗分析根据客户的行为日志数据对用户的活跃程度、下单率、付款率、复购率进行了可视化,可以观察整体流程中的薄弱点,从而有针对性的提高某一方面的转化率。
本文参考了文章Airbnb(爱彼迎)产品分析报告里的一些指标观点。
数据来源于Kaggle竞赛,主要包含以下信息:
在开始分析之前,首先对数据进行预处理,包括重复值、缺失值、异常值等的处理。
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这一变量进行举例说明。
取值 | 个数 |
---|---|
-unknown- | 95688 |
FEMALE | 63041 |
MALE | 54440 |
OTHER | 282 |
同理可以观察到连续变量age的直方图分布如下:
可以很明显的看到其中有一些年龄非常大,这是不合实际的,因此需要进行异常值处理,这里将年龄大于100岁的都当做异常值处理成0
#异常值处理
data["age"][data.age>100]=0
#可视化
plt.hist(data.loc[data['age'] != 0 ,'age'])
plt.show()
data.to_csv('train_users.csv')
此时年龄的分布就比较正常了,虽然有效的年龄数据并不多,但我们仍然可以看做是整体数据的一个随机抽样,是可以代表整体年龄水平的。
首先是用户特点的刻画,根据所有的数据,可以从目标旅行地点、客户性别、客户年龄、客户来源地几个方面获取用户的特点。
上面的动态可视化展示了目标旅行地点、客户性别、客户年龄三个方面的特性,从以上结果中我们大致可以发现几点:
以受众最多的美国为例,单独观察其性别和年龄分布:
可以看到在62374的美国旅行地用户中,有22679的女性和19457的男性,男女比例基本持平,男性用户略低,在年龄分布中大部分用户的年龄分布在30-60岁,也符合中青年的受众群体特点。
下面介绍一下客户来源地。
可以看到用户几乎都来自说英语的国家,可以狭义的认为是美国或英国,这是由于当时处于Airbnb发展初期,业务范围主要在西方一些国家。
上面只是简单介绍了用户的来源地,但实际上更有用的分析是获客渠道的分析,即人群接受信息的渠道。
观察上面的图表,可以得到以下信息:
根据以上信息及分析,在Airbnb的广告投放上更好的渠道方案可能是在Safari等常用浏览器的网页投放,可以增加获客量。
下面考虑用户的留存效率问题,最直观的指标就是客户的订单转化率,这里我们把客户第一次订单日期为空的用户认为是没有进行下单,从而计算转化率。
先来简单看一下Airbnb2010年-2014年以来用户注册数和订单数变化情况。
可以很清晰的看到:
我们可以通过分析不同营销方式和营销内容的转化率来确定之后的营销投放重点:
可以看到:
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支付。
将以上数据计算比例转化为图形可以得到:
同样的,按照文章架构,从用户特点、营销渠道、漏斗分析三个方面稍作总结。