Pyhton零售数据分析及产品关联分析

一、项目背景&总结

项目背景

以购物篮分析为背景,分析某跨国棒球用品零售商的历史订单数据,为企业提供运营及销售策略。

项目总结

一. 本项目对企业历史订单数据进行以下角度的处理及分析:

  1. 数据探索及清洗:对6w+订单数据进行探索及清洗处理,为数据构建分析维度;

  1. 整体业务情况监控:根据时间维度对主要业务(GMV、订单数、下单人数、客单价、单均价等)指标进行监控,识别业务规律及近期的业务问题,并输出热销商品及区域订单贡献情况;

  1. 商品分析:对一级、二级品类商品的销售及利润率情况进行可视化分析,同时多维度输出每个sku的表现,为日常/大促的商品运营提供输入;

  1. 购物篮分析:输出具有可信度的商品组合规则,为线上线下商品陈列、推荐及促销组合提供输入,

  1. 用户分析:分析用户复购情况,并基于RFM框架对用户数据进行聚类分析,实现用户价值分类,为精细化用户运营提供输入。

二. 本项目使用到的Python模块:

  1. 数据处理及统计分析:numpy、pandas、sklearn、mlxtend;

  1. 可视化:matplotlib、seaborn。

二、数据获取&处理

加载数据

数据源包括order.csv,product.csv,customer.csv,date.csv,分别为订单表,产品表,客户表,日期表,具体字段尚不清晰,待导入数据后检查。

开始干活:加载基本模块和数据集~

#加载基本模块
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
import time

order=pd.read_csv('./阿里天池/产品关联分析/order.csv',sep=',', encoding="gbk")
product_unique=pd.read_csv('./阿里天池/产品关联分析/product.csv',sep=',', encoding="gbk")
customer=pd.read_csv('./阿里天池/产品关联分析/customer.csv',sep=',', encoding="gbk")
date=pd.read_csv('./阿里天池/产品关联分析/date.csv',sep=',', encoding="gbk")

查看各表包含的字段及数据行数

加载数据集后首先要了解清楚数据集的这些信息:size(多少行列)、数据类型、去重个数、有无空缺值、字段之间有无从属关系(如本例中产品有多个类别)。下面以order表为例,通过两组代码了解数据集基本信息:

print(order.shape)
order.head()
#查看空缺值--无空缺值
order.info()
#查看各字段去重个数
for i in order.columns:
    print('{}的去重个数:'.format(i),order[i].nunique())
    if order[i].nunique() <=10:
        print('{}包括:'.format(i),order[i].unique())
#查看时间范围
print('\n','时间范围是:',order['订单日期'].min(),'至',order['订单日期'].max())

总结

  1. 订单数据从2013-7-1到2016-7-31,共1124天有销售数据,各字段无空缺值;

  1. 共有10个销售大区分布在'大中华区'、 '新加坡'、 '韩国',其中'大中华区'含三个港澳台大区;

  1. 共有3个一级产品类别('配件'、'服装'、'球'),17个二级类别,158个sku;

  1. 产品ID&客户ID去重个数均与product表&customer表一致,且order表字段包含了这两个表的字段,因此后续数据处理分析可仅针对order表;

  1. order表中无订单ID相关信息,且每行只有一个产品ID,因此数据处理时可将同一天&同一个客户ID&同一交易类型视为一个订单;

  1. order表中关于时间仅有订单日期&年份两个维度,数据处理时可以考虑增加维度如月份、季度、dayofweek等。

由此一来我们对数据的基本情况有了基本了解,由于另外三个表的信息其实包含在order里,为减少篇幅就不再重复展示。

数据处理

由于上一环节知道数据集不含空缺值,则这一部的重点就是为订单构造月份、季度、dayofweek字段以及单独的订单ID字段:

先构造月份、季度、dayofweek字段:

#将订单日期数据类型转化为datetime64
order['订单日期']=pd.to_datetime(order['订单日期'])
#构造月份、季度、dayofweek字段
order['订单月份']=order['订单日期'].map(lambda x:str(x.year)+'-'+str(x.month))
order['订单季度']=order['订单日期'].map(lambda x:str(x.year)+'q'+str(x.quarter))
order['dayofweek']=order['订单日期'].map(lambda x:x.dayofweek)#周一为0,一次类推

再构造订单ID字段

orderID=order[['订单日期','客户ID','交易类型']].drop_duplicates().reset_index().reset_index()
orderID=orderID.drop('index',axis=1)
orderID=orderID.rename(columns={'level_0':'订单ID'})
#订单ID从1开始
orderID['订单ID']=orderID['订单ID']+1
#合并orderID合并到order
order=pd.merge(order,orderID,on=['订单日期','客户ID','交易类型'])

最后看看处理完的order表,字段完整后就可以开始下一步的分析。

三、整体业务情况

假如我们是刚开始接触这个企业的订单数据,或者承担着提供日常业务情况监测职能的话,则有必要了解一下整体业务情况。

日均业绩情况

我们通过简单的代码计算日均GMV、日均订单数、日均下单人数、日均销量。

#日均销售额
sales_per_day=order['销售金额'].sum()/order['订单日期'].nunique()
print('日均销售额: %.1f元'%sales_per_day)
#日均订单数
orders_per_day=order['订单ID'].nunique()/order['订单日期'].nunique()
print('日均订单数: %.1f'%orders_per_day)
#日均下单人数
customers_per_day=order.groupby('订单日期')['客户ID'].nunique().mean()
print('日均下单人数: %.1f'%customers_per_day)
#日均销量
items_per_day=order['订单数量'].sum()/order['订单日期'].nunique()
print('日均销量: %.1f'%items_per_day)

根据企业历史订单数据可以发现:一天平均有24.8人下了24.8笔订单,卖出53.7件商品,带来34474元的GMV。

同理,我们可以计算16年以来的日均数据:

#筛选出2016年的订单数据
order_2016=order[order['年份']==2016]

#日均销售额
sales_per_day_16=order_2016['销售金额'].sum()/order_2016['订单日期'].nunique()
print('16年以来日均销售额: %.1f元'%sales_per_day_16)
#日均订单数
orders_per_day_16=order_2016['订单ID'].nunique()/order_2016['订单日期'].nunique()
print('16年以来日均订单数: %.1f'%orders_per_day_16)
#日均下单人数
customers_per_day_16=order_2016.groupby('订单日期')['客户ID'].nunique().mean()
print('16年以来日均下单人数: %.1f'%customers_per_day_16)
#日均销量
items_per_day=order_2016['订单数量'].sum()/order_2016['订单日期'].nunique()
print('16年以来日均销量: %.1f'%items_per_day)

一天平均有61.2人下了61.2笔订单,卖出151.5件商品,带来105124元的GMV,这四个指标均比全量日均数据高出2-3倍,这也说明企业在16年之前有过一段时期销售规模要明显更低,经过爆发性增长才到16年后的水平。

不同年份/一周各天的业绩

由于对数据进行聚合和可视化的代码块较长,这里只做结果展示:

可以发现该店铺:

1. 按年份来看,订单量、单均价、客单价均与GMV保持接近相似的增长情况:4个指标在2013(下半年开始统计)、2014年的GMV与订单量均处于较低水平,但到了15年后增长迅速:15年的GMV与订单量是14年的89.2倍与9.1倍,16年只过了7个月,两项业务指标便达成上年的1.4倍与1.3倍;

2. 周末的GMV与订单量明显高于工作日 ;

除了工作日与周末的区别,按月份维度监测业绩更有助于快速定位到近期的问题。

每月业绩

首先计算出每个月的业绩表(含每月GMV、订单数、下单人数、客单价、单均价等)sales_by_month:

sales_by_month=order.groupby('订单月份')[['订单ID','客户ID','销售金额']].agg({'订单ID':'nunique','客户ID':'nunique','销售金额':'sum'}).reset_index().rename(columns={'订单ID':'订单数','客户ID':'下单人数'})
sales_by_month['人均订单量']=sales_by_month['订单数']/sales_by_month['下单人数']
sales_by_month['单均价']=sales_by_month['销售金额']/sales_by_month['订单数']
sales_by_month['客单价']=sales_by_month['销售金额']/sales_by_month['下单人数']
#拿来展示的‘订单月份’字段乱序,且是字符串,增加一个订单月份dt字段方便根据时间排序
sales_by_month['订单月份dt']=pd.to_datetime(sales_by_month['订单月份'])
#基于订单月份dt重新排序
sales_by_month=sales_by_month.sort_values(by='订单月份dt',ignore_index=True)
sales_by_month.head()

各月份GMV

注:因为15年前后销量差距较大,可视化时决定将这两段时间分开展示。

首先将记录每个月业绩情况的sales_by_month拆分成2015前后,分别进行可视化:

#sales_by_month拆分成2015前后
sales_by_month_before2015=sales_by_month.loc[sales_by_month['订单月份dt']<'2015-01-01']
sales_by_month_after2015=sales_by_month.loc[sales_by_month['订单月份dt']>='2015-01-01'].reset_index(drop=True)

可以发现:

  1. 从一整年来看,每年12月GMV达到全年峰值,推测是因为12月有更多大促活动,刺激了销量。

  1. 14年7月15年7月是企业发展两个重要节点:
    1) 14年7月环比6月下降了52%,此后一年的每月GMV维持在0.75w-1.4w的水平,甚至达不到此前的最低月GMV;
    2) 15年7月GMV为69.9w,环比上月增长了4893%,此后店铺继续增长并保持再较高的月GMV水平。

  1. 值得注意的是今年(16年)7月份GMV环比上月下降43.2%,与此前一年的业绩水平差得太多,下降幅度远超正常旺淡季的变化,需要找到问题的原因。

各月份订单数及买家数

可以发现,每月订单数与下单人数的趋势与GMV基本一致,且人均基本一个月只会下1单,这与棒球产品较为耐用的特性有关。

各月份客单价&单均价

可以发现:

  1. 14年7月客单价从¥100的水平猛降至¥40,降幅达60%,随后一年保持在40元左右的水平;

  1. 直至15年7月客单价猛增至1368,环比上月增长3157%,推测是企业引进了单价更贵的产品并打开了销路;

  1. 随后一年的客单价在1654-1916的水平,整体呈缓慢下降趋势,但在16年7月客单价达到¥2154,环比上月增长30%,并达到历史最高水平;

  1. 由于企业的人均订单数接近为1,因此各月份客单价与单均价也很接近。

TOP10商品

首先计算出每个SKU包含的订单数。

orders_with_sku=order.groupby(['产品型号名称','产品ID'])[['订单ID','订单数量','销售金额']].agg({'订单ID':'nunique','订单数量':'sum','销售金额':'sum'}).reset_index().rename(columns={'订单ID':'含该商品的订单数','订单数量':'销量','客户ID':'下单人数'})
orders_with_sku['含该商品订单的占比']=orders_with_sku['含该商品的订单数']/orderID.shape[0]
orders_with_sku['sku']=orders_with_sku['产品型号名称']+'('+orders_with_sku['产品ID'].astype('str')+')'
orders_with_sku.sort_values(by='含该商品的订单数',ascending=True,inplace=True,ignore_index=True)

然后取出前10名,并与order匹配后计算TOP10商品包含订单占总订单数的比例:

sku_top10=orders_with_sku['产品ID'][:-10]
pd.merge(order,sku_top10,on='产品ID',how='inner')['订单ID'].nunique()/orderID.shape[0]

再对TOP10商品订单占比可视化:

可以发现,含TOP10商品的订单占总订单的88.5%,其中Bat Pack占比最高,达到15.4%。

区域订单贡献

先计算每个销售大区的业绩表现(订单数、总销售金额、订单占比等):

orders_by_area=order.groupby('销售大区')[['订单ID','客户ID','销售金额']].agg({'订单ID':'nunique','客户ID':'nunique','销售金额':'sum'}).reset_index().rename(columns={'订单ID':'订单数','客户ID':'下单人数'})
orders_by_area['人均订单量']=orders_by_area['订单数']/orders_by_area['下单人数']
orders_by_area['单均价']=orders_by_area['销售金额']/orders_by_area['订单数']
orders_by_area['客单价']=orders_by_area['销售金额']/orders_by_area['下单人数']
orders_by_area['订单占比']=orders_by_area['订单数']/orders_by_area['订单数'].sum()

orders_by_area=orders_by_area.sort_values(by='订单数',ascending=True,ignore_index=True)
orders_by_area

然后对各大区占比作可视化:

来自澳门(24.3%)、西南(19.8%)及西北(14.7%)三个大区的订单最多,但东南、东北及中部地区的订单寥寥可数,针对不同销售表现的大区,在广告投放、用户体验、物流等方面可采取不同的运营策略。

四、商品分析

商品分析部分主要针对各级品类/商品的销售及盈利表现进行分析。

一级&二级品类分析

首先可以计算一级品类销售表现及利润率,可以发现:

  1. 配件类不仅贡献近6成销售量及过90%的销售额,利润率也是明显高于其他一级品类;

  1. 服装类不仅销售量最少,利润率也最低,但得益于更高的单价,仍为店铺贡献多于球类的收入及利润。

接下来将各二级品类的销量及利润率放在一个组合图,方便快速定位品类销量及盈利水平:

值得注意的是,帽子、击打手套、皮带、袜子及打击T座虽然销量不高,但利润率高(>80%),意味着具备降价促销的空间,在店铺制定促销策略时可以考虑对这些品类的商品多件打折或与其他高销量的单品(如棒球、手套、球棒等)做成bundle捆绑。

各sku分析

这部分主要是计算158个sku的总销量&总销售额&总成本&利润率,汇总以后则为相关运营同事提供商品进货及运营的指导:优先选择销量、利润率高于品类均值的产品作为平时或大促的主推商品,再结合后面购物篮分析,还可以设计出捆绑销售的组合。(实际工作中,该表应该定期更新,才能起到指导业务的作用)。

#计算每个sku(产品ID)总销量&总销售额&总成本&利润率
orders_sku=product.groupby(['产品类别','产品名称','产品型号名称','产品ID'])[['销量','总销售额','总成本','总利润']].sum().reset_index()
# orders_sku=orders_sku.sort_values(by=['产品类别','销量'],ascending=[True,False])
orders_sku['利润率']=orders_sku['总利润']/orders_sku['总成本']
orders_sku

五、关联分析

关联分析,又称购物篮分析,通过apriori等算法挖掘订单中具有可信度的产品组合,从而为企业提供销售策略&产品关联组合,提升销量的同时也为消费者提供更适合的商品推荐。

注:考虑到订单量为2.7w+,为保证可信度,分析结果的规则是需要一定基数,故本次仅针对全量订单的sku作关联分析(在实际业务分析时,可以考虑对地域订单分别作关联分析并对比)。

#加载关联分析模块
from mlxtend.frequent_patterns import apriori#计算频繁项集
from mlxtend.frequent_patterns import association_rules#确定关联规则
from mlxtend.preprocessing import TransactionEncoder#对transaction进行编码
#将订单数据清洗成最终分析的格式。
orderid=list(order['订单ID'].unique())
transactions_list=[]
for i in range(len(orderid)):
    tran=order.loc[order['订单ID']==i+1,'产品型号名称'].values
    transactions_list.append(tran)
#0-1矩阵编码
te = TransactionEncoder()
oht_ary = te.fit(transactions_list).transform(transactions_list, sparse=True)
sparse_df = pd.DataFrame.sparse.from_spmatrix(oht_ary, columns=te.columns_)
print(sparse_df.shape)
sparse_df.head()

可以看到数据被清洗成,27618*40的0-1数据框,这是因为总共有27618笔订单及40个商品描述(spu

接着,计算频繁项集:可设置以0.0X的支持度得到频繁项集frequent_itemsets,此处设置为0.025

frequent_itemsets=apriori(sparse_df, min_support=0.025,use_colnames=True)
#计算每个频繁项集的长度
frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(lambda x: len(x))
frequent_itemsets.head()

查看长度大于等于2的频繁项集。

以1.2提升度为标准,得到关联规则rules。

可以发现,共有20条关联规则,长度均为2,那么可以进一步完善关联规则表,为每条规则的前后item加上品类信息,如下图。

得到关联规则后,店铺可以将关联商品放得更靠近,并据此制定商品展示及捆绑营销策略。

  1. 首先从品类上看:
    1) 购买了球棒与球棒袋品类的顾客,除了倾向同时买其他球棒与球棒袋品类的商品外,还倾向同时购买软式棒球
    2) 软式棒球和三角网架、棒球手套和棒球手套、棒球手套和头盔则是其他客户倾向于同时购买的品类组合。

  1. 从具体商品的规则来看的话,以规则[Bat Pack(球棒与球棒袋)->Marucci CAT Composite(球棒与球棒袋)]为例,可以建议:
    1) 线下门店陈列可以将Bat Pack与Marucci CAT Composite放在相邻位置,并设置bundle优惠促销;
    2) 线上网站或APP可以在Bat Pack商详页或加购/付款跳转页展示“猜您喜欢”/“再加¥XX即可换购”Marucci CAT Composite。

最后将频繁项集与关联规则保存到Excel,并发送给相关同事,本节才算结束。

六、用户分析

用户复购分析

复购率分析

复购率(在时间段A购买过两次及以上的客户数/在时间段A购买过的客户数)是衡量顾客忠诚度的重要指标,也反映了用户运营的成果。

注:本案例企业历史订单跨度达3年,全量的复购率可能无法准确反映业务情况,这里以一年为监控周期,计算整体复购率。

#拆分成三个表
orderID_158to167=orderID[(orderID['订单日期']>='2015-8-1')&(orderID['订单日期']<='2016-7-31')]
orderID_148to157=orderID[(orderID['订单日期']>='2014-8-1')&(orderID['订单日期']<='2015-7-31')]
orderID_138to147=orderID[(orderID['订单日期']>='2013-8-1')&(orderID['订单日期']<='2014-7-31')]
#计算该周期内顾客复购次数
rebuy_158to167=orderID_158to167.groupby('客户ID')[['订单ID']].transform('nunique').reset_index().rename(columns={'index':'客户ID','订单ID':'周期内客户订单数'})
rebuy_148to157=orderID_148to157.groupby('客户ID')[['订单ID']].transform('nunique').reset_index().rename(columns={'index':'客户ID','订单ID':'周期内客户订单数'})
rebuy_138to148=orderID_138to147.groupby('客户ID')[['订单ID']].transform('nunique').reset_index().rename(columns={'index':'客户ID','订单ID':'周期内客户订单数'})
#计算每个周期的复购率(%)
rebuy_rate_158to167=rebuy_158to167.loc[rebuy_158to167['周期内客户订单数']>1,'客户ID'].nunique()/rebuy_158to167['客户ID'].nunique()
rebuy_rate_148to157=rebuy_148to157.loc[rebuy_148to157['周期内客户订单数']>1,'客户ID'].nunique()/rebuy_148to157['客户ID'].nunique()
rebuy_rate_138to147=rebuy_138to148.loc[rebuy_138to148['周期内客户订单数']>1,'客户ID'].nunique()/rebuy_138to148['客户ID'].nunique()
print('2015.8至2016.7的复购率为:%.2f'%rebuy_rate_158to167)
print('2014.8至2015.7的复购率为:%.2f'%rebuy_rate_148to157)
print('2013.8至2014.7的复购率为:%.2f'%rebuy_rate_138to147)

得到结果:

可以发现,随着企业壮大,复购率也不断提升,最近一年的复购率达到32%,反映了企业逐渐建立起一批忠实顾客。但该指标如果持续过高也会反映企业开拓新用户方面可能存在问题,因此该需要对该指标及用户基数进行持续监测

平均复购周期

平均复购周期(每个复购用户的购买间隔之和/每个复购用户购买次数之和)反映了顾客重复购买的时间间隔,该信息可以知道店铺的运营人员在复购周期内提前触达顾客,促进复购。

注:在电商行业,计算平均复购周期时同一客户在同一天购买多单算作一单,本数据集同样遵守该原则,但实际业务分析时,需要区别线上线下场景。

下面展示计算客户每次复购间隔的代码:

#orderID去重得到每个客户每个订单日期customer_date
customer_date=orderID[['客户ID','订单日期']].drop_duplicates()
#对于每个客户按订单日期排序,后一行日期减上一个,得到每个人的每单的时间间隔
rebuy_win=customer_date.groupby('客户ID')['订单日期'].apply(lambda x:x.sort_values().diff(periods=1).dropna()).reset_index()
rebuy_win=rebuy_win.rename(columns={'订单日期':'rebuy_window'})
#将rebuy_win数据类型由timedelta64转为int
rebuy_win.rebuy_window=rebuy_win.rebuy_window.astype('str').map(lambda x :x[:-5]).astype('int32')
#这里分母要加rebuy_win['客户ID']是因为rebuy_win去重去掉了复购用户的首单
avg_rebuy_win=rebuy_win['rebuy_window'].sum()/(len(rebuy_win)+rebuy_win['客户ID'].nunique())
print('平均复购周期为:%.1f天'%avg_rebuy_win)

最后得到顾客的平均复购周期刚好在182天左右,相关运营同事可以在客户购买商品后半年左右,提前一两周作触达,唤醒客户进行复购。

顾客价值分析

对顾客价值进行分类有助于针对不同群体作出不同的运营决策,将有限资源发挥最大化。

注:本次分析应用RFM框架对近两年有购买的顾客进行分类,此前的购买过但近两年未复购的顾客记为流失顾客。

篇幅原因省略计算过程的代码,展示计算近两年每个顾客R(最近一次购买距今天数)、F(最近两年购买次数)、M(最近两年消费金额):

接着观察三个变量的特征(均值、分位数),判断分类标准(实际工作中,对于标准的制定需要跟利益相关方进行讨论)。

可以发现:

  1. 顾客最近一次购买天数集中在80-260天左右,有部分离群值大于500天,占顾客数的0.7%;

  1. 超过一半客户只购买1次,有75%购买了两次,有一部分离群值在4-28次,占顾客数的1.1%;

  1. 顾客消费总金额25%、50%、75%分位数分别为327元、1617元、2857元。

由于这部分离群值的存在,如果单纯给三个指标分为高低两档则不太好反映实际情况,但如果每个变量分档多了就会导致分类群体太多(假如每个变量分三档,三个变量也会分成3*3*3=27个群体),处理起来往往缺乏针对性,最后用户价值分类也会失去意义,因此决定采用基于kmeans的聚类分析对这三个变量进行聚类,分组数量定位8。

#使用kmeans法聚类
from sklearn.cluster import KMeans
#选择分8个群组
kmeans = KMeans(n_clusters=8, random_state=0).fit(RFM_after201408[['recency','frequency','monetary']])
#整理分组特征,含每个分组的人数
cluster_centers_=pd.DataFrame(kmeans.cluster_centers_,columns=['recency','frequency','monetary'])
cluster_size=pd.DataFrame(pd.Series(kmeans.labels_).value_counts(),columns=['cluster_size'])
#计算没类人群占比
cluster_size['cluster_size_pct']=cluster_size.cluster_size/customer_orders_cnt.shape[0]#(分母是全量用户数,因为还有一部分两年没复购的记为流失)
cluster_info=cluster_centers_.join(cluster_size)#join根据索引合并数据集
cluster_info

可以发现群组2、5、7的人数较少,且特征较为接近,都属于“买得多、花得多”的高价值群体,可以考虑将这三个群组合并。

根据每个分类特征及人数解读人群:

  1. 重要发展用户(群组0,13%):最近一次购买时间较远、购买频次中等水平,但贡献金额较高,对这类人群应该投入资源,多触达和提供良好服务,尽量提升购买频率;

  1. 一般发展用户(群组1,31%):最近一次购买时间较远、购买频次中等水平、贡献金额中低水平,对这类人应该投入适量资源运营,控制成本基础上提升购买频次或客单价;

  1. 重要价值用户(群组2、5、7,1%):近期有过购买,购买频次高,贡献金额多,对于此类人群应提供VIP级别服务,维护良好关系,除了保持住该人群,运营一大重点是如何引导这批高价值忠实客户带来新的客户群体;

  1. 重要保持用户(群组3,3%):最近一次购买时间较在三个月左右的中等水平,但购买频次与贡献金额较高,对该群体应该适时主动联系;

  1. 一般挽留用户(群组4,42%):最近一次购买时间久远,购买频次与贡献金额水平较低,有流失风险,对该群体只需要在重要营销节点作触达进行挽留即可,还可以通过低成本方式了解对该群体逐渐流失的问题所在;

  1. 重要挽留用户(群组6,9%):最近一次购买时间较远,购买频次中等水平,但贡献金额水平较高,有流失风险,需要投入一定资源研究问题所在,并制定对应挽留策略。

根据不同人群的比例可以发现,(分类标准达成共识情况下)高价值用户比例偏小,根据用户分类结果提升用户价值是接下来用户运营的重点。

最后,将群组2、5、7归为一组后重新排序命名,并将打了标签的顾客名单给到用户运营的同事,本环节才算结束。

  • 5
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值