Priorisierte Bestellungen mit probabilistischen Prognosen - Optimierung

Wirtschaftliche Priorisierung des Einkaufs












Startseite » Ressourcen » Hier

Probabilistische Vorhersagen bieten im Vergleich zu herkömmlichen Prognoseansätze viele detaillierte Erkenntnisse über die Zukunft und lassen uns den gesamten Bestellprozess überdenken. In diesem Dokument beschreiben wir, wie eine Prioritätenliste für Einkäufe mit Lokad erstellt werden kann. Die zwei hauptsächlichen Vorteile dieses Ansatzes, im Vergleich zu den Reorder-Points, sind, dass man keine Service Level mehr pflegen und abstimmen muss und dass eine flexiblere Einkaufsmethodik benutzt wird, die mit Versorgungsengpässen besser umgehen kann.

Die Prioritätenliste für Einkäufe ist ein Beispiel für eine priorisierte Bestellpolitik. Diese breite Art von Bestandspolitiken bietet im Vergleich zu herkömmlichen Bestandspolitiken höhere Bestandsleistungen. Wenn möglich, empfiehlt Lokad immer, eine priorisierte Bestellpolitik anzuwenden.

Skript-Vorlage für die Prioritätenliste

Zur Erstellung einer Prioritätenliste müssen wir ein kleines Envision-Skript benutzen (s. unten). Dieses Skript können Sie in Ihrem Lokad-Konto über den Button Create Envision script erstellen. Wenn dieses neue Projekt erstellt ist, sehen Sie einen Code-Editor. Kopieren Sie den unteren Code, fügen Sie ihn ein und speichern Sie ihn, indem Sie auf Save klicken.

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 // % relative to selling price
carryingCost := 0.3  // % annual carrying cost relative to purchase price
discount := 0.20 // % annual economic discount

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

Dieses Skript erstellt ein Dashboard, das eine Tabelle enthält. Ein Planer für die Lieferkette sollte dann den Kauf der Artikel nach der Reihenfolge der Liste vornehmen.

Image

Let's review the content of the script. The top line is reading data from the /sample folder where the sample files are expected to be located.

Lassen Sie uns den Inhalt des Skripts genauer analysieren. Die erste Zeile liest die Daten aus dem Ordner /sampel, in denen erwartet wird, dass sich die Beispieldateien befinden.

Was die Datei Lokad_Items.tsv betrifft, die die Produktliste oder SKUs enthält, werden zwei „besondere“ Spalten erwartet:

  • SellPrice: Der Einheitsverkaufspreis (abzüglich Steuer)
  • BuyPrice: Der Einheitskaufpreis (abzüglich Steuer)

Wenn Sie das Skript angepasst haben, so dass es die Daten aus dem richtigen Eingabeordner extrahiert, und sofern die Felder SellPrice und BuyPrice, wie für unsere Technologie erforderlich, vorhanden sind, klicken Sie auf den Run Button. Somit wird das Skript ausgeführt und ein Dashboard erstellt, das eine einzige große Tabelle enthält. Klicken Sie am Ende des Bildschirms auf die Tabelle, um die Möglichkeit zu erhalten, die Tabelle als Excel-Blatt herunterzuladen.

Der oberste Bereich des Skripts beinhaltet auch zwei Aufrufe an den probabilistischen Prognose-Engine Lokads zur jeweiligen prognose der Durchlaufzeit und des Bedrfs.

Wir führen einige wirtschaftliche Konstanten ein, die in der Praxis angepasst werden müssen, um eine tatsächliche Unternehmensstrategie widerzuspiegeln.
  • oosPenalty: ein Anteil des Verkaufspreises, das die negativen Auswirkungen bei Nicht-Belieferung eines Kunden darstellt
  • carryingCost: ein Anteil des Verkaufspreises, das die negativen Auswirkungen bei einjähriger Lagerung 1 Einheit darstellt
  • discount: der Abzinsungsfaktor für künftige Belohnungen und Strafen 1 Jahr im Voraus.

Dann werden die für die Berechnung der Bestands-Belohnungsfunktion relevanten Wirtschaftsvariablen eingeführt:
  • M: die Belohnung (Bruttogewinnspanne) pro gelieferte Einheit aus dem Bestand.
  • S: die Bestrafung, wenn einer Nachfrage nicht mit dem Bestand gedeckt werden kann.
  • C: jährliche Lagerhaltungskosten pro Einheit.
  • D: der jährliche Abzinsungsfaktor.

Der Kern der Priorisierungslogik findet in der Berechnung von G.Reward und G.Score statt.
  • G.Reward: stellt die wirtschaftlichen Belohnung von G.Q der zusätzlichen Einheiten im Bestand (gewöhnlich ist G.Q gleich 1).
  • G.Score: stellt einen Anteil der Höhe der Rendite in Dollar dar, für jeden in Bestand investierten Dollar.

Der danach auftauchende Filter where schließt die Fälle aus, in denen sich der Reorder-Point unter dem aktuellen Bestand befindet. Diese Situationen werden ausgeschlossen, da wir nur solche Einkaufszenarien in Betracht ziehen, durch die eine Erweiterung des Bestands erzielt werden. In diesem Block wird eine zweite Reihe von Berechnungen ausgeführt, die die Priorisierung selbst antreiben:

  • G.Rank: Sortiert alle Tabelleneinträge nach Ihrem Ergebnis. Doch diese Sortierung hat einen Haken, da für jeden Artikel die neue Sortierung, die Sortierung der Reorder-Points erhält.
  • G.Invest: Zeigt, wie man kumulative Berechnungen erstellen kann. Hier berechnen wir die Gesamtinvestitionen (kumulativ), indem wir davon ausgehen, dass jeder Artikel nach der Reihenfolge der Liste gekauft wird.

Die Tabelle endet dann mit der Anweisung show table und alle Zeilen der Tabelle werden nach Id aggregiert, um eine Liste zu erhalten, in der jeder Artikel nur einmal vorkommt.

Fine-Tuning der Priorisierung

Das oben beschriebene Skript geht von etwas vereinfachten Voraussetzungen aus, was die Wirtschaftsvariablen, die zur Berechnung der Bestands-Belohnungsfunktion genutzt werden. Nicht alle Ihre Artikel sind mit denselben Lagerhaltungskosten verbunden. Manche Artikel können verderblich sein, manche sehr sperrig, usw. Um eine genauere Vorstellung über diese Kosten zu erhalten, können Sie unsere Seite über Bestandskosten lesen. In der Praxis können wir immer wieder beobachten, wie Händler die Bestandskosten unterschätzen. Unserer Erfahrung nach sind jährliche Lagerhaltungskosten, die unter 25% liegen, zweifelhaft.

Obwohl es anfänglich etwas mühsam erscheinen kann, das gesamte Skript zu durchforsten, ist es unserer Erfahrung nach eine der wenigen Optionen, die die Flexibilität bietet, die man zur Implementierung der Annahmen Ihres Unternehmens benötigt. Das Envision-Skript bietet Ihnen die Art von Ausdruck, die Sie gewöhnlich in einem Excel-Blatt vorfinden würden.

Was den Gewinn betrifft, fördert das obere Skript die Maximierung der Gewinnspanne. Dies kann sich jedoch auch negativ auf Ihr Unternehmen auswirken, wenn zufällig Artikel mit niedrigeren Gewinnspannen Ihr Unternehmen treiben, indem sie viele kleine aber rentablere Verkäufe erzeugen (z.B. beim Kauf eines Kunden von einem Smartphone mit einer Bruttogewinnspanne von 2,5% und dem anschließenden Kauf von zwei Artikeln aus dem Handyzubehör mit einer Bruttogewinnspanne von 50%). In diesem Fall können sie einen „Firmenwertfaktor “ einfügen, in Form einer verschobenen Gewinnspanne für solche Kernartikel.

Unserer Erfahrung nach gibt es so viele Prioritätseinstellungen wie Unternehmen, doch die Priorisierung spiegelt den spezifischen Mix, der Ihr Unternehmen prägt. Zögern Sie nicht, , wenn Sie Unterstützung benötigen.