Olist Store电商数据分析

一、项目背景

        Olist是巴西市场上最大的百货公司,来自巴西各地的小型企业可以通过Olist商店销售他们的产品,并使用Olist物流合作伙伴将其直接运送给客户。本文将从用户、商家、商品、销售、交付五个维度对Olist商店2016年9月-2018年8月的订单数据进行分析,目的是发现平台存在的问题,分析原因,并给出建议。

        数据来源:Brazilian E-Commerce Public Dataset by Olist | Kaggle

        数据集介绍:该数据集由Olist 提供,包含2016年9月-2018年8月在巴西多个市场进行的10万个订单的信息。其功能允许从多个维度查看订单:从订单状态、价格、付款和运费表现到客户位置、产品属性以及最终由客户撰写的评论以及地理定位数据集,它将巴西邮政编码与纬度/经度坐标联系起来。 该数据集包含9个子集,每个数据集之间的联系如下图:

        该数据集包含9个文件:

        <1> 文件olist_customers_dataset.csv包含5个字段,99400行,此数据集包含有关客户及其位置的信息,使用它来识别订单数据集中的唯一客户并查找订单交货地点
        customer_id:订单对应的客户ID。订单数据集的键,每个订单都有一个唯一的customer_id
        customer_unique_id:客户唯一ID
        customer_zip_code_prefix:客户邮政编码的前五位数字
        customer_city:客户所在城市
        customer_state:客户所在的州

        <2>文件olist_geolocation_dataset.csv包含5个字段,1000000行,此数据集包含巴西邮政编码及其纬度/经度坐标信息。 用它来绘制地图并找出卖家和顾客之间的距离
        geolocation_zip_code_prefix:邮政编码的前5位数字
        geolocation_lat:纬度
        geolocation_lng:经度
        geolocation_city:城市名
        geolocation_state:州

        <3>文件olist_order_items_dataset.csv包含7个字段,113000行,此数据集包括有关每个订单中购买的商品的数据
        order_id:订单ID
        order_item_id:序号,用于标识同一订单中包含的商品数量
        product_id:商品ID
        seller_id:卖家ID
        shipping_limit_date:将订单处理到物流合作伙伴的卖家发货限制日期
        price:商品价格
        freight_value:商品运费价值(如果订单含有多个商品,则运费价值在商品之间拆分)

        <4>文件olist_order_payments_dataset.csv包含5个字段,104000行,此数据集包含有关订单付款选项的数据
        order_id:订单ID
        payment_sequential:付款顺序(客户可以使用多种付款方式支付订单,如果他这样做,将创建一个序列以适应所有付款)
        payment_type:客户选择的付款方式
        payment_installments:客户选择的分期付款数量
        payment_value:交易金额

        <5>文件olist_order_reviews_dataset.csv包含7个字段,100000行该数据集包括有关客户所做评论的数据
        review_id:唯一评价ID
        order_id:订单ID
        review_score:评分
        review_comment_title:来自客户留下的评论的评论标题
        review_comment_message:来自客户留下的评论的评论信息
        review_creation_date:显示向客户发送满意度调查的日期
        review_answer_timestamp:显示满意度调查答案时间戳

        <6>文件olist_orders_dataset.csv包含8个字段,99400行,这是核心数据集,可以从每个订单中找到所有其他信息
        order_id:订单ID
        customer_id:客户ID
        order_status:订单状态
        order_purchase_timestamp:购买时间
        order_approved_at:付款审批时间
        order_delivered_carrier_date:订单交付承运人时间
        order_delivered_customer_date:客户实际订单交货日期
        order_estimated_delivery_date:购买时通知客户的预计交货日期

        <7>文件olist_products_dataset.csv包含9个字段,33000行,该数据集包括有关Olist销售的商品的数据
        product_id:唯一商品ID
        product_category_name:商品的类别名称,葡萄牙语
        product_name_length:从商品名称中提取的字符数
        product_description_length:从商品说明中提取的字符数
        product_photos_qty:商品发布的照片数量
        product_weight_g:商品重量以克为单位
        product_length_cm:商品长度以厘米为单位
        product_height_cm:商品高度以厘米为单位
        product_width_cm:商品宽度以厘米为单位

        <8>文件olist_sellers_dataset.csv包含4个字段,3095行,该数据集包括有关在Olist完成订单的卖家的数据。 使用它来查找卖家位置并确定哪个卖家完成了每个商品的出售
        seller_id:卖家ID
        seller_zip_code_prefix:卖家邮政编码的前5位数字
        seller_city:卖家所在城市
        seller_state:卖家所在州

        <9>文件product_category_name_translation.csv包含2个字段,71行,将商品名从葡萄牙语翻译为英语
        product_category_name:葡萄牙语的类别名称
        product_category_name_english:英语的类别名称

二、分析框架

         分析工具:MySQL、Power BI、Excel

三、数据清洗

3.1 数据导入

        在Navicat中使用MySQL新建一个数据库,导入数据集

3.2 数据类型转换

        数据集中原始数据类型均为varchar,数字、货币、时间类型的数据需要进行数据类型转换

-- 数据类型转换
ALTER TABLE olist_geolocation_dataset
	MODIFY geolocation_lat DECIMAL(10,7),
	MODIFY geolocation_lng DECIMAL(10,7);

ALTER TABLE olist_order_items_dataset
	MODIFY order_item_id INT,
	MODIFY shipping_limit_date datetime,
	MODIFY price DECIMAL(10,2),
	MODIFY freight_value DECIMAL(10,2);

ALTER TABLE olist_order_payments_dataset
	MODIFY payment_sequential INT,
	MODIFY payment_installments INT,
	MODIFY payment_value DECIMAL(10,2);

ALTER TABLE olist_order_reviews_dataset
	MODIFY review_score INT,
	MODIFY review_creation_date datetime,
	MODIFY review_answer_timestamp datetime;

ALTER TABLE olist_orders_dataset
	MODIFY order_purchase_timestamp datetime,
	MODIFY order_approved_at datetime,
	MODIFY order_delivered_carrier_date datetime,
	MODIFY order_delivered_customer_date datetime,
	MODIFY order_estimated_delivery_date datetime;

ALTER TABLE olist_products_dataset
	MODIFY product_name_length INT,
	MODIFY product_description_length INT,
	MODIFY product_photos_qty INT,
	MODIFY product_weight_g INT,
	MODIFY product_length_cm INT,
	MODIFY product_height_cm INT,
	MODIFY product_width_cm INT;

        也可以在设计表中直接修改字段的数据类型

3.3 删除重复行

-- 查看是否有重复行
SELECT customer_id
FROM olist_customers_dataset
GROUP BY customer_id
HAVING count(*) > 1;

SELECT geolocation_zip_code_prefix
FROM olist_geolocation_dataset
GROUP BY geolocation_zip_code_prefix
HAVING count(*) > 1;

 

        可以看到,一个邮编对应多个经纬度,可能是平台准确记录了每个客户下单时的定位,但是不利于后续表连接分析,所以取均值。

SELECT order_id
FROM olist_order_items_dataset
GROUP BY order_id, order_item_id
HAVING count(*) > 1;

SELECT order_id
FROM olist_order_payments_dataset
GROUP BY order_id, payment_sequential, payment_type
HAVING count(*) > 1;

SELECT review_id
FROM olist_order_reviews_dataset
GROUP BY review_id, order_id
HAVING count(*) > 1;

 

SELECT order_id
FROM olist_orders_dataset
GROUP BY order_id
HAVING count(*) > 1;

SELECT product_id
FROM olist_products_dataset
GROUP BY product_id
HAVING count(*) > 1;

SELECT seller_id
FROM olist_sellers_dataset
GROUP BY seller_id
HAVING count(*) > 1;

 

SELECT product_category_name
FROM product_category_name_translation
GROUP BY product_category_name
HAVING count(*) > 1;

-- 删除重复值行
CREATE TABLE temp
	SELECT geolocation_zip_code_prefix
		,ROUND(AVG(geolocation_lat), 7) as geolocation_lat
		,ROUND(AVG(geolocation_lng), 7) as geolocation_lng
		,MAX(geolocation_city) as geolocation_city
		,MAX(geolocation_state) as geolocation_state
	FROM olist_geolocation_dataset
	GROUP BY geolocation_zip_code_prefix;
DROP TABLE olist_geolocation_dataset;
ALTER TABLE temp RENAME TO olist_geolocation_dataset;

3.4 缺失值处理

-- 查看缺失值
SELECT count(customer_id)
	,count(customer_id)
	,count(customer_state)
	,count(customer_unique_id)
	,count(customer_zip_code_prefix)
FROM olist_customers_dataset;

SELECT count(geolocation_lat)
	,count(geolocation_lng)
	,count(geolocation_city)
	,count(geolocation_state)
	,count(geolocation_zip_code_prefix)
FROM olist_geolocation_dataset;

SELECT count(order_id)
	,count(order_item_id)
	,count(product_id)
	,count(seller_id)
	,count(shipping_limit_date)
	,count(price)
	,count(freight_value)
FROM olist_order_items_dataset;

SELECT count(order_id)
	,count(payment_type)
	,count(payment_value)
	,count(payment_sequential)
	,count(payment_installments)
FROM olist_order_payments_dataset;

        olist_order_reviews_dataset表可以明显看出存在缺失值,但是对本次分析没有影响,无需处理。

SELECT count(customer_id)
	,count(order_id)
	,count(order_status)
	,count(order_purchase_timestamp)
	,count(order_approved_at)
	,count(order_delivered_carrier_date)
	,count(order_delivered_customer_date)
	,count(order_estimated_delivery_date)
FROM olist_orders_dataset; 

        根据查询结果,order_delivered_customer_date、order_approved_at、order_delivered_carrier_date缺失数据与整体数据体量相比较少,所以选择直接删除。 

SELECT count(product_id)
	,count(product_category_name)
	,count(product_photos_qty)
	,count(product_name_length)
	,count(product_description_length)
	,count(product_weight_g)
	,count(product_width_cm)
	,count(product_height_cm)
	,count(product_length_cm)
FROM olist_products_dataset;

        根据查询结果,product_category_name、product_photos_qty、product_name_length、product_description_length缺失数据相对其他缺失数据较多,但是与整体数据体量相比较少,所以选择直接删除因为查表可知这4个字段的数据是同时缺失的,而product_category_name无法使用可能值插补,只能删除,所以另外3个字段也没必要补充了)。

        本次分析不涉及product_weight_g、product_width_cm、product_height_cm、product_length_cm,因此不做处理。

SELECT count(seller_id)
	,count(seller_city)
	,count(seller_state)
	,count(seller_zip_code_prefix)
FROM olist_sellers_dataset;

 

SELECT count(product_category_name)
	,count(product_category_name_english)
FROM product_category_name_translation;

 

        也可以先在Navicat中对表中各字段分别进行升序排序,查看是否有Null值,再查询缺失值的数量。

-- 删除缺失值
DELETE FROM olist_orders_dataset
WHERE order_approved_at IS NULL
	OR order_delivered_carrier_date IS NULL
	OR order_delivered_customer_date IS NULL;

DELETE FROM olist_products_dataset
WHERE product_category_name IS NULL
	OR product_photos_qty IS NULL 
	OR product_name_length IS NULL
	OR product_description_length IS NULL;

3.5 剔除异常值

        在Navicat中对表中各字段分别进行升序、降序排序,发现有2条数据payment_installments为0,而根据数据定义,分期数最小应为1期,由于异常值数据体量较小,所以选择直接删除。

SELECT payment_type
FROM olist_order_payments_dataset
GROUP BY payment_type;

        查询可知,存在未定义支付方式的订单,数据只有3条,可以直接删除。

-- 剔除分期数异常值
DELETE FROM olist_order_payments_dataset
WHERE payment_installments = 0
	OR payment_type = 'not_defined';

-- 验证时间逻辑关系
SELECT *
FROM olist_orders_dataset
WHERE order_purchase_timestamp > order_approved_at
	OR order_purchase_timestamp > order_delivered_carrier_date
	OR order_purchase_timestamp > order_delivered_customer_date
	OR order_purchase_timestamp > order_estimated_delivery_date;

        根据查询结果,存在订单实际交货时间在购买时间之前的数据,不合理,所以直接删除。 

-- 剔除时间异常值
DELETE FROM olist_orders_dataset
WHERE order_purchase_timestamp > order_approved_at
	OR order_purchase_timestamp > order_delivered_carrier_date
	OR order_purchase_timestamp > order_delivered_customer_date
	OR order_purchase_timestamp > order_estimated_delivery_date;

3.6 时间格式转换

        根据分析需要,增加日期、小时列:

-- 时间格式转换
ALTER TABLE olist_orders_dataset
	ADD d DATE,
	ADD h VARCHAR(10);

UPDATE olist_orders_dataset
SET d = DATE(order_purchase_timestamp),
	h = DATE_FORMAT(order_purchase_timestamp, '%H');

3.7 主键与索引

        添加主键并创建索引以提高查询速度:

CREATE INDEX idx_d ON olist_orders_dataset(d);
CREATE INDEX idx_h ON olist_orders_dataset(h);
CREATE INDEX idx_payment_type ON olist_order_payments_dataset(payment_type);
CREATE INDEX idx_payment_type_installments ON olist_order_payments_dataset(payment_type, payment_installments);
CREATE INDEX idx_score ON olist_order_reviews_dataset(review_score);

四、数据分析

4.1 用户分析

4.1.1 用户地区分布

-- 用户地区分布散点图
SELECT customer_unique_id, geolocation_lat, geolocation_lng
FROM olist_customers_dataset
LEFT JOIN olist_geolocation_dataset
	ON customer_zip_code_prefix = geolocation_zip_code_prefix
GROUP BY customer_unique_id, geolocation_lat, geolocation_lng;

-- 用户地区分布
SELECT customer_state AS 州
	,COUNT(DISTINCT customer_unique_id) AS 用户数
	,COUNT(DISTINCT customer_unique_id) / SUM(COUNT(DISTINCT customer_unique_id))OVER() AS 占比
FROM olist_customers_dataset
GROUP BY customer_state
ORDER BY 用户数 DESC;

        在Power BI中导入巴西各州人口、GDP数据,便于分析用户地区分布。 

气泡大小表示用户数,颜色深浅表示各州人口数

        可以看出,用户集中分布在巴西东南部沿海地区和内陆首都附近,其中近42%的用户来自SP州,各州用户数量地区分布与巴西人口分布及经济发展情况基本一致。平台在后续运营过程中可以根据不同地区特点进行开发,针对不同地区用户对商品的喜好进行营销投放。

4.1.2 用户流量分析

4.1.2.1 日活DAU

-- 日活DAU
SELECT d AS 日期
	,COUNT(DISTINCT customer_unique_id) AS DAU
FROM olist_customers_dataset
JOIN olist_orders_dataset
	USING(customer_id)
GROUP BY d
ORDER BY d;

        可以看出,DAU总体呈上升趋势,在2017年11月24日当天DAU增长至1132,较前一日增长327%,经查询可知,11月24日为“黑色星期五”,该日南美洲等国家会进行打折促销活动,可以看出活动效果很好。 

4.1.2.2 月活MAU

-- 月活MAU
SELECT LEFT(d, 7) AS 月份
	,COUNT(DISTINCT customer_unique_id) AS MAU
FROM olist_customers_dataset
JOIN olist_orders_dataset
	USING(customer_id)
GROUP BY 月份
ORDER BY 月份;

        可以看出,2017年11月前,MAU呈现快速增长的趋势,2017年11月后MAU逐渐趋于平稳,说明2017年11月24日的活动效果显著。

4.1.2.3 时段活跃人数

-- 时段活跃人数
SELECT h AS 时
	,COUNT(DISTINCT customer_unique_id) AS 时段活跃人数
FROM olist_customers_dataset
JOIN olist_orders_dataset
	USING(customer_id)
GROUP BY h
ORDER BY h;

        可以看出,用户下单时间集中在9点-23点,除了睡觉时间,用户几乎随时网购,并未受上班时间的影响。

        上午10点至晚上22点的活跃用户数明显高于平均水平,是用户活跃时段,其中12点和18点推测由于饭点休息时间导致活跃度略有下滑,22点后活跃用户数明显下降,至次日5点后开始回升,直至9点后逐渐恢复到正常活跃水平。数据的变化趋势符合大部分用户的正常作息规律,说明用户会在日常空闲时间下单购买,而不是特定时间段(如非工作时段)。平台运营可以根据用户的活跃时间,在不同时间段采取相应的促销措施。

4.1.3 支付分析

4.1.3.1 支付方式

-- 支付方式
SELECT payment_type as 支付方式, count(DISTINCT order_id) as 订单数
FROM olist_order_payments_dataset
GROUP BY payment_type;

        可以看出,约75%的订单选择信用卡进行支付,其次为巴西本地线下交易方式boleto,占比近20%,这两种方式是平台主流的支付方式。

4.1.3.2 分期方式

-- 分期方式
SELECT payment_installments as 分期数, count(DISTINCT order_id) as 订单数
FROM olist_order_payments_dataset
WHERE payment_type = 'credit_card'
GROUP BY payment_installments;

        可以看出,超过65%的订单选择了分期付款的方式,且绝大多数订单选择分10期以内。一定程度上说明该平台比较推荐分期付款。

4.1.4 用户评分

4.1.4.1 用户评分占比

-- 用户评分
SELECT review_score as 评分, count(*) as 评分数
FROM olist_order_reviews_dataset
GROUP BY review_score;

        可以看出,近60%的用户评分为5分,超过10%的评分为1分。以1-2分为差评、3分为中评、4-5分为好评的评价标准来看,用户好评率为77.07%,差评率为14.69%,用户总体满意度较高,但仍有一定的提升空间。可以进一步分析差评原因并归类,对症下药,有针对性地改善用户体验。商品质量类的原因应及时下架整改,恢复品质后再上架,完善售后服务,及时退货退款,服务态度类的原因则应加强客服的培训管理。

4.1.4.2 各时段评价数分布

-- 用户评价时间
SELECT hour(review_answer_timestamp) as 时, count(*) as 评价数
FROM olist_order_reviews_dataset
GROUP BY 时
ORDER BY 时;

        可以看出白天11点至12点以及晚上21点至凌晨1点是用户评价高峰期,可以考虑在填写评论后的页面上针对性地推出广告,进一步促进消费。

4.1.5 用户分层

4.1.5.1 用户贡献的销售额分布

-- 用户贡献的销售额分布
SELECT rk / count(*)over() as 用户数累计百分比
	,sum_price as 销售额
	,sum(sum_price)over(order by rk) / sum(sum_price)over() as 销售额累计百分比
FROM (
	SELECT customer_unique_id
		,row_number()over(order by sum(price) desc) as rk
		,sum(price) as sum_price
	FROM olist_customers_dataset
	JOIN olist_orders_dataset
		USING(customer_id)
	JOIN olist_order_items_dataset
		USING(order_id)
	GROUP BY customer_unique_id
) as t;

        根据二八法则,当一个企业80%的收入来自20%的客户总数时,这个企业客户群体是健康且趋于稳固的。而平台前20%的用户只贡献了56.63%的收入,近50%的用户贡献的收入才达到80%。说明大客户太少,需增加大客户数量,故有必要将客户按照客户价值划分进行精细化运营。

4.1.5.2 RFM模型用户分层

        根据用户的最近一次消费时间、消费频率、消费金额构建RFM模型,将用户划分为以下几类:

-- RFM模型用户分层
-- 创建视图,整合所需订单信息
CREATE VIEW order_detail AS
	SELECT d, customer_unique_id, order_id, sum(payment_value) as payment_value
	FROM olist_orders_dataset
	JOIN olist_customers_dataset
		USING(customer_id)
	JOIN olist_order_payments_dataset
		USING(order_id)
	GROUP BY customer_unique_id, d, order_id;
		
-- 构造R值
CREATE VIEW Recency AS
	SELECT customer_unique_id
		,if(recency <= avg(recency)over(), 1, 0) as R
	FROM (
		SELECT customer_unique_id
			, max(d) as recent_d
			, datediff(max(max(d))over(), max(d)) as recency
		FROM order_detail
		GROUP BY customer_unique_id
	) as t;

-- 构造F值
CREATE VIEW Frequency AS
	SELECT customer_unique_id
		,if(order_cnt >= avg(order_cnt)over(), 1, 0) as F
	FROM (
	SELECT customer_unique_id, count(*) as order_cnt
	FROM order_detail
	GROUP BY customer_unique_id
	) as t;

-- 构造M值
CREATE VIEW Monetary AS
	SELECT customer_unique_id
		,if(sum(payment_value) > avg(sum(payment_value))over(), 1, 0) as M
	FROM order_detail
	GROUP BY customer_unique_id;
	
-- 构建RFM模型
CREATE VIEW RFM AS
	SELECT *
		,CASE WHEN R = 1 AND F = 1 AND M = 1 THEN '重要价值'
			WHEN R = 1 AND F = 0 AND M = 1 THEN '重要发展'
			WHEN R = 0 AND F = 1 AND M = 1 THEN '重要保持'
			WHEN R = 0 AND F = 0 AND M = 1 THEN '重要挽留'
			WHEN R = 1 AND F = 1 AND M = 0 THEN '一般价值'
			WHEN R = 1 AND F = 0 AND M = 0 THEN '一般发展'
			WHEN R = 0 AND F = 1 AND M = 0 THEN '一般保持'
			WHEN R = 0 AND F = 0 AND M = 0 THEN '一般挽留'
		END as 用户类型
	FROM Recency
	JOIN Frequency
		USING(customer_unique_id)
	JOIN Monetary
		USING(customer_unique_id);

-- 各类型用户数量、贡献价值
SELECT 用户类型
	,count(DISTINCT customer_unique_id) as 用户数量
	,sum(order_price) as 贡献价值
FROM (	
	SELECT 用户类型, customer_unique_id, order_id
		,sum(price) as order_price
	FROM RFM
	JOIN order_detail
		USING(customer_unique_id)
	JOIN olist_order_items_dataset
		using(order_id)
	GROUP BY 用户类型, customer_unique_id, order_id
) as t
GROUP BY 用户类型;

        从数量上看,一般发展用户和一般挽留用户数量最多,占比均超过30%,重要发展用户和重要挽留用户其次,占比均超过10%,发展和挽留用户总占比超过90%,其他类型用户较少。说明该平台用户普遍消费频率低且最近消费时间较远,大多数用户为中低价值用户,有充分的发展和优化空间。

        从贡献价值来看,重要价值用户和重要保持用户贡献价值总占比不足5%,超过60%的销售额来自重要发展用户和重要挽留用户,另外30%的销售额来自一般发展用户和一般挽留用户,说明该平台虽然大多数为低频消费用户,但是这部分用户的总体贡献价值较高。对于重要发展用户和重要挽留用户,应主动联系,给予优惠,提高复购率,并分析用户流失原因,通过针对性的运营手段唤回。对于一般发展用户和一般挽留用户,应增加免费试用提升用户兴趣,提高新用户留存率,同时分析用户流失原因,有针对性地唤回。

-- RFM关系散点图
SELECT customer_unique_id, recency, frequency, monetary
FROM (
	SELECT customer_unique_id
		, datediff(max(max(d))over(), max(d)) as recency
	FROM order_detail
	GROUP BY customer_unique_id
) as t_r
JOIN (
	SELECT customer_unique_id, count(*) as frequency
	FROM order_detail
	GROUP BY customer_unique_id
) as t_f
	USING(customer_unique_id)
JOIN (
	SELECT customer_unique_id, sum(payment_value) as monetary
	FROM order_detail
	GROUP BY customer_unique_id
) as t_m
	USING(customer_unique_id);

        从RFM关系图来看,R与F、M基本没有关系,这也是因为大部分用户复购率很低,应采取会员制度等措施提高复购率。而F与M有一定的负相关关系,说明付费金额高的用户多为单次购买,应加强对这部分用户的召回,而高频消费用户总是付费金额低,对于这部分用户应优化关联销售,提高其客单价。

4.1.5.3 各类型用户品类偏好

-- 各类型用户品类偏好
SELECT 用户类型, product_category_name as 商品品类
	,sum(price) as 消费金额
	,row_number()over(partition by 用户类型 order by sum(price) DESC) as rk
FROM olist_products_dataset
JOIN olist_order_items_dataset
	USING(product_id)
JOIN order_detail
	USING(order_id)
JOIN RFM
	USING(customer_unique_id)
GROUP BY 用户类型, product_category_name;

         对各类型用户消费金额前十的商品品类进行透视分析,可以看出,健康美容、家居用品、运动休闲等品类出现在各类用户消费金额排名前列,说明这些品类是大众热门品类,适合对各类用户做推广和促销,而电脑、文具、小家电等属于小众热门品类,对特定类型用户来说更受欢迎,向特定的用户群体进行推荐效果更好。

4.2 商家分析

4.2.1 商家地区分布

-- 商家地区分布散点图
SELECT seller_id, geolocation_lat, geolocation_lng
FROM olist_sellers_dataset
JOIN olist_geolocation_dataset
	ON seller_zip_code_prefix = geolocation_zip_code_prefix
GROUP BY seller_id, geolocation_lat, geolocation_lng;

-- 商家地区分布
SELECT seller_state AS 州
	, COUNT(DISTINCT seller_id) AS 商家数
	, COUNT(DISTINCT seller_id) / SUM(COUNT(DISTINCT seller_id))OVER() AS 占比
FROM olist_sellers_dataset
GROUP BY seller_state
ORDER BY 商家数 DESC;

气泡大小表示商家数,颜色深浅表示各州人口数 

        可以看出,商家集中分布在巴西东南部沿海地区和内陆首都附近,其中近60%的商家来自SP州,各州商家数量地区分布与巴西人口分布及经济发展情况基本一致。

        商家的地区分布占比与用户的地区分布不完全相同,主要体现在来自SP州的商家占比相较用户占比多了近20%。

4.2.2 商家订单量及销售额

-- 商家订单量及销售额
SELECT seller_id, seller_state
	,count(DISTINCT order_id) as 订单量
	,sum(price) as 销售额
	,CASE  
		WHEN count(DISTINCT order_id) <= 20 THEN '(0,20]'
		WHEN count(DISTINCT order_id) <= 100 THEN '(20,100]'
		WHEN count(DISTINCT order_id) <= 500 THEN '(100,500]'
		WHEN count(DISTINCT order_id) <= 1000 THEN '(500,1000]'
		ELSE '(1000,+∞)'
	END as 订单量区间
	,CASE  
		WHEN sum(price) <= 1000 THEN '(0,1000]'
		WHEN sum(price) <= 10000 THEN '(1000,10000]'
		WHEN sum(price) <= 100000 THEN '(10000,100000]'
		ELSE '(100000,+∞)'
	END as 销售额区间
FROM olist_sellers_dataset
JOIN olist_order_items_dataset
	USING(seller_id)
GROUP BY seller_state, seller_id; 

        可以看出,在分析时间段内,商家的订单量普遍较低,有2885个商家订单量小于20,占比高达74.22%,其中最小订单量为1;订单量超过1000单的商家只有10个,均来自SP州,其中最大订单量为1854。

        可以看出,在分析时间段内,销售额在1万以上的商家不到10%,其中最大销售额为229472.63雷亚尔;大部分商家销售额都在1万以下,且超过半数的商家销售额在1000以内,其中最小销售额为3.5雷亚尔。结合订单量来看,平台的商家是以小商家为主。

4.2.3 商家平均得分

-- 商家平均得分
SELECT seller_id
	,avg(review_score) as 平均得分
	,CASE WHEN avg(review_score) < 2 THEN '[1,2)'
		WHEN avg(review_score) < 3 THEN '[2,3)'
		WHEN avg(review_score) < 4 THEN '[3,4)'
		ELSE '[4,5]'
	END as 平均得分区间
FROM olist_order_reviews_dataset
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY seller_id; 

        可以看出,将近65%的商家平均得分在4分以上,平均得分3分以下的商家仅占11%左右,且多数商家的平均得分在3.75-5这个区间,比较符合实际,说明该平台从商品到商家服务等方面属于相对完善的程度,整个流程基本没有问题。

4.3 商品分析

4.3.1 各品类的商品数及占比

-- 商品总数及商品种类数
SELECT '商品总数' as 类别, count(DISTINCT product_id) as 数量
FROM olist_products_dataset
union all
SELECT '商品种类数' , count(DISTINCT product_category_name)
FROM olist_products_dataset;

-- 各品类商品数量及占比
SELECT product_category_name, count(*) as 商品数
	,concat(round(count(*) / sum(count(*))over() * 100, 2), '%') as 占比
FROM olist_products_dataset
GROUP BY product_category_name;

        经查询可知,截至分析节点,平台商品总数为32341,商品种类数为73。 

        很多品类的商品数(子类数)较少,可能导致产品不够丰富,无法满足用户的选择需求。

4.3.2 各品类的销量、销售额

-- 各品类的销量、销售额、单价
SELECT product_category_name
	,count(*) as 销量
	,sum(price) as 销售额
	,sum(sum(price))over(order by sum(price) DESC) / sum(sum(price))over() as 累计销售额占比
	,round(avg(price), 2) as 单价
	,CASE WHEN avg(price) <= 100 THEN '(0,100]'
		WHEN avg(price) <= 200 THEN '(100,200]'
		WHEN avg(price) <500 THEN '(200,500]'
		ELSE '(500,+∞)'
	END as 单价区间
FROM olist_products_dataset
JOIN olist_order_items_dataset
	USING(product_id)
GROUP BY product_category_name;

        从上面两图可以看出,平台各个品类的销量和销售额趋势基本相同,且销量和销售额排在前列的基本都是单价较低的品类,只有少数用户购买了高价品类,说明平台是以平价策略为主。平均单价在200以下的品类占了86.31%,可以看出此平台的商品价格定位属于中等偏下。 

        所以,吸引商品价格较低的商户如文具类、幼儿玩具类、日用品类等商户入驻,是平台拉新重点。在资源充足的情况下,再考虑培养高价格商品商户。

        高价商品:可以提升客单价,塑造高端品牌形象。高价集中在钟表礼物,花园工具和健康美妆。消费时间更集中在购物节,消费地点集中在里约和圣保罗。对于高价商品,应在购物节增加折扣活动。

        可以看出,前23.29%的品类贡献了80.69%的销售额,符合二八法则。平台可以按照70%、20%、10%的销售额比重将商品分为A、B、C三类,把重点管理资源放在A类,把较少的资源分配给C类或者砍掉部分销售额过低的C类,以达到资源管理的最优状态,从而提升平台收入。同时,结合前面各品类商品数的分析,对于一些商品数过少的C类商品可以直接砍掉,同时丰富A、B类商品的商品数(子类数)。

4.3.4 销量、销售额Top10品类

        销量前十的品类为家居产品、健康美容、运动休闲、家具装饰、电脑配件、家用器皿、手表礼品、电话、园艺工具、汽车用品,占总销量的64.54%。

        销售额前十的品类为健康美容、手表礼品、家居产品、运动休闲、电脑配件、家居装饰、很酷的东西、家用器皿、汽车用品、园艺工具,占总销售额的63.20%。

        对于这些品类,可以采取扩张的营销策略,吸引同品类商家入驻,增加商品种类,增加广告投放和流量倾斜,增设折扣促销活动,在热销商品中打造爆品,以爆品带动整个品类乃至全平台销量。可适当多备库存,降低断货造成的生意损失。此外,应注重培养用户复购的习惯,包括但不限于开设会员充值、积分制度、主动联系老用户(发优惠券)、定期折价促销。

4.3.4 各商品的销量、销售额

-- 各商品的销量、销售额、单价
SELECT product_id
	,count(*) as 销量
	,sum(price) as 销售额
	,round(avg(price), 2) as 单价
	,CASE WHEN avg(price) <= 100 THEN '(0,100]'
		WHEN avg(price) <= 200 THEN '(100,200]'
		WHEN avg(price) <= 500 THEN '(200,500]'
		WHEN avg(price) <= 1000 THEN '(500,1000]'
		ELSE '(1000,+∞)'
	END as 单价区间
FROM olist_order_items_dataset
GROUP BY product_id;

        可以看出,商品的销量、销售额头部效应明显,销量呈严重的两极分化,平台商品未能很好的满足用户的需求。

        可以看出,单价在(0,100]区间的商品销量最好,占比63.04%,销售额占比26.44%,位居第二;单价在(100,200]区间的商品销售额最高,占比28.87%,销量占比24.73%,位居第二。说明用户最喜欢的是价位在(0,100]区间的商品,但对平台贡献销售额最大的是(100,200]区间的商品,平台客户主要是低消费及中等消费人群。

4.3.5 商品详情

-- 商品详情
SELECT product_id
	,product_photos_qty
	,product_description_length
FROM olist_products_dataset
JOIN olist_order_items_dataset
	USING(product_id)
GROUP BY product_id, product_photos_qty, product_description_length;

        可以看出,大部分商品详情的图片描述和文字描述较为简陋。50.98%的商品只有1张图片,94.38%的商品配图不超过5张,41.58%的商品文字描述不超过500字。过于简陋的商品详情介绍会使顾客对商品参数和卖点不了解不信任,进而减少购买。

        平台应提醒商家为产品拍摄高清实物图并丰富商品详情页的描述,可以出一个撰写商品详情描述的规范教程,或开展商品详情页代写服务。

4.4 销售环节分析

4.4.1 销售概况

-- 总销量、总销售额、客单价
SELECT count(product_id) as 总销量
	,sum(price) as 总销售额
	,round(sum(price) / count(DISTINCT customer_unique_id), 2) as 客单价
FROM olist_orders_dataset
JOIN olist_customers_dataset
	USING(customer_id)
JOIN olist_order_items_dataset
	USING(order_id);

        截至分析节点,平台商品总销量为109994,总销售额为13200068.23雷亚尔,客单价为141.66雷亚尔。

4.4.2 不同时间维度下的销量、销售额

4.4.2.1 年

-- 年销量、销售额
SELECT year(d) as 年
	,count(product_id) as 销量
	,sum(price) as 销售额
FROM olist_orders_dataset
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY year(d);

        由于16年和18年订单数据不完整,无法计算准确的同比增长率,但可以看出平台整体销量和销售额在稳步上升。 

4.4.2.2 月

-- 月销量、销售额、环比
SELECT left(d, 7) as 月
	,count(product_id) as 销量
	,sum(price) as 销售额
	,round(sum(price) / lag(sum(price))over(order by left(d, 7)) - 1, 4) as 环比
FROM olist_orders_dataset
JOIN olist_order_items_dataset
	USING(order_id)
WHERE left(d, 7) not in ('2016-09', '2016-12')
GROUP BY 月; 

        (因为2016年9月和12月销量、销售额过低,所以去掉了这两个月)

        总体趋势:销量、销售额随月份变化基本一致,2016-2017年平台销量和销售额快速增长,17年11月后增速趋缓。

        2017年:销量及销售额整体呈上升趋势,3、5月出现小高峰,11月达到顶峰。全年只有4、6、12三个月销量、销售额下降。12月销量相比1月翻了6.8倍,销售额翻了6.5倍。

        2018年:销售额在90万附近波动变化。6-8月的销售额整体不及3-5月的水平,一定程度上可以说明出现了负增长的苗头。

        节日性:由环比随时间变化易看出销售额呈节日性波动。2-3月狂欢节、5月母亲节、6月巴西情人节、8月父亲节、11月黑五、12月圣诞节等,节日期间或前夕销量会上升,由于消费者选择集中在节日消费,故与节日相关的前一个月与后一个月的销售额均有下降。

4.4.2.3 周

-- 周销量、销售额
SELECT date_format(d, '%W') as 周
	,count(product_id) as 销量
	,sum(price) as 销售额
FROM olist_orders_dataset
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY 周;  

        可以看出,用户热衷于工作日网购,周末销量、销售额下降明显。工作日销售额小范围变化,环比下降2.19%-4.46%,周六最低,环比周五下降近25%,降幅较大。

-- 周、时段维度下销量热力图
SELECT h
	,MAX(IF(w = 'Monday', 销量, 0)) AS 星期一
	,MAX(IF(w = 'Tuesday', 销量, 0)) AS 星期二
	,MAX(IF(w = 'Wednesday', 销量, 0)) AS 星期三
	,MAX(IF(w = 'Thursday', 销量, 0)) AS 星期四
	,MAX(IF(w = 'Friday', 销量, 0)) AS 星期五
	,MAX(IF(w = 'Saturday', 销量, 0)) AS 星期六
	,MAX(IF(w = 'Sunday', 销量, 0)) AS 星期日
FROM (
	SELECT h
		,DATE_FORMAT(d,'%W') AS w
		,COUNT(product_id) AS 销量
	FROM olist_orders_dataset
	JOIN olist_order_items_dataset
	USING(order_id)
	GROUP BY w, h
) AS t1
GROUP BY h
ORDER BY h; 

         通过统计星期及时段维度下的销量热力分布,也可以发现工作日和周末的销量明显不同。在工作日期间,10点-17点的销量最多,而在周日18点后销量才恢复至较高水平。

4.4.2.4 日

-- 日销量、销售额
SELECT date_format(d, '%d') as 日
	,count(product_id) as 销量
	,sum(price) as 销售额
FROM olist_orders_dataset
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY 日;

-- 每日销量、销售额
SELECT d as 日期
	,count(product_id) as 销量
	,sum(price) as 销售额
FROM olist_orders_dataset
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY d;

        可以看出,日销售额在450000附近小范围波动变化,月末销量、销售额明显降低。 

        可以看出,每日销量、销售额总体呈上升趋势,在2017年11月24日当天订单量暴增至一千多单,销售额暴涨,这是因为11月24日为“黑色星期五”,该日南美洲等国家会进行打折促销活动,可以看出活动效果很好。

4.4.2.5 时段

-- 时段销量、销售额
SELECT h as 时
	,count(product_id) as 销量
	,sum(price) as 销售额
FROM olist_orders_dataset
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY h;

        可以看出,各时段销量及销售额的变化趋势与前面的时段活跃人数变化趋势一致,用户下单时间集中在9点-23点,除了睡觉时间,用户几乎随时网购,并未受上班时间的影响。

        上午10点至晚上22点是用户活跃时段,销量及销售额明显高于平均水平,其中12点和18点推测由于饭点休息时间导致销量及销售额略有下滑,22点后销量及销售额明显下降,至次日5点后开始回升,直至9点后逐渐恢复到较高水平。

4.4.3 不同地区贡献的销售额分布

-- 各州贡献的销售额分布
SELECT customer_state as 州
	,sum(price) as 销售额
	,concat(sum(sum(price))over(order by sum(price) DESC) / sum(sum(price))over() * 100, '%') as 销售额累计占比
FROM olist_customers_dataset
JOIN olist_orders_dataset
	USING(customer_id)
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY customer_state;

-- 各城市贡献的销售额分布
SELECT customer_state as 州
	,customer_city as 城市
	,sum(price) as 销售额
	,concat(round(sum(sum(price))over(order by sum(price) DESC) / sum(sum(price))over() * 100, 2), '%') as 销售额累计占比
	,round(sum(price) / count(DISTINCT customer_unique_id), 2) as 客单价
FROM olist_customers_dataset
JOIN olist_orders_dataset
	USING(customer_id)
JOIN olist_order_items_dataset
	USING(order_id)
GROUP BY customer_state, customer_city; 

         前七大州贡献了超过80%的销售额,前十大城市贡献了超过1/3的销售额,其中排名前二的圣保罗(186w)和里约热内卢(95w)合计贡献了超过1/5的销售额,里约热内卢客单价(150.22)明显高于圣保罗(128.05),说明里约热内卢消费水平更高。

        日常运营应重点关注排名前十的城市的销售额变化。做活动时,应首先增加圣保罗和里约热内卢的广告、流量投入,新品应优先在消费能力更高的里约热内卢推广。如果可以,应优先在圣保罗和里约热内卢建立总仓备货,减少运输成本,缩短运输时间,从而提高客户满意度。

4.4.4 复购率

-- 复购率
SELECT concat(round(sum(if(下单数 > 1, 1, 0)) / count(*) * 100, 2), '%') as 复购率
FROM (
	SELECT count(DISTINCT order_id) as 下单数
	FROM olist_orders_dataset
	JOIN olist_customers_dataset
		USING(customer_id)
	GROUP BY customer_unique_id
) as t;

-- 月内复购率(=月内重复购买人数/月内购买人数)
SELECT 月份
	,concat(round(sum(if(下单数 > 1, 1, 0)) / count(*) * 100, 2), '%') as 复购率
FROM (
	SELECT left(d, 7) as 月份
		,count(DISTINCT order_id) as 下单数
	FROM olist_orders_dataset
	JOIN olist_customers_dataset
		USING(customer_id)
	GROUP BY 月份, customer_unique_id
) as t
GROUP BY 月份;

        可以看出,平台用户忠诚度很低,总体复购率仅为3.00%,绝大多数用户仅下单过一次,月内复购率呈下降趋势,从3.21%降至0.61%,复购率亟待提高。平台运营应实施更多激活老用户的活动,如会员充值制度、复购折扣等。

4.5 交付情况分析

        整体交付水平与国内电子商务平台相比很一般。从用户下单到商家发货平均需要3.23天,物流在途平均9.33天,从用户下单到收到商品平均需要12.57天,延期送达订单多达8.12%。而该平台最慢发货时长长达125.78天,最慢物流时长205.19天,最慢交付时长209.63天,最大延期时长188.98天,时间过长。

4.5.1 订单响应时长

-- 订单响应时长(下单-审批)
SELECT round(timestampdiff(second, order_purchase_timestamp, order_approved_at) / 3600, 2) as 订单响应时长
FROM olist_orders_dataset;

-- 订单平均、最大响应时长
SELECT round(avg(timestampdiff(second, order_purchase_timestamp, order_approved_at)) / 3600, 2) as 平均响应时长
	,round(max(timestampdiff(second, order_purchase_timestamp, order_approved_at)) / 3600, 2) as 最大响应时长
FROM olist_orders_dataset;

        订单平均响应时长为10.29h,最大响应时长为741.44h(30.89天),82.51%的订单在用户下单后24h内开始审批。平台可针对此结果优化订单审核的流程,从而提升用户满意度。 

4.5.2 订单发货时长

-- 订单发货时长(下单-发货)
SELECT round(timestampdiff(second, order_purchase_timestamp, order_delivered_carrier_date) / 86400, 2) as 订单发货时长
FROM olist_orders_dataset;

-- 订单平均、最大发货时长
SELECT round(avg(timestampdiff(minute, order_purchase_timestamp, order_delivered_carrier_date) / 1440), 2) as 平均发货时长
	,round(max(timestampdiff(minute, order_purchase_timestamp, order_delivered_carrier_date) / 1440), 2) as 最大发货时长
FROM olist_orders_dataset;

-- 订单延期发货率
SELECT concat(round(avg(case when 发货时间 > 限制发货时间 then 1 else 0 end) * 100, 2), '%') as 延期发货率
FROM (
	SELECT max(order_delivered_carrier_date) as 发货时间
		,max(shipping_limit_date) as 限制发货时间
	FROM olist_orders_dataset
	JOIN olist_order_items_dataset
		USING(order_id)
	GROUP BY order_id
) as t;

 

        从下单至发货的平均时长为3.23天,最高时长125.78天,82.41%的订单在下单后5天内发货,9.04%的订单延期发货。

4.5.3 物流在途时间

-- 物流在途时长(发货-收货)
SELECT round(timestampdiff(second, order_delivered_carrier_date, order_delivered_customer_date) / 86400, 2) as 物流在途时长
FROM olist_orders_dataset;

-- 平均、最大物流在途时长
SELECT round(avg(timestampdiff(minute, order_delivered_carrier_date, order_delivered_customer_date) / 1440), 2) as 平均物流时长
	,round(max(timestampdiff(minute, order_delivered_carrier_date, order_delivered_customer_date) / 1440), 2) as 最大物流时长
FROM olist_orders_dataset;

 

        物流平均时长为9.33天,最高时长205.19天,84.40%的订单在交付承运人后15天内到货。

4.5.4 订单交付时长

-- 订单交付时长(下单-收货)
SELECT round(timestampdiff(second, order_purchase_timestamp, order_delivered_customer_date) / 86400, 2) as 订单交付时长
FROM olist_orders_dataset;

-- 订单平均、最大交付时长
SELECT round(avg(timestampdiff(minute, order_purchase_timestamp, order_delivered_customer_date) / 1440), 2) as 平均交付时长
	,round(max(timestampdiff(minute, order_purchase_timestamp, order_delivered_customer_date) / 1440), 2) as 最大交付时长
FROM olist_orders_dataset;

        订单交付时长大致呈正偏态分布,大多数集中在3-16天的范围内,平均交付时长为12.57天,最高时长为209.63天,81.11%的订单在下单后18天内送达。

4.5.4.1 订单交付情况—月份

-- 订单交付情况—月份
SELECT left(d, 7) as 月份
	,round(avg(timestampdiff(second, order_purchase_timestamp, order_delivered_carrier_date) / 86400), 2) as 平均发货时长	
	,round(avg(timestampdiff(second, order_delivered_carrier_date, order_delivered_customer_date) / 86400), 2) as 平均物流时长
	,concat(round(avg(case when order_delivered_customer_date > order_estimated_delivery_date then 1 else 0 end) * 100, 2), '%') as 延期订单占比
FROM olist_orders_dataset
GROUP BY 月份;

        在订单较多的2、3月和11、12月,平均物流时长大幅上涨至13-17天,上涨幅度最高达55%,超时送达订单比例上涨至14-21%。以2018年3月为例,平均发货时长为3.33天,变化不大,但平均物流时长涨至16.3天,超时送达订单涨至21.36%。

4.5.4.2 订单交付情况—商家

-- 各商家平均发货、物流时长
SELECT seller_id
	,round(avg(timestampdiff(second, order_purchase_timestamp, order_delivered_carrier_date) / 86400), 2) as 平均发货时长	
	,round(avg(timestampdiff(second, order_delivered_carrier_date, order_delivered_customer_date) / 86400), 2) as 平均物流时长
FROM olist_orders_dataset
JOIN (
	SELECT DISTINCT order_id, seller_id
	FROM olist_order_items_dataset
) as t
	USING(order_id)
GROUP BY seller_id;

        2967个商家中,平均交付时长在30天以上的有63家。对于备货时间长的商家,平台可以帮助其优化出货;对于快递时间长的商家,可以考虑对其商品增加预售、错峰售卖、提前备货,以及采用更快速的快递,缩短运送时间。建议商家根据销售记录,统计重点产品的日均销售数量,综合考虑自身采购频率,提前做好一定时期的库存,与多家物流公司合作,在多地设立仓库点,就近发货。

4.5.4.3 订单延期交付时长

-- 延期交付时长
SELECT order_id
	,round(timestampdiff(second, order_purchase_timestamp, order_delivered_carrier_date) / 86400, 2) as 订单发货时长	
	,round(timestampdiff(second, order_delivered_carrier_date, order_delivered_customer_date) / 86400, 2) as 物流在途时长
	,round(timestampdiff(second, order_estimated_delivery_date, order_delivered_customer_date) / 86400, 2) as 延期时长
FROM olist_orders_dataset
WHERE order_delivered_customer_date > order_estimated_delivery_date;

-- 订单平均、最大延期交付时长
SELECT round(avg(timestampdiff(minute, order_estimated_delivery_date, order_delivered_customer_date) / 1440), 2) as 平均延期时长
	,round(max(timestampdiff(minute, order_estimated_delivery_date, order_delivered_customer_date) / 1440), 2) as 最大延期时长
FROM olist_orders_dataset
WHERE order_delivered_customer_date > order_estimated_delivery_date;

-- 延期交付率
SELECT concat(round(avg(case when order_delivered_customer_date > order_estimated_delivery_date then 1 else 0 end) * 100, 2), '%') as 延期交付率
FROM olist_orders_dataset;

-- 大额订单延期交付情况
SELECT order_id
	,round(timestampdiff(second, order_purchase_timestamp, order_delivered_carrier_date) / 86400, 2) as 订单发货时长	
	,round(timestampdiff(second, order_delivered_carrier_date, order_delivered_customer_date) / 86400, 2) as 物流在途时长
	,round(timestampdiff(second, order_estimated_delivery_date, order_delivered_customer_date) / 86400, 2) as 延期时长
FROM olist_orders_dataset
JOIN (
	SELECT order_id
	FROM olist_order_items_dataset
	GROUP BY order_id
	HAVING sum(price) > 1000
) as t
	USING(order_id)
WHERE order_delivered_customer_date > order_estimated_delivery_date;

 

        订单平均延期时长为9.55天,最高时长188.98天,8.12%的订单延期交付,82.32%的订单延期交付时长在15天内。

        在延期的7823笔订单中,有360笔订单送达时间严重超时(30天以上),其中大部分订单延期是因为物流时间过长,少数订单是因为备货时间过长。对于因为商家备货时间长导致的延迟送达,需要联系商家寻找原因,平台可以帮助其优化出货;对于因为快递原因导致的延迟送达,可以考虑对该商品增加预售、错峰售卖、提前备货,以及采用更快速的快递,缩短运送时间。 

        在销售额大于1000的89笔订单中,有21笔订单延期15天以上才送达,其中4笔是因为备货时间过长,其余订单均是因为物流时间过长。对于这些订单应逐个筛查超时配送的详细原因,对消费者进行补偿并致歉。

4.5.5 用户评分与订单交付时长的关系

-- 评分与订单交付时长关系
SELECT timestampdiff(second, max(order_purchase_timestamp), max(order_delivered_customer_date)) / 86400 as 订单交付时长
	,round(avg(review_score), 2) as 订单评分
FROM olist_orders_dataset
JOIN olist_order_reviews_dataset
	USING(order_id)
GROUP BY order_id;

-- 评分与订单平均交付时长关系
SELECT round(avg(timestampdiff(second, order_purchase_timestamp, order_delivered_customer_date) / 86400), 2) as 订单平均交付时长
	,review_score as 订单评分
FROM olist_orders_dataset
JOIN olist_order_reviews_dataset
	USING(order_id)
GROUP BY review_score;

         使用Excel进行回归分析: 

 

        可以看出,相关系数R为0.33,R方为0.11,订单交付时长与评分只是低度相关,且拟合程度很低,说明除了交付时长以外,还有其他因素影响评分,需要进一步挖掘,如商品质量、客服态度、售后服务等。

         使用Excel进行回归分析: 

 

        可以看出,相关系数R为0.97,R方为0.95,说明平均交付时长与评分高度相关,且拟合程度较好,F检验中P<0.05,说明回归方程显著有效,T检验中P<0.01,说明置信度达到99%。

五、结论与建议

5.1 用户层面

        1. 用户集中分布在巴西东南部沿海城市及内陆首都附近,喜欢在工作日期间购物,信用卡为首选支付方式,后续的营销活动可根据用户的地区、活跃时间、购物偏好有针对性的进行。

        2. 用户好评率77.07%,差评率14.69%,可以进一步分析差评原因并归类,商品质量类的原因应及时下架整改,恢复品质后再上架,服务态度类的原因则应加强客服的培训管理,同时完善售后服务,及时退货退款。

        3. 用户评价高峰期为白天11点至12点及晚上21点至凌晨1点,可以考虑在填写评论后的页面上针对性地推出广告,进一步促进消费。

        4. 用户普遍消费频率低且最近消费时间较远,需要对于RFM模型中不同类别用户进行差异化精准营销:
        对于重要发展用户和重要挽留用户,应主动联系,给予复购优惠,降低二次消费门槛,提高复购率,同时采取会员积分制度或会员卡充值制度,引导用户长期消费,增强粘性;
        对于一般发展用户和一般挽留用户,应增加免费试用提升用户兴趣,提高新用户留存率,同时开展用户满意度调查,分析用户流失原因,有针对性地唤回;
        对于重要价值用户和重要保持用户,应提供个性化服务,根据用户的需求和兴趣给予个性化的产品推荐和优惠方案;
        对于一般价值用户和一般保持用户,应优化关联销售,提高客单价。

        5. 健康美容、家居用品、运动休闲等大众热门品类,适合对各类用户做推广和促销;而电脑、文具、小家电等小众热门品类,向特定的用户群体进行推荐效果更好。

5.2 商家层面

        1. 商家的订单量和销售额普遍较低,74.22%的商家订单量小于20,超过半数的商家销售额在1000以内。平台应主动联系商家,了解成单量较少的原因,进一步总结优化,对商家进行技术指导和售后服务,并推出平台补贴活动,促进商家积极性。

        2. 对于差评较多的商家,可以进一步分析差评原因并归类,商品质量类的原因应及时下架整改,恢复品质后再上架,服务态度类的原因则应加强客服的培训管理,同时完善售后服务,及时退货退款。

5.3 商品层面

        1. 平台可以按照70%、20%、10%的销售额比重将商品分为A、B、C三类,把重点管理资源放在A类,丰富A、B类的子类数,把较少的资源分配给C类或者砍掉部分销售额过低且子类数过少的C类。

        2. 销量前十的品类为家居产品、健康美容、运动休闲、家具装饰、电脑配件、家用器皿、手表礼品、电话、园艺工具、汽车用品,占总销量的64.54%。销售额前十的品类为健康美容、手表礼品、家居产品、运动休闲、电脑配件、家居装饰、很酷的东西、家用器皿、汽车用品、园艺工具,占总销售额的63.20%。对于这些品类,可以采取扩张的营销策略,吸引同品类商家入驻,增加商品种类,增加广告投放和流量倾斜,增设折扣促销活动,在热销商品中打造爆品,以爆品带动整个品类乃至全平台销量。可适当多备库存,降低断货造成的生意损失。

        3. 平台客户主要是低消费及中等消费人群,用户最喜欢购买价位在[10,100)区间的商品,对平台销售额贡献最大的是 [100,200) 区间的商品。可以设置多件折扣、满减优惠,还可以将高价与低价商品关联销售,加大高价商品折扣促销力度,提高用户消费水平。

        4. 大部分商品详情的图片描述和文字描述较为简陋,平台应提醒商家为产品拍摄高清实物图并丰富商品详情页的描述,可以出一个撰写商品详情描述的规范教程,或开展商品详情页代写服务。

5.4 销售层面

        1. 2016-2017年平台销量和销售额快速增长,17年11月后增速趋缓,这与月活跃用户数变化趋势一致。在激活老用户的同时应采取各种拉新手段,通过补充新用户以平衡不可避免流失的用户。

        2. 销售额呈节日性波动,应继续利用“黑色星期五”等节日优势,创新销售策略和活动玩法。

        3. 用户热衷于工作日网购,上午10点至晚上22点是用户活跃时段,周末销量、销售额下降明显。平台可根据用户活跃时段进行运营,提高各环节转化率,通过商品组合、满减等措施提高客单价,并在周末开展促销活动。

        4. 绝大多数用户仅下单过一次,月内复购率呈下降趋势。平台应实施更多激活活动,如复购折扣、会员充值、积分制度等,并对老用户进行短信、邮件召回。

        5. 日常运营应重点关注排名前十的城市的销售额变化。开展活动时,应首先增加圣保罗和里约热内卢的广告、流量投入,新品应优先在消费能力更高的里约热内卢推广。

5.5 交付层面

        1. 订单的响应速度普遍较慢,平台应优化订单审核流程。

        2. 在订单较多的2、3月和11、12月,平均物流时长和超时送达订单比例均有上涨。平台应在购物节选用速度更快的快递,鼓励商家进行预售预包,适当延长预计送达时间,并对延迟交付的订单进行补偿。

        3. 延期交付订单中大部分是因为物流时间过长而延期,少数是因为备货时间过长。对于因为商家备货时间长导致的延迟送达,需要联系商家寻找原因,平台可以帮助其优化出货;对于因为快递原因导致的延迟送达,可以考虑对该商品增加预售、错峰售卖、提前备货,以及采用更快速的快递,缩短运送时间。

        4. 平台可以优先在销售额最高的sao paulo和rio de janeiro建立总仓备货,在belo horizonte、porto alegre、curitiba、salvador、brasilia建立分仓,减少运输成本,缩短运输时间,从而提高客户满意度。

猜你喜欢

转载自blog.csdn.net/KOGAMIKEI/article/details/131140789
今日推荐