Düzensiz aralıklardaki toplu verilere dayanarak nasıl tahmin yapılır?


10

Otomattaki ürünlerin satışını tahmin etmeye çalışıyorum. Sorun, makinenin düzensiz aralıklarla doldurulması ve her dolumda, makinenin son dolumundan bu yana toplu satışları kaydedebilmemizdir (yani günlük satış verilerine sahip değiliz). Temelde, düzensiz aralıklarla toplu satışlar için verilerimiz var. Aralıklar genellikle 2 gün ile 3 hafta arasındadır. Bir satış makinesi ve bir ürün için örnek veriler:

27/02/2012 48
17/02/2012 24
09/02/2012 16
02/02/2012 7
25/01/2012 12
16/01/2012 16
05/01/2012 16
23/12/2011 4
16/12/2011 14
09/12/2011 4
02/12/2011 2

Mevcut saf algoritmamız, son 90 gün içinde satılan toplam miktarı 90'a bölerek günlük ortalama satışları hesaplamaktır.

Günlük satış tahminlerini nasıl geliştireceğiniz hakkında bir fikriniz var mı? Makinenin bir sonraki ziyaretinde ne satılacağını tahmin etmem gerekiyor. Verilerimizin doğası gereği bir tür üstel yumuşatma algoritması kullanmak mümkün müdür?

Şimdiden teşekkürler!

GÜNCELLEME: Tüm cevaplar ve yorumlar için çok teşekkürler. Biraz daha bağlam vermeye çalışalım (sorunun arkasındaki iş durumu - elbette çok basitleştirilmiş). Yüzlerce otomatımız var. Her gün hangi 20 tanesinin yeniden doldurulması için ziyaret edileceğine karar vermeliyiz. Bunu yapmak için, makinelerin mevcut durumunun ne olduğunu tahmin etmeye ve "en boş" 20 makineyi seçmeye çalışıyoruz. Her makine ve ürün için, yukarıda tarif edilen saf algoritmayı kullanarak günlük ortalama satışları (SPD) hesaplıyoruz. Daha sonra SPD'yi makinenin son dolumundan bu yana geçen gün sayısı ile çarparız ve sonuç, tahmini satış miktarıdır.


Bence bu ilginç bir soru. Tam soru ve veri setinize cevabım: önemli mi? ve: daha fazla veri alın. Ayrıca, otomat için kapasitenin ne olduğunu bilmek yararlı olur.
Adam

@Adam Bu ürünün kapasitesi 50 şişedir. Belki problemle ilgili açıklamam yeterince açık değil. Daha fazla bağlam vermek için biraz düzenlemeye çalışacağım. Temel olarak genel sorunun nasıl çözüleceğine dair fikirler arıyorum ve şimdiye kadarki tüm yorumlar için çok minnettarım. Belirli veri kümesi, verilerin nasıl göründüğüne örnek olarak verilmiştir. Diğer otomatlar için daha uzun süre veri sağlayabilirim.
Ivan Dimitrov

@IvanDimitrov: Verilerinizdeki ikinci sütun tam olarak nedir?
Kyle Brandt

@KyleBrandt Sütun iki, otomata son ziyaretten bu yana satılan şişe sayısıdır. Böylece, üst sıradaki 48 sayısı, 17/02 ve 27/02 arasında 48 şişenin satıldığı anlamına gelir
Ivan Dimitrov

Yanıtlar:


11

İş sorununa odaklanalım, bunu ele almak için bir strateji geliştirelim ve bu stratejiyi basit bir şekilde uygulamaya başlayalım. Daha sonra, çaba gerektirdiği takdirde geliştirilebilir.

İş sorunu tabii ki, kârlarını maksimize etmektir. Burada, dolum makinelerinin maliyetleri, kayıp satışların maliyetleri ile dengelenerek yapılır. Mevcut formülasyonunda, makinelerin yeniden doldurulması maliyetleri sabittir: her gün 20 adet yeniden doldurulabilir. Kayıp satışların maliyeti bu nedenle makinelerin boş kalma sıklığına bağlıdır.

Bu soruna ilişkin kavramsal bir istatistiksel model , önceki verilere dayanarak her bir makinenin maliyetini tahmin etmek için bir yol tasarlanarak elde edilebilir. beklenenBugün bir makineye bakım yapmamanın maliyeti, yaklaşık olarak kullanılma hızının çarpma olasılığına eşittir. Örneğin, bir makinenin bugün% 25 boş olma şansı varsa ve ortalama günde 4 şişe satıyorsa, beklenen maliyeti, kayıp satışlarda% 25 * 4 = 1 şişeye eşittir. (Kaybedilen bir satışın maddi olmayan maliyetler içerdiğini unutmadan, bunu dolara çevirin: insanlar boş bir makine görüyorlar, ona güvenmemeyi öğreniyorlar, vb. Bu maliyeti bir makinenin konumuna göre ayarlayabilirsiniz; biraz belirsiz makinelerin bir süre boş kalması birkaç maddi olmayan maliyete neden olabilir.) Bir makinenin yeniden doldurulmasının, beklenen kaybı hemen sıfırlayacağını varsaymak doğrudur - bir makinenin her gün boşaltılması nadirdir (istemezsiniz). ..). Zaman geçtikçe,

Bir basit bu satırlar boyunca istatistiksel model makinenin kullanımında dalgalanmalar rastgele göründüğünü önermektedir. Bu bir Poisson modeli önermektedir . Spesifik olarak, bir makine bir temel günlük satış oranına sahip olduğunu varsaymak olabilir şişe ve süresi bir süre içerisinde satılan sayısı, bu x gün parametre sahip bir Poisson dağılımına sahip θ x . (Satış kümeleri olasılığını ele almak için diğer modeller formüle edilebilir; bu, satışların bireysel, aralıklı ve birbirinden bağımsız olduğunu varsayar.)θxθx

x=(7,7,7,13,11,9,8,7,8,10)y=(4,14,4,16,16,12,7,16,24,48)θ^=1,8506

Gerçek ve uygun

Kırmızı noktalar satış sırasını gösterir; mavi noktalar, tipik satış oranının maksimum olabilirlik tahminine dayalı tahminlerdir.

t

Zaman içindeki kayıp

50/1.85=27

Her makine için böyle bir grafik verildiğinde (birkaç yüz olduğu anlaşılıyor), şu anda beklenen en büyük kaybı yaşayan 20 makineyi kolayca tanımlayabilirsiniz: onlara hizmet vermek en uygun iş kararıdır. (Her bir makinenin kendi tahmini hızına sahip olacağını ve en son ne zaman hizmet edildiğine bağlı olarak eğrisi boyunca kendi noktasında olacağını unutmayın.) Kimse şu çizelgelere bakmak zorunda değildir: bu temelde hizmet verecek makineleri tanımlamak kolayca basit bir programla veya hatta bir elektronik tabloyla otomatikleştirilebilir.

Bu sadece başlangıç. Zamanla, ek veriler bu basit modelde değişiklik yapılmasını önerebilir: hafta sonları ve tatil günleri veya satışlar üzerindeki diğer beklenen etkileri hesaba katabilirsiniz; bir haftalık döngü veya başka mevsimsel döngüler olabilir; tahminlere dahil edilmesi gereken uzun vadeli eğilimler olabilir. Makinelerde beklenmedik bir kerelik çalışmaları temsil eden dış değerleri izlemek ve bu olasılığı kayıp tahminlerine, vb. Dahil etmek isteyebilirsiniz. böyle bir şeye neden olacak herhangi bir mekanizma.

θ^=1.871,8506

1-POISSON(50, Theta * A2, TRUE)

Excel için ( A2son dolumdan bu yana geçen zamanı içeren bir hücredir ve Thetatahmini günlük satış oranıdır) ve

1 - ppois(50, lambda = (x * theta))

R. için)

Daha ince modellerin (trendleri, döngüleri vb. İçeren) tahminleri için Poisson regresyonunu kullanması gerekecektir.

θ


1
Bana göre, satışların / olayların birbirinden bağımsız olduğu varsayımı, bunlar aynı nachine'de zaman içinde alınan ölçümler olduğu için mantıksız görünecektir. Yaklaşımınız, seviyede bir değişiklik olmuş olabilecek otomatik korelasyonlu satış verileriyle nasıl başa çıkacaktı? Sadece merak ?
IrishStat

1
Muhtemelen "otokorelasyon" biçimlerini değerlendirmek ve bunlarla başa çıkmak için bir yol çizdiğime inanıyorum. Düzenli aralıklı veriler mevcut olsa bile, geleneksel zaman serileri analizinde bu şekilde ortaya çıkmazlar. Zamansal korelasyon, haftalık veya mevsimsel döngüler gibi dış faktörlerdeki korelasyondan kaynaklanır. Alımların zamansal kümelenmesinden (ör. Öğle yemeğinden hemen sonra veya hafta sonları) ilginç bir form ortaya çıkabilir. "Net seviye değişimleri" gerektiğinde trend uydurma ile halledilebilir, ancak basitçe hareketli bir ortalama kullanmak bunu otomatik olarak halleder.
whuber

4

Genellikle normal bir zaman serisine geçmenin ilk adımına sahip olacağınızı düşünüyorum. Ortalama 90 gün sürdüğünü söyledin. Bundan daha sık veriye sahip olduğunuzdan, her gözlem arasındaki günleri alıp o dönem için satılan eşya sayısına bölerek sahip olduğunuz şeylerin çoğunu kullanmanın daha mantıklı olduğunu düşünüyorum ( ikinci sütun).

Bir feragatname olarak tamamen amatörüm, bu yüzden aşağıdaki kod üzerinden IrishStat gibi bir uzmanın tavsiyesini almak istersiniz (örneğin, ETS'nin kötü bir model olduğunu söyledi, bu yüzden bunu sadece bir oyuncak örneği olarak ele alın) Bu size biraz zaman kazandırır, işte oynayabileceğiniz bazı R kodları:

library("xts")
library("forecast")

x = read.table(text="27/02/2012 48
17/02/2012 24
09/02/2012 16
02/02/2012 7
25/01/2012 12
16/01/2012 16
05/01/2012 16
23/12/2011 4
16/12/2011 14
09/12/2011 4
02/12/2011 2")

#Convert the data into an XTS object which works with irregular time series 
x.xts = xts(x[,2], as.POSIXct(x[,1], format="%d/%m/%Y"))

#Conver to a daily rate by taking the observed data and dividing it by 
#the number of days between observations
daily_rate <- lag(x.xts) / diff(index(x.xts))

#Generate a daily time series for the dates
dummy_dates <- seq(from=index(x.xts)[1], to=tail(index(x.xts), 1), by="day")

#Combine daily series with observered daily rate
m.xts <- merge(daily_rate, dummy_dates)

#Interpolate the daily sales -- kind of evil because we "invent" data
m.xts.interpolate <- na.approx(m.xts)

#Convert to regular time series
m.ts <- ts(m.xts.interpolate, freq=365, start=c(2011, 336))
#Clean up dimnames in case of stl forecast (just an R thing when converting from dataframes)
dim(m.ts) <- NULL

#Fit TS to an ETS model (Rudely ignoring IrishStat's advice that it is a bad model, but this is just an example)
fit <- ets(m.ts)

#Forecast and Plot
plot(forecast(fit, h=30))

Ortaya çıkan grafik şöyledir:

resim açıklamasını buraya girin


"Gerçek talebi servis arasındaki aralıktaki gün sayısına bölerek talebi bir orana dönüştürerek bunu çözdük". Bir modeli olduğu gibi varsaymak yerine, yararlı bir model belirledim. Tahminleriniz son zamanlarda gerçekleşen "anormal oranlara" inanmaktansa, patlayıcıdır.
IrishStat

2
@IrishStat: Evet, kodumda kötü bir model olduğunu söylediğinize işaret eden bir yorum bile var, sadece bazı R kodlarının denemek için bir temel vererek insanlara yardımcı olabileceğini düşündüm.
Kyle Brandt

1

Sahip olduğunuz şey bir "Aralıklı Talep Sorunu". Bunu, fiili talebi servisler arasındaki aralıktaki gün sayısına bölerek talebi bir orana dönüştürerek çözdük. Bu oran daha sonra, aralığın tahmini verilen bir oranı tahmin etmek için bir Transfer Fonksiyonu olarak modellenebilir. Bu tahmin edilen oran daha sonra bir talebe dönüştürülebilir. Müdahale Tespiti ile hızdaki yapısal değişimleri tespit etmeye özen gösterilmelidir. "Bir Aktarım işlevi metodolojisi kullanarak Aralıklı Talep modelleme yaklaşımı" konusunu deneyin. Sray, oldukça yetersiz oldukları için Croston veya Üstel Düzeltme modelinin varsayımsal yaklaşımlarından çok açıktır.

EK ANALİZ:

Rate'i bir Aralık fonksiyonu olarak modellediğimde aşağıdakileri elde ettim. Bu denklemin geçmişini kullanarak bir INTERVAL tahmini kullanarak oranı tahmin edebilir, bu da talebi tahmin etmek için kullanılabilir. Bu tür bir model, orandaki otoregresif yapının dahil edilmesinin yanı sıra, hızda Bakliyat, Seviye Kaymaları ve / veya Yerel Zaman Eğilimleri'ne izin verir.

      MODEL COMPONENT       LAG    COEFF     STANDARD      P       T        

# (BOP) HATA DEĞERİ DEĞERİ

 Differencing                  1                                            
1CONSTANT                          .295       .840E-01   .0246     3.51

GİRİŞ SERİSİ X1 ARALIK

 Differencing                  1                                            
2Omega (input) -Factor #  1    0   .685E-01   .346E-01   .1193     1.98

GİRİŞ SERİSİ X2 I ~ P00002 12/03/11 PULSE

 Differencing                  1                                            
3Omega (input) -Factor #  2    0   1.43       .168       .0010     8.52

GİRİŞ SERİSİ X3 I ~ P00007 12/08/11 PULSE

 Differencing                  1                                            
4Omega (input) -Factor #  3    0  -.935       .168       .0051    -5.57

GİRİŞ SERİSİ X4 I ~ P00010 12/11/11 PULSE

 Differencing                  1                                            
5Omega (input) -Factor #  4    0   1.37       .260       .0062     5.27

1
Bunun soruyu biraz yanlış anladığını düşünüyorum: aralıklı olarak talebi gözlemlediği aralıklı bir talebi yok ve her gün sürekli olarak altta yatan talebi kabul ettiği için mutlu. Aslında, transfer fonksiyonu yaklaşımı, doğrusallık varsayımı, 90 günlük bir pencere ve ortak değişkenler olmasa da, burada denediği yaklaşım gibi görünüyor. FWIW, son okumadan bu yana (eksojen) günlere karşı gerileyen talep, günde yaklaşık 2.2 madde talep ediyor, ancak bu tahmin etrafında yüksek belirsizlik sağlıyor.
konjugateprior

@ConjugatePrior Güncel talebi ve örnekleri sık aralıklarla gözlemleyemiyor, bu nedenle aralıklı bir talep sorununa fiili bir eşdeğer. "Oranı" 12/16; 3 istisna (darbeler) ile rastgele bir yürüyüş olarak nitelendirilebilir; 2 / 02; 2/27. Buradaki fikrimiz, hızı aralığın bir fonksiyonu olarak modellemek, daha sonra aralığı tahmin etmek ve ardından talebi tahmin etmektir. Talebi, bu durumda ciddi / olumsuz olan basit ortalama oranı elde eden aralığın bir fonksiyonu olarak modellemişsiniz. 3 anomolous veri noktasından etkilenir ve otoregresif yapıyı yansıtmaz.
IrishStat

2
Şüphesiz bu rastgele bir yürüyüş olamaz çünkü satışlar sadece yükselebilir veya aynı kalabilir (eşdeğer hisse senetleri sadece düşebilir veya aynı seviyede kalabilir) - daha çok bir yenileme süreci gibi. Ayrıca tam olarak 3 puanın aykırı olduğunu nasıl anladığınızdan emin değilim. (BTW, önerdiğim 'analiz', sürdürülemez bir doğrusallık varsayımı ile sadece kendi genelleştirilmiş bir versiyonudur, bu yüzden şahsen onunla yetinmeyeceğim.)
eşlenik

@ConjugatePrior Aralığın bir fonksiyonu olarak oran, oranın önceki oranlara güçlü bir şekilde bağlı olduğunu ve ayrıca üç "olağandışı oran" dan etkilendiğini gösterdi. Seviye kayması tespit edilmedi. Söylemeliydim, oranın sabit olmadan rastgele bir yürüyüş olduğu, dolayısıyla ayırt edilebilir bir eğilim olmadığıydı.
IrishStat

1
@IrishStat Yanıt için çok teşekkürler. Bir Transfer işlevi kullanarak Aralıklı Talep hakkında bilgi vereceğim. Küçük bir düzeltme: INTERVAL'ı tahmin etmek zorunda değiliz. Oranın tahminine göre makineyi ne zaman ziyaret edeceğimize karar vermeliyiz. Örneğin, bir iş kuralı "% 60 boşken makineyi ziyaret edin" olabilir
Ivan Dimitrov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.