Icon

Brazilian_​ecommerce_​Text_​processing

Se identifica que aunque existe el customer_id este no identifica un cliente de manera unica, el codigo del cliente es customer_unique_id.

Adicional se identifica que no existen valores nulos en las variables

Se encontro que la columna categorica order_status esta principalmente asignada al valor delivered, por lo que parece no representar mayor aporte.

Adicional se crean columnas de variables derivadas interesantes

  • deivery_time_days - Tiempo total desde compra a entrega

  • shipping_delay_days - Tiempo de retraso (positivo= entregado tarde)

  • delivery_on_time - binario de cumplimiento de entrega

Se encuentra que payment_sequential es el numero de pagos, y payment_installment es el numero de pagos totales, por lo que se ve sospechoso que el segundo sea menor al primero, por lo que se crea una columna para revisar el caso y saber cuanto es la proporcion, pero se descarta dado que si pueden existir varios intentos de pagos.

Analizar el comportamiento de los clientes del e-commerce brasileño olist, identificando patrones de compra, cumplimiento logístico y satisfacción del cliente, con el fin de segmentar perfiles y proponer mejoras estrategicas

Preguntas

  • ¿Cuáles son los principales factores asociados a las demoras en las entregas?

    • El DataSet no tiene registros de no entregados

  • ¿Qué segmentos de clientes muestran mayor frecuencia y valor de compra?

  • ¿Qué características definen a los clientes con mejores evaluaciones?

  • ¿Cuál es el perfil de los clientes que no dejan reseñas?

Se encuentra que puede existir varios intentos de pago y esto genera una cardinalidad de 1-N, por lo que se decide agrupar los datos de payments creando:

  • n_payments

  • total_paid

  • installments_sum

Adicional se ha pivotado payments para traer el tipo de pago y conservarlo como variable para el modelo.

Y debido a la existencia de 1 solo registro sin pago y al pivot, se genera un missing values para corregir.

Se encuentra que en el dataset de review una misma review puede estar vinculada a mas de una orden de compra lo que se considera un error y por el volumen se decide eliminarlos

Mas de la mitad de reviews realizadas no tienen un comentario por lo que se elige este hecho para realizar un proceso de cluster para detectar una insatisfacción escondida, adicional se sube el dataset review a nivel de pedido

Se encuentran varios productos con categorias nula y sin traducción, se crea una columna con el valor de categoria final

Se encuentra que cada order_item_id se refiere a una unidad de producto, por lo que se debe agrupar por producto por orden para tener la cantidad de productos, aunque es realmente minimo el cambio y se podria omitir y calcular el precio de la orden.

Asi mismo para elevarlo a nivel de orden de pedido, se evidencia un problema con las categorias, para poder transportar esta información se reclasificaran todas las que representen menos del 1% en una super categoria.

Identificación categorias >0.3% otras_categorias, se dejo en ese porcentaje dado que no existe ninguna categoria que supere el 10% y agrupar tantas en otras categorias la colocaba de primer lugar pudiendo asi introducir ruido a los analisis

Comprobación de representación otras categorias

Codificación de variable 'categoria' mediante conteo de frecuencia y peso por orden

Se lleva el dataset de productos a nivel de orden y se le agregan la codificación de la categoria.

Clusterización de ordenes para identificar perfiles de datos

  • Filtrar solo por status delivered, dado que las demas siguen en flujo de entrega.

  • Quitar columnas de fechas e identificativos, y metodo de pago no definido ya que esta en 0

  • Reemplazar los missing value por 0 dado que principalmente estan presentes en los valores de score de las review, y el de fotos del producto

  • Aplicar PCA sobre las columnas de las categorias (Pendiente medir mejor d)

  • Normalizar todas las columnas excepto las que representan a las categorias

K- means

DBSCAN

En el Nodo GroupBy se agregan los Payment_installments como el maximo, ya que estos installments hace parte de solo el metodo de pago Credit_card

Preprocesamiento de Texto

  1. Case Converter - Normalizar el texto a solo Lower Case (Minusculas)

  2. Strings to Document - Transformar la columna de texto (full_review_text) en el formato de objeto Document que los nodos de NLP de KNIME necesitan. Se utilizó en este caso el OpenNLP Whitespace Tokenizer - divide la cadena de texto (tu reseña) en tokens (palabras) usando el espacio en blanco como separador principal. Dado que no hay un tokenizador especifico para el idioma Portugues, se procede a usar este tokenizador standard.

  3. Punctuation Erasure - Eliminacion de los signos de puntuacion (., !, ?, etc.). Estos signos son solamentes los que estan en los extremos del texto o documento, mas no aquellos que hacen parte interna del registro.

  4. Number Filter - Eliminar cualquier dígito numérico dentro de cada registro. Esta eliminación solamente se hace a aquellos numeros aislados, no aquellos que puedan hacer parte logica del mensaje.

  5. Stop Word Filter - Eliminar palabras comunies sin significado.

  6. Snowball Stemmer - Reducir palabras a su raíz para tratar variaciones como una sola palabra (ej. "bom" y "boa" son solo "boa").

Preparación de datos
  1. Row Filter - Separar los datos tomando solo aquelos registros que tiene un review_comment_message indicado (es decir, no es un missing value)

  2. Column Filter - Escoger solo aquellas variables (columnas) relacionadas con el score, reviews y su respectivo order y customer unique ID

  3. Expression - Unión del title y el message review. En caso tal no haya ningun titulo (Missing Value), se tomará solamente el mensaje del review. Como resultado, se obtiene la columna "full_review_text".

  4. Missing Values - Eliminar aquellos registros que no tengan ningun valor en el "full_review_text"

  5. Rule Engine - Convertir el Score (1-5) a una clase de sentimiento simplificada para esta clasificacion supervisada (1-2 Negativo, 3 Neutro, 4-5 Positivo)

Como resultado se obtienen aproximadamente 26K datos positivos, 10K Neutros y 3.5K Negativos lists para el Text Processing

  • Document Vector - Convierte cada documento (review) en una fila de valores numéricos (vectores) donde cada columna es un token/palabra.

  • Category to Class - Agrega la clase de sentimiento en cada review message

  • Table Partitioner - Separar los datos 70 - 30 para entreno y testeo del modelo a utilizar

Modelado de Clasificación
Metodos Utilizados
  • Logistic Regression - Se utiliza como modelo de referencia (baseline). Es muy rápido de entrenar con matrices dispersas (TF-IDF) y proporciona una solución lineal interpretable.

  • Gradient Boosted Trees (GBT) - Es uno de los algoritmos de clasificación más potentes. Es robusto, maneja bien datos dispersos y captura complejas interacciones no lineales entre las palabras, lo que generalmente lleva a alta precisión.

  • Support Vector Machine (SVM) - Es excelente para encontrar el hiperplano óptimo de separación en espacios de muy alta dimensión (como el espacio de vocabulario). Es una opción clásica y muy precisa para la clasificación de texto.

Analisis
  • Los modelos Logistic Regression (18.316%) y Gradient Boosted Trees (18.771%) lograron una precisión muy similar, siendo la Regresión Logística ligeramente superior. Esto sugiere que la relación entre la presencia de las palabras (vectores TF-IDF) y el sentimiento es en gran medida Lineal. El valor de cada palabra sumado (propiedad de los modelos lineales) es suficiente para determinar la clase, y el poder de las interacciones no lineales de GBT no aportó una mejora significativa.

  • El SVM obtuvo una tasa de error inaceptablemente alta (32.464%). El modelo fue entrenado con solo aprox 6,000 datos debido a la limitación de tiempo, mientras que los demás usaron $26,600$ datos. El rendimiento deficiente no se debe al algoritmo en sí, sino a la falta de datos de entrenamiento

  • Dado que la Regresión Logística ofrece la mejor precisión ($18.316\%$ de error $\rightarrow 81.684\%$ de precisión) y es mucho más rápida de entrenar y predecir que el GBT, este modelo es el claro ganador para ser desplegado en producción.

Uso del analisis de sentimiento

La idea de este anlisis y clasificación supervisada es construir un sistema de calificación robusto que no dependa solamente del input de los clientes con el Net Promoter Score. Basicamente la clasificación supervisada (ML) puede aprender la exisitencia de algunos comentarios que contengan tanto palabras negativas como positivas y el modelo aprende a ponderar el valor TF-IDF (Term Frequency - Inverse Document Frequency) más alto de este termino en especifico. Asi mismo, el modelo es capaz de predecir el sentimiento de millones de reseñas nuevas que nunca ha visto, con una buena precision de 81,7%

Valor del Modelo y Caso de Aplicación

La clasificación supervisada del sentimiento (Positivo, Negativo, Neutro) y el review_score (1-5) son variables que se complementan en el análisis de valor para el negocio. El Sentiment Class del modelo se aplicaria de la siguiente manera:

  1. Detección de Reseñas Engañosas (Gap Analysis): ¿Por qué una reseña con score 5 (máximo) fue clasificada por el ML como Neutro? Esto podría indicar que el cliente le dio 5 estrellas por defecto, pero el texto real expresa desilusión con la entrega

  2. Enrutamiento Automático: Las reseñas con sentimiento Negativo pueden ser automáticamente dirigidas al equipo de Atención al Cliente para una respuesta inmediata, sin tener que esperar a que alguien lea miles de reseñas.

  3. Identificación de Features Críticas: Al analizar los coeficientes de la Regresión Logística (las palabras más importantes), la empresa sabe inmediatamente qué palabras impulsan el sentimiento (ej., "atraso," "rápido," "ótimo").

  • Term Frequency (TF): Frecuencia del Término (TF): Conteo total de un término en todos los documentos.

  • Document Frequency (DF): Frecuencia del Documento (DF): Número de documentos en los que aparece un término.

  • Inverse Document Frequency (IDF): Frecuencia Inversa del Documento (IDF): El logaritmo del número total de documentos dividido por la DF. El IDF asegura que solo las palabras que son únicas e informativas tengan un peso significativo cuando se entrena el modelo de clasificación de sentimiento.

Row Filter
Validación productos
GroupBy
Column Renamer
Column Expressions (legacy)
Conjunto global de terminosy filtrado por DF (Document frecuency)
Unique Term Extractor
Row Filter
Solamente el order_id, Document Original y Document Preprocessed
Column Filter
GroupBy
Based on document frequency
Term Filtering
order total
GroupBy
Category to Class
Value Counter
Document Vector
Dataset order_product
Column Expressions (legacy)
SVM Learner
Color Manager
Column Filter
Order_category
GroupBy
Joiner
PMML Writer
Math Formula
70 - 30
Table Partitioner
GroupBy
Gradient Boosted Trees Predictor
Cross Joiner
SVM Predictor
GroupBy
Scorer
Math Formula
Gradient Boosted Trees Learner
Joiner
Logistic Regression Predictor
Rule Engine
Value Counter
Logistic Regression Learner
Customer
CSV Reader
order
CSV Reader
items
CSV Reader
Left clientes y ordenes
Joiner
Joiner
GroupBy
Chart Clase Objeto
Bar Chart
70-30
Table Partitioner
Scorer
Terms vs TF
Pie Chart
Missing reviews Count
Bar Chart
70-30
Table Partitioner
String Cleaner
Data Explorer
Terms vs DF
Pie Chart
no_coment_review
Expression
String to Date&Time
Value Counter
String Cleaner
shipping_delay_days
Date&Time Difference
Data Explorer
delivery_time_days
Date&Time Difference
Identificador Delivery_On_Time
Rule Engine
Max ReviewAnswer Time
GroupBy
Missing Value
Value Counter
Row Filter
Normalizer
PCA
Bar Chart
products
CSV Reader
String Cleaner
Inclusion categoria
Joiner
Joiner
3 cluster
k-Means
traduccion
CSV Reader
4 cluster
k-Means
Optimized K-Means (Silhouette Coefficient)
Agregar "Sin Categoria"
Rule Engine
Violin Plot (Plotly)
Violin Plot (Plotly)
Optimizet cluster
k-Means
Numeric Outliers
Data Explorer
Top k Row Filter
Limpieza espacios
String Cleaner
Color Manager
frecuencia order_status
Bar Chart
Table Column to Variable
Scatter Plot
Limpieza de espacios
String Cleaner
Scatter Plot
Eliminar duplicados payments
GroupBy
Pivote payment_type
Pivot
Color Manager
DBSCAN
Scorer
Scatter Plot
Incluir payment_type pivoteado
Joiner
String Cleaner
execute up-stream before configuration
AutoML (Regression)
Color Manager
Unicos por review_id
GroupBy
Duplicado de Ordenes
Duplicate Row Filter
Review_id repetidos
Row Filter
Conteo Order Status
Row Aggregator
Bar Chart
Value Counter
Suma Payment_Sequentialspor Orden
Row Aggregator
Missing Valuesa 0 (cero)
Missing Value
Dejar solo los % por Payment_Value
Column Filter
% value por cada Payment_method
Expression
Extract Table Dimension
Sacar "not_defined"Value Payment Type
Row Filter
Registros conReview_id unicos
Joiner
Eliminar los NaN
Row Filter
Cross Joiner
GroupBy
Math Formula
Column Filter
Rule Engine
Pivot
Row Filter
String to Date&Time
Rule Engine
Solamente los logs con Review
Row Filter
Pie Chart
Missing Value
Seleccionar columnaspara NLP
Column Filter
GroupBy
missing values"full_review_text"
Missing Value
Join title & message
Expression
Crear la Clase Objetivo
Rule Engine
Column Renamer
Extract Table Dimension
Joiner
Joiner
Concatenate
payments
CSV Reader
Column Filter
Texto en formato de objetoDocument
Strings to Document
Concatenate
Eliminar puntuacion
Punctuation Erasure
Extract Table Dimension
Eliminar digitosnumericos aislados
Number Filter
Data Explorer
A Lower case
Case Converter
review
CSV Reader
Reducir palabras a su raíz
Snowball Stemmer
order payments
Joiner
Eliminar palabras comunes sin significado (artículos, preposiciones)
Stop Word Filter
Data Explorer
Terminos por cada review
Bag Of Words Creator
GroupBy
Data Explorer

Nodes

Extensions

Links