Làm thế nào để dự báo dựa trên dữ liệu tổng hợp trong khoảng thời gian không đều?


10

Tôi đang cố gắng dự báo doanh số bán sản phẩm trong máy bán hàng tự động. Vấn đề là máy được lấp đầy theo chu kỳ không đều và ở mỗi lần lấp đầy, chúng tôi chỉ có thể ghi lại doanh số tổng hợp kể từ lần lấp đầy cuối cùng của máy (tức là chúng tôi không có dữ liệu bán hàng hàng ngày). Vì vậy, về cơ bản chúng tôi có dữ liệu cho doanh số tổng hợp theo chu kỳ không đều. Khoảng thời gian thường là từ 2 ngày đến 3 tuần. Dưới đây là dữ liệu ví dụ cho một máy bán hàng tự động và một sản phẩm:

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

Thuật toán ngây thơ hiện tại của chúng tôi là tính toán doanh số trung bình mỗi ngày bằng cách chia tổng số lượng bán trong 90 ngày qua cho 90.

Bạn có biết làm thế nào để cải thiện dự báo doanh số mỗi ngày không? Tôi cần dự báo những gì sẽ được bán trong lần truy cập tiếp theo của máy. Có thể sử dụng một số loại thuật toán làm mịn theo cấp số nhân với bản chất của dữ liệu của chúng tôi?

Cảm ơn trước!

CẬP NHẬT: Cảm ơn rất nhiều cho tất cả các câu trả lời và ý kiến. Hãy để tôi thử cung cấp thêm một chút bối cảnh (trường hợp kinh doanh đằng sau câu hỏi - tất nhiên rất đơn giản). Chúng tôi có hàng trăm máy bán hàng tự động. Mỗi ngày chúng tôi phải quyết định 20 người trong số họ sẽ đến để nạp tiền. Để làm như vậy, chúng tôi đang cố gắng dự đoán tình trạng hiện tại của các máy là gì và để chọn 20 máy "trống rỗng" nhất. Đối với mỗi máy và sản phẩm, chúng tôi đang tính doanh số trung bình mỗi ngày (SPD) bằng thuật toán ngây thơ được mô tả ở trên. Sau đó, chúng tôi nhân SPD với số ngày kể từ lần lấp đầy cuối cùng của máy và kết quả là số lượng dự đoán được bán.


Tôi nghĩ đó là một câu hỏi thú vị. Câu trả lời của tôi cho câu hỏi và dữ liệu chính xác của bạn là: nó có vấn đề không? và: lấy thêm dữ liệu. Ngoài ra, tôi nghĩ thật hữu ích khi biết công suất của máy bán hàng tự động.
Adam

@Adam Dung lượng của sản phẩm này là 50 chai. Có lẽ mô tả của tôi về vấn đề không đủ rõ ràng. Tôi sẽ cố gắng chỉnh sửa nó một chút để cung cấp thêm ngữ cảnh. Về cơ bản tôi đang tìm kiếm ý tưởng làm thế nào để giải quyết vấn đề chung và tôi rất biết ơn về tất cả các ý kiến ​​cho đến nay. Các tập dữ liệu cụ thể được đưa ra giống như ví dụ dữ liệu trông như thế nào. Đối với các máy bán hàng tự động khác, tôi có thể cung cấp dữ liệu trong thời gian dài hơn nhiều.
Ivan Dimitrov

@IvanDimitrov: Chính xác thì cột hai trong dữ liệu của bạn là gì?
Kyle Brandt

@KyleBrandt Cột hai là số chai được bán kể từ lần truy cập cuối cùng vào máy bán hàng tự động. Vì vậy, số 48 ở hàng trên cùng có nghĩa là 48 chai đã được bán trong khoảng thời gian từ 17/02 đến 27/02
Ivan Dimitrov

Câu trả lời:


11

Hãy tập trung vào vấn đề kinh doanh, phát triển một chiến lược để giải quyết nó và bắt đầu thực hiện chiến lược đó một cách đơn giản. Sau đó, nó có thể được cải thiện nếu nỗ lực bảo đảm nó.

Các vấn đề kinh doanh là tối đa hóa lợi nhuận, tất nhiên. Điều đó được thực hiện ở đây bằng cách cân bằng chi phí cho việc nạp lại máy so với chi phí bán hàng bị mất. Trong công thức hiện tại của nó, chi phí nạp lại máy móc là cố định: 20 có thể được nạp lại mỗi ngày. Do đó, chi phí bán hàng bị mất phụ thuộc vào tần suất máy trống.

Một mô hình thống kê khái niệm cho vấn đề này có thể thu được bằng cách nghĩ ra một số cách để ước tính chi phí cho mỗi máy, dựa trên dữ liệu trước đó. Dự kiếnchi phí cho việc không bảo dưỡng máy ngày nay xấp xỉ bằng cơ hội nó đã hết thời gian sử dụng. Ví dụ: nếu một máy có 25% cơ hội trống ngày hôm nay và trung bình bán 4 chai mỗi ngày, chi phí dự kiến ​​của nó bằng 25% * 4 = 1 chai trong doanh số bị mất. (Dịch sang đô la như bạn muốn, không quên rằng một lần bán bị mất phát sinh chi phí vô hình: mọi người thấy một máy trống, họ học cách không dựa vào nó, v.v. Bạn thậm chí có thể điều chỉnh chi phí này theo vị trí của máy; Máy chạy trống trong một thời gian có thể phải chịu một số chi phí vô hình.) Thật công bằng khi cho rằng việc nạp lại máy sẽ ngay lập tức đặt lại mức lỗ dự kiến ​​về 0 - rất hiếm khi máy sẽ bị xóa mỗi ngày (bạn không muốn. ..). Khi thời gian trôi qua,

Một mô hình thống kê đơn giản dọc theo các dòng này đề xuất rằng các dao động trong sử dụng của máy có vẻ ngẫu nhiên. Điều này cho thấy một mô hình Poisson . Cụ thể, chúng tôi có thể khẳng định rằng một máy có tỷ lệ bán hàng hàng ngày của chai và số lượng được bán trong khoảng thời gian ngày có phân phối Poisson với tham số . (Các mô hình khác có thể được xây dựng để xử lý khả năng của các cụm bán hàng; mô hình này cho rằng doanh số là riêng lẻ, không liên tục và độc lập với nhau.)θxθx

Trong ví dụ hiện tại, thời lượng được quan sát là và doanh số tương ứng là . Tối đa hóa khả năng mang lại cho : máy này đã bán được khoảng hai chai mỗi ngày. Lịch sử dữ liệu không đủ dài để đề xuất rằng cần có bất kỳ mô hình phức tạp nào hơn; đây là một mô tả đầy đủ về những gì đã được quan sát cho đến nay.x=(7,7,7,13,11,9,8,7,8,10)y=(4,14,4,16,16,12,7,16,24,48)θ^=1.8506

Thực tế vs phù hợp

Các chấm đỏ hiển thị chuỗi bán hàng; các chấm màu xanh là ước tính dựa trên ước tính khả năng tối đa của tỷ lệ bán hàng điển hình.

Được trang bị một tỷ lệ bán hàng ước tính, chúng ta có thể tiếp tục tính toán khả năng máy có thể trống sau ngày: được cung cấp bởi chức năng phân phối tích lũy bổ sung (CCDF) của phân phối Poisson, được đánh giá theo công suất của máy (được cho là là 50 trong hình tiếp theo và các ví dụ dưới đây). Nhân với tỷ lệ bán hàng ước tính sẽ đưa ra một biểu đồ về doanh thu hàng ngày dự kiến so với thời gian kể từ lần nạp cuối cùng:t

Mất theo thời gian

Đương nhiên đường cong này đang tăng nhanh nhất gần thời điểm ngày khi máy có khả năng hết. Những gì nó thêm vào sự hiểu biết của chúng tôi là cho thấy rằng một sự gia tăng đáng kể thực sự bắt đầu sớm hơn một tuần so với điều đó. Các máy khác có mức giá khác sẽ tăng mạnh hơn hoặc nông hơn: đó sẽ là thông tin hữu ích.50/1.85=27

Đưa ra một biểu đồ như thế này cho mỗi máy (trong đó có vẻ như có vài trăm), bạn có thể dễ dàng xác định 20 máy hiện đang chịu tổn thất lớn nhất dự kiến: phục vụ chúng là quyết định kinh doanh tối ưu. (Lưu ý rằng mỗi máy sẽ có tỷ lệ ước tính riêng và sẽ ở điểm riêng dọc theo đường cong của nó, tùy thuộc vào thời điểm bảo dưỡng lần cuối.) Không ai thực sự phải xem các biểu đồ này: dễ dàng xác định các máy để phục vụ trên cơ sở này tự động với một chương trình đơn giản hoặc thậm chí với một bảng tính.

Điều này chỉ là khởi đầu. Theo thời gian, dữ liệu bổ sung có thể đề xuất sửa đổi cho mô hình đơn giản này: bạn có thể tính đến cuối tuần và ngày lễ hoặc các ảnh hưởng dự đoán khác về doanh số; có thể có một chu kỳ hàng tuần hoặc các chu kỳ theo mùa khác; có thể có xu hướng dài hạn để đưa vào dự báo. Bạn có thể muốn theo dõi các giá trị ngoại lai đại diện cho các lần chạy bất ngờ trên máy và kết hợp khả năng này trong các ước tính tổn thất, v.v. Tuy nhiên, tôi nghi ngờ rằng sẽ cần phải lo lắng nhiều về tương quan nối tiếp của doanh số: thật khó để nghĩ của bất kỳ cơ chế để gây ra một điều như vậy.

Ồ, vâng: làm thế nào để có được ước tính ML? Tôi đã sử dụng một trình tối ưu hóa số, nhưng nói chung, bạn sẽ tiến rất gần chỉ bằng cách chia tổng doanh số trong một khoảng thời gian gần đây cho độ dài của giai đoạn. Đối với những dữ liệu này, có 163 chai được bán từ ngày 12/9/2011 đến 27/2/2012, thời gian là 87 ngày: chai mỗi ngày. Đủ gần với và cực kỳ đơn giản để thực hiện, vì vậy bất kỳ ai cũng có thể bắt đầu các tính toán này ngay lập tức. (R và Excel, trong số những người khác, sẽ dễ dàng tính toán PoF CCDF: mô hình hóa các tính toán sau 1,8506θ^=1.871.8506

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

cho Excel ( A2là một ô chứa thời gian kể từ lần nạp cuối cùng và Thetalà tỷ lệ bán hàng ước tính hàng ngày) và

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

cho R.)

Các mô hình fancier (kết hợp xu hướng, chu kỳ, v.v.) sẽ cần sử dụng hồi quy Poisson cho ước tính của họ.

NB Dành cho người hâm mộ: Tôi cố tình tránh mọi cuộc thảo luận về sự không chắc chắn trong các tổn thất ước tính. Xử lý chúng có thể làm phức tạp đáng kể các tính toán. Tôi nghi ngờ rằng việc sử dụng trực tiếp những điều không chắc chắn này sẽ không thêm giá trị đáng kể vào quyết định. Tuy nhiên, nhận thức được sự không chắc chắn và kích thước của chúng có thể hữu ích; điều đó có thể được mô tả bằng các dải lỗi trong hình thứ hai. Cuối cùng, tôi chỉ muốn nhấn mạnh lại bản chất của con số đó: nó vẽ các con số có ý nghĩa kinh doanh trực tiếp và rõ ràng; cụ thể là tổn thất dự kiến; nó không vẽ ra những điều trừu tượng hơn, chẳng hạn như khoảng tin cậy xung quanh , có thể được nhà thống kê quan tâm nhưng sẽ gây ra nhiều tiếng ồn cho người ra quyết định.θ


1
Đối với tôi, giả định rằng doanh số / sự kiện độc lập với nhau sẽ có vẻ phi logic vì đây là những phép đo được thực hiện theo thời gian trên cùng một nachine. Cách tiếp cận của bạn sẽ đối phó với dữ liệu bán hàng tương quan tự động có thể có sự thay đổi về mức độ như thế nào? Chỉ tò mò?
IrishStat

1
Tôi tin rằng tôi đã phác thảo một lộ trình để đánh giá và xử lý các hình thức có khả năng "tự tương quan". Chúng sẽ không được biểu hiện như vậy trong phân tích chuỗi thời gian truyền thống, ngay cả khi dữ liệu cách đều đặn có sẵn. Tương quan tạm thời sẽ là kết quả của mối tương quan trong các yếu tố bên ngoài, chẳng hạn như chu kỳ hàng tuần hoặc theo mùa. Một hình thức thú vị sẽ xảy ra từ việc mua hàng theo thời gian (ví dụ, ngay sau bữa trưa hoặc vào cuối tuần). "Thay đổi thuần về mức độ" có thể được xử lý bằng cách điều chỉnh xu hướng, nếu cần thiết, nhưng chỉ cần sử dụng một phương tiện đang chạy sẽ tự động xử lý.
whuber

4

Tôi nghĩ bạn thường sẽ có bước đầu tiên để chuyển đổi thành một chuỗi thời gian thông thường. Bạn nói bạn mất trung bình 90 ngày. Vì bạn có dữ liệu thường xuyên hơn thế, tôi nghĩ sẽ hợp lý hơn khi sử dụng hầu hết những gì bạn có bằng cách lấy ngày giữa mỗi lần quan sát và chia cho số lượng vật phẩm được bán trong khoảng thời gian đó (giả sử đó là thứ của bạn cột thứ hai là).

Từ chối trách nhiệm, tôi là một người nghiệp dư hoàn toàn, vì vậy bạn muốn nghe lời khuyên của một chuyên gia như IrishStat về mã sau đây (ví dụ, anh ấy nói ETS là một mô hình xấu, vì vậy chỉ coi đây là một ví dụ về đồ chơi), nhưng hy vọng rằng điều này giúp bạn tiết kiệm thời gian, đây là một số mã R bạn có thể chơi với:

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))

Cốt truyện kết quả là:

nhập mô tả hình ảnh ở đây


Bạn có đọc phản hồi của tôi "Chúng tôi đã giải quyết điều này bằng cách chuyển đổi nhu cầu thành tỷ lệ bằng cách chia nhu cầu thực tế cho số ngày trong khoảng thời gian giữa dịch vụ". Thay vì giả định một mô hình như bạn, tôi đã xác định một mô hình hữu ích. Dự báo của bạn rất bùng nổ vì họ tin rằng "tỷ lệ bất thường" gần đây hơn là điều chỉnh cho chúng.
IrishStat

2
@IrishStat: Vâng, tôi thậm chí có một nhận xét trong mã của tôi chỉ ra thực tế rằng bạn nói đó là một mô hình xấu, tôi chỉ nghĩ rằng một số mã R có thể giúp mọi người bằng cách đưa ra một cơ sở để thử nghiệm.
Kyle Brandt

1

Những gì bạn có là một "Vấn đề nhu cầu không liên tục". Chúng tôi đã giải quyết điều này bằng cách chuyển đổi nhu cầu thành tỷ lệ bằng cách chia nhu cầu thực tế cho số ngày trong khoảng thời gian giữa dịch vụ. Tỷ lệ này sau đó có thể được mô hình hóa thành Hàm truyền để dự đoán tốc độ đưa ra dự đoán về khoảng thời gian. Tỷ lệ dự đoán này sau đó có thể được chuyển đổi thành một nhu cầu. Cần thận trọng để phát hiện sự thay đổi cấu trúc trong tỷ lệ thông qua Phát hiện can thiệp. Hãy thử googling "Phương pháp mô hình hóa nhu cầu không liên tục bằng phương pháp hàm truyền". Sray rất rõ ràng về các phương pháp tiếp cận giả định của Croston hoặc Smooth Smooth theo cấp số nhân vì chúng khá thiếu.

PHÂN TÍCH BỔ SUNG:

Khi tôi mô hình hóa Rate như là một hàm của Interval, tôi đã thu được như sau. Sử dụng dự đoán INTERVAL bằng cách sử dụng phương trình này qua phương trình này có thể dự đoán tỷ lệ, có thể được sử dụng để dự đoán nhu cầu. Loại mô hình này cho phép kết hợp cấu trúc tự động theo tỷ lệ cũng như cho phép các xung, mức dịch chuyển và / hoặc Xu hướng thời gian cục bộ theo tỷ lệ.

      MODEL COMPONENT       LAG    COEFF     STANDARD      P       T        

# (BOP) GIÁ TRỊ LRI GIÁ TRỊ

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

INPUT SERIES X1 INTERVAL

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

INPUT SERIES X2 I ~ P00002 12/03/11 PULSE

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

INPUT SERIES X3 I ~ P00007 12/08/11 PULSE

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

INPUT SERIES X4 I ~ P00010 12/11/11 PULSE

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

1
Tôi nghĩ điều này hơi hiểu sai câu hỏi: anh ta không có nhu cầu không liên tục, anh ta có nhu cầu quan sát không liên tục , và rõ ràng anh ta rất vui khi nhận được nhu cầu cơ bản liên tục mỗi ngày. Thật vậy, cách tiếp cận hàm truyền có vẻ rộng rãi là cách anh ta đang thử ở đây, mặc dù với giả định tuyến tính, cửa sổ 90 ngày và không có đồng biến. FWIW hồi quy nhu cầu so với những ngày (ngoại sinh) kể từ lần đọc trước đưa ra khoảng 2,2 mặt hàng được yêu cầu mỗi ngày, nhưng độ không chắc chắn cao xung quanh ước tính đó.
liên hợp chiến

@ConjugateP Warrior Anh ấy không thể quan sát nhu cầu thực tế mỗi ngày và các mẫu trong các khoảng thời gian không thường xuyên, do đó thực tế tương đương với một vấn đề nhu cầu không liên tục. "Tỷ lệ" có thể được mô tả là một bước đi ngẫu nhiên với 3 ngoại lệ (xung) vào lúc 12/16; 2 / 02; 2/27. Ý tưởng của chúng tôi ở đây là mô hình hóa tỷ lệ như là một hàm của khoảng, sau đó dự đoán khoảng và từ đó dự đoán nhu cầu. Bạn dường như đã mô hình hóa nhu cầu như một hàm của khoảng lấy tỷ lệ trung bình đơn giản trong trường hợp này là nghiêm trọng / bất lợi ảnh hưởng bởi 3 điểm dữ liệu dị thường & không phản ánh cấu trúc tự phát.
IrishStat

2
Chắc chắn đó không thể là một bước đi ngẫu nhiên vì doanh số chỉ có thể tăng hoặc giữ nguyên (tương đương cổ phiếu chỉ có thể giảm hoặc giữ nguyên mức) - một cái gì đó giống như một quá trình đổi mới. Ngoài ra tôi không chắc làm thế nào bạn nhận ra rằng chính xác 3 điểm là ngoại lệ. (BTW, 'phân tích' tôi đề xuất chỉ là một phiên bản tổng quát của riêng anh ta, với giả định tuyến tính không bền vững, vì vậy cá nhân tôi sẽ không hài lòng với nó.)
liên hợp chiến binh

@ConjugateP Warrior Tỷ lệ như là một hàm của khoảng cho thấy tỷ lệ này phụ thuộc rất nhiều vào tỷ lệ trước đó và cũng bị ảnh hưởng bởi ba "tỷ lệ bất thường". Không có sự thay đổi cấp độ đã được xác định. Điều tôi nên nói là tỷ lệ là một bước đi ngẫu nhiên không có hằng số do đó không có xu hướng rõ rệt.
IrishStat

1
@IrishStat Cảm ơn rất nhiều vì câu trả lời. Tôi sẽ đọc về Nhu cầu không liên tục bằng chức năng Chuyển. Một điều chỉnh nhỏ: Chúng ta không phải dự đoán INTERVAL. Chúng tôi phải quyết định khi nào đến thăm máy dựa trên dự đoán của tỷ lệ. Ví dụ: một quy tắc kinh doanh có thể là "truy cập vào máy khi nó trống 60%"
Ivan Dimitrov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.