时间:2023-03-16 00:14:02 | 来源:电子商务
时间:2023-03-16 00:14:02 来源:电子商务
本次分析的是英国一家在线零售商的交易订单数据,时间跨越为:2010年12月1日至2011年12月1日。数据来源于UCI Maching Learning Repository 。数据量为50万。grouped_month = df_order.groupby('Month')order_month_total_price = grouped_month.TotalPrice.sum()plt.figure(figsize=(10,6))plt.plot(order_month_total_price)plt.xlabel('month')plt.ylabel('price')plt.title('total price pre month')
可以看到随着时间的推移,每月订单总额在逐步提升,尤其在2011-08后有一个显著的提升。但是同年11月份又出现了大幅下滑。order_month_customers = grouped_month.InvoiceNo.count()plt.figure(figsize=(10,6))plt.plot(order_month_customers)plt.xlabel('month')plt.ylabel('order')plt.title('number of orders pre month')
订单数量的变化和消费金额大体一致。order_month_products = grouped_month.Quantity.sum()plt.figure(figsize=(10,6))plt.plot(order_month_products)plt.xlabel('month')plt.ylabel('products')plt.title('number of products pre month')
销售商品数量的变化自然和前面两项的变化是一致的。order_month_customers = grouped_month.CustomerID.apply(lambda x:len(x.drop_duplicates()))plt.figure(figsize=(10,6))plt.plot(order_month_customers)plt.xlabel('month')plt.ylabel('customers')plt.title('number of customers pre month')
消费客户数随着时间的发展和上面也是一样的。但是可以更细致地看到,消费客户数低于订单数,说明这个电商还是有一定的用户黏性,即用户复购率还不错。# 查看有消费的记录# 注意query只接受字符串形式的参数df_customer = df_order.groupby('CustomerID').agg({'InvoiceNo':'count', 'TotalPrice':'sum'}).query('TotalPrice > 0')df_customer.describe()
用户平均购买商品的数量为5,最多的是购买了249件,即电商企业的大客户。plt.figure(figsize=(10,6))plt.scatter(x=df_customer.InvoiceNo, y=df_customer.TotalPrice, alpha = 0.3)plt.xlabel('Times')plt.ylabel('Total Price')plt.title('Times and Total Price')
可以看到,存在少许的离群点。 可以利用切比雪夫定理,截取Total Price平均数2个标准差以内的数据(这里左边界用0即可)。plt.figure(figsize=(10,6))plt.scatter(x=df_customer.query('TotalPrice < 18456').InvoiceNo, y=df_customer.query('TotalPrice < 18456').TotalPrice, alpha = 0.3)plt.xlabel('Times')plt.ylabel('Total Price')plt.title('Times and Total Price')
这里可以看出二者具有一定的线性规律,大额多订单客户还是非常多的。plt.figure(figsize=(10,6))plt.hist(df_customer.query('TotalPrice < 18456').TotalPrice, bins = 30)plt.xlabel('Total Price')plt.ylabel('Frequence')plt.title('Total Price Distribution')
消费金额是典型的长尾分布,大部分客户的消费金额小于2500英镑。plt.figure(figsize=(10,6))user_amount.prop.plot()plt.xlabel('Total')plt.ylabel('Prop')plt.title('Customers Cumsum')
按用户消费金额进行升序排列后绘图。order_dif.describe()
用户的平均消费间隔是33天,最长的消费间隔可达1年,其实就是用户流失了。如果要唤回用户的话,建议判断的最长失活时长不超过33天。plt.figure(figsize=(10,6))plt.hist((order_dif / np.timedelta64(1, 'D')).dropna(), bins = 30)plt.xlabel('Period')plt.ylabel('Frequence')plt.title('Period Distribution')
又是非常典型的长尾分布,大部分用户的消费间隔其实不长。order_date_min = df_order.groupby('CustomerID').InvoiceDate.min()order_date_max = df_order.groupby('CustomerID').InvoiceDate.max()order_date_dif = order_date_max - order_date_minorder_date_dif.head(10)
理论上来说,随着产品的成熟,用户生命周期是呈现增长的趋势的,但是这个数据集并没有体现用户注册时间这一类可以看出时间远近的变量(第一次订单时间是不可以的,因为这个数据集只是一年内的数据。)因此不好判断。order_date_dif.mean()
用户的平均生命周期是133天,但是平均数就准确么?不一定的,还是需要查看整体分布。plt.figure(figsize=(10,6))plt.hist((order_date_dif / np.timedelta64(1,'D')).dropna(), bins = 90)plt.xlabel('Life Period')plt.ylabel('Frequence')plt.title('Life Period Distribution')
可以看到存在很多一次消费后就不再购买的客户,这些都是属于质量较差的客户。这可能是这部分引流的渠道客户质量不高。 plt.figure(figsize=(10,6))plt.hist((order_date_dif / np.timedelta64(1,'D')).dropna()[(order_date_dif / np.timedelta64(1,'D')).dropna()>0], bins = 90)plt.xlabel('Life Period')plt.ylabel('Frequence')plt.title('Life Period Distribution(more than 0 day)')
虽然排除了一次性消费客户,但仍有不少用户生命周期靠拢在0。(order_date_dif / np.timedelta64(1,'D')).dropna()[(order_date_dif / np.timedelta64(1,'D')).dropna()>0].mean()
二次消费或者以上的客户的生命周期大约为191天,高于总体的133天。因此从运营策略上看来,用户首次消费后应该花费更多的精力,以引导其进行二次、多次消费。对于用户的生命周期,这会带来相较于原来1/2的增量。purchase_status_counts.fillna(0).T.plot.area(figsize = (10,6))
purchase_status_counts.fillna(0).T.apply(lambda x:x/x.sum(), axis=1)
可以看出用户层级的分布和用户转化漏斗趋势。随着产品的发展,活跃用户的占比为10%-15%,新增用户没有产品刚刚推出的时候流量大,这是正常的,因为产品推出期间一定采取了大量的引流措施。回流用户这里指的是上月没有消费,本月又有消费的,时间长短取决于上面的分析结果。可以看到活跃用户和回流用户的占比变化和消费趋势是相同的,12月份有了一个明显的下滑。 pivoted_purchase_return = pivoted_counts.applymap(lambda x: 1 if x > 1 else np.NaN if x == 0 else 0)pivoted_purchase_return.head()
(pivoted_purchase_return.sum() / pivoted_purchase_return.count()).plot(figsize = (10,6))
可以看到,在稳定的时期,复购率在30% - 40%,还是非常可观的。 def purchase_back(data): status = [] for i in range(12): if data[i] == 1: if data[i+1] == 1: status.append(1) if data[i+1] == 0: status.append(0) else: status.append(np.NaN) status.append(np.NaN) return pd.Series(status, index=columns_month)pivoted_purchase_back = df_purchase.apply(purchase_back, axis=1)pivoted_purchase_back.head()
(pivoted_purchase_back.sum() / pivoted_purchase_back.count()).plot(figsize = (10,6))
在稳定时期,用户回购率随着时间变化有所上升,回购率约在35% - 50%,也是较高的。关键词:分析,报告,单数