Se sei qui è perchè molto probabilmente:
1) Sei un impernditore o un marketer che vuole prendere decisioni basate sui numeri, dato che sei stufo di perdere soldi in azioni fatte “d’istinto” che non ti hanno portato risultati
2) Stai iniziando ad appassionarti al “Data science” magari iniziando a programmare in Python o con linguaggi simili
Con questo articolo uniremo entrambe le cose e ti spiegherò come predire le vendite future usando un algoritmo di intelligenza artificiale sapendo l’elasticità del prezzo dei tuoi prodotti.
Se ancora non sai cos’è l’elasticità della domanda al prezzo ti consiglio di partire dall’articolo in cui spiego le basi di questo argomento.
Ma soprattutto ti consiglio di leggere questo articolo in cui spiego le basi per calcolare l’elasticità nel mondo reale con dei semplici calcoli.
In breve, l’elasticità del prezzo ti dice quanto varia la tua quantità venduta al variare del prezzo di vendita. È un’arma potentissima che ti permette di prevedere le vendite future, sapendo come hanno reagito i clienti nel passato.
L’algoritmo che andremo ad utilizzare è l’algoritmo di “Regressione lineare”, se hai fatto un corso di statistica saprai sicuramente come funziona, altrimenti non ti preoccupare ti faccio un riassunto qui sotto.
Come funziona un algoritmo di Regressione Lineare
Generalmente i dati sono composti da più variabili, di cui alcune indipendenti e altre dipendenti. Per capire meglio guarda il grafico qui sotto:

Sull’asse X si trova la nostra variabile indipendente, cioè il budget di pubblicità. Si dice indipendente perchè il suo valore lo decidi tu, e non dipende da altri fattori.
Nell’asse Y si trovano le vendite, questa è la nostra variabile dipendente, perchè le vendite dovrebbero (si spera) dipendere da quanto si spende in pubblicità.
Qui si vede come all’aumentare del valore sull’asse X (quindi della pubblicità) corrisponda un aumento del valore sull’asse Y (le vendite).
In questo caso la frase “Più spendo, più vendo” sembra essere vera e le variabili si definiscono correlate positivamente.
Ecco che entra in gioco il nostro algoritmo di regressione lineare.
Questo algoritmo cosa fa? Prende i dati che abbiamo visto sopra e cerca di costruire una retta che spieghi al meglio la loro relazione, come quella che si vede qui sotto.

L’equazione di questa retta è Y = aX + b
dove:
Y = è la variabile dipendente, quindi le vendite
a = è un coefficiente che ti dice quanto Y aumenta all’aumentare di X. Se a è 0,05 vuol dire che se aumento di 1 Euro il budget marketing (cioè X), le vendite (Y) aumenteranno di circa 0,05 * 1 Euro = 0,05 Unità.
Nel grafico a è uguale a 0,0749. Questo significa che con 1 Euro in più di spesa in marketing le vendite aumentano di circa 0,08 unità.
Ok, ma a cosa mi serve sapere questa retta?
Questa retta ti serve per predire i valori futuri! A prendere i dati del passato per fare previsioni future.
Sfruttiamo quello che abbiamo appena scoperto per calcolare l’elasticità della domanda, il concetto è esattamente lo stesso.
Cerchiamo di capire quante unità si vendono (variabile dipendente) al variare del prezzo (variabile indipendente).
Vediamo il grafico qui sotto che ipotizza una relazione lineare tra il prezzo e la domanda. In cui al salire del prezzo, la domanda (la quantità venduta) di questo ipotetico bene scende. Una situazione molto comune in qualsiasi mercato concorrenziale.

Per capire meglio questa retta, puoi immaginare che rappresenti un prodotto che hai in vendita da un bel po’ di tempo e che ha subito numerose variazioni di prezzo.
Quando è stato venduto a 170 euro le unità vendute sono state circa 30. Mentre quando il prezzo è calato fino a 120 Euro (magari a causa di offerte speciali) le unità vendute sono state circa 50.
Se hai letto attentamente l’articolo sull’elasticità della domanda al prezzo avrai notato che si tratta di un bene con un’elasticità elevata, quindi per ogni variazione di prezzo si ha una forte variazione della domanda.
Come predire la quantità venduta se si varia il prezzo
A questo punto viene la parte più interessante e in cui entra in gioco l’intelligenza artificiale. Se si lascia fare la previsione all’algoritmo, come descrivo all’interno del codice di programmazione più in basso, il risultato viene calcolato dal computer in automatico.
Il vantaggio enorme è che il computer può macinare una grande mole di dati e offrire in pochi secondi un alto numero di scenari possibili.
La cosa migliore però, è capire il concetto alla base di questa previsione, utilizzando la retta di regressione che abbiamo studiato poco fa.
L’equazione, come si vede dal grafico. è Y = -0,7 * X + 147
Questo significa che:
– Al variare di una unità di X (cioè se aumento il prezzo di 1 Euro) la quantità venduta cala di circa 0,7 unità
– Se il prezzo fosse zero (quindi X fosse uguale a zero) allora la quantità venduta sarebbe teoricamente di 147.
Per prevedere quanto si venderà fissando un determinato prezzo basta semplicemente sostituire il prezzo nell’equazione, e il gioco è fatto.
Supponiamo tu voglia vendere questo prodotto a 115 Euro.
La quantità venduta (Y) sarà: Y = -0,7 * 115 + 147. Quindi 67 unità.
Applicazione dell’algoritmo di regressione lineare in Python
Se sei un manager o un imprenditore penso tu abbia ormai compreso l’importanza del cercare di capire le correlazioni tra le variabili e come queste si influenzino a vicenda.
Diciamo che con questa infarinatura generale già puoi provare a maneggiare i dati aziendali e provare a fare delle previsioni future.
Se invece ti stai approcciando all’analisi dati e sei affascinato dall’intelligenza artificiale, prosegui pure, perchè ti mostrerò come creare un modello di regressione lineare dall’inizio alla fine in Python.
Per applicare questi algoritmi, trovare le correlazioni tra variabili e fornire previsioni, si usano generalmente linguaggi di programmazione come Python o R, io uso il primo.
Il vantaggio della programmazione è di poter analizzare grossissimi database con molte variabili in poco tempo e in modo standardizzato, rendendo le analisi molto più efficienti.
(Io utilizzo Jupyter notebook per scrivere in Python perchè estremamente comodo e permette di visualizzare all’istante i risultati delle analisi, lo puoi scaricare qui assieme al pacchetto Anaconda: https://www.anaconda.com/distribution/)
Iniziamo dall’importare le classiche librarie per l’analisi dati e poi carichiamo i dati, utilizziamo gli stessi dati usati per il grafico all’inizio dell’articolo.
#importo le librerie
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.api as sm
#importo i dati
df = pd.read_excel('Elasticity.xlsx')
Adesso diamo un’occhiata ai dati con la funzione Describe(). Questa funzione restituisce in un attimo informazioni molto utili come ad esempio il numero di osservazioni del nostro campione, la media per ogni variabile, il valore più alto e quello più basso più altre informazioni.
df.describe()

Dopodichè possiamo visualizzare graficamente i dati per vedere se è presente una relazione lineare tra le variabili x (Prezzo) e y (Quantità)
sns.lmplot(x='Offline',y='OCF Retail',data=df)

Come si vede dal grafico, la linea retta spiega bene la relazione tra le due variabili, cioè quasi tutti i punti hanno una distanza relativamente breve dalla retta.
La relazione chiara è che più il prezzo aumenta, più cala la quantità.
A questo punto viene la parte vera e propria di creazione del modello di regressione.
Suddivisione in Train e Test e applicazione del modello
Presta attenzione a questa parte, è fondamentale per la creazione di qualsiasi modello di previsione!
Il processo consiste nel suddividere i nostri dati in due, una parte in cui il modello studia la relazione tra le variabili e cerca di capire la loro relazione (la parte di train) e una parte in cui il modello osserva dati che non ha ancora visto (la parte di test) e prova a predire il risultato.
Questo è fondamentale per capire se il nostro modello di previsione ci azzecca oppure no nelle previsioni quando analizza numeri che non ha ancora visto.
Vediamo all’atto pratico cosa vuol dire
#importo le librerie per le analisi statistiche
import statsmodels.api as sm
from sklearn.model_selection import train_test_split
#definisco le due variabili
y = df['Quantità']
X = df[['Prezzo']]
#divido i dati nella parte train e nella parte test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=101)
#genero la tabella riassuntiva del modello di regressione lineare
model = sm.OLS(y_train,X_train,).fit()
In questo caso quindi il modello di regressione lineare utilizzerà il 70% dei dati come train per capire la relazione tra le variabili.
Poi utilizzando il restante 30% dei dati cercherà di predire il loro valore.
Un esempio pratico: le Email di spam di Google

È un po’ come quando Google crea un algoritmo per riconoscere le email di spam da quelle normali. L’algoritmo analizza migliaia di email sia spam che normali (la parte di train) e capisce quali sono le caratteristiche che differenziano una categoria dall’altra.
Ad esempio le email di spam possono contenere in genere mittenti irrealistici o numerosi errori grammaticali al loro interno.
Dopo aver “imparato” quali sono le caratteristiche comuni delle email di spam, all’algoritmo vengono fatte analizzare email che non ha mai visto (la parte di test), e si vede se ci azzecca nel giudicarle come spam oppure no.
Proviamo a vedere da cosa è formata la parte di test semplicemente richiamandola scrivendo X_Test e dopo averla trasformata in numero intero con “astype(int)”.
X_test = X_test.astype(int)
X_test

In questo caso se il nostro modello funzionasse bene dovrebbe predire valori di quantità più vicini possibili ai rispettivi valori di prezzo.
Cioè dovrebbe predire quantità le quantità che evidenzio qui sotto:

Vediamo prima però se le variabili che stiamo analizzando sono relazionate veramente una con l’altra, con la funzione summary.
In questo caso il modello viene chiamato OLS (Ordinary Least Squares), non ti spaventare è un altro modo per chiamare il modello di regressione lineare.
#genero la tabella riassuntiva del modello di regressione lineare
model = sm.OLS(y_train,X_train,).fit()
model.summary()

Non farti spaventare dai numeri! A noi in questa tabella interessano solo i numeri cerchiati cioè:
R Squared: ovvero quanto la variabile X in questo il prezzo spiega del comportamento della variabile Y cioè la quantità.
Il valore va da 0 a 100, più è alto più la relazione è forte.
In questo caso è praticamente a 80 quindi la relazione è decisamente alta.
P value (segnato in tabella con P>|t|): questo valore è tanto importante quando poco intuitivo da capire.
In poche parole, se questo valore è inferiore al 5% (quindi a 0.05) allora vuole dire che è estremamente probabile che la relazione tra prezzo e quantità non sia casuale, ma che una spieghi l’altra.
In questo caso il p value è inferiore a 0.05 quindi possiamo essere tranquilli sul dire che la relazione tra le due variabili sia forte e che una (molto probabilmente) spieghi l’altra.
Adesso vediamo quanto siamo bravi a prevedere il futuro
Adesso applichiamo il modello di previsione ai nostri dati e vediamo di rispondere alla classica domanda che chiunque vi porrà quando direte che state creando un modello simile: “Quanto ci azzecchi? Che errore hai?”
Ci sono varie misure per misurare l’errore del modello, quella che preferisco perchè è la più intuitiva è il MAPE (Mean Absolute Percentage Error).
Questa misura dice quanto in media il modello prevede valori distanti da quelli reali, e lo esprime in percentuale.
Questa è la formula matematica:
At vuol sta per i valori reali, mentre Ft sono i valori previsti.
Questo vuol dire che se i valori da prevedere sono 100 e 90, se il modello prevede 100 e 90 allora il MAPE sarà 0%. Praticamente una capacità predittiva perfetta.
Altrimenti se dovesse prevedere 90 e 95 il MAPE sarebbe
(|(100-90)/100| + |(90-95)/100|) / 2 = 7,5%
Applichiamo il modello ai dati e vediamo l’errore
#applico il modello
from sklearn.linear_model import LinearRegression
lm = LinearRegression()
lm.fit(X_train,y_train)
predictions = lm.predict(X_test)
#calcolo il MAPE
MAPE = np.mean(np.abs((y_test - predictions) / y_test)) * 100
errors = np.abs((y_test - predictions) / y_test)
print(MAPE)
9.727126831491868
Questo numero vuol dire che abbiamo il 9,7%, significa che in media la previsione delle quantità basata sul prezzo è sbagliata di circa il 10%.! Mica male come modello di previsione no?
In questa parte di codice quindi abbiamo:
1) Applicato il modello di regressione ai dati
2) creato la serie di previsioni di quantità basata sui prezzi che sono nella parte di test (li abbiamo visti poco sopra)
3) calcolato il MAPE confrontando i valori predetti con i valori reali
Ora è tempo di applicare questo modello ai tuoi dati!
Questo modello può aiutarti a decidere se vale la pena abbassare o alzare i prezzi in futuro, potendo già stimare quali potrebbero essere le reazioni dei clienti con valori di prezzo che non sono ancora stati applicati nella realtà.
Prova a raccogliere dei numeri in azienda del passato storico di prezzi e quantità venduta, vedi se sono correlati in qualche modo e prova ad applicare questo modello.
Ti interessa quello che scrivo o ti serve supporto nell’analisi dati? Scrivimi!
Se sei interessato a quello che scrivo in ambito marketing e analisi scientifica dei dati?
Stai provando ad applicare questi metodi di analisi, ma hai difficoltà? Lascia pure i tuoi contatti qui sotto o scrivi un commento al post e sarò felicissimo di risponderti.
Lasciando il contatto inoltre potrai ricevere contenuti esclusivi da applicare al tuo business.
A presto,
Francesco