美文网首页
商业数据分析--使用SQL计算复购周期

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

作者: 数有道 | 来源:发表于2022-04-10 12:45 被阅读0次

    评价一个商业产品好不好,我们可以使用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计算复购周期

          本文链接:https://www.haomeiwen.com/subject/qejvsrtx.html