TL;DR
Comprender los comentarios de los clientes y saber cuáles son tus puntos fuertes y débiles es clave para cualquier negocio. Hoy en día, las empresas tienen acceso a una gran cantidad de información que podría proporcionarles esos conocimientos: reseñas de sitios web, interacciones de chat, transcripciones de conversaciones, comentarios en redes sociales...
En este artículo se explica cómo extraer rápidamente información a partir de texto data, tomando como ejemplo las reseñas de los consumidores. Presentaremos 3 enfoques diferentes:
temas empresariales predefinidos
(el modelado de temas podría ser una cuarta opción para ir más lejos)
Tenga en cuenta que la dirección data que subyace a este artículo ha sido generada artificialmente para garantizar la confidencialidad de nuestro proyecto inicial.

Análisis de las opiniones de los clientes
Intentamos obtener información de las opiniones sobre nuestros productos para entender cuáles son sus principales problemas o puntos fuertes. Los productos son dispositivos y accesorios para cámaras, valorados de 1 (malo) a 5 (excelente).
Utilizaremos tres enfoques diferentes para recabar información de data.

Se trata de tener puntos de vista complementarios:
Obtenga una visión global de la data que ha recopilado
Siempre que se inicia un nuevo proyecto data , el primer paso consiste en obtener una visión global de data (¿está desequilibrada? ¿hay suficiente data? ¿hay muchos valores perdidos?).
¿Cuántas opiniones tengo para cada categoría de producto?

Número de opiniones por categoría de producto
→ El hecho de que no haya tantas reseñas de Trípodes debe tenerse en cuenta si analizamos las reseñas de esta categoría específica de productos. Cuantos más data tengamos, mejor, para poder obtener conclusiones imparciales y relevantes.
¿Cuántas valoraciones tengo para cada clasificación?

Número de revisiones por puntuación
→ Esto es importante. Vemos que nuestro conjunto de datos está bastante desequilibrado, tenemos muchas más reseñas positivas que negativas. Este tipo de información debe tenerse en cuenta a la hora de entrenar modelos específicos (por ejemplo, un modelo de clasificación para el análisis de opiniones).
¿Cuál es la distribución de la puntuación de cada categoría?

Valoración media y distribución de cada categoría de productos
Podemos ver aquí que las Lentes tienen la valoración media más alta, mientras que hay muchas opiniones negativas (especialmente con una puntuación de 1) para Drones e Imágenes Aéreas.
Utilizar la PNL para comprender las preocupaciones de sus clientes
Ahora, para entender de qué van las críticas, pondremos en práctica los distintos enfoques de la PNL mencionados anteriormente.
Data limpieza
Antes de nada, hay que limpiar el texto data, para que pueda ser utilizado por los distintos métodos de PNL (este paso no siempre es necesario, dependiendo de los algoritmos que se quieran utilizar).
Aplicamos funciones estándar de preprocesamiento que eran relevantes para nuestro data (eliminación de HTML, puntuación, números de teléfono, ...), e implementamos una lista personalizada de palabras de parada que eliminamos de las reseñas (por ejemplo, la palabra "cámara" no aporta tanta información a nuestro análisis).
Puedes encontrar muchas de estas funciones en nuestro repositorio NLPretext de Github.
Minería de información en unas pocas líneas de código
Ahora que tenemos para cada revisión:
Podemos empezar por fijarnos simplemente en nuestras palabras más frecuentes (palabras sueltas, bi-gramas, tri-gramas...). Es un análisis sencillo, pero te da una visión inmediata de cuáles son los temas principales para cada puntuación y categoría.
from colecciones import Contador
importar matplotlib.pyplot como plt
importar wordcloud
plt.rcParams["figure.figsize"] = [16, 9]
def crear_ngramas(lista_token, nb_elementos):
"""
Crear n-gramas para una lista de tokens
Parámetros
----
token_list : lista
lista de cadenas
nb_elementos :
número de elementos en el n-grama
Devuelve
---
Generador
generador de todos los n-gramas
"""
ngrams = zip(*[lista_token[index_token:] for index_token in range(nb_elements)])
return (" ".join(ngram) for ngram in ngrams)
def palabras_frecuentes(lista_palabras, ngramas_número=1, número_palabras_top=10):
"""
Crear n-gramas para la lista de tokens
Parámetros
----
número_ngramas : int
número_top_palabras : int
longitud del marco de datos de salida
Devuelve
---
DataFrame
Dataframe con las entidades y sus frecuencias.
"""
frecuentes = []
if ngrams_number == 1:
pass
elif ngrams_number >= 2:
lista_palabras = crear_ngramas(lista_palabras, número_ngramas)
else:
raise ValueError("el número de n-gramas debe ser >= 1")
contador = contador(lista_palabras)
frecuente = contador.más_común(número_top_palabras)
return frecuente
def make_word_cloud(text_or_counter, stop_words=None):
if isinstance(texto_o_contador, str):
word_cloud = wordcloud.WordCloud(stopwords=stop_words).generate(text_or_counter)
si no
si palabras_de_parada no es None
text_or_counter = Counter(word for word in text_or_counter if word not in stop_words)
word_cloud = wordcloud.WordCloud(stopwords=stop_words).generate_from_frequencies(text_or_counter)
plt.imshow(nube_palabras)
plt.axis("off")
plt.show()
WordCloud
Aprovechando estas funciones, podemos mostrar fácilmente una Cloud Palabras de las palabras más frecuentes, utilizando reseñas para Cámaras con una puntuación entre 1 y 2:

A continuación, muestre una Cloud Palabras similar utilizando reseñas para Cámaras con una puntuación entre 4 y 5 :

Podemos identificar fácilmente los principales puntos planteados en ambos casos.
Podríamos hacer este ejercicio para cada producto de nuestra Compañia , con el fin de ver la especificidad de cada uno y poder sacar conclusiones a un nivel más granular.
Recuento de N-gramas
También podemos utilizar la función palabras_frecuentes para mostrar las palabras, bi-gramas o tri-gramas más frecuentes:

Para ir más lejos, podrías poner en marcha una función que mostrara las reseñas asociadas a una palabra clave, con el fin de hacer zoom en los n-gramas que te parezcan interesantes. También podrías buscar los n-gramas con el TF-IDF más alto / más bajo (fácil de calcular con la biblioteca sklearn ), ya que te permite ver las palabras importantes basándote en una métrica diferente a la de un simple contador de frecuencia.
Análisis del sentimiento
A continuación, pasamos a un enfoque de análisis de sentimientos. Normalmente, se utiliza para predecir si un texto es positivo o negativo. En nuestro caso, ya tenemos esta información (la puntuación entre 1 y 5 nos da el sentimiento que hay detrás de la reseña). Pero entrenar un modelo para predecir esta valoración nos ayudará a encontrar qué palabras (características) son clave para los clientes.
Lo que podemos hacer es entrenar un clasificador de análisis de sentimiento en este data, y luego utilizar bibliotecas como SHAP o LIME para entender qué características (= palabras) tienen más impacto en que una reseña se clasifique como positiva o negativa.

Clasificador
Para entrenar un clasificador, tienes un montón de posibles algoritmos que puedes usar, desde el clásico sklearn LogisticRegression, hasta modelos ULM-fit(mira este cuaderno para entrenar un modelo ULM-fit francés, y este artículo para entender más sobre ULM-fit) o el clasificador Ludwig desarrollado por Uber.
Quizá le interese empezar por uno sencillo, para ver si ya responde a sus necesidades, antes de poner en marcha algoritmos más complejos.
Asegúrese de tener en cuenta el hecho de que su conjunto de datos probablemente esté desequilibrado (más reseñas positivas que negativas, en nuestro caso).
Importancia de las características
Una vez implementado el clasificador, puede pasar al paso más importante: obtener información sobre la importancia de las características.
En el siguiente ejemplo aplicamos SHAP en nuestro modelo (aquí, un simple sklearn LogisticRegression):


Podemos ver aquí que las funcionalidades, la calidad de las fotos y las características del zoom tienen un impacto realmente positivo en la satisfacción de nuestros clientes, mientras que el flash, la tarjeta de memoria o las baterías tienden a tener un impacto realmente negativo cuando se mencionan en una reseña.
Palabras como "excelente", "perfecto" o "malo" se eliminaron de este análisis (antes de entrenar el clasificador), porque se considerarán las características más importantes, mientras que en nuestro caso queremos centrarnos en encontrar información sobre nuestros productos, no mejorar realmente el rendimiento de nuestro clasificador.
Consulte este cuaderno para ver un ejemplo de cómo utilizar SHAP, con un conjunto de datos públicos.
Impacto de los temas empresariales
Nuestro tercer enfoque fue algo diferente de los anteriores, ya que parte de temas relacionados con la empresa elegidos por alguien con conocimientos sobre los productos.
Se trata de analizar cómo influyen los temas empresariales predefinidos en las calificaciones de los productos, para entender si son una fuente de fortaleza o un problema a resolver.
Determinación de temas
El primer paso consiste en clasificar las reseñas en categorías temáticas. Para ello, se puede etiquetar el conjunto de datos manualmente (después se puede entrenar un clasificador si se desea clasificar automáticamente las nuevas reseñas por temas) o con un modelo basado en reglas.
En nuestro caso utilizamos un modelo basado en reglas porque ya puede dar buenos resultados a bajo coste (por ejemplo: si tienes curiosidad por la calidad de tus lentes o tus servicios posventa, puede ser sencillo establecer reglas que determinen si una reseña menciona o no esos aspectos).
Impacto temático
En un segundo paso puede calcular su puntuación media global y, a continuación, la puntuación media de las opiniones que hablan de un tema específico.
Restando ambas puntuaciones, puedes deducir el impacto que tiene tu tema en tu puntuación global.

Aquí deberíamos preocuparnos por nuestro servicio posventa porque a menudo se menciona de forma negativa (aunque también podría deberse a que las personas que se ponen en contacto con el servicio posventa suelen tener un problema en primer lugar. Por eso, hay que mirar con detalle las opiniones que mencionan este tema, para entender realmente por qué se menciona).
→ También en este caso, los conocimientos empresariales son esenciales para dar sentido a tus resultados.
Por otro lado, cuando se mencionan nuestros diseños o lentes, suele estar vinculado a una reseña con una puntuación alta, lo que podría significar que es uno de nuestros puntos fuertes.
Consulta este artículo para ver más visualizaciones alternativas a Wordcloud.
Para ir más lejos
Podríamos ir más allá e intentar detectar temas en nuestras reseñas: se podría utilizar la biblioteca Top2Vec para extraer temas y ver la correlación entre temas y puntuaciones (cualquier biblioteca de modelado de temas funcionará, pero Top2Vec tiene la ventaja de dar grandes resultados sin requerir ningún preprocesamiento, ni un número predefinido de temas).
Este artículo muestra cómo obtener información sobre los clientes a partir del texto data mediante un análisis pragmático y sencillo. Muchas gracias por leer hasta ahora y no dudes en ponerte en contacto con nosotros si tienes algún comentario sobre el tema. Puede visitar nuestro blog aquí para obtener más información sobre nuestros proyectos de aprendizaje automático.

BLOG






