Un business scalabile con l’intelligenza artificiale
Cosa succede quando un’impresa inizia a crescere e a espandersi?
Come fa a mantenere il passo con le crescenti richieste senza essere schiacciata sotto il peso di costi elevati e una struttura sempre più complessa?
Come può un’azienda incrementare le sue dimensioni mantenendo l’efficienza?
In questo articolo parliamo di scalabilità nel business. Che cos’è e come accrescerla. vedremo con un esempio come l’AI può rendere il business scalabile. Seguirà un approfondimento tecnico sul modello ARIMA (Autoregressive Integrated Moving Average) utile per fare previsioni su serie temporali.
Il concetto di scalabilità in informatica
In termini informatici un algoritmo è considerato scalabile se la sua complessità rimane gestibile anche per grandi valori delle dimensioni dell’input N (ad esempio, complessità lineare O(N) o logaritmica O(logN)). D’altra parte è ovviamente non scalabile se la complessità cresce esponenzialmente con N. Il concetto di scalabilità si estende anche al campo degli affari.
La scalabilità nel business
La scalabilità è un concetto cruciale nel mondo degli affari.
Si riferisce alla capacità di un’azienda di gestire un aumento del volume di attività senza compromettere le sue prestazioni o aumentare proporzionalmente i costi. In altre parole, una business che è scalabile è in grado di crescere in maniera efficiente e sostenibile, adattandosi alle nuove esigenze di mercato senza incontrare ostacoli significativi.
Nel contesto delle imprese, la scalabilità può essere applicata a diversi aspetti, tra cui la produzione, la distribuzione, il marketing e i servizi. Ad esempio, una società produttrice di beni fisici può essere considerata scalabile se può aumentare la produzione senza dover apportare modifiche significative al processo produttivo o assumere un numero eccessivo di dipendenti. Allo stesso modo, una società di servizi può essere considerata scalabile se può gestire un aumento del numero di clienti senza dover aumentare drasticamente il numero di dipendenti o risorse.
Che relazione c’è tra scalabilità ed efficienza e quali sono le differenze?
Ricordiamo che l’efficienza di un business implica il poter fare di più con meno costi. Matematicamente ciò è esprimibile mediante il rapporto rendimento / costi
Un business è efficiente ma non scalabile quando gestisce le sue operazioni correnti in modo ottimale ma incontra difficoltà nell’espandersi o nel gestire un aumento significativo della domanda o della produzione. D’altra parte un business può essere scalabile ma non efficiente quando ha il potenziale per crescere e espandersi facilmente, ma le sue operazioni correnti non sono ottimizzate, portando a sprechi, costi elevati o altre inefficienze.
La scalabilità implica una crescita efficiente del business. L’azienda con un business scalabile potrebbe crescere addirittura incrementando l’efficienza.
In questo grafico illustriamo senza alcuna pretesa di esattezza come il volume d’affari e l’efficienza potrebbero svilupparsi in un business scalabile:

la legge di Metcalfe
Una delle teorie prevalenti che spiega la scalabilità nel business è la legge di Metcalfe, attribuita a Bob Metcalfe, uno dei fondatori di Ethernet e dello standard di comunicazione TCP/IP. Secondo questa legge,
il valore di una rete è direttamente proporzionale al quadrato del numero di utenti connessi ad essa. In altre parole, più utenti ci sono in una rete, maggiore è il valore che la rete stessa è in grado di fornire a ciascun utente.
Indicando con n il numero degli utenti, il numero massimo di connessioni possibili è n(n−1)/2 = (n²−n)/2 che per valori grandi di n è asintotico a n²

Ci sono degli aspetti critici di questa legge da considerare. Due ricercatori Odlyzko e Tilly dell’Università del Minnesota con uno loro studio nel 2005, hanno mostrato che la legge di Metcalfe considerava ogni utente di una rete come ugualmente importante ai fini del valore totale. In realtà, alcuni utenti o dispositivi in una rete possono avere un ruolo molto più significativo rispetto ad altri. Per esempio, un singolo computer portatile usato per la navigazione in internet non aggiunge molto valore ad una rete globale come Internet. Invece, un grande server che fornisce servizi a milioni di persone (come Google o Facebook) aggiunge un valore immensamente superiore.
Odlyzko e Tilly hanno quindi proposto una nuova formula che cresce in modo logaritmico, non quadratico. Una crescita logaritmica è molto più lenta e moderata rispetto a una crescita quadratica. Questo significa che all’aumentare degli utenti, il valore della rete non cresce in modo così rapido come precedentemente pensato. Per illustrare, se con una rete di 10 persone il valore cresce fino a un certo punto, all’aumentare a 100 persone non si moltiplica per 10 volte (come direbbe la legge di Metcalfe) ma aumenta in modo meno drammatico. La legge di Metcalfe sembra quindi essere troppo ottimistica.
La legge di Metcalfe o varianti d’essa possono essere applicate anche al mondo degli affari. Se consideriamo un’azienda come una rete di clienti, dipendenti, fornitori e partner, possiamo vedere come l’aumento del numero di entità connesse in una rete aziendale possa portare a un aumento del valore complessivo dell’azienda stessa. Ad esempio, un aumento del numero di clienti può portare a economie di scala e a una maggiore efficienza operativa, aumentando di conseguenza la redditività dell’azienda.
Un maggior numero di clienti, un’azienda può beneficiare di economie di scala, poiché la produzione e la distribuzione possono essere ottimizzate per soddisfare la domanda sempre crescente. Ad esempio, un’azienda produttrice di beni fisici può trarre vantaggio da una maggiore efficienza nella catena di approvvigionamento, dall’aumento del potere contrattuale con i fornitori e dalla distribuzione su larga scala.
Inoltre, un numero maggiore di interazioni tra le entità connesse all’interno dell’azienda può portare a una maggiore condivisione di conoscenze e sinergie. Ad esempio, una rete di partner o fornitori può scambiare informazioni e competenze tecniche, consentendo all’azienda di accedere a best practice e approcci innovativi in diversi settori.
In ultima analisi, l’aumento del valore complessivo dell’azienda grazie all’aumento del numero di entità connesse può influire positivamente sulla redditività dell’azienda stessa. Ad esempio, un maggior valore percepito dai clienti può tradursi in un aumento dell’afflusso di clienti, in un incremento delle vendite e in una maggiore fidelizzazione dei clienti.
Il modello di crescita di Geoffrey A. Moore
Oltre alla legge di Metcalfe, esistono altre teorie e modelli che spiegano la scalabilità nel business. Un esempio è il modello di crescita di Geoffrey A. Moore, descritto nel libro “Crossing the Chasm“. Secondo questo modello, le imprese possono attraversare diverse fasi di crescita, da un’adozione iniziale del mercato fino a una scala di vendite più ampia.
Moore sostiene che il successo aziendale dipende dalla capacità di superare un “baratro” tra i primi utilizzatori di un prodotto o servizio e la maggior parte del mercato. Le aziende che riescono a superare questa sfida possono beneficiare di una crescita scalabile.

Secondo il modello di Moore, il mercato può essere suddiviso in diverse categorie di clienti. Inizialmente, ci sono gli innovatori e gli early adopters (utilizzatori precoci), che sono disposti a sperimentare nuove tecnologie e ad abbracciare l’innovazione. Questi clienti sono generalmente disposti a correre rischi e ad adattarsi rapidamente a nuove soluzioni.
Tuttavia, per ottenere una crescita significativa, un’azienda deve trasferirsi dalla fase iniziale di adozione del mercato a un segmento più ampio, che Moore definisce come la “maggioranza del mercato”. Questa fase rappresenta un “baratro” critico, in cui molte aziende si fermano o falliscono a causa della mancanza di adozione diffusa da parte dei clienti.
Per superare il baratro, Moore consiglia alle aziende di focalizzarsi su un segmento di mercato specifico, noto come segmento di “nicchia di bowling”, in cui il prodotto o il servizio può essere adottato con successo da clienti che condividono caratteristiche comuni o esigenze specifiche. Concentrandosi su questo segmento, l’azienda può dimostrare il valore e la validità del prodotto o servizio, generando una base di clienti di riferimento che possono a loro volta influenzare altri potenziali clienti nella maggioranza del mercato.
Una volta che un’azienda ha superato il baratro e stabilito un solido posizionamento nella maggioranza del mercato, può beneficiare di una crescita scalabile. In questa fase, la domanda di prodotti o servizi è sempre più ampia e l’azienda può trarre vantaggio da economie di scala, riduzione dei costi e opportunità di espansione.
Il modello di crescita di Moore è stato ampiamente adottato e utilizzato nel settore delle tecnologie e dell’innovazione, ma trova applicazione anche in altri settori. La teoria sottolinea l’importanza di identificare il segmento di mercato giusto e di sviluppare una strategia di penetrazione del mercato mirata per superare il baratro e raggiungere una crescita scalabile.
L’automazione dei processi

Per ottenere una scalabilità efficace nel business, possono essere adottate diverse strategie. Una di queste è l’automazione dei processi, che riduce la dipendenza dai lavoratori umani e consente una maggiore efficienza e produttività. L’adozione di tecnologie avanzate come l’intelligenza artificiale e l’apprendimento automatico può anche contribuire a migliorare l’efficienza e la scalabilità delle operazioni aziendali.
Esistono altre teorie e strategie che possono essere adottate per massimizzare il valore delle reti aziendali.
Una strategia può consistere nel coinvolgere attivamente gli utenti o i clienti nella progettazione, nello sviluppo o nell’evoluzione dei prodotti o servizi può aumentare il coinvolgimento dei clienti e il senso di proprietà nella rete aziendale. Ciò può essere realizzato attraverso feedback, sondaggi, gruppi di discussione o programmi di utenti beta. Coinvolgere gli utenti può portare a un valore crescente, poiché soddisfare le esigenze dei clienti diventa una priorità e può guidare l’innovazione e migliorare la qualità dei prodotti o servizi.
Anche la collaborazione con partner e fornitori può portare a benefici reciproci e aumentare il valore complessivo della rete aziendale. La condivisione di risorse, conoscenze e competenze può portare a una maggiore efficienza operativa, all’accesso a nuovi mercati o a migliori condizioni di acquisto. Sviluppare relazioni solide e di fiducia con partner e fornitori può contribuire a creare una rete aziendale robusta e sostenibile.
L’adozione di tecnologie avanzate può aiutare le aziende a massimizzare il valore delle reti aziendali. L’integrazione di intelligenza artificiale, machine learning, internet delle cose (IOT) e altre tecnologie emergenti può consentire una maggiore efficienza operativa, una migliore esperienza del cliente e nuove opportunità di business. Legare l’innovazione tecnologica con una strategia di crescita delle reti aziendali può portare a una crescita sostenibile e al mantenimento di un vantaggio competitivo.
L’intelligenza artificiale per rendere scalabile il business
L’intelligenza artificiale (IA) può essere applicata in vari modi nel marketing e nella pubblicità, permettendo di scalare un business attraverso una gestione più efficace e informata.

L’IA può automatizzare la raccolta e l’analisi di dati sugli utenti, come mostrato da un esempio di analisi del tono delle conversazioni con i clienti utilizzando il deep learning, per migliorare la gestione delle interazioni con i clienti. La personalizzazione dei contenuti delle email in base alle preferenze e abitudini dei destinatari, migliora l’efficacia delle comunicazioni.
L’IA può essere utilizzata per analizzare i dati storici e prevedere il comportamento futuro dei clienti, aiutando le aziende a identificare interessi ed esigenze. Un’altra azione che l’AI può compiere riguarda l’ ottimizzazione degli annunci pubblicitari: L’IA può aiutare gli inserzionisti a regolare automaticamente il targeting, il budget e la creatività delle campagne pubblicitarie in tempo reale, aumentando l’efficienza e riducendo i costi3.
L’analisi in tempo reale delle performance delle campagne, supportata dall’IA, può fornire insight preziosi per potenziare gli investimenti in modo informato.
Il miglioramento del rapporto con i clienti può passare attraverso l’impiego di chatbot intelligenti. Inoltre si possono dimezzare i tempi di decisione attraverso l’uso di modelli di apprendimento automatico che forniscano analisi e raccomandazioni in tempo reale, permettendo una reazione più rapida ai cambiamenti del mercato.
L’importanza dell’analisi dei dati e delle tecniche di previsione nel settore del marketing.
Per ottenere profitti nel lungo termine e soddisfare i clienti, è necessario effettuare un’analisi dettagliata del comportamento dei clienti e della domanda dei prodotti. Attualmente, esistono molte piattaforme e strumenti che consentono di visualizzare e analizzare i dati di mercato, come Power BI e varie librerie in Python. Dopo l’analisi, vengono applicati algoritmi predittivi per prevedere il futuro del mercato.
Lo studio Market segmentation for profit maximization using machine learning algorithms presentato alla “First International Conference on Advances in Physical Sciences and Materials” e pubblicato nel “Journal of Physics: Conference Series” e scritto da Sruthi Janardhanan e Raja Muthalagu mostra una ricerca riguardante l’uso di algoritmi di machine learning per la classificazione dei clienti (market segmentation) al fine di massimizzare i profitti nel settore della vendita al dettaglio.
Può esserci utile capire quali sono i passi seguiti in questo studio per effettuare una corretta analisi di mercato. Per conoscere i dettagli rimandiamo alla lettura dell’articolo completo.
Qui intendiamo mostrare solo uno schema del lavoro svolto replicabile anche in altri casi.
SCHEMA GENERALE
Raccolta dei dati:
Acquisire i dati di vendita settimanali e le informazioni relative ai prodotti, come vendite settimanali, costi del prodotto, vendite nei festivi, vendite promozionali, etc.


Visualizzazione dei dati: Utilizzare strumenti come Power BI e librerie Python (es. matplotlib) per la visualizzazione e l’analisi preliminare dei dati, per comprendere la relazione tra le diverse caratteristiche.
Identificazione dei prodotti chiave: Identificare i prodotti più “redditizi” e più “correlati” basandosi su specifici criteri, come superamento di una certa soglia di vendite.
Applicazione dell’algoritmo di correlazione: Applicare un algoritmo di correlazione per determinare quanto i prodotti più venduti sono correlati tra loro in termini di vendite.
Filtraggio e selezione prodotti: Filtrare i prodotti basandosi su fattori di redditività e correlazione, e scegliere quelli da analizzare ulteriormente. Nel caso dello studio, si filtrano i primi 11 prodotti in base a entrambi i fattori (redditività e correlazione) e si mostrano i risultati in una tabella.
Applicazione del metodo del gomito: Utilizzare il metodo del gomito per determinare il numero ottimale di cluster da utilizzare nell’algoritmo k-means.
Clustering con k-means: Applicare l’algoritmo k-means ai dati selezionati per raggruppare i prodotti in cluster, allo scopo di riflettere i comportamenti di acquisto dei clienti.
Analisi dei cluster: Analizzare la composizione dei cluster, il numero di prodotti in ciascuno e il comportamento di acquisto associato, usando visualizzazioni come grafici a barre in Power BI. Nel caso particolare, una tabella mostra il numero di prodotti in ogni cluster. Inoltre, un grafico ottenuto utilizzando Power BI mostra quali prodotti vengono acquistati da clienti appartenenti a ciascun cluster. Ogni segmento del grafico a barre rappresenta le vendite di un prodotto, fornendo informazioni sul comportamento del cliente rispetto a quel prodotto. Ad esempio, il prodotto di colore blu viene acquistato principalmente dai clienti del cluster 2 piuttosto che dai clienti del cluster 4. Possiamo anche dedurre che i clienti del cluster 4 spendono meno rispetto ai clienti del cluster 2.


Previsione delle vendite future con ARIMA: Costruire il modello ARIMA, usando il linguaggio R o Power BI, per analizzare e prevedere i dati di serie temporali (vendite settimanali), considerando anche la stagionalità e la stazionarietà dei dati.
Il modello ARIMA è stato scelto perché i dati presentavano un comportamento stazionario e si stava utilizzando una sola caratteristica (ad esempio, le vendite settimanali) per effettuare le previsioni. La stagionalità dei dati è stata presa in considerazione, tenendo conto delle serie precedenti di vendite. (Vedi più avanti approfondimenti sul modello ARIMA)
Interpretazione e applicazione dei risultati: Interpretare i modelli di vendita e il comportamento dei clienti derivanti dall’analisi e dalle previsioni, e utilizzare queste informazioni per gestire il negozio in modo efficace, massimizzare il profitto, e soddisfare la domanda dei clienti.
Rivalutazione e aggiustamento del modello: Monitorare continuamente e aggiustare il modello in base ai nuovi dati di vendita e informazioni di mercato per mantenere previsioni accurate e strategie di marketing efficaci.
Con questi dati e analisi, possiamo fare diverse previsioni:
- Previsioni delle vendite: Basandoci sulle tendenze storiche, possiamo pronosticare quali prodotti saranno più venduti nelle future settimane e preparare stock adeguati.
- Segmentazione della clientela: Identificando i cluster di prodotti possiamo indirettamente creare segmenti di clientela che hanno comportamenti di acquisto simili. Questo può essere utilizzato per indirizzare meglio il marketing e le promozioni, o per ottimizzare l’assortimento di prodotti in negozio.
- Analisi delle promozioni: Potremmo prevedere l’impatto di promozioni su prodotti specifici all’interno dei cluster per massimizzare la redditività o per stimolare le vendite di prodotti meno popolari.
- Previsioni sul mix di prodotti: Attraverso l’analisi della correlazione possiamo pronosticare quali prodotti tendono a essere acquistati insieme e pianificare bundle o offerte incrociate per aumentare la dimensione media della transazione.
Strategie basate sull’analisi dei dati
- Cross-selling e up-selling: Utilizzare l’analisi di correlazione per suggerire prodotti aggiuntivi durante il processo di acquisto, o offrire versioni più costose o premium di un prodotto che il cliente ha già intenzione di acquistare.
- Ottimizzare la distribuzione e l’assortimento: Assicurarsi che i prodotti più venduti nei diversi cluster siano sempre disponibili e facilmente accessibili all’interno del negozio, potenzialmente aumentando l’inventario per i periodi di picco o per le festività.
- Personalizzare le attività di marketing: Sfruttare la segmentazione dei clienti per targetizzare effettivamente le comunicazioni promozionali, come email o pubblicità online, aumentando l’efficacia delle campagne.
- Gestione dei prezzi dinamica: Aumentare i prezzi dei prodotti ad alta domanda e valore in momenti chiave o per segmenti di clientela meno sensibili al prezzo, mentre si applicano sconti su prodotti meno popolari o in eccesso di stock per stimolarne la vendita.
- Strategie basate sugli eventi: Sfruttare la conoscenza riguardo l’effetto dei giorni festivi per pianificare campagne e promozioni speciali volte a sfruttare l’aumento dell’acquisto in quei periodi.
Ricordiamo che nel raccogliere i dati e strutturali va tenuto presente che gli attributi importanti che un dataset simile deve avere sono:
Data e ora della transazione
Informazioni sui prodotti: Ciò include il nome del reparto, l’identificativo unico del prodotto, la descrizione, il prezzo unitario, e possibilmente la categoria o la sottocategoria del prodotto.
Vendite settimanali: Dati sulle quantità vendute per ogni prodotto in ogni settimana, per identificare i prodotti più venduti e analizzare i trend temporali.
Indicatori di giorno festivo o evento speciale: Questi aiutano a comprendere le fluttuazioni nelle vendite che possono essere attribuibili a periodi non lavorativi o promozioni speciali.
Informazioni sul negozio o sulla filiale: Ubicazione geografica, dimensioni del negozio, e altre caratteristiche potrebbero essere utili per distinguere tra i diversi punti vendita.
Dati di inventario: Informazioni sugli stock possono aiutare a individuare problemi di gestione degli inventari o a pianificare rifornimenti.
Costi associati ai prodotti: Questo include il costo d’acquisto o di produzione, che può essere usato per calcolare la redditività di ogni prodotto venduto.
Informazioni promozionali: Dettagli su eventuali promozioni in corso, sconti o campagne pubblicitarie che possono influenzare le vendite.
Approfondimento: il modello ARIMA
il modello ARIMA è adatto per l’analisi delle serie temporali per comprendere i dati osservati o per prevederne i valori futuri. Questo modello è ampiamente utilizzato nel campo del forecasting economico, finanziario, del clima, e molto altro ancora.
ARIMA è descritto dalla notazione ARIMA(p, d, q) dove p, d e q sono parametri
p (AutoRegressive (AR)): Questo termine cattura la relazione tra un’osservazione e un numero di ritardi (lags) di se stessa. Se si guarda ad un ritardo di un periodo, per esempio, ci si aspetterebbe che l’osservazione corrente sia correlata a quella del periodo precedente. Il parametro ‘p’ indica quante osservazioni passate il modello dovrebbe considerare.
Esempio: Immaginiamo che abbiamo notato che le vendite di un mese tendono ad essere influenzate dalle vendite del mese precedente. Se decidessimo di utilizzare un modello AR(1), questo significherebbe che stiamo considerando che le vendite di un dato mese (t) possano essere previste in base alle vendite del mese precedente (t-1). Se aumentassimo il parametro ‘p’ a 2, AR(2), significherebbe che stiamo considerando anche l’influenza delle vendite del mese ancora precedente (t-2) nelle previsioni del mese corrente (t).
d (Integrated (I)): Questo parametro rappresenta il numero di differenziazioni richieste per rendere la serie temporale stazionaria, ovvero tale che la sua media e varianza non cambi nel tempo. Se una serie di dati mostra una tendenza, per esempio, questa andrebbe differenziata per rimuovere la tendenza e renderla stazionaria. Il parametro ‘d’ indica quante volte i dati originali devono essere differenziati.
Esempio: Supponiamo che, guardando i dati storici delle vendite, ci sia una tendenza crescente di anno in anno. Una serie con una tendenza non è stazionaria perché la sua media aumenta nel tempo. Per rendere la serie stazionaria, differenziamo i dati, il che significa che sottraiamo il valore di un periodo dal periodo successivo. Se questo processo viene eseguito una volta e la nuova serie differenziata diventa stazionaria, allora avremmo un parametro ‘d’ di 1, indicando una sola differenziazione. Se la serie ha bisogno di ulteriori passaggi di differenziazione per diventare stazionaria, ‘d’ sarebbe maggiore di 1.
q (Moving Average (MA)): Questo elemento modella l’errore della serie temporale come una combinazione lineare degli errori di periodo precedenti. Il parametro ‘q’ specifica il numero di termini di errore che il modello dovrebbe considerare.
Esempio: Immaginiamo che, oltre a influenze passate, ci siano anche degli shock casuali che influenzano le vendite in ogni periodo, come eventi non prevedibili o errori di misurazione. Il modello MA(1) introdurrebbe un termine che cattura l’errore (o shock) dal periodo precedente (t-1) per spiegare le vendite correnti (t). Se il parametro ‘q’ fosse 2, MA(2), terrebbe conto anche dell’errore due periodi indietro (t-2).
Esempio pratico
Supponiamo di avere un ARIMA(1,1,1) applicato alla serie delle vendite mensili. Questo significa che:
AR(1): Le vendite di questo mese sono parzialmente previste dalle vendite del mese precedente.
I(1): Abbiamo eliminato la tendenza crescente nella serie sottraendo le vendite di ogni mese dalle vendite del mese precedente.
MA(1): L’impatto di eventuali shock nelle vendite del mese precedente viene considerato nella previsione delle vendite di questo mese.
Utilizzando i dati storici, il modello ARIMA(1,1,1) imparerà quanto pesare questi fattori per fare le previsioni più accurate possibili per le vendite future.
il modello ARIMA con Python
Per utilizzare il modello ARIMA (AutoRegressive Integrated Moving Average) in Python, è possibile utilizzare la libreria statsmodels, che offre una vasta gamma di strumenti per la modellazione e le analisi statistiche, inclusi i modelli ARIMA per la serie temporali. Ecco i passaggi di base per implementare ARIMA con Python:
Installazione della libreria statsmodels:
pip install statsmodels
Importazione delle librerie necessarie
import numpy as np
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
Caricamento dei dati: Caricare i dati di serie storiche in un DataFrame pandas. I dati dovrebbero essere in formato di serie temporale con date/time come indice e con frequenza regolare.
df = pd.read_csv('path/to/your/data.csv', index_col='date', parse_dates=True)
Preprocessing dei dati: Assicurarsi che non ci siano valori mancanti e che i dati siano stazionari. Se necessario, trasformare la serie per raggiungere la stazionarietà (differenziando o applicando una trasformazione logaritmica, per esempio).
Suddivisione dei dati: Dividere il set di dati in set di training e test, se necessario, per poter validare le prestazioni del modello.
train = df['your_series_name'][:'cut-off-date']
test = df['your_series_name']['cut-off-date':]
Selezione dei parametri per il modello ARIMA: I parametri di ARIMA(p, d, q) rappresentano l’ordine dell’autoregressione, il grado di differenziazione e l’ordine della media mobile. Questi parametri possono essere determinati esaminando grafici come l’autocorrelazione (ACF) e l’autocorrelazione parziale (PACF), o utilizzando metodologie come il criterio di informazione Akaike (AIC).
Addestramento del modello ARIMA:
model = ARIMA(train, order=(p, d, q))
model_fit = model.fit()
Analisi dei risultati: Esaminare il sommario del modello e i valori p per la significatività dei coefficienti
print(model_fit.summary())
Validazione del modello e previsioni: Utilizzare il modello per fare previsioni su nuovi dati o sul set di test.
predictions = model_fit.forecast(steps=len(test))
plt.figure(figsize=(10,5))
plt.plot(test, label='Actual')
plt.plot(predictions, label='Forecast')
plt.legend()
plt.show()
Valutazione della performance: Valutare la bontà delle previsioni utilizzando metriche come l’errore quadratico medio (MSE) o altre metriche appropriate per le serie temporali.
rom sklearn.metrics import mean_squared_error
error = mean_squared_error(test, predictions)
print(f'MSE: {error}')
Note sulla stazionarietà di una serie temporale
La stazionarietà di una serie temporale è una proprietà fondamentale per la maggior parte dei modelli di previsione, inclusi quelli basati su ARIMA.
Una serie temporale è considerata stazionaria se le sue proprietà statistiche, come la media, la varianza e la covarianza, non cambiano nel tempo.
Ciò implica che la serie non deve presentare tendenze, stagionalità o variazioni cicliche nel tempo.
Se una serie temporale non è stazionaria, può essere difficile o impossibile per i modelli identificare correttamente la struttura o i pattern sottostanti, il che significa che le previsioni possono essere fuorvianti o inaccurate. Quindi, prima di addestrare i modelli, è spesso necessario trasformare i dati in una forma stazionaria. Ecco due trasformazioni comuni per raggiungere la stazionarietà:
La differenziazione è una tecnica in cui si sottraggono i valori attuali della serie dal valore precedente (o un ritardo di più intervalli di tempo in caso di stagionalità). Ciò aiuta a rimuovere le tendenze o le componenti stagionali e rendere la serie stazionaria. Questa può essere la prima differenza (un lag di 1 periodo), la stagionalità differenza (un lag della lunghezza della stagione), o una combinazione di entrambi se la serie ha sia tendenza che stagionalità.
Per esempio, per calcolare la prima differenza di una serie:
differenced_series = original_series.diff().dropna()
Se una serie temporale è stagionale, potrebbe essere necessario differenziarla per il numero di periodi per stagione:
seasonal_difference = original_series.diff(periods=season_length).dropna()
Dopo aver applicato le trasformazioni appropriate, è buona norma verificare che la serie modificata sia effettivamente stazionaria. Questo può essere fatto visualizzando grafici della serie temporale e facendo test statistici come il test ADF (Augmented Dickey-Fuller). Se la serie trasformata passa il test di stazionarietà, può essere utilizzata per l’addestramento del modello ARIMA o di altri modelli statistici adatti a serie temporali stazionarie.
Esempio molto semplice
Potremmo considerare una serie di dati che rappresentano la vendita giornaliera di un prodotto in un certo periodo di tempo come:
Giorno 1: 10
Giorno 2: 12
Giorno 3: 15
Giorno 4: 18
Giorno 5: 20
Per ottenere una serie differenziata corretta, dovremmo sottrarre i valori attuali dalla serie precedente, come segue:
Giorno 2 – Giorno 1: 12 – 10 = 2
Giorno 3 – Giorno 2: 15 – 12 = 3
Giorno 4 – Giorno 3: 18 – 15 = 3
Giorno 5 – Giorno 4: 20 – 18 = 2
Abbiamo ottenuto una nuova serie differenziata: 2, 3, 3, 2.
La serie differenziata rappresenta la variazione giornaliera delle vendite rispetto al giorno precedente.
Quando si utilizza la differenziazione per fare previsioni, è necessario tenere presente che le previsioni fatte sulla serie differenziata devono essere ripristinate per ottenere le previsioni sulla serie originale. Ciò implica che il processo di previsione comporterà un passaggio aggiuntivo per invertire le differenze cumulate.
Quando si utilizza la differenziazione per fare previsioni con i modelli di serie temporali, come ARIMA (AutoRegressive Integrated Moving Average), devi tenere a mente che le predizioni che ottieni sono basate sulla differenza dei valori, non sui valori assoluti.
Dopo aver effettuato la previsione sulla serie differenziata, per ritornare alla scala originale si deve applicare un procedimento chiamato integrazione accumulativa (cumulative sum in inglese). In pratica, ciò significa che per ottenere il valore previsto nella serie originale, dobbiamo “sommarlo” al valore osservato all’ultimo punto temporale disponibile nella serie originaria prima della differenziazione.
Questo processo è critico perché un errore nella “integrazione” delle previsioni differenziate potrebbe portare a previsioni inutilizzabili o fuorvianti. Pertanto, tutti i software statistici e i pacchetti di analisi delle serie temporali che supportano la differenziazione includono una routine per invertire automaticamente questo processo nelle loro previsioni.
Per determinare se una serie temporale è stazionaria usando Python, esistono diverse tecniche e test. Uno dei più comuni è il test di Dickey-Fuller aumentato (ADF). Il modulo statsmodels in Python fornisce un’implementazione facile da usare di questo test.
Ecco come si può utilizzare il test ADF per controllare la stazionarietà di una serie temporale:
import pandas as pd
from statsmodels.tsa.stattools import adfuller
# Supponiamo che 'timeseries' sia il tuo DataFrame pandas e 'value' la colonna che contiene i valori della serie temporale
# Leggere la serie temporale
# timeseries = pd.read_csv('your-timeseries.csv') # Se hai un file CSV
# series = timeseries['value'] # Selezionare la corretta colonna
# Per esempio, generiamo una serie temporale artificiale
timeseries = pd.Series([1,2,3,4,5,6,7,8,9,10])
# Applicare il test ADF
result = adfuller(timeseries)
print('Statistiche del Test ADF : %f' % result[0])
print('p-value : %f' % result[1])
print('Lag Usati : %d' % result[2])
print('Numero di Osservazioni Usate : %d' % result[3])
print('Valori Critici:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
# Interpretazione del risultato
if result[1] < 0.05:
print("La serie è stazionaria")
else:
print("La serie non è stazionaria")
Il valore di ritorno result
è una tupla con i seguenti elementi:
- result[0]: Test statistic (la statistica del test).
- result[1]: p-value (se è minore di un certo livello di significatività, per esempio 0.05, possiamo respingere l’ipotesi null e dire che la serie sembra stazionaria).
- result[2]: Numero di lag considerati per il test.
- result[3]: Numero di osservazioni usate nel test.
- result[4]: Un dizionario con i valori critici del test a diversi livelli di significatività.
Le ipotesi per il test ADF sono le seguenti:
- Ipotesi Null (H0): la serie temporale ha una radice unitaria (non è stazionaria).
- Ipotesi Alternativa (H1): la serie temporale non ha una radice unitaria (è stazionaria).
Se il p-value è inferiore a un livello di significatività prestabilito (ad esempio, 0.05), possiamo respingere l’ipotesi null e concludere che la serie è stazionaria. I valori critici sono ulteriori punti di riferimento che ci aiutano a comprendere quanto sia forte la nostra conclusione rispetto ad alcuni livelli di confidenza standard (per esempio 1%, 5%, 10%).