Análisis de datos de comercio electrónico de la tienda Olist

1. Antecedentes del proyecto

        Olist es la tienda por departamentos más grande del mercado brasileño, las pequeñas empresas de todo Brasil pueden vender sus productos a través de las tiendas Olist y enviarlos directamente a los clientes utilizando los socios logísticos de Olist. Este artículo analizará los datos de pedidos de la tienda Olist desde septiembre de 2016 hasta agosto de 2018 desde las cinco dimensiones de usuarios, comerciantes, productos, ventas y entrega. El propósito es averiguar los problemas existentes en la plataforma, analizar las razones, y dar sugerencias.

        Fuente de datos: Conjunto de datos públicos de comercio electrónico brasileño por Olist | Kaggle

        Introducción al conjunto de datos: Olist proporciona este conjunto de datos y contiene información sobre 100 000 pedidos realizados en múltiples mercados en Brasil desde septiembre de 2016 hasta agosto de 2018. Su funcionalidad permite ver los pedidos desde múltiples dimensiones: desde el estado del pedido, el precio, el pago y el rendimiento del envío hasta la ubicación del cliente, los atributos del producto y, finalmente, las reseñas escritas por los clientes y un conjunto de datos de geolocalización que vincula los códigos postales brasileños con coordenadas de latitud/longitud. El conjunto de datos contiene 9 subconjuntos, y la conexión entre cada conjunto de datos es la siguiente:

        El conjunto de datos contiene 9 archivos:

        <1> El archivo olist_customers_dataset.csv contiene 5 campos y 99400 filas. Este conjunto de datos contiene información sobre los clientes y sus ubicaciones. Úselo para identificar clientes únicos en el conjunto de datos del pedido y encontrar la ubicación de entrega del pedido customer_id: el ID del cliente correspondiente al
        pedido . La clave del conjunto de datos del pedido, cada pedido tiene un ID_cliente único
        ID_cliente_único: el ID único del cliente
        prefijo_código_postal_cliente: los primeros cinco dígitos del código postal del cliente ciudad_cliente
        : la ciudad donde se encuentra el cliente
        estado_cliente: el estado donde se encuentra el cliente se encuentra

        <2>El archivo olist_geolocation_dataset.csv contiene 5 campos y 1 000 000 de filas. Este conjunto de datos contiene los códigos postales brasileños y su información de coordenadas de latitud/longitud. Úselo para dibujar un mapa y averiguar la distancia entre el vendedor y el cliente
        geolocalización_código postal_prefijo: primeros 5 dígitos del código postal
        geolocalización_lat: latitud geolocalización_lng:
        longitud
        geolocalización_ciudad: nombre de la ciudad
        geolocalización_estado: estado

        <3> El archivo olist_order_items_dataset.csv contiene 7 campos, 113000 filas, este conjunto de datos incluye datos sobre los artículos comprados en cada pedido order_id
        : ID de pedido
        order_item_id: número de serie, utilizado para identificar la cantidad de artículos contenidos en el mismo pedido
        product_id: item ID
        seller_id: ID del vendedor
        shipping_limit_date: fecha límite de envío del vendedor para procesar el pedido al socio logístico
        price: precio del artículo
        flete_value: valor de envío del artículo (si el pedido contiene varios artículos, el valor de envío se divide entre los artículos)

        <4> El archivo olist_order_payments_dataset.csv contiene 5 campos, 104000 filas, este conjunto de datos contiene datos sobre las opciones de pago del pedido
        order_id: ID del pedido
        pago_secuencial: secuencia de pago (el cliente puede usar múltiples métodos de pago para pagar el pedido, si lo hace, Cree una secuencia que se ajuste a todos los pagos)
        tipo_pago: el método de pago elegido por el cliente
        cuotas_pago: el número de cuotas elegidas por el cliente
        valor_pago: el monto de la transacción

        <5> El archivo olist_order_reviews_dataset.csv contiene 7 campos, 100000 filas. El conjunto de datos incluye datos sobre las revisiones realizadas por los clientes.
        review_id: ID de revisión única
        order_id: ID de pedido
        review_score: calificación
        review_comment_title: título de revisión de las revisiones dejadas por los clientes
        review_comment_message: información de revisión de las revisiones. dejado por los clientes
        review_creation_date: muestra la fecha en que se envió la encuesta de satisfacción al cliente
        review_answer_timestamp: muestra la marca de tiempo de la respuesta de la encuesta de satisfacción

        <6>El archivo olist_orders_dataset.csv contiene 8 campos, 99400 filas, este es el conjunto de datos central, toda la demás información se puede encontrar en cada pedido order_id: ID de pedido
        customer_id
        : ID de cliente
        order_status: estado de pedido
        order_purchase_timestamp: tiempo de compra
        order_approved_at: aprobación de pago hora
        order_delivered_carrier_date: hora de entrega del pedido del transportista
        order_delivered_customer_date: fecha real de entrega del pedido del cliente
        order_estimated_delivery_date: fecha de entrega estimada notificada al cliente al realizar la compra

        <7> El archivo olist_products_dataset.csv contiene 9 campos, 33000 filas, el conjunto de datos incluye datos sobre los productos vendidos por Olist product_id
        : ID de producto único
        product_category_name: el nombre de categoría del producto,
        Product_name_length en portugués: la cantidad de caracteres extraídos de la nombre del producto
        product_description_length: la cantidad de caracteres extraídos de la descripción del producto
        product_photos_qty: la cantidad de fotos publicadas por el producto
        product_weight_g: el peso del producto en gramos product_length_cm: la longitud del producto
        en centímetros
        product_height_cm: la altura del producto en centímetros
        product_width_cm: el ancho del producto en centímetros

        <8> El archivo olist_sellers_dataset.csv contiene campos 4 y filas 3095. Este conjunto de datos incluye datos sobre vendedores que completan pedidos en Olist. Use esto para encontrar la ubicación del vendedor y determinar qué vendedor completó la venta de cada artículo.
        seller_id: ID del vendedor seller_zip_code_prefix         :
        los primeros 5 dígitos del código postal         del vendedor.

        <9> El archivo product_category_name_translation.csv contiene 2 campos, 71 líneas, para traducir el nombre del producto del portugués al inglés
        product_category_name: nombre de la categoría en portugués
        product_category_name_english: nombre de la categoría en inglés

2. Marco de análisis

         Herramientas de análisis: MySQL, Power BI, Excel

3. Limpieza de datos

3.1 Importación de datos

        Use MySQL para crear una nueva base de datos en Navicat e importe el conjunto de datos

3.2 Conversión de tipos de datos

        Los tipos de datos originales en el conjunto de datos son todos varchar, y los datos de números, moneda y tipos de tiempo deben convertirse a tipos de datos.

-- 数据类型转换
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;

        También puede modificar directamente el tipo de datos del campo en la tabla de diseño

3.3 Eliminar filas duplicadas

-- 查看是否有重复行
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;

 

        Se puede ver que un código postal corresponde a múltiples latitudes y longitudes.Puede ser que la plataforma registre con precisión la ubicación de cada cliente al realizar un pedido, pero no es propicio para el análisis posterior de la conexión de la tabla, por lo que se toma el valor promedio. .

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 Procesamiento de valores perdidos

-- 查看缺失值
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;

        La tabla olist_order_reviews_dataset puede ver claramente que faltan valores, pero no tiene ningún efecto en este análisis y no se requiere procesamiento.

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; 

        De acuerdo con los resultados de la consulta, los datos que faltan de order_delivered_customer_date, order_approved_at y order_delivered_carrier_date son relativamente pequeños en comparación con el volumen de datos general, así que elija eliminarlos directamente. 

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;

        De acuerdo con los resultados de la consulta, faltan más datos en nombre_categoría_producto, cantidad_fotos_producto, longitud_nombre_producto y longitud_descripción_producto que en otros datos faltantes, pero son más pequeños que el volumen de datos general, así que elija eliminarlos directamente (porque faltan los datos en estos 4 campos al mismo tiempo, sin embargo, product_category_name no se puede interpolar con valores posibles y solo se puede eliminar, por lo que no es necesario agregar los otros 3 campos ).

        Este análisis no incluye product_weight_g, product_width_cm, product_height_cm, product_length_cm, por lo que no se procesará.

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;

 

        También puede ordenar cada campo de la tabla en orden ascendente en Navicat primero, verificar si hay valores nulos y luego consultar la cantidad de valores faltantes.

-- 删除缺失值
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 Eliminar valores atípicos

        En Navicat, clasifique los campos en la tabla en orden ascendente y descendente, y encontró que hay 2 piezas de datos pago_cuotas son 0, y de acuerdo con la definición de datos, la cantidad mínima de cuotas debe ser 1, porque el volumen de datos atípicos es pequeño, así que elija eliminarlo directamente.

SELECT payment_type
FROM olist_order_payments_dataset
GROUP BY payment_type;

        La consulta muestra que hay pedidos con métodos de pago no definidos y solo hay 3 elementos de datos que se pueden eliminar directamente.

-- 剔除分期数异常值
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;

        Según los resultados de la consulta, hay datos de que el tiempo real de entrega del pedido es anterior al tiempo de compra, lo cual no es razonable, por lo que se elimina directamente. 

-- 剔除时间异常值
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 Conversión de formato de hora

        De acuerdo con las necesidades del análisis, agregue columnas de fecha y hora:

-- 时间格式转换
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 Clave principal e índice

        Agregue una clave principal y cree un índice para mejorar la velocidad de consulta:

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. Análisis de datos

4.1 Análisis de usuarios

4.1.1 Distribución Regional de Usuarios

-- 用户地区分布散点图
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;

        Importe los datos de población y PIB de cada estado de Brasil en Power BI para facilitar el análisis de la distribución regional de usuarios. 

El tamaño de la burbuja representa el número de usuarios y la profundidad del color representa la población de cada estado

        Se puede observar que los usuarios se concentran en las zonas costeras del sureste de Brasil y cerca de la capital del interior, de los cuales cerca del 42%La mayoría de los usuarios son del estado de SP y la distribución regional del número de usuarios en cada estado es básicamente consistente con la distribución de la población y el desarrollo económico de Brasil. En el proceso de operación subsiguiente, la plataforma se puede desarrollar de acuerdo con las características de las diferentes regiones, y la comercialización y la entrega se pueden realizar de acuerdo con las preferencias de los usuarios en las diferentes regiones.

4.1.2 Análisis de tráfico de usuarios

4.1.2.1 DAU activa diaria

-- 日活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;

        Se puede ver que DAULa tendencia general va en aumento. El 24 de noviembre de 2017, DAU aumentó a 1132, un aumento del 327% con respecto al día anterior. Según la consulta, el 24 de noviembre es el "Viernes Negro", y América del Sur y otros países realizarán descuentos en las actividades de este día, se puede ver que las actividades son muy efectivas. 

4.1.2.2 MAU activo mensual

-- 月活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 月份;

        Se puede ver que antes de noviembre de 2017, MAU mostró una tendencia de rápido crecimiento, y después de noviembre de 2017, MAU se estabilizó gradualmente, lo que indica que la actividad del 24 de noviembre de 2017 tuvo un efecto significativo.

4.1.2.3 Número activo de períodos

-- 时段活跃人数
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;

        Se puede observar que el tiempo de pedido de los usuarios se concentra entre las 9 y las 23. Con excepción de la hora de dormir, los usuarios compran en línea casi en cualquier momento y no se ven afectados por las horas de trabajo.

        El número de usuarios activos de 10:00 am a 22:00 pm es significativamente más alto que el nivel promedio, que es el período activo de los usuarios.Entre ellos, se especula que el nivel de actividad disminuyó ligeramente debido a la pausa para comer a las 12. : 00 y 18: 00, y el número de usuarios activos disminuyó significativamente después de las 22: 00. Comenzó a aumentar después de las 5 en punto del día siguiente y gradualmente volvió al nivel activo normal después de las 9 en punto. La tendencia de cambio de los datos está en línea con las reglas normales de trabajo y descanso de la mayoría de los usuarios, lo que indica que los usuarios realizarán pedidos y compras durante su tiempo libre diario, en lugar de períodos de tiempo específicos (como las horas no laborables). Los operadores de la plataforma pueden tomar las medidas promocionales correspondientes en diferentes períodos de tiempo según el tiempo activo de los usuarios.

4.1.3 Análisis de pagos

4.1.3.1 Forma de pago

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

        Se puede observar que alrededor del 75%La mayoría de los pedidos eligen la tarjeta de crédito para el pago, seguido del método de transacción fuera de línea local brasileño boleto, que representa casi el 20 %. Estos dos métodos son los principales métodos de pago en la plataforma.

4.1.3.2 Método de estadificación

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

        Se puede observar que más del 65%El pedido de la orden elige el método de pago a plazos, y la gran mayoría de los pedidos optan por instalar en 10 cuotas. En cierta medida, muestra que la plataforma recomienda el pago a plazos.

4.1.4 Calificaciones de usuarios

4.1.4.1 Proporción de calificaciones de los usuarios

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

        Se puede ver que casi el 60% de los usuarios obtuvo 5 puntos y más del 10% obtuvo 1 punto. Basado en los criterios de evaluación de 1-2 puntos para malas críticas, 3 puntos para críticas medias y 4-5 puntos para buenas críticas, las calificaciones de los usuarios son 77,07% positivas y 14,69% negativas. La satisfacción general de los usuarios es alta, pero Todavía hay algo de margen de mejora. Los motivos de las reseñas negativas se pueden analizar y clasificar más a fondo, y se puede recetar el medicamento adecuado para mejorar la experiencia del usuario de manera específica. Las razones de calidad del producto deben retirarse de los estantes para su rectificación de manera oportuna, y luego colocarse en los estantes después de restaurar la calidad, mejorar el servicio postventa, devolver y reembolsar de manera oportuna, y las razones de actitud de servicio deben fortalecer la capacitación y el servicio al cliente. gestión.

4.1.4.2 Distribución de números de evaluación en cada periodo de tiempo

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

        Se puede ver que el día 11De 12:00 a 12:00 y de 21:00 de la tarde a 1:00 de la mañana son los períodos pico para la evaluación de los usuarios. Considere lanzar anuncios dirigidos en la página después de completar los comentarios para promover aún más consumo.

4.1.5 Jerarquía de usuarios

4.1.5.1 Distribución de las Ventas Aportadas por los Usuarios

-- 用户贡献的销售额分布
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;

        De acuerdo con la regla 80/20, cuando el 80 % de los ingresos de una empresa proviene del 20 % de sus clientes totales, la base de clientes de la empresa es saludable y tiende a ser estable. El 20 % superior de los usuarios de la plataforma solo contribuyó con el 56,63 % de los ingresos, y casi el 50 % de los usuarios contribuyó con el 80 % de los ingresos. Muestra que hay muy pocos clientes importantes y que es necesario aumentar el número de clientes importantes. Por lo tanto, es necesario dividir a los clientes según el valor del cliente y llevar a cabo operaciones refinadas.

4.1.5.2 Jerarquía de usuarios del modelo RFM

        De acuerdo con el último tiempo de consumo, la frecuencia de consumo y la cantidad de consumo del usuario, se construye el modelo RFM y los usuarios se dividen en las siguientes categorías:

-- 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 用户类型;

        En términos de cantidad, los usuarios de desarrollo general y los usuarios de retención general son los más grandes, representan más del 30 %, seguidos por los usuarios de desarrollo importantes y los usuarios de retención importantes, que representan más del 10 %, y la proporción total de usuarios de desarrollo y retención es más del 90% Hay menos tipos de usuarios. Muestra que los usuarios de esta plataforma generalmente tienen una frecuencia de consumo baja y un tiempo de consumo reciente relativamente largo. La mayoría de los usuarios son usuarios de valor bajo a medio, y hay espacio suficiente para el desarrollo y la optimización.

        En términos de valor de contribución, el valor de contribución de los usuarios de valor importante y los usuarios de retención importantes representaron menos del 5 %, más del 60 % de las ventas provino de usuarios en desarrollo importantes y usuarios de retención importantes, y otro 30 % de las ventas provino de usuarios en desarrollo en general. usuarios y usuarios de retención general, lo que indica que aunque la mayoría de la plataforma son usuarios de consumo de baja frecuencia, el valor de contribución general de estos usuarios es relativamente alto. Para usuarios de desarrollo importantes y usuarios de retención importantes, debe tomar la iniciativa de contactar, dar un trato preferencial, aumentar la tasa de recompra, analizar las razones de la pérdida de usuarios y devolverles la llamada a través de medios operativos específicos. Para usuarios de desarrollo general y usuarios de retención general, se deben agregar pruebas gratuitas para aumentar el interés de los usuarios, aumentar la tasa de retención de nuevos usuarios y, al mismo tiempo, analizar las razones de la pérdida de usuarios y recuperarlos de manera específica.

-- 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);

        A juzgar por el diagrama de relaciones RFM, R básicamente no tiene relación con F y M. Esto también se debe a que la tasa de recompra de la mayoría de los usuarios es muy baja y se deben adoptar medidas como el sistema de membresía para aumentar la tasa de recompra. Sin embargo, existe cierta correlación negativa entre F y M, lo que indica que los usuarios con montos de pago altos en su mayoría realizan compras únicas, y se debe fortalecer la recordación de estos usuarios, mientras que los usuarios de consumo de alta frecuencia siempre pagan montos bajos, y la asociación debe ser optimizado para estos usuarios Ventas, aumentar su precio unitario de cliente.

4.1.5.3 Preferencias de categoría de varios tipos de usuarios

-- 各类型用户品类偏好
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;

         A través del análisis de perspectiva de las diez principales categorías de productos de varios tipos de consumo de los usuarios, se puede ver que categorías como salud y belleza, artículos para el hogar y deportes y ocio aparecen al frente de varios consumos de los usuarios, lo que indica que estas categorías son populares entre el público y son adecuados para todo tipo de productos promociones y promociones para ciertos tipos de usuarios, mientras que las computadoras, artículos de papelería y pequeños electrodomésticos son categorías populares de nicho, que son más populares para tipos específicos de usuarios, y el efecto de recomendación para grupos de usuarios específicos es mejor.

4.2 Análisis de comerciantes

4.2.1 Distribución Regional de Comerciantes

-- 商家地区分布散点图
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;

El tamaño de la burbuja indica el número de empresas y el tono del color indica la población de cada estado. 

        Se puede ver que los comerciantes se concentran en las áreas costeras del sureste de Brasil y cerca de la capital del interior, y casi el 60% de ellos son del estado de SP La distribución regional del número de comerciantes en cada estado es básicamente consistente con la población distribución y desarrollo económico de Brasil.

        La distribución regional de los comerciantes no es exactamente igual a la de los usuarios, lo que se refleja principalmente en el hecho de que la proporción de comerciantes de los estados de la SP es casi un 20% superior a la de los usuarios.

4.2.2 Pedidos y Ventas del Comerciante

-- 商家订单量及销售额
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; 

        Se puede observar que durante el período de análisis, el volumen de pedidos de los comerciantes es generalmente bajo. Hay 2.885 comerciantes cuyo volumen de pedidos es inferior a 20, lo que representa el 74,22 %. El volumen mínimo de pedidos es 1; solo 10 comerciantes tienen un volumen de pedidos. de más de 1.000 pedidos, todos del estado de SP, de los cuales el mayor pedido fue 1854.

        Se puede observar que durante el periodo de análisis, menos del 10% de los comerciantes tienen ventas superiores a 10.000, y las mayores ventas son de 229.472,63 reales; la mayoría de los comerciantes tienen ventas inferiores a 10.000, y más de la mitad de los comerciantes venden El el monto es de 1.000 y el monto mínimo de venta es de 3,5 reales. Combinado con el volumen de pedidos, los comerciantes en la plataforma son principalmente pequeños comerciantes.

4.2.3 Puntaje Promedio del Comerciante

-- 商家平均得分
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; 

        Se puede ver que casi el 65 % de los comerciantes tienen un puntaje promedio de 4 puntos o más, y los comerciantes con un puntaje promedio de menos de 3 puntos representan solo alrededor del 11 %, y el puntaje promedio de la mayoría de los comerciantes está en el rango de 3.75-5, que es más realista, lo que indica que la plataforma nunca ha sido El servicio de producto a comerciante es relativamente completo, y básicamente no hay problemas en todo el proceso.

4.3 Análisis de productos básicos

4.3.1 Número y proporción de productos en cada categoría

-- 商品总数及商品种类数
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;

        Según la consulta, a partir del nodo de análisis, la cantidad total de productos en la plataforma es 32341 y la cantidad de tipos de productos es 73. 

        La cantidad de productos (la cantidad de subcategorías) en muchas categorías es pequeña, lo que puede resultar en productos insuficientes para satisfacer las necesidades de selección de los usuarios.

4.3.2 Ventas y ventas de cada categoría

-- 各品类的销量、销售额、单价
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;

        De las dos cifras anteriores, podemos ver que las ventas y las tendencias de ventas de todas las categorías en la plataforma son básicamente las mismas, y las principales ventas y ventas son básicamente categorías con precios unitarios bajos. Solo unos pocos usuarios compraron categorías de precios altos, indicando que la plataforma se basa en La estrategia de paridad es la principal. Las categorías con un precio unitario promedio inferior a 200 representaron el 86,31% Se puede observar que el posicionamiento de precio de producto de esta plataforma está en el rango medio bajo. 

        Por lo tanto, atraer comerciantes con precios más bajos de productos básicos, como papelería, juguetes para niños y artículos de primera necesidad, es el enfoque de la nueva atracción de la plataforma. En el caso de recursos suficientes, considere cultivar comerciantes de productos básicos de alto precio.

        Productos básicos de alto precio: puede aumentar el precio unitario de los clientes y crear una imagen de marca de alta gama. Los precios elevados se concentran en relojes y relojes de regalo, herramientas de jardinería y productos de salud y belleza. El tiempo de consumo está más concentrado en el festival de compras, y los lugares de consumo están concentrados en Río y Sao Paulo. Para productos de alto precio, se deben agregar actividades de descuento al festival de compras.

        Se puede ver que el 23,29 % de las categorías principales contribuyó con el 80,69 % de las ventas, lo que está en línea con la regla 28. La plataforma puede dividir los productos en tres categorías: A, B y C según la proporción de ventas del 70 %, 20 % y 10 %, poner los recursos de gestión clave en la categoría A, asignar menos recursos a la categoría C o eliminar algunos Ventas Clase C con cuota demasiado baja para lograr el estado óptimo de gestión de recursos, aumentando así los ingresos de la plataforma. Al mismo tiempo, combinado con el análisis anterior del número de productos básicos en cada categoría, algunos productos básicos de la categoría C con muy pocos productos básicos pueden eliminarse directamente, y el número de productos básicos (subcategorías) de los productos básicos de las categorías A y B puede enriquecerse .

4.3.4 Ventas y las 10 principales categorías de ventas

        Las diez principales categorías de ventas son productos para el hogar, salud y belleza, deportes y ocio, decoración de muebles, accesorios de computación, utensilios para el hogar, regalos de relojes, teléfonos, herramientas de jardinería y suministros para automóviles, que representan el 64,54% de las ventas totales.

        Las diez principales categorías de ventas son salud y belleza, regalos de relojes, productos para el hogar, deportes y ocio, accesorios de computadora, decoración del hogar, cosas geniales, utensilios para el hogar, artículos para el automóvil y herramientas de jardinería, que representan el 63,20% de las ventas totales.

        Para estas categorías, se puede adoptar una estrategia de marketing de expansión para atraer comerciantes de la misma categoría para instalarse, aumentar los tipos de productos, aumentar la publicidad y la inclinación del tráfico, agregar promociones de descuento, crear productos de gran venta entre productos de gran venta y utilizar -venta de productos para impulsar las ventas de toda la categoría e incluso del mundo entero. Prepare adecuadamente más inventario para reducir las pérdidas comerciales causadas por falta de existencias. Además, se debe prestar atención a cultivar el hábito de los usuarios de volver a comprar, lo que incluye, entre otros, configurar la recarga de membresía, el sistema de puntos, contactar proactivamente a los usuarios antiguos (distribuir cupones) y promociones de descuento regulares.

4.3.4 Ventas y ventas de cada producto

-- 各商品的销量、销售额、单价
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;

        Se puede ver que el volumen de ventas y el efecto principal de ventas de los productos son obvios, el volumen de ventas está muy polarizado y los productos de la plataforma no satisfacen bien las necesidades de los usuarios.

        Se puede observar que las ventas de productos con precio unitario en el rango de (0,100] son ​​las mejores, representando el 63.04%, y las ventas representaron el 26.44% ocupando el segundo lugar; las ventas de productos con precio unitario en el rango de (100.200] son ​​los más altos, representando el 28,87%. El volumen de ventas representó el 24,73%, ocupando el segundo lugar. Muestra que los productos en el rango de precios (0,100] son ​​los más populares entre los usuarios, pero los productos en el (100.200 ] gama son los que más contribuyen a las ventas de la plataforma, siendo los clientes de la plataforma principalmente grupos de consumidores de bajo y mediano consumo.

4.3.5 Detalles del producto

-- 商品详情
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;

        Se puede ver que la descripción de la imagen y la descripción del texto de la mayoría de los detalles del producto son relativamente simples. El 50,98% de los productos tienen una sola imagen, el 94,38% de los productos no tienen más de 5 imágenes y el 41,58% de las descripciones de los productos no superan las 500 palabras. La introducción de detalles del producto demasiado simples hará que los clientes no entiendan y desconfíen de los parámetros del producto y los puntos de venta, lo que reducirá las compras.

        La plataforma debe recordar a los comerciantes que tomen fotografías físicas de alta definición del producto y enriquecer la descripción de la página de detalles del producto. Puede proporcionar un tutorial estandarizado para escribir descripciones detalladas del producto o proporcionar servicios de redacción de páginas de detalles del producto.

4.4 Análisis del vínculo de venta

4.4.1 Resumen de ventas

-- 总销量、总销售额、客单价
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);

        A partir del nodo de análisis, el volumen total de ventas de productos en la plataforma es de 109.994, el volumen total de ventas es de 13.200.068,23 reales y el precio unitario por cliente es de 141,66 reales.

4.4.2 Ventas y Ventas en Diferentes Dimensiones Temporales

4.4.2.1 Años

-- 年销量、销售额
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);

        Debido a los datos de pedidos incompletos en 2016 y 2018, es imposible calcular la tasa de crecimiento anual exacta, pero se puede ver que las ventas generales y las ventas de la plataforma aumentan constantemente. 

4.4.2.2 meses

-- 月销量、销售额、环比
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 月; 

        (Debido a que las ventas y las ventas en septiembre y diciembre de 2016 fueron demasiado bajas, se eliminaron estos dos meses)

        Tendencia general: el volumen de ventas y el volumen de ventas son básicamente los mismos cada mes. El volumen de ventas y el volumen de ventas de la plataforma aumentaron rápidamente en 2016-2017, y la tasa de crecimiento se desaceleró después de noviembre de 2017.

        2017: el volumen de ventas general y el volumen de ventas mostraron una tendencia al alza, con un pequeño pico en marzo y mayo, y alcanzaron su punto máximo en noviembre. Solo hay tres meses de ventas y caída de ventas en abril, junio y diciembre en todo el año. En comparación con enero, el volumen de ventas en diciembre aumentó 6,8 veces y el volumen de ventas aumentó 6,5 veces.

        2018: Las ventas fluctuaron alrededor de 900.000. Las ventas totales de junio-agosto fueron inferiores a las de marzo-mayo, lo que en cierta medida puede explicar las señales de crecimiento negativo.

        Festivo: es fácil ver que las ventas fluctúan de manera festiva a partir de la proporción de la cadena a lo largo del tiempo. Carnaval de febrero a marzo, Día de la Madre en mayo, Día de San Valentín brasileño en junio, Día del padre en agosto, Black Friday en noviembre, Navidad en diciembre, etc. consumo del festival, por lo que las ventas del mes anterior y del mes siguiente relacionadas con el festival disminuyeron.

4.4.2.3 Semanas

-- 周销量、销售额
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 周;  

        Se puede ver que los usuarios están interesados ​​​​en las compras en línea entre semana, y las ventas y las ventas los fines de semana han disminuido significativamente. Las ventas entre semana cambiaron en un rango pequeño, con una disminución mensual de 2,19%-4,46%, la más baja el sábado, y una caída de casi el 25% desde el viernes, una caída relativamente grande.

-- 周、时段维度下销量热力图
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; 

         Al contar la distribución de calor de las ventas en las dimensiones de la semana y el período de tiempo, también se puede encontrar que el volumen de ventas entre semana y los fines de semana es significativamente diferente. Durante los días de semana, el volumen de ventas es el más alto de 10:00 a 17:00 y el volumen de ventas vuelve a un nivel más alto después de las 18:00 del domingo.

4.4.2.4 días

-- 日销量、销售额
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;

        Se puede observar que las ventas diarias fluctuaron en un pequeño rango alrededor de 450.000, y las ventas y ventas al final del mes disminuyeron significativamente. 

        Se puede ver que las ventas diarias y las ventas generalmente van en aumento. El 24 de noviembre de 2017, el volumen de pedidos se disparó a más de 1,000 pedidos y las ventas se dispararon. Esto se debe a que el 24 de noviembre es el "Viernes Negro". y otros países realizarán promociones de descuento ese día, y se puede ver que las actividades son muy efectivas.

4.4.2.5 Período

-- 时段销量、销售额
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;

        Se puede ver que la tendencia de cambio del volumen de ventas y el volumen de ventas en cada período de tiempo es consistente con la tendencia de cambio del número de personas activas en el período de tiempo anterior.El tiempo de pedido de los usuarios se concentra entre las 9 y las 23. en punto Excepto durante la hora de dormir, los usuarios compran en línea casi en cualquier momento y no se ven afectados por las horas de trabajo.

        De 10:00 am a 22:00 pm es el período activo para los usuarios, y el volumen de ventas y el volumen de ventas son significativamente más altos que el nivel promedio.Entre ellos, se especula que el volumen de ventas y el volumen de ventas disminuyeron ligeramente debido a la descanso para comer a las 12:00 am y 18:00 pm, y el volumen de ventas y el volumen de ventas después de las 22:00 am Se redujo significativamente y comenzó a aumentar después de las 5:00 del día siguiente, y gradualmente volvió a un nivel más alto después 9:00

4.4.3 Distribución de ventas aportada por diferentes regiones

-- 各州贡献的销售额分布
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; 

         Los siete estados principales contribuyeron con más del 80% de las ventas, las diez ciudades principales contribuyeron con más de 1/3 de las ventas y los dos principales Sao Paulo (186w) y Río de Janeiro (95w) juntos aportaron más de 1/5 de las ventas Bueno, el precio unitario por cliente en Rio de Janeiro (150,22) es significativamente mayor que en Sao Paulo (128,05), lo que indica que el nivel de consumo en Rio de Janeiro es mayor.

        Las operaciones diarias deben centrarse en los cambios en las ventas en las diez ciudades principales. Al hacer actividades, debemos primero aumentar la inversión en publicidad y tráfico en Sao Paulo y Río de Janeiro, y dar prioridad a la promoción de nuevos productos en Río de Janeiro, que tiene mayor poder adquisitivo. De ser posible, se debe dar prioridad al establecimiento de almacenes generales en Sao Paulo y Río de Janeiro para abastecerse, reducir los costos de transporte, acortar el tiempo de transporte y mejorar la satisfacción del cliente.

4.4.4 Tasa de recompra

-- 复购率
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 月份;

        Se puede ver que la lealtad de los usuarios de la plataforma es muy baja, y la tasa de recompra general es solo del 3,00 %. Es urgente mejorarla. Las operaciones de la plataforma deberían implementar más actividades para activar a los usuarios antiguos, como el sistema de recarga de miembros, el descuento de recompra, etc.

4.5 Análisis de la situación de entrega

        El nivel general de entrega es promedio en comparación con las plataformas de comercio electrónico nacionales. Se tarda un promedio de 3,23 días desde el pedido del usuario hasta la entrega al comerciante, 9,33 días en promedio en tránsito, 12,57 días desde el pedido del usuario hasta la recepción del producto, y hasta el 8,12 % de los pedidos se retrasan. En la plataforma, el tiempo de entrega más lento fue de 125,78 días, el tiempo de logística más lento fue de 205,19 días, el tiempo de entrega más lento fue de 209,63 días y el tiempo máximo de demora fue de 188,98 días, que era demasiado.

4.5.1 Tiempo de respuesta del pedido

-- 订单响应时长(下单-审批)
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;

        El tiempo medio de respuesta de pedidos es de 10,29 horas y el tiempo máximo de respuesta de 741,44 horas (30,89 días) El 82,51% de los pedidos empiezan a aprobarse a las 24 horas de que el usuario realiza el pedido. La plataforma puede optimizar el proceso de revisión de pedidos en función de este resultado, mejorando así la satisfacción del usuario. 

4.5.2 Plazo de entrega del pedido

-- 订单发货时长(下单-发货)
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;

 

        El tiempo promedio desde que se realiza un pedido hasta la entrega es de 3,23 días, y el tiempo más alto es de 125,78 días. El 82,41 % de los pedidos se envían dentro de los 5 días posteriores a la realización del pedido y el 9,04 % de los pedidos se retrasan.

4.5.3 Tiempo de tránsito logístico

-- 物流在途时长(发货-收货)
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;

 

        El tiempo medio de logística es de 9,33 días, el tiempo máximo es de 205,19 días y el 84,40 % de los pedidos llegan dentro de los 15 días posteriores a la entrega al transportista.

4.5.4 Plazo de entrega del pedido

-- 订单交付时长(下单-收货)
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;

        El tiempo de entrega de los pedidos generalmente se distribuye en sesgo positivo, la mayoría de los cuales se concentran en el rango de 3 a 16 días, el tiempo de entrega promedio es de 12,57 días, el tiempo más alto es de 209,63 días, y el 81,11% de los pedidos se entregan dentro de 18 días después de realizar el pedido.

4.5.4.1 Entrega de pedidos—Mes

-- 订单交付情况—月份
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 月份;

        En febrero y marzo y noviembre y diciembre, cuando hay muchos pedidos, el tiempo medio de logística ha aumentado considerablemente a 13-17 días, con un aumento de hasta el 55 %, y la proporción de pedidos de entrega en horas extra ha aumentado al 14-21 %. . Tomando como ejemplo marzo de 2018, el tiempo promedio de entrega fue de 3,33 días, con pocos cambios, pero el tiempo promedio de logística aumentó a 16,3 días y las órdenes de entrega en tiempo extra aumentaron a 21,36%.

4.5.4.2 Estado de entrega del pedido - Comerciante

-- 各商家平均发货、物流时长
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;

        Entre los 2.967 comerciantes, 63 tienen un tiempo de entrega promedio de más de 30 días. Para los comerciantes que tardan mucho tiempo en abastecerse, la plataforma puede ayudarlos a optimizar los envíos; para los comerciantes que tardan mucho tiempo en expresar, pueden considerar agregar preventa, ventas fuera de horas punta, abastecerse con anticipación y usar más rápido Entrega urgente para acortar el tiempo de entrega. Se recomienda que los comerciantes cuenten el volumen de ventas diario promedio de productos clave en función de los registros de ventas, consideren exhaustivamente su propia frecuencia de adquisición, preparen el inventario por un cierto período de tiempo por adelantado, cooperen con múltiples empresas de logística, establezcan almacenes en múltiples lugares, y entregar mercancías cerca.

4.5.4.3 Plazo de entrega del pedido retrasado

-- 延期交付时长
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;

 

        El tiempo de demora promedio de los pedidos es de 9,55 días, el tiempo más alto es de 188,98 días, el 8,12% de los pedidos se demoran en la entrega y el 82,32% de los pedidos se demoran en la entrega dentro de los 15 días.

        Entre los 7.823 pedidos pospuestos, 360 pedidos estaban muy atrasados ​​(más de 30 días), la mayoría de los cuales se retrasaron debido al largo tiempo de logística y algunos pedidos se debieron al largo tiempo de preparación. Para el retraso en la entrega causado por el largo tiempo de preparación del comerciante, es necesario contactar al comerciante para averiguar el motivo, y la plataforma puede ayudarlo a optimizar el envío; para el retraso en la entrega causado por la entrega urgente, puede considerar agregar pre -rebajas, ventas fuera de horas pico y entrega anticipada del producto. Abastecerse y utilizar mensajeros más rápidos para acortar los tiempos de envío. 

        Entre los 89 pedidos con ventas superiores a 1.000, 21 pedidos se retrasaron más de 15 días antes de la entrega, de los cuales 4 se debieron al largo tiempo de preparación y el resto de los pedidos se debió al largo tiempo de logística. Para estos pedidos, los motivos detallados de las entregas en horas extra deben examinarse uno por uno, y los consumidores deben ser compensados ​​y disculpados.

4.5.5 Relación entre las valoraciones de los usuarios y el tiempo de entrega del pedido

-- 评分与订单交付时长关系
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;

         Análisis de regresión utilizando Excel: 

 

        Se puede ver que el coeficiente de correlación R es 0, 33 y el cuadrado R es 0, 11. El tiempo de entrega del pedido está solo ligeramente correlacionado con el puntaje, y el grado de ajuste es muy bajo, lo que indica que además del tiempo de entrega, hay Hay otros factores que afectan el puntaje, que deben explorarse más a fondo, como la calidad de los productos básicos, la actitud de servicio al cliente, el servicio postventa, etc.

         Análisis de regresión utilizando Excel: 

 

        Se puede ver que el coeficiente de correlación R es 0.97 y el R cuadrado es 0.95, lo que indica que el tiempo promedio de entrega está altamente correlacionado con el puntaje y el grado de ajuste es bueno. P<0.05 en la prueba F indica que la regresión La ecuación es significativamente efectiva y P<0.01 en la prueba T, lo que indica un nivel de confianza del 99%.

V. Conclusiones y Sugerencias

5.1 Nivel de usuario

        1. Los usuarios se concentran en las ciudades costeras y las capitales del interior del sureste de Brasil. Les gusta comprar entre semana. Las tarjetas de crédito son el método de pago preferido. Las actividades de marketing posteriores pueden orientarse según la región del usuario, el tiempo activo y las preferencias de compra. . .

        2. La tasa favorable del usuario es 77.07% y la tasa negativa es 14.69%.Los motivos de las críticas negativas se pueden analizar y clasificar más a fondo.Los motivos de la calidad del producto deben retirarse del estante para su rectificación a tiempo y luego colocarse los estantes después de restaurar la calidad Por razones de actitud de servicio, el servicio al cliente debe fortalecerse Gestión de capacitación avanzada, al tiempo que mejora el servicio postventa, la devolución oportuna y el reembolso.

        3. El período pico para los comentarios de los usuarios es de 11:00 a 12:00 durante el día y de 21:00 a 1:00 de la tarde. Puede considerar lanzar anuncios dirigidos en la página después de completar los comentarios para promover aún más consumo.

        4. La frecuencia de consumo de los usuarios es generalmente baja y el tiempo de consumo reciente es relativamente lejano, es necesario realizar un marketing diferenciado y preciso para diferentes tipos de usuarios en el modelo RFM: para usuarios importantes de desarrollo y usuarios importantes de retención
        , debe tomar la iniciativa de contactar y otorgar descuentos de recompra para reducir el Umbral de consumo secundario, aumentar la tasa de recompra y adoptar un sistema de puntos de membresía o un sistema de recarga de tarjeta de membresía para guiar a los usuarios hacia el consumo a largo plazo y mejorar la adherencia; para usuarios de desarrollo general
        y usuarios de retención general, se deben agregar pruebas gratuitas para aumentar el interés de los usuarios y aumentar la retención de nuevos usuarios. Realice encuestas de satisfacción del usuario, analice las razones de la pérdida de usuarios y recuérdelos de manera específica; brinde servicios personalizados para usuarios de valor importante y retención
        importante usuarios, y proporcionar recomendaciones de productos personalizados y planes preferenciales de acuerdo con las necesidades e intereses de los usuarios;
        para los usuarios de valor ordinario y los usuarios de retención ordinarios deben optimizar las ventas relacionadas y aumentar el precio unitario de los clientes.

        5. Las categorías populares populares, como salud y belleza, artículos para el hogar, deportes y ocio, son adecuadas para la promoción y la promoción para todo tipo de usuarios, mientras que las categorías de nicho populares, como computadoras, artículos de papelería y pequeños electrodomésticos, se recomiendan mejor para grupos de usuarios específicos.

5.2 Nivel de comerciante

        1. El volumen de pedidos y las ventas de los comerciantes son generalmente bajos. El 74,22% de los comerciantes tienen un volumen de pedidos de menos de 20, y más de la mitad de los comerciantes tienen ventas de menos de 1,000. La plataforma debe contactar activamente a los comerciantes para comprender las razones del bajo número de pedidos, resumir y optimizar aún más, brindar orientación técnica y servicio posventa a los comerciantes y lanzar actividades de subsidio de la plataforma para promover el entusiasmo de los comerciantes.

        2. Para los comerciantes con muchas críticas negativas, las razones de las críticas negativas se pueden analizar y clasificar más a fondo. Las razones de la calidad del producto deben retirarse de los estantes a tiempo para la rectificación y luego colocarse en los estantes después de que se restablezca la calidad. El Las razones de la actitud de servicio deben fortalecer la capacitación y la gestión del servicio al cliente. Al mismo tiempo, mejorar el servicio postventa, la devolución oportuna y el reembolso.

5.3 Nivel de producto

        1. La plataforma puede dividir los productos en tres categorías: A, B y C según la proporción de ventas del 70 %, 20 % y 10 %, poner los recursos de gestión clave en la categoría A, enriquecer el número de subcategorías de las categorías A y B, y asigne más Asigne menos recursos a la categoría C o elimine alguna categoría C con ventas demasiado bajas y muy pocas subcategorías.

        2. Las diez principales categorías de ventas son productos para el hogar, salud y belleza, deportes y ocio, decoración de muebles, accesorios de computación, utensilios para el hogar, regalos de relojes, teléfonos, herramientas de jardinería y suministros para automóviles, que representan el 64,54% de las ventas totales. Las diez principales categorías de ventas son salud y belleza, regalos de relojes, productos para el hogar, deportes y ocio, accesorios de computadora, decoración del hogar, cosas geniales, utensilios para el hogar, artículos para el automóvil y herramientas de jardinería, que representan el 63,20% de las ventas totales. Para estas categorías, se puede adoptar una estrategia de marketing de expansión para atraer comerciantes de la misma categoría para instalarse, aumentar los tipos de productos, aumentar la publicidad y la inclinación del tráfico, agregar promociones de descuento, crear productos de gran venta entre productos de gran venta y utilizar -venta de productos para impulsar las ventas de toda la categoría e incluso del mundo entero. Prepare adecuadamente más inventario para reducir las pérdidas comerciales causadas por falta de existencias.

        3. Los clientes de la plataforma son principalmente grupos de consumo bajo y medio, los usuarios prefieren comprar productos en el rango [10,100] y los productos que más contribuyen a las ventas de la plataforma están en el rango [100,200). Es posible establecer múltiples descuentos y descuentos para descuentos completos, así como asociar productos de precio alto y bajo para la venta, aumentar la intensidad de los descuentos y promociones para productos de precio alto y mejorar los niveles de consumo de los usuarios.

        4. La descripción de la imagen y la descripción del texto de la mayoría de los detalles del producto son relativamente simples. La plataforma debe recordar a los comerciantes que tomen fotografías físicas de alta resolución para el producto y enriquecer la descripción en la página de detalles del producto. Un tutorial estándar para escribir descripciones detalladas del producto puede puede ser publicado, o puede llevarse a cabo la generación de la página de detalles del producto.

5.4 Nivel de ventas

        1. De 2016 a 2017, el volumen de ventas y el volumen de ventas de la plataforma aumentaron rápidamente y la tasa de crecimiento se desaceleró después de noviembre de 2017, lo que es consistente con la tendencia cambiante de la cantidad de usuarios activos mensuales. Mientras se activan los usuarios antiguos, se deben adoptar varios métodos para atraer nuevos usuarios para equilibrar la pérdida inevitable de usuarios complementando a los nuevos usuarios.

        2. Las ventas fluctúan en los festivales, y debemos seguir aprovechando festivales como el "Viernes Negro" para innovar las estrategias y actividades de ventas.

        3. Los usuarios están interesados ​​​​en las compras en línea los días de semana. De 10:00 a. m. a 22:00 p. m. es el período activo para los usuarios, y el volumen de ventas y el volumen de ventas disminuyen significativamente los fines de semana. La plataforma puede operar de acuerdo con el período activo de los usuarios, mejorar la tasa de conversión de cada enlace, aumentar el precio unitario de los clientes a través de la combinación de productos, descuento total y otras medidas, y realizar actividades promocionales los fines de semana.

        4. La gran mayoría de los usuarios solo ha realizado un pedido una vez, y la tasa de recompra en un mes muestra una tendencia a la baja. La plataforma debería implementar más actividades de activación, como descuentos de recompra, recargas de miembros, sistemas de puntos, etc., y recordar a los usuarios antiguos por mensajes de texto y correos electrónicos.

        5. Las operaciones diarias deben centrarse en los cambios en las ventas en las diez ciudades principales. Al realizar actividades, debemos primero aumentar la inversión en publicidad y tráfico en Sao Paulo y Río de Janeiro, y dar prioridad a la promoción de nuevos productos en Río de Janeiro, que tiene mayor poder adquisitivo.

5.5 Nivel de entrega

        1. La velocidad de respuesta del pedido es generalmente lenta y la plataforma debe optimizar el proceso de revisión del pedido.

        2. En febrero y marzo y noviembre y diciembre cuando hay muchos pedidos, el tiempo promedio de logística y la proporción de pedidos de entrega en horas extras aumentaron. La plataforma debe elegir una entrega exprés más rápida durante el festival de compras, alentar a los comerciantes a realizar pedidos y empaques previos, ampliar adecuadamente el tiempo de entrega estimado y compensar los pedidos de entrega retrasados.

        3. La mayoría de los pedidos de entrega diferida se retrasan debido al largo tiempo de logística y algunos se deben al largo tiempo de preparación. Para el retraso en la entrega causado por el largo tiempo de preparación del comerciante, es necesario contactar al comerciante para averiguar el motivo, y la plataforma puede ayudarlo a optimizar el envío; para el retraso en la entrega causado por la entrega urgente, puede considerar agregar pre -rebajas, ventas fuera de horas pico y entrega anticipada del producto. Abastecerse y utilizar mensajeros más rápidos para acortar los tiempos de envío.

        4. La plataforma puede dar prioridad al establecimiento de stock de almacén general en sao paulo y río de janeiro con las mayores ventas, y subalmacenes en belo horizonte, porto alegre, curitiba, salvador y brasilia para reducir los costos de transporte y acortar el transporte. tiempo, mejorando así la satisfacción del cliente.

Supongo que te gusta

Origin blog.csdn.net/KOGAMIKEI/article/details/131140789
Recomendado
Clasificación