商业数据分析--使用SQL计算复购周期

评价一个商业产品好不好,我们可以使用NPS、退款率、产品的使用效果等指标。

  • NPS是推荐值,是用户向其他人推荐产品的可能性,净推荐值(NPS)=(推荐者数/总样本数)×100%-(贬损者数/总样本数)×100%。

  • 退款率,是退款的用户占比。

  • 产品使用效果,是产品承诺给用户的效果,在用户使用之后,是不是真的能达到,比如下面某APP商业产品,说开通会员更快找到另一半,用户是不是能够更快的找到另外一半,就是效果的体现。

商业产品效果

还有一个指标,能够很好的体现产品效果---复购。复购是指用户多次购买。如果用户不满意,那肯定不会多次购买(刚需品除外)。复购的维度比较多,比如金额、品类等,这里主要讨论周期。

如果我们能够计算出大部分用户的复购周期,那么,我们就能精细化运营。当到达一定的周期时,就可以通过发优惠券或是其他的运营方式触达用户。下面给大家分享一下怎么用sql计算用户的复购周期。

下表是不同用户在不同时间的下单情况。表名:order_user,字段名称:a.用户名称---customer_name,b.订单时间---order_date

表名

思路:

  1. 把订单时间往后位移一行。

  2. 用订单时间减去位移后的时间,就得到了周期。

  3. 以周期进行聚合,得到了不同周期的分布。

第一步:位移

使用lag函数进行位移。lag(order_date,1)中两个参数,第一个参数是需要位移的字段,第二个字段是位移几行,在这里让订单时间往后位移一行得到lag1字段。

以customer_name进行开窗,然后以order_date进行排序,可以看到用户的每个订单时间都往后移动了一行。

select 
    customer_name,
    order_date,
    lag(order_date,1) over(partition by customer_name order by order_date asc) as lag1
from 
    order_user
位移

第二步:计算周期

然后使用订单时间减去位移后的时间,得到了周期。

select
    customer_name,
    order_date,
    lag1,
    datediff(order_date,lag1) as diff
from 
    (
    select 
        customer_name,
        order_date,
        lag(order_date,1) over(partition by customer_name order by order_date asc) as lag1
    from 
        order_user
    )a
计算周期

第三步:确定周期分布

最后以周期进行聚合,求次数,得到了不同周期的次数。注意:

  • 对周期进行排序,这样就能得到从小到大的顺序;

  • 排除null,位移以后第一订单时间,对应的位移值是null,需要排除。

select
    diff as '周期',
    count(*) as '次数'
from 
    (
    select
        customer_name,
        order_date,
        lag1,
        datediff(order_date,lag1) as diff
    from 
        (
        select 
            customer_name,
            order_date,
            lag(order_date,1) over(partition by customer_name order by order_date asc) as lag1
        from 
            order_user
        )a
    )b
where
    diff is not null 
group by 
    diff
order by 
    diff
分布

完整版SQL

完整版的SQL中,我使用了with创建了一个临时表,表名就是order_user,大家可以在网上搜索一下,如果有疑问可以私信我。

with order_user as ( 
select 
     customer_name,
     date(order_date) as order_date
from 
    chaoshi.order 
where 
    Customer_Name in (
    '曾惠','许安','韦松'
    )
group by 
    customer_name,
    order_date
order by    
    customer_name,
    date(order_date)  
)


select
    diff as '周期',
    count(*) as '次数'
from 
    (
    select
        customer_name,
        order_date,
        lag1,
        datediff(order_date,lag1) as diff
    from 
        (
        select 
            customer_name,
            order_date,
            lag(order_date,1) over(partition by customer_name order by order_date asc) as lag1
        from 
            order_user
        )a
    )b
where
    diff is not null 
group by 
    diff
order by 
    diff
    ;

得到了周期分布,就可以交付给运营同学,针对不同的用户进行精细化运营。

  • gongzhongh:数有道
  • gongzhongh:数有道
  • gongzhongh:数有道

你可能感兴趣的:(商业数据分析--使用SQL计算复购周期)