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:

  • exploración no supervisada data
  • análisis de opiniones con características de importancia
  • analizar la correlación entre las valoraciones y
    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.

  • class="lazyload

    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:

    • Data o análisis de sentimiento es más exploratorio: averiguará qué es lo que más importa, cuáles podrían ser las principales razones que llevan a que una reseña sea positiva o negativa.

    • El impacto de los temas se utiliza para asociar la distribución de las puntuaciones a conceptos empresariales ya definidos (zoom, batería, ...).

    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:

    • Una categoría de productos

    • La revisión texto original

    • La revisión limpió el texto

    • El texto depurado de la revisión dividido en tokens

    • Clasificación del producto

    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.

    • En el caso de las opiniones con puntuaciones bajas, tenemos muchas menciones a la batería, la pantalla del dispositivo, su precio o incluso menciones a un error real encontrado.

    • En el caso de las opiniones con puntuaciones altas, vemos que la calidad de las fotos y las funcionalidades o el diseño se mencionan a menudo.

    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.

    Encontrará más información sobre nosotros y nuestros proyectos en nuestro blog Medium