불규칙한 간격으로 집계 된 데이터를 기반으로 예측하는 방법은 무엇입니까?


10

자동 판매기의 제품 판매를 예측하려고합니다. 문제는 기계가 불규칙한 간격으로 채워지고 매 채우기마다 기계의 마지막 채우기 이후 집계 된 판매량 만 기록 할 수 있다는 것입니다 (즉, 매일 판매 데이터가 없음). 따라서 기본적으로 불규칙한 간격으로 집계 된 판매에 대한 데이터가 있습니다. 간격은 보통 2 일에서 3 주 사이입니다. 다음은 하나의 자동 판매기와 하나의 제품에 대한 예제 데이터입니다.

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

현재의 순진 알고리즘은 지난 90 일 동안 판매 된 총 수량을 90으로 나누어 하루 평균 판매량을 계산하는 것입니다.

일일 판매 예측을 개선하는 방법을 알고 있습니까? 다음에 기계를 방문 할 때 판매 될 제품을 예측해야합니다. 데이터의 특성에 따라 일종의 지수 평활 알고리즘을 사용할 수 있습니까?

미리 감사드립니다!

업데이트 : 모든 답변과 의견에 감사드립니다. 좀 더 많은 맥락을 제시하려고 노력하겠습니다 (물론 비즈니스 사례-매우 간단합니다). 수백 대의 자판기가 있습니다. 매일 우리는 리필을 위해 방문 할 20 명을 결정해야합니다. 이를 위해 머신의 현재 상태를 예측하고 "빈"머신을 선택하려고합니다. 각 기계 및 제품에 대해 위에서 설명한 순진한 알고리즘을 사용하여 SPD (평균 일일 판매량)를 계산합니다. 그런 다음 SPD에 기계의 마지막 충전 이후 일수를 곱하면 결과는 예상 수량입니다.


흥미로운 질문이라고 생각합니다. 정확한 질문과 데이터 집합에 대한 나의 대답은 중요합니까? 더 많은 데이터를 얻습니다. 또한 자동 판매기의 용량이 무엇인지 아는 것이 유용하다고 생각합니다.
Adam

@Adam이 제품의 용량은 50 병입니다. 어쩌면 내 문제에 대한 설명이 명확하지 않을 수도 있습니다. 더 많은 컨텍스트를 제공하기 위해 약간 편집하려고합니다. 기본적으로 나는 일반적인 문제를 해결하는 방법에 대한 아이디어를 찾고 있으며 지금까지 모든 의견에 매우 감사합니다. 특정 데이터 세트는 데이터의 모양을 예로 제공합니다. 다른 자동 판매기의 경우 훨씬 더 오랜 기간 동안 데이터를 제공 할 수 있습니다.
Ivan Dimitrov

@IvanDimitrov : 데이터에서 두 번째 열은 정확히 무엇입니까?
Kyle Brandt

@KyleBrandt 열 2는 자동 판매기 마지막 방문 이후 판매 된 병의 수입니다. 따라서 맨 위 줄의 숫자 48은 17/02와 27/02 사이에 48 개의 병이 판매되었음을 의미합니다.
Ivan Dimitrov

답변:


11

비즈니스 문제에 집중하고,이를 해결하기위한 전략을 개발하고, 간단한 방법으로 그 전략을 구현해 봅시다. 나중에 노력을 기울이면 개선 될 수 있습니다.

비즈니스 문제는 물론, 이익을 극대화하는 것입니다. 여기서는 리필 기계 비용과 판매 손실 비용의 균형을 유지하여 수행됩니다. 현재의 제형에서, 기계를 재충전하는 비용은 고정되어있다 : 매일 20 개를 재충전 할 수있다. 따라서 판매 손실 비용은 기계가 비어있는 빈도에 따라 다릅니다.

이 문제에 대한 개념적 통계 모델 은 이전 데이터를 기반으로 각 기계의 비용을 추정 할 수있는 방법을 고안하여 얻을 수 있습니다. 예상오늘날 기계를 정비하지 않는 비용은 기계가 사용 된 속도와 시간이 다했을 가능성과 같습니다. 예를 들어, 오늘날 기계가 25 % 비었을 때 하루 평균 4 병을 판매하는 경우 예상 비용은 25 % * 4 = 1 병 판매 손실과 같습니다. (판매가 손실되면 무형의 비용이 발생한다는 사실을 잊지 말고 달러로 환산하십시오. 사람들은 빈 기계를보고, 의존하지 않는 법 등을 배웁니다. 기계의 위치에 따라이 비용을 조정할 수도 있습니다. 기계를 비우면 얼마 동안 무형 비용이 발생할 수 있습니다.) 기계를 리필하면 즉시 예상 손실을 0으로 재설정한다고 가정하는 것이 공정합니다. ..). 시간이 흐르면,

간단한 이 라인을 따라 통계 모델은 기계의 사용에 변동이 무작위로 나타나는 제안한다. 이것은 포아송 모델을 제안합니다 . 특히, 기계의 기본 일일 판매율이 병이고 기간 동안 판매 된 수는 매개 변수가 포아송 분포를 있습니다. (다른 모델은 판매 클러스터의 가능성을 처리하기 위해 공식화 될 수 있습니다. 이는 판매가 개별적이고 간헐적이며 서로 독립적이라고 가정합니다.)x θ xθxθx

이 예에서 관측 된 기간은 이고 해당 판매량은 . 가능성을 최대화하면 이 기계는 하루에 약 2 병을 판매하고 있습니다. 데이터 히스토리는 더 이상 복잡한 모델이 필요하다는 것을 제안하기에 충분하지 않습니다. 이것은 지금까지 관찰 된 내용에 대한 적절한 설명입니다.x=(7,7,7,13,11,9,8,7,8,10)θ = 1.8506y=(4,14,4,16,16,12,7,16,24,48)θ^=1.8506

실제 대 적합

빨간 점은 판매 순서를 보여줍니다. 파란색 점은 일반적인 판매율의 최대 가능성 추정치에 기반한 추정치입니다.

예상 판매율로 무장 한 후, 기계가 일 후 비어있을 가능성을 계산할 수 있습니다 . 다음 그림과 아래 예에서 50이됩니다). 예상 판매율을 곱하면 마지막 리필 이후 의 예상 일일 매출 손실 시간플롯이 표시됩니다 .t

시간에 따른 손실

당연히이 곡선은 일에 기계가 거의 다 떨어질 때 가장 가까운 시간에 상승 합니다. 그것이 우리의 이해에 추가하는 것은 실제로 그보다 일주일 일찍 상당한 상승이 시작된다는 것을 보여주는 것입니다. 다른 속도를 가진 다른 기계는 가파르게 또는 더 얕은 상승을 보일 것입니다. 그것은 유용한 정보가 될 것입니다.50/1.85=27

각 머신에 대해 이와 같은 차트 (2 백 개가있는 것으로 보임)를 고려하면 현재 예상되는 최대 손실이 발생한 20 대의 머신을 쉽게 식별 할 수 있습니다 . 서비스를 제공하는 것이 최적의 비즈니스 결정입니다. (각 기계에는 자체 예상 속도가 있으며 마지막 서비스시기에 따라 곡선을 따라 자체 점이 표시됩니다.) 실제로 아무도이 차트를 볼 필요가 없습니다. 간단한 프로그램이나 스프레드 시트로 자동화됩니다.

이것은 시작에 불과합니다. 시간이 지남에 따라 추가 데이터가이 간단한 모델에 대한 수정을 제안 할 수 있습니다. 주말 및 휴일 또는 기타 예상 판매 영향을 설명 할 수 있습니다. 주간주기 또는 다른 계절주기가있을 수 있습니다. 예측에 포함 할 장기 추세가있을 수 있습니다. 기계에서 예기치 않은 일회성 실행을 나타내는 외부 값을 추적하고 손실 추정 등에 이러한 가능성을 통합 할 수 있습니다. 그러나 일련의 판매 상관 관계에 대해 걱정할 필요가 있습니다. 그런 일을 일으키는 메커니즘의.

예, ML 추정치는 어떻게 얻습니까? 나는 수치 최적화 도구를 사용했지만 일반적으로 최근 기간 동안의 총 판매량을 기간의 길이로 나눔으로써 간단하게 접근 할 수 있습니다. 2011 년 12 월 9 일부터 2012 년 2 월 27 일까지 2011 년 2 월 27 일까지 판매 된 163 병인이 데이터의 경우, 하루에 병입니다. 충분히 가까이 사람이 바로 이러한 계산을 시작할 수 있도록, 구현하기 매우 간단합니다. (R과 Excel은 특히 Poisson CCDF를 쉽게 계산합니다. 1.8506θ^=1.871.8506

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

Excel 용 ( A2마지막 리필 이후 시간을 포함하는 셀 Theta이며 예상 일일 판매율)

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

R의 경우)

트렌드, 사이클 등을 포함하는 더 멋진 모델은 추정치에 포아송 회귀 분석을 사용해야합니다.

주의 : 열망하는 사람들 : 나는 예상 손실에서 불확실성에 대한 논의를 의도적으로 피하고 있습니다. 이를 처리하면 계산이 상당히 복잡해질 수 있습니다. 이러한 불확실성을 직접 사용하는 것이 결정에 상당한 가치를 부여하지는 않을 것으로 생각됩니다. 그러나 불확실성과 크기를 알고 있으면 유용 할 수 있습니다. 이는 두 번째 그림에서 오류 대역으로 표시 될 수 있습니다. 마지막으로, 나는 그 인물의 본질을 다시 강조하고 싶습니다. 직접적이고 명확한 비즈니스 의미를 가진 숫자를 나타냅니다. 즉, 예상 손실; 통계 전문가에게는 흥미가 있을지 모르지만 의사 결정자에게는 많은 소음이 될 수있는 주위의 신뢰 구간과 같은보다 추상적 인 것을 표시하지 않습니다 .θ


1
나에게 판매 / 이벤트가 서로 독립적이라는 가정은 시간이 지남에 따라 동일한 nachine에서 측정 한 측정치이므로 비논리적 인 것으로 보입니다. 접근 방식에 따라 레벨이 변경되었을 수있는 자동차 관련 판매 데이터를 어떻게 처리합니까? 궁금 해서요?
IrishStat

1
나는 아마도 "자가 상관"의 형태를 평가하고 다루는 길을 스케치했다고 생각합니다. 정기적으로 이격 된 데이터를 사용할 수 있더라도 전통적인 시계열 분석에서는 그러한 정보가 나타나지 않습니다. 시간적 상관 관계는 주별 또는 계절적주기와 같은 외부 요인의 상관 관계로 인해 발생합니다. 흥미로운 형태는 구매의 일시적 클러스터링 (예를 들어, 점심 직후 또는 주말)에서 발생할 수 있습니다. "수준의 순 변화"는 필요한 경우 추세 조정을 통해 처리 할 수 ​​있지만 단순히 실행 평균을 사용하면 자동으로 처리됩니다.
whuber

4

나는 보통 일반적인 시계열로 전환하는 첫 단계를 밟을 것이라고 생각합니다. 평균 90 일이 걸린다고합니다. 그보다 더 빈번한 데이터가 있기 때문에 각 관측치 사이의 날짜를 가져 와서 해당 기간 동안 판매 된 품목 수로 나누면 가지고있는 것을 최대한 활용하는 것이 더 합리적이라고 생각 합니다. 두 번째 열은)입니다.

면책 조항으로 나는 완전한 아마추어이므로 다음 코드를 통해 IrishStat와 같은 전문가의 조언을 원합니다 (예를 들어, 그는 ETS는 나쁜 모델이므로 장난감 예제로만 취급합니다). 이렇게하면 시간이 절약됩니다. 여기에 사용할 수있는 R 코드가 있습니다.

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

결과 플롯은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


내 응답을 읽었습니까? "실제 수요를 서비스 간격 간격으로 일 수로 나누어 수요를 요율로 변환하여이 문제를 해결했습니다." 당신이 모델을 가정하는 대신 유용한 모델을 식별했습니다. 최근 "비정상 요금"을 조정하는 것이 아니라 믿기 때문에 예측이 폭발적입니다.
IrishStat

2
@IrishStat : 예, 코드에 잘못된 모델이라고 말한 사실을 가리키는 의견이 있습니다. 일부 R 코드는 실험 할 기초를 제공함으로써 사람들을 도울 수 있다고 생각했습니다.
Kyle Brandt

1

"간헐적 수요 문제"가 있습니다. 우리는 실제 수요를 서비스 간격 간격으로 일 수로 나누어 수요를 요율로 전환함으로써이를 해결했습니다. 이 속도는 구간의 예측이 주어진 속도를 예측하기 위해 전달 함수로 모델링 될 수 있습니다. 이 예측 된 비율은 수요로 변환 될 수 있습니다. 개입 감지를 통해 속도의 구조적 이동을 감지하도록주의를 기울여야합니다. 인터넷 검색 "전송 함수 방법론을 사용한 간헐적 수요 모델링 방법"을 사용해보십시오. Croston 또는 Exponential Smoothing의 모델 추정 접근 방식이 매우 부족하여 매우 명확하게 제거하십시오.

추가 분석 :

Interval의 함수로 Rate를 모델링했을 때 다음을 얻었습니다. INTERVAL의 예측을 사용하여 과거의 방정식을 사용하면 rate를 예측할 수 있으며,이를 통해 수요를 예측할 수 있습니다. 이러한 종류의 모델을 사용하면 속도의 자동 회귀 구조를 통합 할 수있을뿐만 아니라 펄스, 레벨 시프트 및 / 또는 로컬 시간 추세를 속도로 허용 할 수 있습니다.

      MODEL COMPONENT       LAG    COEFF     STANDARD      P       T        

# (BOP) 오류 값 값

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

입력 시리즈 X1 간격

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

입력 시리즈 X2 I ~ P00002 12/03/11 펄스

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

입력 시리즈 X3 I ~ P00007 12/08/11 펄스

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

입력 시리즈 X4 I ~ P00010 12/11/11 펄스

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

1
나는 이것이 질문을 약간 잘못 이해한다고 생각한다. 그는 간헐적으로 수요가 없다. 그는 간헐적으로 수요를 관찰 했으며, 매일 일정한 기본 수요를 가정하는 것이 기쁘다. 실제로 전달 함수 접근 방식은 선형성 가정, 90 일의 창 및 공변량은 없지만 그가 여기서 시도하고있는 것으로 보입니다. 마지막 판독 이후 (외인) 일에 대한 FWIW 회귀 수요는 하루에 약 2.2 개의 항목을 요구하지만 그 추정치에 대한 불확실성이 높습니다.
공역 사전

@ConjugatePrior 그는 매일 실제 수요와 드문 간격으로 샘플을 관찰 할 수 없으므로 간헐적 인 수요 문제와 사실상 동일합니다. / 02; 2/27. 우리의 아이디어는 비율을 구간의 함수로 모델링하고 구간을 예측 한 다음 수요를 예측하는 것입니다.이 경우 심각하거나 불리한 단순 평균 비율을 얻는 구간의 함수로 수요를 모델링 한 것으로 보입니다. 3 개의 비정상 데이터 포인트에 의해 영향을받으며 자기 회귀 구조를 반영하지 않습니다.
IrishStat

2
판매가 계속 증가하거나 동일하게 유지 될 수 있기 때문에 (임의로 주식이 감소하거나 같은 수준으로 유지 될 수 있기 때문에) 무작위로 걸을 수는 없습니다. 또한 정확히 3 점이 특이 치라는 것을 어떻게 알았는지 잘 모르겠습니다. (BTW가 제안한 '분석'은 지속 불가능한 선형성 가정을 가진 자신의 일반화 된 버전 일 뿐이므로 개인적으로는 만족하지 않을 것입니다.)
켤레

@ConjugatePrior 간격의 함수 인 비율은 이전 비율에 크게 영향을 받았으며 세 가지 "비정상적인 비율"의 영향을받는 것으로 나타났습니다. 레벨 이동이 확인되지 않았습니다. 내가 말해야 할 것은 속도가 일정하지 않은 무작위 보행이므로 식별 가능한 추세가 없다는 것입니다.
IrishStat

1
@IrishStat 답변 주셔서 감사합니다. 전송 기능을 사용하여 간헐적 수요에 대해 읽겠습니다. 하나의 작은 수정 : 우리는 간격을 예측할 필요가 없습니다. 속도 예측에 따라 기계를 언제 방문해야하는지 결정해야합니다. 예를 들어 하나의 비즈니스 규칙은 "60 % 비어있을 때 컴퓨터 방문"
Ivan Dimitrov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.