在單位時間窗口內,屢次(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
復購率變高,也就是用戶多消費。想讓用戶多消費,莫非就是自身產品實力過硬,或者產品不咋滴,可是可是套路足,讓用戶以爲本身產品「性價比」高,值得再次購買。