在单位时间窗口内,屡次(2次及以上)消费的用户在总消费用户的占比。python
全部购买过产品的顾客,以每一个人为独立单位重复购买产品的次数,好比有10个客户购买了产品,5个产生了重复购买,则重复购买率为50%。sql
某月内,一共产生了100笔交易,其中有20我的有了二次购买,这20人中的10我的又有了三次购买,则重复购买次数为30次,重复购买率为30%。
通常按第1中计算spa
订单信息表order_info相关字段:3d
注意:一个用户可能在同一天消费屡次code
解题步骤:
a、先求出【用户时间窗口内的用户消费次数表】order_timesblog
CREATE OR REPLACE VIEW order_times AS SELECT DATE_FORMAT( paidtime, "%Y-%m" ) AS 月份, userid, COUNT( userid ) AS 消费次数 FROM order_info WHERE ispaid = '已支付' GROUP BY DATE_FORMAT( paidtime, "%Y-%m" ), userid
b、时间窗口内【消费次数>1的人数】/【总消费人数】索引
SELECT 月份, COUNT( DISTINCT userid ) AS 消费人数, COUNT(CASE WHEN `消费次数` > 1 THEN 1 ELSE NULL END) AS 复购人数, COUNT(CASE WHEN `消费次数` > 1 THEN 1 ELSE NULL END)/COUNT( DISTINCT userid ) AS 复购率 FROM order_times GROUP BY 月份;
解题步骤:
a、导入数据utf-8
col = ['orderid','userid','ispaid','price','paidtime'] df = pd.read_csv(r'file_path/order_info_utf.csv',encoding='utf-8',names=col) df.head()
b、新增时间窗口字段产品
df['month'] = df['paidtime'].str[:7] df.head()
c、筛选已支付订单记录table
df = df[df['ispaid']=='已支付'] df.head()
d、数据透视,获取【时间窗口内的用户消费次数透视表】
# 用户ID为索引,时间窗口为列名称,count统计消费次数,无消费记录用0填充 order_counts = df.pivot_table(index='userid',columns='month',values='price',aggfunc='count').fillna(0) order_counts.head()
e、计算复购率
month_buy_rate = pd.DataFrame((order_counts>1).sum()/(order_counts>=1).sum(),columns=['复购率']) month_buy_rate['消费人数'] = (order_counts>=1).sum() month_buy_rate['复购人数'] = (order_counts>1).sum() month_buy_rate
复购率变高,也就是用户多消费。想让用户多消费,莫非就是自身产品实力过硬,或者产品不咋滴,可是可是套路足,让用户以为本身产品“性价比”高,值得再次购买。