案例1:11月销售额为什么减少

我们以王者荣耀这款游戏为例。

现状

11月该游戏的销售额相比上月,下降了10%

预期

由于之前该游戏的销售额一直保持着稳定增长,而且从市场环境和游戏本身状态来看,该游戏还未到达衰退期。

也就是说下降是不符合预期的,销售额应当保持增长才对,这个就构成了问题。

寻找可能的因素

在下手做数据分析之前,需要先去跟业务了解本月和上月有哪些不同,寻找解决问题的线索,而不是闷头去捞数据、做分析。

假设,市场人员告知我们,广告投放费用有减少,运营告知我们,每月开展的促销活动并没有发生变化,那么我们就可以做初步假设:

由于广告投放减少,导致新用户注册减少,进而导致销售额下降;可以通过恢复广告投放水平,恢复销售额。

数据采集和加工

接下来,我们就要收集数据,查看两个月销售额的构成,即按照新老用户的维度下钻拆解销售额:10月老用户销售额、新用户销售额,11月老用户销售额、新用户销售额。

目标表

因此,我们得到了下面的目标表👇

表-1

月份 新老用户 销售额
2018-10 新用户 ..
2018-10 老用户 ..
2018-10 新用户 ..
2018-10 老用户 ..

进而,我们需要一张这样的表👇

一行是一条消费记录;

第一列,是销售额的最小单元消费金额,其他列为该列的属性,哪个月份产生的、是新用户还是老用户

表-2

消费金额 月份 新老用户
20 2018-10 新用户
50 2018-10 新用户
40 2018-10 老用户
70 2018-10 老用户
100 2018-10 老用户
... ... ...
20 2018-11 新用户
40 2018-11 老用户
70 2018-11 老用户
100 2018-11 老用户
... ... ...

对表-2中的月份、新老用户字段进行Group,对消费金额进行sum操作,就可以获得表-1

明确字段

为了得到表-2,我们需要到数据库查询基础数据,此时我们需要明确所需字段

用户ID user_id 联表查询的主键
用户注册时间 register_date 判断老用户(新用户:当月注册用户;老用户:当月之前注册的用户)
消费日期 cost_date 判断消费月份
消费金额 cost 统计销售额

采集

熟悉mysql数据库的话,会知道,上面的字段,分布在下面2个数据表中

用户表 users

id register_date
1 2018-01-01
2 2018-05-01
3 2018-10-01
... ...
99 2018-11-01
100 2018-11-01
... ...

消费记录表 cost_recods

id user_id cost cost_date
1 1 10 2018-01-01
2 1 20 2018-02-01
3 3 60 2018-10-01
... ... ... ...
140 4 50 2018-11-01
141 5 20 2018-11-01
... ... ... ...

在sql中,将消费记录表、用户表,通过主键user_id联合起来,并对相应字段进行加工,就组成了所需的数据表-2,sql如下:

SELECT
    cr.cost, 
    DATE_FOORMAT(cr.cost_date, '%Y-%m') AS '月份',
    DATE_FOORMAT(u.register_date , '%Y-%m') = DATE_FOORMAT(cr.cost_date, '%Y-%m') AS '新老用户'
FROM
    cost_recods AS cr LEFT JOIN users AS u ON cr.user_id = u.id
WHERE 
    cr.cost_date >= '2018-10-01'
    AND cr.cost_date < '2018-12-01'

对上面的sql通过子查询的方式添加group、sum操作,就得到了表-1

SELECT
    SUM(cost) '销售额',
    month '月份',
    newOldUser '新老用户'
FORM
(SELECT
    cr.cost, 
    DATE_FORMAT(cr.cost_date, '%Y-%m') month,
    CASE WHEN DATE_FORMAT(u.register_date , '%Y-%m') = DATE_FORMAT(cr.cost_date, '%Y-%m') THEN '新用户' ELSE '老用户' END newOldUser
FROM
    cost_recods cr LEFT JOIN users u ON cr.user_id = u.id
WHERE 
    cr.cost_date >= '2018-10-01'
    AND cr.cost_date < '2018-12-01') temp
GROUP BY month, newOldUser

现在,我们将表1填充上了

月份 新老用户 销售额
2018-10 新用户 30, 000
2018-10 老用户 150, 000
2018-10 新用户 14, 000
2018-10 老用户 149, 000

下面将数据可视化

绘制个柱状图看一下

显然,的确是新用户销售额明显减少导致的。那么可以通过获取新客,来恢复销售额。