Retail e beni di consumoBI, AI e ML per l'azienda
Elasticità al prezzo e proposta di listino
Un aumento di prezzo può far perdere un pezzo su tre o quasi nulla, e la differenza si scopre a cose fatte. In Muvia un modello scritto dal team stima ogni settimana l'elasticità di ogni articolo e prepara la proposta di listino: cosa aumentare, cosa ridurre, quanto margine rende.
Scenario illustrativo: descrive un caso tipo, non il progetto di un cliente.
Sul listino, un aumento che regge e uno che fa scappare i clienti si somigliano.
Quando i costi salgono, il listino si ritocca quasi sempre in blocco: qualche punto in più su tutta la categoria. Ma ogni articolo reagisce a modo suo. Su alcuni un aumento non si sente, su altri fa perdere un pezzo su tre, e lo si vede solo nelle vendite delle settimane dopo.
Stimare la sensibilità al prezzo vuol dire separare l'effetto del prezzo da quello dei volantini e della stagione, articolo per articolo, e rifarlo ogni volta che arrivano dati nuovi. In un foglio di calcolo nessuno lo fa davvero.
- Per chi
- Pricing e category manager, direzione commerciale, controllo di gestione.
In Muvia, passo per passo
Schermate vere del prodotto, registrate su un progetto con dati di esempio.
Il video · Un aumento di prezzo può far perdere un pezzo su tre o quasi nulla, e la differenza si scopre a cose fatte. In Muvia un modello scritto dal team stima ogni settimana l'elasticità di ogni articolo e prepara la proposta di listino: cosa aumentare, cosa ridurre, quanto margine rende.
Cosa ottieni
- Ogni articolo il suo prezzo
- Gli aumenti vanno dove la domanda li regge e i ribassi dove riportano pezzi e margine, invece di un ritocco uguale per tutti.
- Il prezzo separato dal volantino
- Il modello non scambia l'effetto di una promozione o della stagione per effetto del prezzo.
- La proposta si aggiorna da sola
- Ogni lunedì l'elasticità si ricalcola sui dati nuovi e la proposta di listino la segue.
- Il motivo scritto accanto
- Ogni prezzo proposto porta la sua spiegazione in parole, leggibile da chi non ha costruito il modello.
Per il team tecnico
Come si costruisce in Muvia
- 1
Metti insieme prezzi e vendite
Il gestionale su SQL Server porta listini e costi, i file delle casse i pezzi venduti, un Excel il calendario dei volantini. Una query li unisce in una serie per articolo e per giorno, salvata come dataset.
- 2
Guarda prima di modellare
In Analisi metti prezzo e pezzi uno sopra l'altro, annoti il giorno di un aumento e confronti due articoli nel grafico XY: chi crolla e chi resta piatto si vede prima di qualsiasi modello.
- 3
Stima l'elasticità in Python
Una funzione Python fa per ogni articolo una regressione sui logaritmi, con volantini e stagione tra le variabili: il coefficiente del prezzo è l'elasticità. La scrive il team, anche partendo da una bozza di Athena.
- 4
Programma la proposta
Un flusso la esegue ogni lunedì mattina e scrive in tabelle gestite l'elasticità di ogni articolo e il margine atteso per variazioni del prezzo da −5% a +5%, con il prezzo proposto e il motivo.
- 5
Porta la proposta a chi decide
Un cruscotto mostra chi regge un aumento e chi va ribassato; il notebook della proposta di listino, con testo e numeri sempre aggiornati, è pronto per la riunione del lunedì.
Funzione Python
import numpy as np
import pandas as pd
def _elasticita(g):
giorno = pd.to_datetime(g["giorno"]).dt.dayofyear.to_numpy(float)
X = np.column_stack([
np.ones(len(g)),
np.log(g["prezzo_scaffale"]),
g["in_volantino"],
np.sin(2 * np.pi * giorno / 365.25),
np.cos(2 * np.pi * giorno / 365.25),
])
beta, *_ = np.linalg.lstsq(X, np.log(g["pezzi"]), rcond=None)
return beta[1]
def transform(inputs, params, ctx):
d = inputs["rows"]
righe = []
for codice, g in d[d["pezzi"] > 0].groupby("codice"):
e = _elasticita(g)
ultimo = g.sort_values("giorno").iloc[-1]
pezzi_sett = g["pezzi"].tail(28).mean() * 7
for v in range(-5, 6):
prezzo = ultimo["prezzo_listino"] * (1 + v / 100)
pezzi = pezzi_sett * (1 + v / 100) ** e
righe.append({"codice": codice, "elasticita": round(e, 2),
"variazione_pct": v,
"margine_settimana": round((prezzo - ultimo["costo_acquisto"]) * pezzi, 2)})
return {"rows": pd.DataFrame(righe)}- I dati che servono
- Prezzi di listino e a scaffale per articolo, giorno per giorno, dal gestionale su SQL Server
- Costi d'acquisto per articolo, dallo stesso gestionale
- Pezzi venduti per articolo e per giorno, dai file delle casse
- Calendario dei volantini e delle promozioni, da un file Excel
- Le parti di Muvia usate
Altri casi della stessa linea
Tutti i casi d'uso- Le vendite di tutti i negozi in una paginaVendite di cassa, ordini e anagrafiche dei negozi stanno in sistemi diversi, e il quadro della rete arriva a fine mese. In Muvia ricavi, crescita, pezzi e clienti di tutti i negozi stanno in un solo cruscotto, settimana per settimana, dal totale fino al singolo reparto.
- Comprati insieme: l'analisi del carrelloGli scontrini dicono quali prodotti si comprano insieme, ma restano nel sistema di cassa. In Muvia una funzione Python calcola ogni notte supporto, confidenza e lift di ogni coppia, e il cruscotto dice cosa farne: promo abbinate, prodotti vicini a scaffale, proposte in cassa.
- Promozioni misurate insieme alle scorteUna promozione che non vende sembra una promozione sbagliata, finché non si guarda lo scaffale. In Muvia sconto, vendite e scorte stanno nella stessa analisi: si vede quanto rende ogni punto di sconto e quali promo sono andate male solo perché mancava la merce.
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.