Teknik

Ne Kadar Daha Satardı

Stoksuz günlerin arkasında saklanan talep. Çıplak satıştan yaşam eğrisi ölçeklemesine dört katman ve her birinin gerçek talebe karşı hatası.

Tekrar Sipariş (RPT) · 3 / 6

Pelin’in sorusu kısa: bu ürün daha olsaydı ne kadar satardı? Sahada bu sorunun cevabını kimse doğrulayamaz, çünkü rafı boş bulan müşteri hiçbir yere yazılmaz. Sansürlü talepRaf boşken gelen ve kayda geçmeyen talep. Satış verisi talebi değil, talep ile stoğun küçüğünü gösterir. dediğimiz şey bu.

Bu soruyu sitede bir kez cevapladık. Satış Kaybı dizisi stoksuz günün talebini kestirmenin yollarını anlattı ve gizli gerçeğe karşı sınadı; kazanan Basit’ti. RPT aynı yöntemi kullanıyor. Tek bir fark var ve bu yazının yarısı o fark: RPT kararı pazartesi sabahı verilir. O sabah elde yalnız geçmiş vardır.

Lumoda’da gerçeği biliyoruz, çünkü veri sentetik. Her mağaza, her beden, her gün için gerçek talep = ürünün kendi satışı + karşılanmayan talep. Karşılanmayanın bir kısmı kalıcı kayıp, bir kısmı başka bir ürüne geçen müşteri. İlkbahar-yaz sezonunun Collection ürünlerinde gerçek talep 1.641.754 adet; bunun %32,6’sı karşılanmamış, karşılanmayanın %27,7’si başka bir ürüne geçmiş. Hiçbir yöntem bu sayıları görmüyor; yalnız sınav kâğıdını okumak için kullanıyoruz.

Soru tam olarak ne?

Lansmandan h hafta sonraki pazartesi sabahı, o sabah bilinenle, ürünün lansmandan indirim başına kadarki toplam talebini kestirmek. Bu sayı RPT’nin miktar hesabının girdisi; sonraki yazılar ona yaslanıyor.

Sınav Lumoda’nın iki sezonunda yapılıyor: sonbahar-kış ve onu izleyen ilkbahar-yaz. Her birinde 210 Collection option’ı var. Ürünün kendi satışı yalnız o pazartesiye kadar görülüyor. Yaşam eğrisi ve günlerin karakteri ise sınav sezonundan önce kapanmış sezonlardan öğreniliyor. Lumoda’nın üç yıllık verisinde sonbahar-kış sınavının arkasında üç kapanmış sezon var, ilkbahar-yazınkinin arkasında dört.

Aynı yöntem, yarım pencere

Satış Kaybı dizisinde Basit, stoksuz bir günün talebini o günün iki yanındaki stoklu günlerden kurar: iki hafta öncesi, iki hafta sonrası. Pars bunun sebebini orada anlatmıştı. Ürün yavaşlıyorsa yalnız geriye bakan hesap talebi fazla görür, yalnız ileriye bakan eksik. İki yanın ortası en iyi tanıktır.

Pazartesi sabahı sağ yan yok. Kestirim olaydan sonra değil, kararın anında yapılıyor ve karar anından sonraki hiçbir satır hesaba giremez. Kısıt kodda iki yerde. Kestiricinin öğrendiği havuz yalnız karar gününden önceki stoklu günlerden kuruluyor. Komşuluk da karar gününden bir gün önce kesiliyor:

        ust = gun + self.komsu_gun
        if self._t_gun is not None:
            ust = np.minimum(ust, self._t_gun - 1)
        lo, hi = dizin.aralik(grup, gun - self.komsu_gun, ust)

Yöntemin geri kalanı Satış Kaybı’ndaki gibi: her stoklu günün satışı önce sıradan bir güne çevriliyor, sonra stoksuz günün koşullarına taşınıyor. Günlerin karakterini veren çarpanlar da yalnız o sabaha kadar kapanmış sezonlardan geliyor. Pazartesi sabahından sonraki hiçbir satış ya da stok kaydı kestirimi değiştirmiyor; vakanın testleri bunu ayrıca sınıyor.

Düzeltme zincir toplamında değil, her mağaza ve her beden için ayrı yapılıyor, sonra toplanıyor. Zincir toplamını düzeltirseniz Erzurum 3’ün boş rafı İstanbul 18’in dolu rafıyla ortalanır ve düzeltme küçülür.

Cekete bakalım. Üçüncü pazartesi sabahı ceketin üç haftada sattığı 1.091 adet. Karar anında doldurulan talep 1.195, %9,5 fazla. Mağaza ve beden günlerinin %95,0’ı rafta malla açılmış; stoksuzluk henüz hafif. Bir hafta sonra tablo değişiyor: satış 1.490, doldurulan talep 1.789, %20,1 fazla. Rafta malla açılan günlerin payı %89,9’a inmiş. Haftalık hız olarak bakınca iki pazartesi de düzeltme gerçeğe yakın: üçüncü pazartesi 398,3’e karşı gerçek 392,7, dördüncü pazartesi 447,2’ye karşı 444,0. Yarım pencere bu üründe işini görüyor.

Dört katman

Doldurulmuş talep sezonun ancak ilk birkaç haftası. Sezonun tamamına nasıl taşınacağı ikinci soru. Ceketin lansmandan indirime kadarki gerçek talebi 3.515 adet. Pelin’in planı 1.985’ti. Dört yöntemin üçüncü pazartesi sabahı söyledikleri:

KatmanNe yapıyorKestirim
aÇıplak satış: raporda görünen1.091
bDoldurulmuş talebin hızı × indirime kadarki haftalar3.984
cÇıplak satış ÷ çıplak eğrinin payı (FRR kuralı)2.624
dDoldurulmuş talep ÷ düzeltilmiş eğrinin payı3.807

a kestirim değil; başlangıç noktası. Üçüncü haftada ceket sezonunun ancak üçte birini yaşamış.

b doldurulmuş talebi haftalık hıza çevirir ve sezonun bütün haftalarına aynı hızla yayar. Hız doğru olsa bile yanılır, çünkü ürün yaşlandıkça yavaşlar; b bunu görmez ve ortalamada yukarı yanılır. Cekette de öyle: 3.984’e karşı 3.515.

c literatürdeki kuralın kendisi. Fisher, Rajaram ve Raman’ın çalıştığı perakendecinin kullandığı hesap: ilk haftaların satışını, benzer ürünlerin ilk haftalarda sezon satışının ne kadarını gördüğüne böl. Şekli doğru, ama iki yerden sansür yiyor. Pay da payda da sansürlü.

d c’nin iki kusurunu da düzeltiyor: pay karar anında doldurulmuş talep, payda doldurulmuş talepten öğrenilmiş eğri.

Ceket için d gerçeğe yakın, biraz fazla: 3.807’ye karşı 3.515. İkinci pazartesi 3.347, altıncı pazartesi 3.436 diyor. Bu fazlaya aşağıda döneceğiz.

Dört katman kodda aynı fonksiyonda:

    k["k_ham"], k["k_duz"] = _k(egri_ham), _k(egri_duz)
    W = k["satis_hafta"]
    k["a"] = k["x"].astype(float)
    k["b"] = k["D"] / h * W
    k["c"] = k["x"] / k["k_ham"]
    k["d"] = k["D"] / k["k_duz"]
    k["a_hiz"] = k["x"] / h * W
    k["c_duz_egri"] = k["x"] / k["k_duz"]

x o sabaha kadarki satış, D karar anında doldurulmuş talep, W lansmandan indirime hafta sayısı. a_hiz ve c_duz_egri katmanları ayrıştırmak için iki ara hesap: çıplak hız × hafta, ve çıplak satış ÷ düzeltilmiş eğri. Eğri dalgaya göre ayrı öğreniliyor, çünkü üçüncü dalgayla gelen ürünün indirime kadar daha az haftası var ve eğrisini daha çabuk tüketiyor.

Sınav sonucu

Hata WAPE ile ölçülüyor: bütün option’ların mutlak hataları toplamı, gerçek talepler toplamına bölünüyor. Yanlılık aynı oranın işaretli hâli; eksi, eksik tahmin demek. İlkbahar-yaz sezonunun 210 Collection option’ı:

Katmanh=2h=3h=4h=6Yanlılık (h=3)
a çıplak satış%87,3%77,1%67,6%54,9−%77,1
b doldurulmuş hız × hafta%19,8%23,5%31,2%30,3+%13,4
c çıplak eğri (FRR)%38,8%34,9%33,0%33,6−%34,7
d doldurulmuş talep ÷ düzeltilmiş eğri%22,4%20,9%20,0%14,7−%9,8
Buyer planı%39,4%39,4%39,4%39,4−%21,6

Sonbahar-kış sezonu, aynı ölçülerle:

Katmanh=2h=3h=4h=6Yanlılık (h=3)
a çıplak satış%85,7%75,8%66,2%50,1−%75,8
b doldurulmuş hız × hafta%23,1%28,8%32,7%35,9+%21,2
c çıplak eğri (FRR)%32,6%31,2%29,9%27,1−%30,4
d doldurulmuş talep ÷ düzeltilmiş eğri%17,8%15,2%13,7%12,2−%3,3
Buyer planı%37,6%37,6%37,6%37,6−%11,4

Tablolardan dört şey okunuyor.

Birincisi, plan ile ilk haftalar arasındaki uçurum. Sezon öncesi plan ilkbahar-yazda %39,4 yanılıyor. İkinci haftanın sonunda d %22,4 yanılıyor. Sonbahar-kışta %37,6’ya karşı %17,8. Fisher, Rajaram ve Raman aynı karşılaştırmayı kendi perakendecilerinde %55’e karşı %8 bulmuştu. Bizim uçurumumuz daha küçük: iki hafta sonra hata planınkinin yarısının biraz üstüne iniyor, sonbahar-kışta yarısının biraz altına. Ama yön aynı. RPT’nin var olma sebebi bu uçurum: ilk sipariş en kötü bilgiyle verilir.

Planın yanlılığına da bakın: iki sezonda da eksi. Planlar ortalamada talebin altında kalıyor ve Banu ilk alımı planın da biraz altında yapıyor. İlk sipariş iki kez temkinli.

İkincisi, b ve c ters yönlerde yanılıyor. b düz hız varsaydığı için fazla, c sansürlü veriyle ölçeklediği için eksik: üçüncü haftada ilkbahar-yazda +%13,4’e karşı −%34,7, sonbahar-kışta +%21,2’ye karşı −%30,4. İkisi de makul görünen, sahada kullanılan hesaplar. İkisinin de hatası sistematik.

Üçüncüsü, zaman geçtikçe d iyileşiyor, ama yavaş. İkinci haftadan altıncı haftaya hata ilkbahar-yazda %22,4’ten %14,7’ye, sonbahar-kışta %17,8’den %12,2’ye iniyor. Bu sırada takvim de akıyor. İlk yazıda Veli’nin andığı örgü kemeri hatırlayın: Hindistan’dan, on dört haftada geliyor. İkinci pazartesi verilen sipariş, gelişinde indirime kadarki talebin %5,4’ünü buluyor. Üçüncü pazartesi verilen %3,6’sını. Altıncı pazartesi verilenin önünde hiçbir şey kalmıyor: %0,0. Tahminin iyileşmesi ile zamanın tükenmesi arasındaki yarış RPT’nin ta kendisi.

Dördüncüsü, d her hafta birinci değil. İlkbahar-yazın ikinci haftasında dört katmandan en iyisi b: %19,8’e karşı %22,4. Üçüncü haftadan sonra d öne geçiyor ve fark açılıyor. Sonbahar-kışta ise d her hafta önde ve iki sezonun iyisi sonbahar-kış. d’nin ilkbahar-yazdaki yanlılığı da dikkat çekici: ikinci haftadan altıncıya −%17,1 ile −%5,5 arasında, hep eksi. Sonbahar-kışta neredeyse sıfır, −%3,5 ile +%0,9 arası. Sebebi, aşağıda göreceğimiz gibi, büyük ölçüde eğride görünüyor.

Eğriyi de sansür bozar

Eğri geçmiş sezonların satışından öğrenilirse o da sansürlüdür. Tutan ürünler erken biter, son haftalarında satışları durur. Bu, eğriyi olduğundan erken bitiyormuş gibi, yani önü yüklü gösterir.

Düzeltme aynı yöntemle yapılıyor. Geçmiş sezonların stoksuz günleri de Basit’le dolduruluyor; karar anı, sınav sezonunun ilk lansman sabahı. Eğri satıştan değil, doldurulmuş talepten çıkıyor ve o sabahtan sonra olan hiçbir şey eğriye girmiyor.

İlkbahar-yaz eğrisinde ilk üç haftanın payı, üç dalga için:

Eğri1. dalga k3k_32. dalga k3k_33. dalga k3k_3
Çıplak satıştan öğrenilen%28,7%33,7%41,6
Doldurulmuş talepten öğrenilen%22,8%25,4%31,4
Sınav sezonunun gerçek eğrisi%18,8%19,7%33,7

Çıplak eğriyle bölmek, bir ürünün üç haftada sezonunun olduğundan büyük bir kısmını gördüğünü varsayar ve sezon talebini düşük kestirir. c katmanının eksik yanlılığının bir kısmı buradan geliyor. Düzeltme bu hatanın büyük kısmını siliyor: öğrenme sezonlarının kendi gerçek eğrisine ortalama uzaklık, ilk altı haftada, çıplakta 7,50 puan, düzeltilmişte 0,38 puan. Sonbahar-kış eğrisinde 7,51’e karşı 0,45.

Ama tablonun son satırı başka bir şey söylüyor. Düzeltilmiş eğri geçmişi neredeyse birebir tutturuyor; sınav sezonunu tutturamıyor. İlkbahar-yazda ilk iki dalganın ürünleri geçmiş sezonlardakinden yavaş açılmış: ilk dalgadakiler ilk üç haftada sezonlarının %22,8’ini değil %18,8’ini, ikinci dalgadakiler %25,4’ünü değil %19,7’sini görmüşler. Düzeltilmiş eğrinin sınav sezonunun gerçek eğrisine uzaklığı ilkbahar-yazda 4,39 puan, sonbahar-kışta 1,51 puan. Çıplak eğrininki ilkbahar-yazda 10,24 puan.

d paydasını bu eğriden alıyor. Eğri sezonun gerçeğinden önü yüklü kalınca payda büyür ve d aşağı kayar. İlkbahar-yazdaki eksik yanlılığın görünen sebebi bu. Örgü kemer de ilk dalgada ve aynı yöne kayıyor: üçüncü pazartesi d 1.761 diyor, gerçek 2.001.

Üçüncü dalgada tersi oluyor. Eğri gerçeğin biraz gerisinde, %33,7’ye karşı %31,4; d biraz fazla kestiriyor. Ceketin fazlasının büyük kısmı buradan geliyor. İlk üç haftanın gerçek talebi 1.178’di, karar anında doldurulan 1.195; talebin kendisi neredeyse tam, farkı eğri yapıyor.

Sansürü düzeltebilirsiniz. Sezonun geçmişe benzeyip benzemeyeceğini düzeltemezsiniz.

Eğri dalgaya göre öğreniliyor. Üst kategori × dalga kırılımı da denendi: sonbahar-kışta daha kötü (5,21’e karşı 4,02 puan), ilkbahar-yazda biraz daha iyi (3,53’e karşı 3,75). Kazanç küçük ve sezona göre yön değiştiriyor; dalga yeterli.

Ortalamada eksik, tek üründe iki yöne

d ilkbahar-yazda ortalamada biraz eksik kalıyor, ama tek tek ürünlere bakınca iki yöne de saçılıyor: ceket fazla, kemer eksik. Sebebi eğri. Bir ürünün sezonu kendi dalgasının ortalamasına benzemek zorunda değil; ortak eğri ancak ortalamayı taşır. Bu, sahada da ortadan kalkmaz.

Bir de stoksuzluk büyüdükçe artan bir risk var. Stoksuzluk tutan üründe daha çok: ilkbahar-yazda altıncı pazartesiye kadar tutan ürünlerin mağaza ve beden günlerinin %84,2’si rafta malla açılmış, tutmayanlarınkinin %95,7’si. Doldurulacak boşluk büyüdükçe kestirim daha çok tahmine yaslanır. Bu riskin ne kadar büyüyebileceğini c gösteriyor: sansürü görmeyen hesap tutan ürünlerde altıncı haftada −%42,3 eksik, yani en büyük hatayı en çok satan üründe yapıyor. d bu riski büyük ölçüde atlatıyor: altıncı haftada tutanlarda %14,0, tutmayanlarda %15,3.

İkisi RPT için aynı sonuca çıkıyor: kestirimin kendisi yetmez, belirsizliği de lazım. “Sezon talebi 3.807” demek yetmez; bu sayının ne kadar oynayabileceğini de söyleyebilmek gerekir. Miktar kararının iki hatası farklı bedeller taşıdığı için, bu aralığın genişliği siparişin büyüklüğünü doğrudan değiştirir. Beşinci yazının konusu bu.

Sizin verinizde zor olan

Bu yazının bütün tabloları bir hakeme dayanıyor. Sizin zincirinizde hakem yok. d’nin hangi sezonda eksik, hangisinde yansız olduğunu ancak sezon kapandıktan sonra görebilirsiniz, o da yine bir kestirimle: stoksuz günleri bu kez iki yana bakarak doldurur, pazartesi sabahki kestirimle karşılaştırırsınız. Sahada yapılabilecek en iyi sınav bu ve bir sonraki yazının sahada kurulabilen etiketi tam olarak bu. Ama o sınavın cevap anahtarı da bir kestirim.

İkinci zor şey ilkbahar-yaz tablosunun gösterdiği: eğri geçmişten öğrenilir ve sezon geçmişe benzemeyebilir. Bunu önceden bilemezsiniz. Yapabileceğiniz, eğriye dayanan her sayının yanına bir aralık koymak.

Özet

  • Satış raporu talebi göstermez. Stoksuz günleri Satış Kaybı’nın yöntemiyle doldurun, mağaza × beden düzeyinde; ama karar anında yalnız geçmişe bakarak.
  • Sezon talebini ilk haftalardan kestirmek için eğrinin şeklini geçmişten, seviyesini bu sezondan alın. Eğriyi de sansürden arındırın.
  • Böyle yapılınca ikinci haftanın sonunda hata, planın hatasının ilkbahar-yazda yarısının biraz üstüne, sonbahar-kışta yarısının biraz altına iniyor. Sonraki haftalarda iyileşme yavaş; zaman ise hızlı akıyor.
  • Eğri geçmişe ne kadar benziyorsa kestirim o kadar iyi. Benzemediği sezonda kestirim bir yöne kayar; aralık bu yüzden lazım.

Sonraki yazıda bu kestirimi kullanarak ilk soruya dönüyoruz: bu ürün RPT’ye aday mı?

Yazan: Sabri Suyunu