Teknik

Takvimi Kurmak

Her pazartesi her ürün için çıkışa kadar bir indirim planı kuruyor, yalnız bu haftasını uyguluyoruz. Serbest kalan takvim iyi kurulmuş bir kuralla başa baş geliyor. Gerçek talebi bilmek de az kazandırıyor; darboğaz malın nerede durduğu.

İndirim Takvimi · 5 / 6

Bu yazıda şunu soruyoruz: her ürünün indirim takvimini bir tahminden, hafta hafta kurabilir miyiz ve bu takvim iyi bir kuralı geçer mi? Çünkü elimizde iki eksik parça vardı. Üçüncü yazının kapsama kuralı talebin sezon boyunca nasıl eriyeceğini bilmiyordu. İndirimin ne kadar sattırdığını da bilmiyordu; onu geçen yazıda ölçtük. Bu yazıda ikisini bir araya getirip bir takvime çeviriyoruz. Bu takvimi kuran yönteme optimizasyon diyeceğiz.

Dört soru

— Bir pazartesi bir ürünü indirip indirmeyeceğime karar vermek için ne bilmem gerekiyor? diyor Pelin.

Pars tahtaya dört soru yazıyor.

  1. Bu ürün tam fiyatta kalsa, kalan haftalarda kaç adet satar?
  2. İndirim bu satışı ne kadar artırır?
  3. Satılabilecek ne kadar mal var ve nerede duruyor?
  4. Çıkışta elde kalan bir adet outlet’te ne getirir?

— Birinciyle başlayalım, diyor Pars. Ürünün bugün ne hızla sattığına bakarız; yalnız rafta mal olan günlere, her mağaza ve her beden için ayrı. O hızı günün koşullarından arındırırız: haftanın günü, özel günler, o gün geçen indirim ya da kampanya. Sonra ileriye taşırız.

— Talep sezon boyunca eriyor ama, diyor Ali.

— Onu da yaşam eğrisiBir ürünün satışının, mağazaya girdiği haftadan itibaren nasıl yükselip söndüğünü gösteren eğri. söylüyor. Aynı tip geçmiş sezonlarda bir ürünün talebi lansmandan sonra hafta hafta nasıl düşmüş, ona bakıyoruz.

İkinci soruyu geçen yazıda cevapladık: indirimin gücünü kampanyalardan öğrenilen esneklikle ölçüyoruz. Dördüncünün cevabı geçmiş sezonlarda: çıkışta kalan bir adet outlet’te, ortalamada liste fiyatının küçük bir kesrini getiriyor. Buna kalıntı değeri diyoruz. Kalıntı değeri küçük olduğu için model malı sezonda satmaya isteklidir.

Üçüncü soru ilk bakışta en kolayı. Satılabilir stok raftaki mal, mağazaya yoldaki mal, depodaki mal ve çıkıştan önce gelecek açık sipariş. Ama burada toplam yetmiyor; malın nerede durduğu da önemli.

— İzmir 4’ün rafındaki tulum İzmir 4’ün müşterisine satılır, diyor Pars. Model raftaki malı o mağazaya yazıyor. Depodaki malı ise talebin olduğu yere gidecek sayıyor.

— Gerçekten gider mi? diyor Veli.

— Her zaman değil. Bu, replenishmentDepodaki stoğun mağazalara, satışa göre düzenli aralıklarla gönderilmesi. Sahada AR, ARES ya da Repl diye de kısaltılır; RPT ise başka bir şeydir.’ın malı doğru yere götüreceği varsayımı. İyimser bir varsayım, bilerek kurduk. Bedelini yazının sonunda göreceğiz.

Her pazartesi

Dört soru cevaplanınca model her ürün için şunu yapıyor. Bu hafta için merdivenin her basamağını deniyor, tam fiyat dahil. Her biri için çıkışa kadar en iyi yolu buluyor ve en çok getireni seçiyor. “En çok getiren” şunun toplamı: sezonda satılan malın cirosu, artı çıkışta kalan malın outlet’teki değeri.

İki kural var. Fiyat geri çıkmıyor; bu hafta inen ürün gelecek hafta eski kademesine dönemiyor. Ama kademe atlanabiliyor; model tam fiyattan doğrudan %50’ye inebiliyor. Kapsama kuralı ise haftada bir kademe iniyordu.

Her hafta her mağaza, elindeki stokla kendi talebinin küçüğü kadar satıyor. Stoğu talebinden fazla olan mağaza talebi kadar satar, fazlası rafta kalır. Stoğu az olan stoğu kadar satar, karşılanmayan talep kaybolur.

En iyi yolu bulmanın kolay yolu sondan başlamak. Son haftada her stok düzeyi için en iyi kademe belli: o haftanın cirosu artı kalan malın outlet değeri. Bir önceki haftada, o haftanın cirosu artı son haftanın zaten bulunmuş en iyisi. Böyle geriye doğru bu haftaya geliniyor. Buna dinamik program deniyor. Aşağıdaki parça vakanın çalışan kodundan sadeleştirildi.

# markdown/model.py (coz; sadeleştirildi)
V = np.tile(kalinti * liste * izgara, (K, 1))              # çıkışta kalan her adet outlet değerinde
for t in reversed(range(T)):                               # son haftadan bu haftaya
    Q = np.empty((K, len(izgara)))
    for k in range(K):                                     # bu hafta seçilen kademe
        s = haftalik_satis(izgara, d[t], w, carpan[t, k])  # her mağaza stoğu ile talebinin küçüğü kadar
        ciro = s * liste * (1 - etkin_oran[t, k]) * (1 - iade)
        Q[k] = ciro + np.interp(izgara - s, izgara, V[k])   # + kalan malın değeri
    V = np.array([Q[k:].max(axis=0) for k in range(K)])     # fiyat geri çıkmaz

Plan çıkışa kadar kuruluyor, ama uygulanan yalnız ilk haftası. Gelecek pazartesi yeni satışla, yeni stokla ve gelen malla bütün tahmin ve bütün plan baştan kuruluyor.

Tulumun pazartesisi

Veli’nin tulumuna dönelim. Optimizasyonun başlayabildiği ilk pazartesi, indirimden sekiz hafta önce, tulumun satılabilir stoğu 6.588 adet. Model, tulum tam fiyatta kalsa çıkışa kadar 799 adet satacağını tahmin ediyor. Stok, tahmin edilen talebin sekiz katından fazla.

— O pazartesi İzmir 4’te 578 tulum var, diyor Veli. Model onları nasıl görüyor?

— İzmir 4’ün müşterisi o kadar tulum almayacaksa fazlasını satılmaz görüyor, diyor Pars. Depodaki 1.946 adedi ise talebin olduğu yere gidecek sayıyor.

Modelin o pazartesi kurduğu plan: dört hafta %50, sonra %70. Planın beklentisi, çıkışta 547 adet kalması. Uygulanan yalnız bu haftanın %50’si. Kapsama kuralı aynı gün %20 diyor.

— Plan dört hafta sonra %70’e inmemizi söylüyor, diyor Pelin. O gün gelince inecek miyiz?

— Plan bir söz değil, diyor Pars. Her pazartesi yeni sayılarla yeniden kuruluyor.

Öyle de oluyor. Her pazartesi kurulan plan, o haftanın kademesi olarak yine %50’yi seçiyor. Tulum %70’e ancak indirimden iki hafta sonra iniyor.

Sonuç: kuralla başa baş

Şimdi yarış. Aynı müşteri akışı, aynı mal, aynı tekrar siparişler; yalnız takvim değişiyor. Gerçek talep ve gerçek esneklik verinin kurgusunda; gerçek hayatta böyle bir hakem yok. Optimizasyonu üç şeyle karşılaştırdık: Lumoda’nın takvimine bağlı kendi kopyasıyla, kapsama kuralıyla ve gerçek talebi bilen bir kopyasıyla.

Takvime bağlı kopya indirim gününden önce hiçbir şeye dokunmuyor, indirim gününden itibaren herkese en az %30 veriyor; yalnız derinliği ürün ürün seçiyor. Kahin ise serbest optimizasyonun kendisi, tek farkla: talebi ve esnekliği tahminden değil, verinin kurgusundan alıyor.

Lumoda’ya göre katkı farkı, iki sezonM TL
Optimizasyon, takvime bağlı+10,35
Optimizasyon, serbest+23,63
Kahin+24,44
Kapsama kuralı+24,91

İlk karşılaştırma takvimin bedeli. Aynı optimizasyon Lumoda’nın takvimine bağlanınca iki sezonda 13,28 M TL daha az getiriyor. Serbestliğin iki parçasından, kime indirileceği ve ne zaman başlanacağı, büyüğü ne zaman: erken başlamak.

İkincisi kural. Serbest optimizasyon kapsama kuralını geçmiyor; iki sezonda fark 1,28 M TL, kuralın lehine. Yazın kural önde, kışın optimizasyon az farkla. İkisi aynı yere başka yollardan varıyor. Optimizasyon daha erken indiriyor, daha az ölü stokSezon ve outlet penceresi bittikten sonra depoda kalan, bir daha satılmayacak mal. bırakıyor, daha çok markdown TL veriyor; fazladan sattığı mal ucuza gidiyor.

— Bunca hesap, diyor Pelin, kuralın vardığı yere varmak için mi?

— Bu hesapta öyle, diyor Pars. İkisi de aynı şeyi doğru yapıyor: depodaki malı da görüp satmayanı erken indirmek. Kazancın büyüğü orada. Gerisi ince ayar.

Üçüncüsü kahin. Kahin Lumoda’nın önüne geçiyor; optimizasyon bu farkın %96,7’sini kapatıyor. Kural ise kahinin de biraz önünde. Bunlar tek bir müşteri akışının sonucu; başka akışlarda ne olduğuna altıncı yazıda bakacağız.

Talebi bilmek neden yetmiyor

Gerçek talebi bilen kopyanın bu kadar az kazanması şaşırtıcı. Nedeni, kahinin de aynı stok modeline inanması. Model depodaki malın talebin olduğu yere gideceğini varsayıyor; gerçekte replenishment malı gecikmeyle ve kendi kurallarıyla gönderiyor. Model her mağazanın stok payını sezon boyunca sabit tutuyor; gerçekte talebi yüksek mağazada aranan beden önce biter, mal talebin olmadığı rafta kalır.

Bu yüzden kahin talebi doğru biliyor, ama satışı optimizasyon kadar yanlış tahmin ediyor. İkisi de satacağından fazlasını bekliyor. Hata talepte değil, talep ile satış arasında.

Tulumda bu açıkça görünüyor. Kahin de onu aynı pazartesi %50’ye alıyor, ama %70’e çok daha erken iniyor. Daha çok satıyor; ölü stok yalnız 700 adet. Ama katkısı 0,20 M TL, optimizasyonda 0,47. Malı eritiyor, ama ucuza.

— Yani talebi tam bilsek bile, diyor Veli, mal yine yanlış yerde durabilir.

— İzmir 4’teki tulumu fiyat başka mağazaya götürmüyor, diyor Pars. Bu takvimin darboğazı talep tahmini değil, stoğun modeli: malın nerede durduğu.

Kadranı kendiniz çevirin

Aşağıda bir karar kuralı ve bir sezon seçiyorsunuz; kartlar o kolun katkı farkını, ölü stoğunu, markdown TL’sini ve STR’lerini gösteriyor. Kapsama kuralını ve serbest optimizasyonu yan yana koyun: katkıları yakın, ama ölü stok ve markdown TL’leri farklı. Sonra sezonu yaz ile kış arasında çevirin; ikisinin sırası değişiyor. Kahin kadranda yok.

Karar kuralı
Sezon
Katkı farkı, Lumoda'ya göre (milyon TL)
0,0
Ölü stok (bin adet)
175,3
Markdown TL (milyon TL)
49,1
Tam fiyat STR (%)
52,7
Sezon sonu STR (%)
88,0
Katkı farkı, Lumoda'ya göre (milyon TL)
0,0
Ölü stok (bin adet)
166,3
Markdown TL (milyon TL)
37,8
Tam fiyat STR (%)
66,7
Sezon sonu STR (%)
84,6
Katkı farkı, Lumoda'ya göre (milyon TL)
0,0
Ölü stok (bin adet)
341,7
Markdown TL (milyon TL)
87,0
Tam fiyat STR (%)
58,6
Sezon sonu STR (%)
86,6
Katkı farkı, Lumoda'ya göre (milyon TL)
-0,8
Ölü stok (bin adet)
161,8
Markdown TL (milyon TL)
70,5
Tam fiyat STR (%)
52,9
Sezon sonu STR (%)
89,5
Katkı farkı, Lumoda'ya göre (milyon TL)
0,0
Ölü stok (bin adet)
156,1
Markdown TL (milyon TL)
49,5
Tam fiyat STR (%)
66,9
Sezon sonu STR (%)
86,0
Katkı farkı, Lumoda'ya göre (milyon TL)
-0,8
Ölü stok (bin adet)
317,9
Markdown TL (milyon TL)
120,0
Tam fiyat STR (%)
58,8
Sezon sonu STR (%)
88,0
Katkı farkı, Lumoda'ya göre (milyon TL)
12,2
Ölü stok (bin adet)
72,3
Markdown TL (milyon TL)
156,4
Tam fiyat STR (%)
50,4
Sezon sonu STR (%)
98,4
Katkı farkı, Lumoda'ya göre (milyon TL)
12,7
Ölü stok (bin adet)
93,5
Markdown TL (milyon TL)
122,5
Tam fiyat STR (%)
65,0
Sezon sonu STR (%)
93,8
Katkı farkı, Lumoda'ya göre (milyon TL)
24,9
Ölü stok (bin adet)
165,7
Markdown TL (milyon TL)
278,9
Tam fiyat STR (%)
56,6
Sezon sonu STR (%)
96,5
Katkı farkı, Lumoda'ya göre (milyon TL)
1,3
Ölü stok (bin adet)
151,3
Markdown TL (milyon TL)
77,6
Tam fiyat STR (%)
51,7
Sezon sonu STR (%)
90,8
Katkı farkı, Lumoda'ya göre (milyon TL)
7,1
Ölü stok (bin adet)
132,7
Markdown TL (milyon TL)
62,2
Tam fiyat STR (%)
62,9
Sezon sonu STR (%)
88,9
Katkı farkı, Lumoda'ya göre (milyon TL)
8,4
Ölü stok (bin adet)
284,0
Markdown TL (milyon TL)
139,8
Tam fiyat STR (%)
56,5
Sezon sonu STR (%)
90,0
Katkı farkı, Lumoda'ya göre (milyon TL)
5,3
Ölü stok (bin adet)
107,8
Markdown TL (milyon TL)
112,1
Tam fiyat STR (%)
52,9
Sezon sonu STR (%)
94,6
Katkı farkı, Lumoda'ya göre (milyon TL)
5,1
Ölü stok (bin adet)
117,3
Markdown TL (milyon TL)
92,0
Tam fiyat STR (%)
66,9
Sezon sonu STR (%)
90,7
Katkı farkı, Lumoda'ya göre (milyon TL)
10,4
Ölü stok (bin adet)
225,2
Markdown TL (milyon TL)
204,1
Tam fiyat STR (%)
58,8
Sezon sonu STR (%)
92,9
Katkı farkı, Lumoda'ya göre (milyon TL)
10,6
Ölü stok (bin adet)
65,3
Markdown TL (milyon TL)
167,8
Tam fiyat STR (%)
48,1
Sezon sonu STR (%)
99,2
Katkı farkı, Lumoda'ya göre (milyon TL)
13,0
Ölü stok (bin adet)
79,7
Markdown TL (milyon TL)
145,2
Tam fiyat STR (%)
62,9
Sezon sonu STR (%)
95,6
Katkı farkı, Lumoda'ya göre (milyon TL)
23,6
Ölü stok (bin adet)
145,0
Markdown TL (milyon TL)
313,0
Tam fiyat STR (%)
54,4
Sezon sonu STR (%)
97,7

Bütün kombinasyonlar sayfayla birlikte geldi; sunucuya hiç gidilmiyor.

Sizin verinizde zor olan

Stoklu günü bilmek. Tam fiyattaki talep yalnız rafta mal olan günlerden ölçülüyor. Bunun için her mağaza, her beden, her gün için “raf boş muydu” sorusunun cevabı lazım. Bu bilgi yoksa biten ürün az talep görmüş görünür.

Esnekliği ölçecek temiz kampanya. Takvimin bütün derinlik kararı esnekliğe dayanıyor. Kampanyalar satmayan ürüne konuyorsa ölçülen esneklik düşer ve takvim indirimden kaçar.

Müşterinin indirimi beklemesi. Bu dünyanın müşterisi indirim takvimini bilmiyor, eski fiyatı da hatırlamıyor. Gerçek bir zincirde erken ve derin indirim müşteriye beklemeyi öğretebilir. Model bunu hesaba katmıyor.

Stoğun yeri. Sizin replenishment’ınızın kuralları, kolileri ve gecikmeleri var; mağazalar arası transfer de pahalı. Bu yazının bulgularından biri de bu: takvimi talep tahmini değil, malın nerede durduğu sınırlıyor. Depodan mağazaya giden malı Depodan Mağazaya dizisi anlatıyor.

Ürünler arası etki. Model yalnız indirdiği ürüne bakıyor. İndirimli ürün erken bitince talebinin bir kısmı ikameİstediği ürünü bulamayan müşterinin başka bir ürün alması. Satış şirkette kalır, bu yüzden karşılanmayan talebin tamamı kayıp sayılmaz. yoluyla komşu ürünlere geçiyor. Bu etki sezon katkısının dışında kalıyor ve küçük değil; büyüklüğünü altıncı yazıda ölçüyoruz.

Ölçecek hakemin olmaması. Burada optimizasyonu kuralla aynı malla, aynı müşteriyle yarıştırabildik. Gerçek bir zincirde sezon bir kez yaşanır; aradaki fark sezonun öbür her şeyinin içinde görünmez.

Bütün kollar elimizde. Son yazıda hepsini aynı masaya koyuyoruz: başarıyı neyle ölçeriz, markdown TL ve brüt kâr neden yanıltır, sonuç başka müşteri akışlarında da aynı mı?

Yazan: Sabri Suyunu