Previsione probabilistica del lead time


Home » Risorse » Qui

Prevedere con accuratezza il lead time è di importanza fondamentale per stimare la quantità di scorte necessaria a soddisfare la domanda futura. Il motore di previsione di Lokad include una funzionalità per la previsione del lead time specifica per questo scopo: il lead time, infatti, dev'essere calcolato e previsto così come va calcolata e prevista la domanda. I lead time, poi, sono soggetti a diversi pattern di comportamento statistici, dalla stagionalità all'effetto giorno della settimana. Le previsioni del lead time generate dal nostro motore di previsione sono di tipo probabilistico, e cioè rappresentano le probabilità attese per ogni durata del lead time espressa in giorni. In questa sezione, vedremo la sintassi utile a calcolare le previsioni del lead time attraverso Lokad.

Sintassi generale

Il motore di previsione offre una speciale funzione, definita, nella terminologia di Envision, funzione di chiamata. Questa è la sintassi:

// "PO" sta per PurchaseOrders (ordini di acquisto)
Leadtime = forecast.leadtime(
  category: C1, C2, C3, C4
  hierarchy: H1, H2, H3, H4
  supplier: Supplier
  offset: 0
  present: (max(Orders.Date) by 1) + 1 
  leadtimeDate: PO.Date 
  leadtimeValue: PO.ReceivedDate - PO.Date + 1
  leadtimeSupplier: PO.Supplier)

A differenza delle funzioni canoniche, le funzioni di chiamata hanno argomenti per nome invece che per posizione. Gli argomenti per nome sono più adatti alla funzioni più complesse, perché rendono il codice sorgente molto più leggibile (anche se leggermente più lungo), ma, per il resto, si comportano come gli argomenti delle altre funzioni e sono quindi supportati da Envision.

La funzione restituisce un vettore Leadtime di tipo distribuzione (vedi anche Algebra delle distribuzioni). Le distribuzioni costituiscono un tipo di dati avanzati, che rappresentano le funzioni $p: \mathbb{Z} \to \mathbb{R}$. Più specificatamente, il nostro motore di previsione restituisce variabili casuali, ossia distribuzioni che sono positive e hanno una massa pari a 1. Nel nostro caso, $p(k)$ rappresenta il lead time probabile associato a $k$ giorni. Ogni articolo (nel senso usato in Envision del termine) viene associato alla propria distribuzione.

La sintassi forecast.leadtime comprende numerosi argomenti, ma solo due sono obbligatori:

  • present (presente): valore scalare di una data;
  • leadtimeDate (data lead time): un vettore data con affinità con un articolo.

Il valore present è la data che indica il primo giorno da prevedere, partendo dal presupposto che i dati siano completi fino al giorno precedente. In realtà, alcune aziende sono chiuse un giorno a settimana, ad esempio la domenica: in questo caso, se la data più recente trovata nel set di dati è un sabato, potremmo chiederci se iniziare le previsioni dalla domenica o dal lunedì successivo. Nella sintassi di esempio mostrata sopra, usiamo max(Orders.Date) + 1, ipotizzando che gli ordini vengano effettuati ogni giorno e che i dati di input risalgano al giorno precedente.

I valori leadtimeDate e leadtimeValue dovrebbero appartenere alla stessa tabella che mostra un'affinità con gli articoli, ossia Id, * nella terminologia di Envision. Le date rappresentano i giorni di inizio delle osservazioni del lead time (inclusi). I valori dovrebbero essere espressi in giorni. Non sono supportate frazioni di giorni. La tabella contiene i dati storici reali sul lead time calcolati dal nostro motore di previsione.

Quando leadtimeValue è omesso, sono usati come valori del lead time le durate successive comprese tra le date leadtimeDate. Questo comportamento è necessario al fine di prevedere il lead time di ordine, che di solito è calcolato separatamente dal lead time di fornitura.

I dati storici dovrebbero tornare il più possibile indietro nel tempo, ma, in realtà, superare i 5 anni di dati non porta benefici visibili. Il motore di previsione riesce a gestire storici della domanda sia lunghi che brevi; nel caso degli storici più lunghi, i dati meno recenti diventano semplicemente irrilevanti dal punto di vista statistico.

Al di là di questi argomenti obbligatori, l'accuratezza delle previsioni può essere migliorata sensibilmente fornendo dati ulteriori al motore di previsione. Nelle prossime sezioni vedremo come.

Categorie e gerarchia

Dal punto di vista del motore di previsione, le categorie e la gerarchia ricoprono un ruolo piuttosto simile: aiutano, cioè, il motore di previsione a gestire dati storici scarsi. Vedere Previsioni con attributi.

Fornitori

La scelta del fornitore è spesso uno degli elementi chiave nella previsione del lead time. I dati sui fornitori possono essere inseriti nel motore di previsione in due modi diversi, ma complementari.

In primo luogo, i dati storici sul lead time possono essere categorizzati per fornitore con l'argomento leadtimeSupplier (lead time, fornitore). Quando usiamo questo argomento, il motore di previsione sfrutta le informazioni così ottenute per stabilire se i lead time associati a un certo fornitore sono correlati oppure no. I dati sui fornitori offrono informazioni più dettagliate rispetto alle semplici categorie o gerarchie di prodotti, perché i prodotti potrebbero aver cambiato fornitore nel corso del tempo.

In secondo luogo, possiamo informare il motore di previsione su quale fornitore vogliamo considerare per la prossima spedizione con l'argomento supplier (fornitore). Se usiamo questo argomento, il motore di previsione riesce ad anticipare che un particolare prodotto potrà essere soggetto a un'improvvisa variazione del lead time, perché il fornitore è appena stato cambiato. Ovviamente, il motore di previsione può gestire queste informazioni in modo accurato solo se i dati storici sul lead time sono stati correttamente categorizzati per fornitore, come abbiamo appena visto.

Spostare la data di inizio delle previsioni

Per impostazione predefinita, la previsione inizia nel giorno contrassegnato come present. In alcuni casi, però, potremmo aver bisogno di far partire le previsioni da una data diversa. Se i lead time sono stagionali, infatti, la data di inizio del lead time può avere ripercussioni notevoli sulla distribuzione del suo valore. In casi come questo, dobbiamo ricorrere alla proprietà offset. Questa proprietà, opzionale, prevede l'esistenza di un vettore numerico nella tabella articoli. I valori di questo vettore rappresentano lo sfasamento (espresso in giorni) da considerare per le previsioni del lead time. Ad esempio, se un articolo ha un valore offset pari a 10, il giorno di inizio per la previsione del lead time sarà present + 10. Se il valore offset è omesso, tutti i valori offset saranno considerati come pari a zero.