Satış Tahmini Yapay Zeka ile Perakendeci Gelirini Optimize Etme
Yayınlanan: 2022-03-11Tahmin, gelecekteki eğilimler, olası felaketler ve herhangi bir konunun genel davranışı hakkında tahminler oluşturmak için geçmiş verileri ve olayları kullanan bir tekniktir. Tahmin, giderleri, gelirleri ve bütçe planlarını tahmin etmek için karar analizi için olasılıksal destek olarak kullanılabilir.
İş dünyasında tahmin, iki farklı kategoriye ayrılabilir: nitel tahmin ve nicel tahmin .
- Nitel tahmin. Nitel tahmin, pazar araştırması ve pazar stratejileri ile ilgilidir, dolayısıyla daha uzman odaklıdır ve insan faktörlerinden etkilenir. Genellikle kısa vadeli strateji oluşturmaya yöneliktir.
- Nicel tahmin. Nicel tahmin, herhangi bir insan faktörünü hariç tutar. Yalnızca bir işletmenin sahip olduğu tarihsel verilere bağlıdır ve uzun vadede satışlar, fiyatlar ve diğer finansal yönler gibi bazı faktörlerin ne olacağını tahmin etmeyi amaçlar.
Daha fazla bilgi için Investopedia'nın Finansal Tahmin kitabına göz atabilirsiniz.
Her iki tahmin türü de çok şey vaat etti ve birçok varlık için iş geliştirmeleri yaratmayı başardı.
Tahminin piyasa kararlarını nasıl etkileyebileceği hakkında daha fazla bilgi edinmek istiyorsanız, başlamak için iyi bir yer Tahmin Piyasaları: Temeller, Tasarımlar ve Uygulamalar , Stefan Luckner ve diğerleri.
Nicel tahmin kullanarak çözebileceğimiz bir problem, talep tahmini veya satış tahminidir.
Talep Tahmini ve Satış Tahmini Yaklaşımları
Çok sayıda mağaza işleten bir perakendeci olduğunuzu ve her mağazanın, mevsimler ve pazar eğilimleri gibi belirli olaylara dayanan insan kararlarına dayalı statik bir ürün stok yenileme sistemine sahip olduğunu varsayalım.
Bazen, iki büyük soruna yol açabilecek bu sorunlardan biriyle karşılaşacaksınız:
- Stok fazlası ürünler. Belirli bir zaman diliminde satılması planlanan ancak satılmayan önemli miktarda ürün stoğuna sahip olmak.
- Stokta olmayan ürünler. Ürün satma imkanına sahip olmak ancak ürün mevcut olmadığı için yapamamak.
IHL Group'un 600 hane ve perakendeciyle yaptığı ankete göre, perakendeciler stokta kalmama sorunları nedeniyle yılda yaklaşık 1 trilyon dolarlık satış kaybediyor.
"Retail Dive'a e-posta ile gönderilen rapora göre, alışveriş yapanlar her üç alışveriş gezisinden birinde stok kalmamış ürünlerle karşılaşıyor. IHL Group , gıda, ilaç ve toplu perakendecilerde, her beş seyahatten birinde, büyük mağazalarda ve özel perakendecilerde dörtte bir ve elektronik mağazalarında üçte bir stokta olmayan ürünlerle karşılaşıyor” dedi .
Görünen o ki, bu sorunların her ikisi de gelirde azalmaya neden oluyor çünkü ya satış olasılığını kaybettik ya da satılmayan ürünlere daha fazla para yatırdık, bu da maliyetlerini telafi etmek için herhangi bir zamanda gelir getirmeyecek varlıklara sahip olmak anlamına geliyor.
Bu açıkça işletmenin nakit akışına zarar verir ve bu riski ele almak için iki şeye ihtiyacımız var:
- Karar vermemize yardımcı olacak daha fazla girdi
- Stok yenileme sistemleri için uzun vadeli stratejik planlama yapabilen bir tahmin ekibi
Öyleyse soru şu: Tahmin sürecinize yardımcı olması için şirketinizde yapay zekayı benimsemeniz gerektiğini gösteren göstergeler nelerdir?
Bu kararı vermek için aşağıdaki sorulara uzman cevaplarına ihtiyacınız var:
- Satış hattınızı tahmin etmek zor mu?
- Satış tahmininiz yanlış mı veya yeterince doğru değil mi (geçmiş verileriniz olsa bile)?
- Stokta kalmama veya stok fazlası sorunları yaşıyor musunuz?
- Kararlarınızı ve planlamanızı yönlendirmek için sahip olduğunuz verilerden açıklayıcı ve çıkarımsal içgörüler çıkaramıyor musunuz?
Bu soruların yanıtları, tahmin stratejilerinize yapay zekayı dahil edip etmeyeceğinize karar vermenize yardımcı olacak açık bir işaret olmalıdır.
Yapay Zeka Satış Tahmini Sürecinden Nasıl Yararlanabilir?
Yapay zeka, birçok şirkette insan tahmininden daha iyi performans göstererek daha hızlı karar verme ve planlamanın yanı sıra daha güvenilir risk yönetimi stratejileri sağlamada harika sonuçlar gösterdi. Bu nedenle en iyi şirketler planlamalarında yapay zekayı benimsiyor.
Bir talep tahmini problemi ile uğraşırken, her bir ürün için satışları tahmin etmek için zaman serisi tahmin metodu kullanılabilir, böylece şirketlerin stok yenilemeyi optimize etmesine ve yukarıda bahsedilen problemlerin oluşumunu en aza indirmesine izin verir. Bununla birlikte, birçok model, gerekli özelliklerin olmaması nedeniyle bireysel ürün düzeyinde veya ürün kategorisi düzeyinde tahmin yapmakla mücadele eder. Öyleyse soru şu: Onu nasıl çalıştırabilir ve verilerimizden en iyi şekilde yararlanabiliriz?
Gerçek hayattaki perakendeciler için bu problemler önemsiz değildir. Ya veri setinde çok fazla doğrusal olmayan ve çok değişkenli bağımlılıklar getiren 1.000'den fazla ürününüz var ya da üretebilmek veya satın alabilmek için çok sayıda önceden bildirimle öngörülen stok yenileme miktarı hakkında uyarılmanız gerekiyor veya talep gerçekleşene kadar onu elde etmek için ne gerekiyorsa yapın.
Bu durumda ARIMA ve ETS gibi klasik modeller çalışmayacak ve RNN'ler ve XGBoost gibi daha sağlam bir yönteme ihtiyacımız olacak ve bu yüzden bu sorunu çözmek için birçok özellik oluşturmaya ihtiyacımız var.
Bunun çalışması için şunları yapmamız gerekir:
- Ürünlerin çeşitliliğini ve çeşitliliğini açıklamak için gerekli girdi özelliklerini edinin.
- Verilerimizi kategorilere ayırın, böylece her kategori aynı zaman serisi davranışına sahip olur ve her kategori bağımsız bir model kullanılarak ele alınır.
- Modellerimizi, elde edilen kategorize edilmiş girdi özellikleriyle eğitin.
Bu makale uğruna, böyle bir modele örnek olarak XGBoost'u alacağız.
Satış Tahmin Modellerinde Aranan Özellikler
Bu problem için gerekli olan özellikler seti dört ana grupta sınıflandırılır:
- Zamanla ilgili özellikler
- Satışla ilgili özellikler
- Fiyatla ilgili özellikler
- Stokla ilgili özellikler
Zamanla İlgili Özellikler
Derin öğrenmeden (Recurrent Neural Network) farklı olarak, makine öğrenimi modelleri, tarih saat özelliği için manuel bir özellik çıkarma katmanı oluşturmadan bir zaman serisi içinde uzun vadeli veya kısa vadeli bağımlılıklar elde edemez.
Tarihten aşağıdakiler gibi birçok özellik çıkarılabilir:
- Yıl
- Gün
- Saat
- Hafta sonu veya hafta içi (gün hafta içi veya hafta sonu olsun)
- Haftanın günü
Birçok yaklaşım sadece bu zaman özelliklerini çıkarır ve bunları girdi ve eğitim modelleri olarak kullanır, ancak daha fazla mühendislik yapılabilir. Gördüğümüz gibi, özellikler (gün, saat, haftanın günü) periyodiktir, yani bir dizi tekrarlayan değerlere sahiptirler. Bir model bununla nasıl başa çıkabilir?
Kısa cevap, olamaz çünkü modelin gördüğü 00:00 saatinin 23:00'e 23 saat uzaklıkta olduğu, ama aslında bir saat uzaklıkta olduğu. Bunu çözmenin bir yolu, bu özellikleri döngüsel dönüşüme dönüştürmektir.
Sinüs ve kosinüs kavramını veya vektör temsilini kullanarak, her saat (24 saat) bir açıya dönüştürülebilir ve bunların günah ve kosinüsünü kullanmak, modelin saatler arasındaki gerçek oranları ne olursa olsun tespit etmesini çok daha kolaylaştıracaktır. periyodikliğin.
Bu, periyodik zaman özelliklerinde veya herhangi bir periyodik özellikte meydana gelen süreksizliği ortadan kaldıracaktır.
Yazımız için, herkese açık olarak bulunan Sample Superstore veri setini kullanacağız ve belirli bir ürün kategorisi için hedef aylık satışları tahmin etmeye çalışacağız.
Ayrıca Python 3.7 ortamını aşağıdaki kütüphanelerle kullanacağız:
- Dizi
- pandalar
- XGBoost
- Sklearn
Şimdi size periyot özelliği dönüştürme fonksiyonunun nasıl oluşturulacağını göstereceğim ve faydalı olup olmadığını test edeceğim.

def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))
Bununla birlikte, eklenen özelliğin performansı artırıp artırmayacağını test etmeye hazırız.
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)
Gördüğümüz gibi, hedef satış özelliğimiz için bir log 1p dönüşümü yaptık çünkü bu çarpık bir özellik (normal dağılımlı değil).
Şimdi, verilere bir XGBoost regresörü sığdıracağız.
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837
Ardından, oluşturduğumuz özelliği deneyeceğiz.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826
Gördüğümüz gibi, kayıp 0,43 RMSE'den 0,33 RMSE'ye yükseldi.
Sorununuza bağlı olarak düşünebileceğiniz zamanla ilgili diğer bazı özellikler şunlardır:
- Öğenin mağazada bulunmasından bu yana geçen ay sayısı
- Son satıştan bu yana geçen gün sayısı
Satışla İlgili Özellikler
Bu, satışlarımızı tahmin etmek için gereken ana temel girdi özelliğidir, peki satış verilerinden en iyi şekilde nasıl yararlanılır? Bunu gecikme ve otokorelasyon kavramını kullanarak başarabiliriz.
Gecikme özellikleri, ürünler için geçmiş satış kayıtlarıdır. Örneğin, Mayıs 2020 satışlarını tahmin etmek için modelimize girdi olarak aylık satışlar için 12 gecikmeli bir özellik aldıysak, bu, modele Mayıs 2019 ile Nisan 2020 arasında veri kayıtları sağlayacağımız anlamına gelir. Bu gerçekten yardımcı olabilir.
Ayrıca, hedef özelliğin gecikmeli özellikleriyle ne kadar ilişkili olduğunu kontrol etmek için otokorelasyon grafikleri kullanılarak yorumlanabilir. Bu aynı zamanda gecikmeli özellikler arasından yalnızca ilişkili özelliklerin seçilmesine yardımcı olur, böylece bellek kullanımını ve özellik fazlalığını azaltırız.
Veri çerçevemize gecikme özelliklerini şu şekilde ekleyebiliriz:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Burada, eğitim setimize dahil etmek için üç gecikmeli bir özelliğin değerini seçtim. Bu özellik bir hiperparametredir—otokorelasyon grafiğine göre veya birçok değeri deneyerek ve sadece ayarlama aşamasında en iyisini seçerek seçebilirsiniz.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188
Şimdi, RMSE, hem gecikme özelliklerini hem de döngüsel dönüşümleri kullanarak 0.28'e yükseldi.
Ekleyebileceğiniz satışla ilgili bazı ek özellikler:
- Satılan ürün oranı (bir mağazadaki toplam satışlar cinsinden satılan ürünlerin oranı)
- Öğe kategorisi için satış olaylarının sıklığı
- Kıdem kavramının eklenmesi
Kıdem , bir mağazadaki yeni ürünlere bir kıdem düzeyi atamak için tanıtılan bir kavramdır:
- Kıdem 0: şirket için yeni ürünler
- Kıdem 1: Bu mağazada hiç satılmayan ancak şirketin diğer mağazalarında satılan ürünler
- Kıdem 2: Bu mağazada daha önce satılmış ürünler
Fiyatla İlgili Özellikler
Basit bir argüman, satışlardaki artış ve düşüşün doğrudan nedenlerinden birinin fiyat ve promosyonlar olduğudur. Fiyat, farklı kategoriler, alt kategoriler ve süper ürün kategorileri arasında ayrım yapmanın en iyi yollarından biridir.
Örneğin, her ürüne bir kategori ve bir alt kategori atandığını varsayarsak, aşağıdaki fiyat özellikleri oluşturulabilir:
- (Ortalama, Maks, Min, Medyan) kategorideki fiyatlar
- (Ortalama, Maks, Min, Medyan) alt kategorideki fiyatlar
- Hem kategorideki hem de alt kategorideki her bir istatistik arasındaki fark gibi bu istatistikler arasındaki karşılaştırmalar
Bu toplama, konuya göre birçok gruplama kullanılarak birkaç kez gerçekleştirilebilir (aylık talebi tahmin etmeyi amaçladığımızı varsayarsak), örneğin:
- Aylık, Mağaza, kategori
- Aylık, Mağaza, alt kategori
- Aylık, Mağaza, Ürün, kategori
- Aylık, Mağaza, Öğe, alt kategori
Ayrıca, fiyatların genel davranışını incelemek için Aylık gruplama dışında daha fazla özellik eklenebilir.
Stokla İlgili Özellikler
Bu, perakendeciler ve satış tahmincileri arasında çok yaygın değildir, ancak satış tahmin modellerinde çok fark yaratır. Stok veri kümeleri, esas olarak, her mağazada günlük olarak her ürünün envanter verilerine sahiptir. Bundan, her ürün için aylık ciro oranı elde etmek için bunu satış verileriyle birleştirebiliriz. Bu oran, bir ürünün stoğunun ne kadar hızlı tamamen satıldığını gösterir ve iki ana faydası vardır:
- Modelin mevcut envanter düzeyine göre satışları tahmin etmesine yardımcı olabilir.
- Ürünleri yavaş, orta ve hızlı hareket eden ürünler olarak kümelemek için bu değeri kullanmamıza yardımcı olabilir. Bu kümeleme, karar verme ve modelleme konusunda bize yardımcı olacaktır.
Bunun için satış verileriyle birlikte her ürün için günlük stok verilerine ihtiyacınız var ve ardından stok devir oranını aşağıdaki gibi hesaplayabilirsiniz:
İpucu: Bu toplamalar bir zaman aralığına göre yapılır. Örneğin, aylık satışları tahmin etmeye çalışıyorsak, İTO, aynı aydaki ortalama stok değeri üzerinden son aydaki toplam satışlar olarak hesaplanacaktır.
Satış Tahmini Verileri Fırsata Dönüştürebilir
Özetle, satış tahmini, doğru veri hatlarına sahip olmaları ve doğru özellik mühendisliği yöntemlerini kullanmaları koşuluyla, firmaların gelirlerini artırmasına ve kâr elde etmesine yardımcı olabilir. Bu makale, bu sorunun çözümünde her türlü verinin faydalı olabileceğini göstermek için bir denemeydi.
Her şirket, tahmin sorunları için yapay zekanın gerekli olup olmadığını araştırmalıdır ve böyle bir durumda, kendi satış tahmin sistemini oluşturmak için uzman yapay zeka mühendislerine ve makine öğrenimi mühendislerinden tavsiyelere ihtiyaç duyacaktır.
Bu satış tahmini tekniğini uygulamak isteyen bir şirket/perakendeciyseniz, başta günlük satışlar, günlük envanter ve günlük işlemler olmak üzere elinizden gelen tüm verileri toplayarak başlayın.
Bu verilere sahip olduğunuzda, gelirlerinizi artırmak ve stok yenileme stratejilerini optimize etmek için kullanabilirsiniz; bu, yukarıdaki birkaç örnekte gösterildiği gibi işletmenizin mevcut kaynaklarla mümkün olan en yüksek karı elde etmesine ve önde gelen perakendeciler tarafından kullanılan satış tahmini uygulamalarına izin verir. .
Referanslar:
veri kümesi
Finansal tahmin hakkında daha fazla okuma