Icon

Brazilian E-Commerce

Brazilian E-Commerce Public Dataset by Olist


The dataset has information of 100k orders from 2016 to 2018 made at multiple marketplaces in Brazil.

This dataset was generously provided by Olist, the largest department store in Brazilian marketplaces. Olist connects small businesses from all over Brazil to channels without hassle and with a single contract.

After a customer purchases the product from Olist Store a seller gets notified to fulfill that order. Once the customer receives the product, or the estimated delivery date is due, the customer gets a satisfaction survey by email where he can give a note for the purchase experience and write down some comments.

The idea is to create a cluster with those clients that didn't leave a review after purchasing, determining some patters and differences between them. Are they truly happy or unsatisfied? Why did it happen?

  • Objetivo de Negocio: Entender el perfil y el comportamiento de los clientes que no escriben reseñas, para discernir si existe un patrón de insatisfacción silenciosa o, por el contrario, de satisfacción que no necesita ser vocalizada.

  • Criterio de Éxito: Identificar al menos 2-3 clusters o segmentos de clientes "sin reseña" con características e interpretaciones de negocio claras.

Es posible que para una orden haya "customer_ids" diferentes, pero con el mimso "customer_unique_id".

Se revisó y esto sucede por que se registrarón ordenes (con el mismo "order_id" y el mismo "customer_id") con mas de 1 "review_id" diferentes sin comentarios (ver gráfica sobre el nivel # de occurencia de los "order_id")

Es posible que haya para una misma orden, "product_ids" iguales que vengan del mismo "seller_id", lo que se traduce que el usuario agregó varias unidades para el mismo "product_id" y "seller_id". En este caso se procede a agrupar, con la siguiente combinación de agregación:

  • Count del numero de veces que aparece este "product_id" = serán las unidades de ese item

Aquí se refleja el número de items unicos que hay en cada orden, donde encontramos ordenes donde tienen hasta un maximo de 8 productos diferentes (sin contar las unidades de cada item)

Unir cada "product_id" con su respectiva categoría y traducir cada una al inglés

Al revisar, hay "review_id" que aparecen en ordenes diferentes, con el mismo tiempo de creación, customer_unique_id y review_score. En este caso, al ser algo inconsistente (ya que la encuesta se envía por orden), se procede a eliminar estos duplicados.

En el anterior caso, si es posible que un order_id tenga diferentes review_ids (el usuario llenó varios formularios para la misma orden) más NO que un review_id tenga asignado diferentes order_ids

Hay ordenes donde el número de metodos de pago es más de uno...

Eliminar los missing values diferentes a la información faltante de los reviews (como falta de información de la categoría)

Por otro lado, hay diferentes status de orden, no obstante, los que nos interesan son aquellos que fueron entregados ("Delivered") ya que estos tienen más sentido para cuando se determine si los clientes estan satisfechos o no con su pedido YA ENTREGADO

Variable para el Clustering

Número total de pedidos realizados por customer id unico

Variable para el clustering:
  • Días desde última compra

  • Días desde primera compra

Variable para el Clustering:
  • Valor monetario Total

  • Ticket promedio

Por cada customer unico

Variable para el Clustering:
  • Indice o Porcentaje de entregas tardías

Variable para el Clustering:
  • Categoría mas comprada por cada cliente

  • Número de categorias unicas compradas por cada cliente

  • Indice de diversificación (Número de Categorías Únicas / Número Total de Pedidos)

Para el Índice, tenemos por ejemplo (Perfil del Cliente):

  • 0.0 - 1.0 Baja diversificación Especialista: Compra recurrentemente en pocas categorías

  • 1.1 - 2.0 Diversificación media Moderado: Tiene categorías favoritas pero explora otras

  • 2.1 o más (3) Alta diversificación Explorador: Prueba muchas categorías diferentes

Variable para el Clustering:
  • Método de pago más usado por cada cliente único

Entender que un vaucher se refiere a una fidelización (posible GiftCard) mientras que un boleto es un pago tipo promissory (se le entraga una promesa de pago y el usuario deberá pagar despues)

Convertir las variables categoricas en numericas

  • Varianza -> diferencia al cuadrado respecto a la media, por lo que si es alta, significa que esa variable va a dominar en el modelo de clustering (va a poder diferenciar mas)

  • Desviación -> raiz de la varianza, y mide la variación en la que los puntos difieren de la media.

Eliminación de Outliers

Los algoritmos de Clustering son sensibles a outliers. Como se utilizará el modelo K-Means y DBSCAN, los centroides serán atraidos hacia outliers extremos y se pueden crear clusters artificiales alrededor de outliers, respectivamente.

La idea es que los clusters deben representar patrones típicos de comportamiento (para definir correctamente los segmentos)

Al realizar el limpiado de Outliers con un Multiplicador IQR de 1,5 y calculo de quartil R8, obtenemos que para las variables (las que no fueron categoricas) se tiene en todos los casos outliers menores al 10% de los datos. Se procede a eliminar estos outliers para no afectar el resultado de clustering.

Normalización

Se realiza con el Z-Score (StandardScaler) ya que preserva la información de la distribución (por lo que cada variable tiene naturalidades diferentes), se considera mejor para distancias...

Clusterización con Método K-Means
Clusterización con Método DBSCAN
Euclidean Distance (Distancia Euclidiana)
  • Todas tus variables están en la misma escala (Z-score)

  • Funciona bien con datos normalizados

  • Es la métrica más intuitiva para espacios multidimensionales

  • DBSCAN con Euclidean es el estándar de la industria

Epsilon = 0.5
Min_samples_values = 2
Epsilon = 0.5
Min_samples_values = 7
Epsilon = 0.7
Min_samples_values = 5
Epsilon = 1
Min_samples_values = 5

De los mejores modelos, el número 4 fue el más acertado ya que:

  • El % de ruido es el menor

  • Clasifica en pocos clusters

Epsilon = Es la DISTANCIA MÁXIMA a la que dos puntos pueden estar y aún así considerarse "vecinos" que pueden conversar entre sí. Es el radio de la esfera de influencia de cada punto

  • ε = 0.5 → "Muy exigente" - solo clientes muy similares se conectan

  • ε = 1.0 → "Equilibrado" - clientes con similitud estadística significativa

  • ε = 2.0 → "Muy permisivo" - clientes bastante diferentes pueden conectarse

min_samples = es el NÚMERO MÍNIMO de personas que deben estar conversando juntas para que ese grupo sea considerado un cluster y no solo una conversación casual.

  • Por ejemplo, con min_samples = 5 significa -> Se necesitan al menos 5 clientes mutuamente conectados para formar un segmento de mercado válido y significativo

"Estoy buscando patrones de comportamiento que se repiten en al menos 5 clientes diferentes, lo que indica que no es una coincidencia aleatoria"

Epsilon = 1
Min_samples_values = 10
Epsilon = 1,5
Min_samples_values = 5
Graficación con clusters
Epsilon = 1,5
Min_samples_values = 2
Convert to variable
Table Row to Variable
Fecha de la ultima compra
GroupBy
Column Renamer
Porcentajecada cluster yruido
Expression
Column Renamer
columna RowId
RowID
Fecha de la primera compra
GroupBy
Expression
Bar Chart
Dias despues (primera y ultima) compra
Joiner
Expression
Porcentajecada cluster yruido
Expression
columna RowId
RowID
Bar Chart
Column Renamer
Porcentajecada cluster yruido
Expression
Valor monetario total y Promedio por Cliente Unico
GroupBy
columna RowId
RowID
Modelo 5
DBSCAN
Agregar un "1" cuandola entrega es tardía
Expression
Bar Chart
Porcentajecada cluster yruido
Expression
Info delivery estimation vsreal timestamp
Column Filter
columna RowId
RowID
Eliminar duplicados de ordenes y customer ids iguales entre si
Duplicate Row Filter
Modelo 6
DBSCAN
Bar Chart
Porcentajecada cluster yruido
Expression
columna RowId
RowID
Read Orders
CSV Reader
Read Reviews per Order
CSV Reader
Read Customer DB
CSV Reader
Read Order Items
CSV Reader
Read Order Payments
CSV Reader
Read Products DB
CSV Reader
Bar Chart
K = 3, con coef. más cercano a 1
Top k Row Filter
K = 3, con coef. más cercano a 1
Top k Row Filter
Color Manager
Number of orders per review_id
GroupBy
Joiner
Row Aggregator
Scatter Plot
Column Renamer
Color Manager
Bar Chart
Column Renamer
Scorer
Row Aggregator
Column Splitter
Indice de diversificación
Expression
Eliminate Duplicates
Duplicate Row Filter
Joiner
Scatter #1
Scatter Plot
Sorter
GroupBy
Number of different paymentsin the same order
GroupBy
Box Plot
Column Renamer
Sorter
Metodo de pago más usadopor cada cliente unico
GroupBy
Scatter #2
Scatter Plot
Denormalizer
columna RowId
RowID
Category to Number
Bar Chart
Bar Chart
Row Aggregator
Porcentajecada cluster yruido
Expression
Table View
Row Aggregator
Modelo 6
DBSCAN
String to Date
String to Date&Time
Column Renamer
Joiner
String to Date
String to Date&Time
Fecha de Corte (Max Fecha de comprarealizada en DB)
GroupBy
Bar Chart
Missing Value
Joiner
Gruped by the number of orders madeper customer_unique_id
GroupBy
Joiner
Joiner
Joiner
Joiner
Joiner
Column Renamer
Join Customer_Unique_Id and Order_Id throughout the Customer_Id (Order)
Joiner
Row Aggregator
Categories Translated
Value Lookup
Payment Info per Order_Id
Joiner
Category transalation
CSV Reader
EJEMPLO: Total monto compras y su distribución (presenta muchos Outliers)
Violin Plot (Plotly)
Expression
Numeric Outliers
Join all the cleaned tables
Joiner
Luego de eliminación de OutliersMejora distribución
Violin Plot (Plotly)
Bar Chart
Normalizar Variables No categoricas
Normalizer
Bar Chart
Top k Row Filter
Bar Chart
Modelo K-Means con la Koptimizada
k-Means
Corroborar el modelo,asignando clusters a una particiónde los datos originales
Cluster Assigner
Se convierte la K a una variable
Table Row to Variable
GroupBy
Color Manager
Euclidean distance
Numeric Distances
Column Renamer
Joiner
# ordenes unicas por customer ID Unico
Row Aggregator
Agrupar - cuantas entregas tardidasha tenido cada customer_id único
GroupBy
Bar Chart
Number to String
Column Renamer
Partición 70%, 30%
Table Partitioner
Expression
Se toman solo el 50% para entrenar el modelo (Mayor Rapidez)
Table Partitioner
Modelado con 20%de los datos
Optimized K-Means (Silhouette Coefficient)
Gruped - Numero de productos por cada categoria y cada cliente
GroupBy
Modelo 2
DBSCAN
Modelo 1
DBSCAN
Modelo 4
DBSCAN
Modelo 3
DBSCAN
Column Renamer
Sorter
Pie Chart
# products purchasedfor each category
Row Aggregator
Total Categorías Únicas por cliente
GroupBy
Porcentajecada cluster yruido
Expression
Join Orders with their reviews
Joiner
Column Renamer
Partición 20% de los datos
Row Sampler
Bar Chart
Dejar solo la categoría más compradapor cada customer único
Duplicate Row Filter
String to Date
String to Date&Time
Partición 50% de los datos
Row Sampler
Data with Missing "review_comment_message"
Row Splitter
Modelado con 50%de los datos
Optimized K-Means (Silhouette Coefficient)
Gruped by the number of orders madeper customer_unique_id
GroupBy
columna RowId
RowID
Modelado con 100%de los datos
Optimized K-Means (Silhouette Coefficient)
Join type of product (category, name lenght) per order
Joiner

Nodes

Extensions

Links