Creare ordini per priorità con le previsioni probabilistiche - Ottimizzazione

Ordinare gli acquisti per priorità economica











Home » Risorse » Qui

Le previsioni probabilistiche consentono di avere una visione dei possibili scenari futuri molto più completa e precisa rispetto ad altri metodi di previsione. In questa pagina vedremo come sfruttarle per migliorare l'intera procedura di ordine e generare una lista di priorità degli acquisti con Lokad. Le liste di priorità degli acquisti, a differenza dei punti di riordino, sono molto flessibili, ci permettono di eliminare i livelli di servizio e si adattano meglio ai vari vincoli di riapprovvigionamento.

La lista di priorità degli acquisti è un esempio di strategia di riordino per priorità. Le strategie di questo tipo, rispetto ai metodi più tradizionali di gestione del magazzino, assicurano prestazioni di livello molto più elevato. Lokad consiglia, quando possibile, il ricorso a metodi di riordino per priorità.

Modello di script per la lista di priorità

Per generare una lista di priorità, è necessario usare un piccolo script Envision (vedi sotto). Puoi creare lo script all'interno del tuo account Lokad dal pulsante Create Envision script (crea script Envision). Una volta creato il nuovo progetto, apparirà un editor di codice sorgente. Copia e incolla il codice qui sotto, quindi clicca su Save (salva).
read "/sample" all

Horizon = call forecast.leadtime(
  hierarchy: Category, SubCategory
  present: (max(Orders.Date) by 1) + 1
  leadtimeDate: PurchaseOrders.Date
  leadtimeValue: PurchaseOrders.DeliveryDate - PurchaseOrders.Date + 1)

Demand = call forecast.demand(
  horizon: Horizon
  hierarchy: Category, SubCategory
  present: (max(Orders.Date) by 1) + 1
  demandDate: Orders.Date
  demandValue: Orders.Quantity)

show form "Purchase simulator" a1b3 tomato with Form.budget as "Max budget"

oosPenalty := 0.25 // % relativa al prezzo di vendita
carryingCost := 0.3  // % di costi di mantenimento annuali relativi al prezzo di acquisto
discount := 0.20 // % di sconto economico annuale

M = SellPrice - BuyPrice
S = - oosPenalty * SellPrice
C = - carryingCost * BuyPrice * LeadTime / 365
A = 1 - discount * LeadTime / 365

Reward = stockrwd(Demand, M, S, C, A)
table G = extend.distrib(Demand, StockOnHand + StockOnOrder)

where G.Max > StockOnHand + StockOnOrder
  G.Q = G.Max - G.Min + 1
  G.Reward = int(Reward, G.Min, G.Max)
  G.Score = G.Reward / max(1, BuyPrice * G.Q)

  G.Rank = rank(G.Score, Id, -G.Max)
  G.Invest = cumsum(BuyPrice * G.Q, G.Rank)

  where G.Invest < Form.budget + 0
  where exists(G.Q)
    show table "Purchase priority list with $\{Form.budget}" c1g3 tomato with
      Id as "Id"
      Supplier as "Supplier"
      StockOnHand as "OnHand"
      StockOnOrder as "OnOrder"
      sum(G.Q) as "Qty"
      LeadTime as "LeadTime"
      sum(G.Reward) as "Reward{$}"
      sum(BuyPrice * G.Q) as "Cost{$}"
      group by Id
      order by avg(G.Score) desc

Lo script produrrà un pannello di controllo che contiene una tabella (grande). Nella tabella, vedrai ogni articolo apparire più volte. Mentre pianifichi la logistica, dovrai acquistare gli articoli suggeriti seguendo l'ordine della lista.

Image

Ma esaminiamo nel dettaglio il contenuto dello script. Le prime 4 righe sono semplicemente istruzioni di lettura del file. Più precisamente, noi abbiamo ipotizzato che il file si trovi nella cartella /hello, ma potrai modificare questo dato a tuo piacimento, indicando la cartella in cui il file si trova realmente. I file Lokad_Items.tsv e Lokad_Orders.tsv contengono i dati storici usati per produrre le previsioni. Le previsioni vere e proprie sono contenute nel file Lokad_Grid.tsv.

Ipotizziamo che il file Lokad_Items.tsv, che dovrà contenere la lista di prodotti o SKU, contenga anche due colonne "speciali":

  • SellPrice: il prezzo unitario di vendita (al netto delle tasse);
  • BuyPrice: il prezzo unitario di acquisto (al netto delle tasse).

Una volta che avrai sistemato lo script in modo che estragga i dati dalla cartella di input corretta, ipotizzando che i campi SellPrice e BuyPrice siano disponibili come previsto dalla nostra tecnologia, clicca sul pulsante Run (Esegui). In questo modo, lo script viene eseguito e crea una grande tabella. Clicca sulla tabella, in fondo alla schermata, per scaricare la tabella in formato Excel.

L'inizio dello script comprende due chiamate al motore di previsione probabilistica di Lokad, rispettivamente per la previsione del lead time e per la previsione della domanda.

Introduciamo una serie di costanti economiche, che andranno regolate per riflettere accuratamente una strategia di business vera e propria:
  • oosPenalty: coefficiente, applicato al prezzo di vendita, che riflette l'impatto negativo del non servire un cliente;
  • carryingCost: coefficiente, applicato al prezzo di acquisto, che riflette l'impatto negativo del tenere a magazzino 1 unità per 1 anno;
  • discount: coefficiente di sconto per rendimenti e penalità per l'anno successivo.

A questo punto, possiamo introdurre le variabili economiche rilevanti per il calcolo della funzione di rendimento delle scorte:
  • M: il rendimento (margine lordo) per unità servita dalle scorte.
  • S: la penalità, calcolata per unità, quando le scorte non consentono di soddisfare un ordine.
  • C: il costo annuo unitario di mantenimento a magazzino.
  • D: fattore di sconto annuo.

Alla base della nostra logica c'è il calcolo di G.Reward e G.Score.
  • G.Reward: rappresenta il rendimento economico associato a G.Q ulteriori unità in magazzino (solitamente G.Q è pari a 1).
  • G.Score: rappresenta il coefficiente della quantità di ritorni economici, in dollari, per ogni dollaro investito in scorte.

Il filtro where (dove) esclude tutti i casi in cui il punto di riordino è al di sotto dei livelli di scorte attuali. Escludiamo questi casi perché, per il momento, consideriamo solo gli scenari di acquisto in cui l'obiettivo è quello di aumentare le scorte. In questo blocco, procediamo a una seconda serie di calcoli alla base della classificazione in ordine di priorità:

  • G.Rank: ordina tutte le entrate della tabella secondo il rapporto di ricavo. Per ogni articolo, viene conservato l'ordine del punto di riordino.
  • G.Invest: dimostra come creare un calcolo cumulativo. Qui calcoliamo l'investimento totale (cumulativo) ipotizzando che ogni articolo venga acquistato seguendo l'ordine della lista.

Lo script termina con show table (mostra tabella). Tutte le linee della tabella sono aggregate per Id (identificativo) per fare in modo che ogni articolo appaia una sola volta nella lista.

Rifinire le priorità

Lo script che abbiamo appena visto si basa su assunti piuttosto semplicistici, soprattutto riguardo i costi di mantenimento a magazzino e la massimizzazione del margine lordo. Certo, stimare correttamente costi e benefici è essenziale, ma la lista definitiva viene redatta sulla base di queste prime previsioni.

Rivedere l'intero script potrebbe sembrare a prima vista un compito ingrato, ma abbiamo constatato che questo è il modo migliore per avere tutta la flessibilità che il tuo business richiede. Lo script Envision offre la stessa espressività che trovi di solito in un foglio di calcolo Excel.

Non tutti gli articoli del tuo catalogo saranno soggetti agli stessi costi di mantenimento a magazzino: alcuni potranno essere deperibili, altri molto voluminosi... Per una stima più realistica di tali costi, consulta la nostra pagina dedicata ai costi di gestione del magazzino. Abbiamo avuto modo di osservare che la maggioranza delle aziende sottovaluta i costi di magazzino: secondo la nostra esperienza, i costi di magazzino annui dovrebbero essere almeno pari al 25%.

Dal punto di vista del profitto, lo script che abbiamo appena visto favorisce una massimizzazione pura del margine lordo. Questo potrebbe creare problemi se nella tua attività sono presenti articoli con un margine inferiore, che però generano molte vendite minori, ma molto più redditizie (ad esempio, un cliente acquista prima uno smartphone con un margine lordo del 2,5%, poi due accessori per smartphone con un margine lordo del 50%). In questo caso, potresti introdurre un fattore "avviamento" che rappresenti un margine differito da applicare a questo tipo di prodotti.

La nostra esperienza ci insegna che le classificazioni secondo la priorità possono variare molto da un'attività all'altra, e che ognuna di esse riflette le esigenze specifiche del business per cui è stata pensata. Non esitare a per avere maggiore assistenza.