Üç Yöntem, Bir Hakem
Stoksuz günün talebini üç yolla kestirdik ve gizli gerçeğe karşı sınadık. Hangisi kazandı, makine öğrenmesi hitlerde nerede yanıldı, fiyat esnekliği nerede tuzak kurar ve teoride doğru olan formül neden fazla yazdı?
Satış Kaybı · 3 / 5
Pars’ın üç adımından ikincisi, stoklu günlerin hızını ölçmek, kâğıt üstünde en kolayı. Ama sahada kimse bu adımın ne kadar doğru yapıldığını bilemez. Rafı boş bulan müşteri hiçbir yere yazılmaz; elde yalnız sansürlü talepRaf boşken gelen ve kayda geçmeyen talep. Satış verisi talebi değil, talep ile stoğun küçüğünü gösterir. vardır. Kestirimi neyle karşılaştıracaksınız?
Lumoda’da bir hakem var. Veri sentetik olduğu için her mağazada, her bedende, her gün kaç müşterinin geldiğini, kaçının istediğini bulamadığını ve bulamayanların ne yaptığını biliyoruz. Kestiriciler bu bilgiyi hiç görmüyor. Hakem yalnız sınav kâğıdını okumak için var.
Kural basit. Basit’in gün çarpanları ve makine öğrenmesi modeli Lumoda’nın ilk iki yılından öğreniyor. Üçü de ayrıca sınav yılında stoksuz günün komşu stoklu günlerini okuyor, makine öğrenmesi onları özellik olarak; hakemi hiçbiri görmüyor. Sınav üçüncü yıl. Hakemin o yıl için söylediği: kayıp yazılabilecek stoksuz günlerde karşılanmayan talep 2.833.153 adet.
Üç yöntem
Naif. Hücrenin son birkaç haftasındaki stoklu günlerin ortalaması. Yalnız geriye bakar. Sahadaki ilk refleks budur ve bir kıyas tabanı olarak burada.
Basit. Stoksuz günün iki yanındaki stoklu günler. Her günün satışı önce sıradan bir güne çevrilir (haftanın günü, özel gün, fiyat, ürünün yaşı), sonra stoksuz günün koşullarına taşınır. Önceki yazıda Pars’ın tahtaya yazdığı şey. Adı basit, çünkü her sayının nereden geldiğini bir cümleyle söyleyebilirsiniz.
Makine öğrenmesi. Aynı bilgiyi alıp ilişkileri kendisi öğrenen tek bir model. Bütün ürünlerden ve bütün mağazalardan birlikte öğrenir.
Üçünün de ayrıntısı, ayarlarıyla birlikte, sitenin GitHub deposundaki kodda. Bu yazı ne bulduklarına bakıyor.
Sınav sonucu
Yanlılık, toplam kestirimin hakemin toplamından ne kadar saptığı; artı fazla, eksi eksik demek. WAPE, mutlak hataların toplamının hakemin toplamına oranı. İki düzeyde ölçtük: her mağazada her ürün için her hafta ve bütün zincir için her hafta.
| Yöntem | Toplam yanlılık | WAPE, mağaza × ürün × hafta | WAPE, zincir × hafta |
|---|---|---|---|
| Naif | +%45,8 | %79,5 | %51,1 |
| Basit | +%9,3 | %47,1 | %10,4 |
| Makine öğrenmesi | −%14,7 | %58,0 | %16,7 |
Basit üç ölçüde de önde. Tablodan dört şey okunuyor.
Naif, yavaşlayan üründe yanılıyor. Geriye bakan hesap ürünün yavaşladığını görmez. Collection ürünlerinde Naif’in yanlılığı +%68,9, Outlet’te +%113,1. Sürekli satılan NOS ürünlerinde ise fena değil: −%5,1.
— Ben de hep son haftalara bakarım, diyor Ali.
— NOS’ta haklısın, diyor Pars. Ürün yıl boyunca aynı hızda satıyorsa geriye bakmak yeter. Yavaşlıyorsa yetmez. “İki yana bak” dememin sebebi bu.
Hücre düzeyindeki hata büyük, zincir düzeyindeki küçük. Basit bir mağazada bir ürünün bir haftasını %47,1 yanılıyor, bütün zincirin bir haftasını %10,4. Sebebi talebin küçüklüğü. Bir bedenin bir mağazadaki günlük talebi çoğu zaman bir iki adettir; o gün dört müşteri mi gelecek, hiç mi gelmeyecek, kimse bilemez. Hatalar toplanınca birbirini götürür. Kısa stoksuzluklar da zor: en çok üç gün süren boşluklarda Basit’in WAPE’si %79,2.
Makine öğrenmesi hitlerde eksik yazıyor. Sezonluk ürünlerin içinde, alınan malın en büyük kısmını satan onda birlik dilimde, yani hitlerde, makine öğrenmesinin yanlılığı −%45,1. Nedenini ölçmedik; bir tahminimiz var: makine öğrenmesi bütün ürünler için tek bir kalıp öğreniyor ve hit gibi uç bir ürünü o kalıbın ortalamasına çekiyor olabilir. Basit her hücrenin kendi komşu günlerine bakıyor; hitlerde o da şaşıyor, ama ters yöne: +%16,8. Naif’te +%64,9.
Daha karmaşık olan daha iyi değil.
— Makine öğrenmesi kaybetti mi yani? diyor Veli.
— Bu sınavda kaybetti, diyor Pars. Daha fazla bilgiyle, daha iyi bir kurguyla aradaki fark kapanabilir. Ama ilk denemede açıklanabilir yöntem kazandı. Üstelik hatasını nerede yaptığını da söylüyor.
Esneklik tuzağı
Günün karakterlerinden biri fiyat. İndirimli gün daha çok satılır. Ne kadar çok? Bunu ölçmek için iki yer var ve ikisi farklı cevap veriyor.
Birincisi kampanyalar. Bir kampanya dışarıdan gelir: ürünün o hafta nasıl sattığına bakılarak verilmez. Kampanyadan ölçülen fiyat esnekliği 1,75.
İkincisi markdown, yani sezon içi kalıcı indirim. Markdown dışarıdan gelmez. İyi satmayan ürüne indirim gelir. İndirimden sonraki satış hem indirimin etkisini hem ürünün zaten zayıf olduğunu taşır. Markdown’dan ölçülen esneklik 1,28.
Fark küçük görünüyor ama sonucu büyük. %30 indirimde satış kampanyaya göre 1,87 katına, markdown’a göre 1,58 katına çıkıyor. Esnekliği markdown’dan öğrenen bir model indirimin gücünü küçük görür ve indirimli stoksuz günlerde kaybı eksik yazar. Basit esnekliği kampanyalardan öğreniyor. Markdown’dan öğrenilen sayı yalnız karşılaştırma için raporda duruyor.
Tükenen gün: teoride doğru olanın neden fazla yazdığı
Gün içinde tükenen bir günü düşünün. Raf sabah birkaç adetle açılmış ve akşama boşalmış. Talebin en az stok kadar olduğunu biliyoruz. Kaybı nasıl yazacağız?
Saf hesap: kestirilen talepten stoğu çıkar, sıfırın altına inme. Kaba bir hesap; talebin stoğu aştığı bilgisini kullanmıyor.
Teoride doğru hesap: talebin stoğu aştığını biliyorsak, “talep stoğu aştığına göre ortalamada ne kadar aşmıştır” diye sorarız. Bu bilgiyi kullandığı için kâğıt üstünde saf hesaptan iyidir. Dizinin başında ana ölçü olarak bunu seçtik.
Hakem tükenen günlerde karşılanmayan talebi 251.386 adet sayıyor.
| Hesap | Basit’in kestirimi | Yanlılık |
|---|---|---|
| Teoride doğru | 302.049 | +%20,2 |
| Saf | 239.705 | −%4,6 |
Teoride doğru olan fazla yazıyor. Üç yöntemde de aynı şey oluyor: Naif’te +%19,3’e karşı −%4,2, makine öğrenmesinde +%1,8’e karşı −%24,3. Makine öğrenmesinde neredeyse tutması büyük ihtimalle tesadüf: genel eksik yazması ile formülün fazlası birbirini götürüyor.
Neden? Formül iki şey varsayıyor: kestirilen talebin doğru olduğunu ve günlük talebin belli bir rastlantı kalıbına uyduğunu. Fazla yazması, bu günlerde varsayımlardan en az birinin tutmadığını söylüyor. Hangisinin ne kadar payı olduğunu ayrıca ölçmedik.
Pelin tabloyu görünce hemen soruyor.
— Saf hesap daha az hata yapıyor, ortada. Neden ona geçmiyoruz?
— Çünkü bunu hakemi gördükten sonra öğrendik, diyor Pars. Hakeme bakıp formül seçmek, sınav kâğıdına bakarak çalışmaktır. Sahada hakem yok. Orada formülü teoriden ve sağduyudan seçersin; biz de baştan öyle seçtik.
— Ama burada doğrusunu biliyoruz.
— Burada biliyoruz. Seçimi sonuca göre değiştirirsek bu yazıdaki bütün sayılar sahada kimsenin kullanamayacağı bir bilgiyle düzeltilmiş olur. Formülü değiştirmiyoruz, sapmasını olduğu gibi yazıyoruz.
Tükenen günler toplam kaybın küçük bir kısmı. Basit’in genel yanlılığı bu sapma da içindeyken +%9,3.
Sizin verinizde zor olan
Bu yazının bütün sayıları bir hakeme dayanıyor. Sizin verinizde hakem yok. Üç yöntemi yan yana koyduğunuzda üç farklı sayı göreceksiniz ve hangisinin doğru olduğunu söyleyecek bir sınav kâğıdı olmayacak.
Yapabileceğiniz şeyler var. Stoklu günlerin bir kısmını saklayıp yeniden kestirmek ilk akla gelen. Ama saklanan stoklu gün stoksuz günlere benzemez; size stoksuz günde nasıl yanıldığınızı söylemez. Asıl zor olan, sınav kâğıdı olmadan hangi yönteme güveneceğinize karar vermek. Bizim tavsiyemiz: hatasının nereden geldiğini açıklayabildiğiniz yöntemi seçin. 🙂