Vai al contenuto

Retail e beni di consumoBI, AI e ML per l'azienda

Recensioni e ticket letti ogni notte

Recensioni e ticket dell'assistenza dicono cosa non va molto prima dei numeri di vendita, ma sono troppi per leggerli tutti. In Muvia una funzione Python assegna ogni notte un argomento e un tono a ogni messaggio, e Athena riassume i problemi principali con i numeri e cosa fare.

Scenario illustrativo: descrive un caso tipo, non il progetto di un cliente.

I clienti lo scrivono prima che le vendite lo mostrino.

Una confezione che perde, un prodotto introvabile, un corriere in ritardo: i clienti lo scrivono nelle recensioni e nei ticket dell'assistenza, settimane prima che il problema arrivi nei numeri di vendita. Ma i messaggi sono migliaia, e chi li legge ne vede solo una parte.

Senza un argomento e un tono per ogni messaggio non si vede quando un tema esplode, su quali prodotti, e se l'intervento ha funzionato. Le lamentele restano aneddoti.

Per chi
Customer care e qualità, marketing e brand, product manager.
Le recensioni del negozio online da un'API REST, i ticket dell'assistenza in file CSV e l'elenco dei prodotti in Excel entrano in Muvia, dove una funzione Python assegna ogni notte argomento e tono a ogni messaggio; ne escono la tabella dei messaggi classificati, un cruscotto degli argomenti settimana per settimana, un allarme sui messaggi negativi e le risposte di Athena.

In Muvia, passo per passo

Schermate vere del prodotto, registrate su un progetto con dati di esempio.

1 di 5

Il video · Recensioni e ticket dell'assistenza dicono cosa non va molto prima dei numeri di vendita, ma sono troppi per leggerli tutti. In Muvia una funzione Python assegna ogni notte un argomento e un tono a ogni messaggio, e Athena riassume i problemi principali con i numeri e cosa fare.

Cosa ottieni

Ogni messaggio letto
Tutte le recensioni e tutti i ticket hanno un argomento e un tono, non solo quelli che qualcuno ha avuto il tempo di aprire.
I problemi visti quando nascono
Un tema che si accende sulla mappa di calore si vede nella settimana in cui succede, con i prodotti coinvolti.
Si vede se l'intervento funziona
Dopo una correzione, il tono e le lamentele sul tema dicono settimana per settimana se il problema è risolto.
Dal riassunto all'azione
Athena trasforma migliaia di messaggi in pochi problemi, con i numeri e cosa fare per ciascuno.

Per il team tecnico

Come si costruisce in Muvia

  1. 1

    Carica recensioni e ticket

    Le recensioni arrivano da un'API REST, i ticket da file che si accodano alla stessa tabella. Ogni messaggio porta testo, data, fonte e prodotto.

  2. 2

    Classifica in Python

    Una funzione Python legge ogni testo con un lessico italiano e poche regole: l'argomento è il gruppo di parole chiave più presente, il tono va da −1 a +1 e tiene conto delle negazioni e delle stelle. Gira nel runtime isolato, senza rete.

  3. 3

    Programma il ricalcolo

    Un flusso esegue la funzione ogni notte alle 2 e scrive argomento, tono e parole chiave di ogni messaggio in una tabella gestita.

  4. 4

    Costruisci il cruscotto

    La mappa di calore argomento per settimana fa vedere quando un tema si accende; accanto ci sono il tono medio, la quota di messaggi negativi e i prodotti coinvolti.

  5. 5

    Chiedi ad Athena

    Athena legge i messaggi classificati e risponde con i problemi principali: quanti messaggi negativi, la settimana peggiore, i prodotti coinvolti e cosa fare.

Funzione Python

import re
import pandas as pd

ARGOMENTI = {
    "Confezione": ["tappo", "bottiglia", "confezione", "perde"],
    "Disponibilità": ["introvabile", "esaurit", "scaffal"],
    "Consegna": ["consegna", "corriere", "spedizione"],
    "Gusto": ["gusto", "sapore", "frizzant"],
}
POSITIVE = ("ottim", "buon", "perfett", "pratic", "puntual")
NEGATIVE = ("perde", "rovesciat", "ritardo", "esaurit", "pessim")
NEGAZIONI = {"non", "mai", "nessun"}

def _argomento(testo):
    punti = {a: sum(testo.count(p) for p in parole) for a, parole in ARGOMENTI.items()}
    migliore = max(punti, key=punti.get)
    return migliore if punti[migliore] else "Altro"

def _tono(testo):
    parole, segni = re.findall(r"[a-zàèéìòù]+", testo), []
    for i, p in enumerate(parole):
        s = 1 if p.startswith(POSITIVE) else -1 if p.startswith(NEGATIVE) else 0
        if s and i > 0 and parole[i - 1] in NEGAZIONI:
            s = -s
        if s:
            segni.append(s)
    return sum(segni) / len(segni) if segni else 0.0

def transform(inputs, params, ctx):
    m = inputs["rows"].copy()
    testi = m["testo"].fillna("").str.lower()
    m["argomento"] = testi.map(_argomento)
    tono = testi.map(_tono)
    stelle, peso = pd.to_numeric(m["stelle"], errors="coerce"), params["peso_stelle"]
    m["punteggio_tono"] = tono.where(stelle.isna(), (1 - peso) * tono + peso * (stelle - 3) / 2).round(2)
    return {"rows": m}
Argomento e tono con un lessico e poche regole, scritti dal team: si leggono, si correggono e si rieseguono.
I dati che servono
  • Recensioni del negozio online con testo e stelle, lette da un'API REST
  • Ticket dell'assistenza con testo, prodotto e provincia, da file CSV
  • Prodotti e formati, da un file Excel
Le parti di Muvia usate

Portaci una domanda a cui oggi non sai rispondere.

Partiamo da una domanda vera della tua azienda e ti mostriamo il percorso dalla fonte al cruscotto, con i tuoi sistemi e non con quelli di una demo.