การพัฒนารูปแบบอนุกรมเวลาที่เหมาะสมเพื่อทำนายยอดขายตามบันทึกเดือนที่ผ่านมา


12

ตอนนี้ฉันดำเนินธุรกิจออนไลน์มาสองปีติดต่อกันดังนั้นฉันจึงมีข้อมูลการขายรายเดือนเป็นเวลาประมาณสองปี ธุรกิจของฉันทุกเดือนได้รับผลกระทบอย่างแน่นอนจากการเปลี่ยนแปลงตามฤดูกาล (ทำได้ดีกว่าในวันคริสต์มาสเป็นต้น) และอาจมีปัจจัยอื่น ๆ ที่ฉันไม่ทราบ

เพื่อที่จะทำนายยอดขายในอนาคตได้ดีขึ้นและเพื่อวัดประสิทธิภาพของแคมเปญการขายของฉันหรือผลกระทบของคู่แข่งรายใหม่ฉันต้องการที่จะพัฒนารูปแบบอนุกรมเวลาที่เหมาะสมเพื่อคาดการณ์ข้อมูลการขายปัจจุบันของฉันในอนาคต นี่คือเมื่อฉันเปรียบเทียบผลลัพธ์ของการทำนายของฉันกับผลลัพธ์จริงฉันสามารถทดสอบประสิทธิภาพของแคมเปญการขายของฉันหรือผลกระทบของคู่แข่ง

คำถามของฉันคือเมื่อฉันมีข้อมูลการขาย 2 ปีมีอยู่แล้วฉันสามารถกำหนดรูปแบบอนุกรมเวลาทำนายสำหรับสิ่งนี้ได้หรือไม่

หมายเหตุ: ฉันสนใจแนวคิดพื้นหลังและทฤษฎีมากกว่าเครื่องมือกล่องดำ พูดถึงเครื่องมือฉันมี mathematica, matlab, R, Excel, Google Spreadsheet .... คุณตั้งชื่อมัน


คุณใช้ซอฟต์แวร์อะไร
Dimitriy V. Masterov

1
@ DimitriyV.Masterov ฉันมี Matlab / R / Excel / Mathematica ... คุณชื่อมัน จริงๆแล้วฉันสนใจในแนวคิดมากกว่าจะเขียนโค้ดจริง ๆ เอง
Graviton

คำตอบ:


14

ใช่มีวิธีทำเช่นนี้ ผู้คนทำให้การใช้ชีวิตของพวกเขาทำสิ่งนี้ ;-)

คุณกำลังมองหาการคาดการณ์สาเหตุ ดูหนังสือออนไลน์ฟรีเล่มนี้เกี่ยวกับการพยากรณ์เพื่อเรียนรู้เกี่ยวกับวิธีการพยากรณ์

คุณมีสองประเด็นสำคัญในมือของคุณที่คุณต้องจัดการกับ: ฤดูกาล (หรือโดยทั่วไปโครงสร้างอนุกรมเวลาอาจมีการตอบโต้อัตโนมัติ) ในมือข้างหนึ่งและผลกระทบเชิงสาเหตุเช่นการส่งเสริมการขายในมืออื่น ๆ บทที่ 8ในตำราเรียนด้านบนเกี่ยวข้องกับเนื้อหาอนุกรมเวลาในบริบทของ ARIMA ในขณะที่บทที่ 5เกี่ยวข้องกับเอฟเฟกต์เชิงสาเหตุ

มีความสุขมากพอที่จะแก้ไขปัญหาทั้งสองได้ด้วยการคำนวณ ARIMAX (X หมายถึง "ผลกระทบภายนอก" เช่นโมเดล ARIMA พร้อมเอฟเฟกต์ภายนอก) หรือการถดถอยด้วยข้อผิดพลาด ARIMA ดูโพสต์บล็อกของ Rob Hyndman ในหัวข้อ "The ARIMAX model muddle"เพื่อความแตกต่าง auto.arima()ฟังก์ชั่นในforecastแพคเกจ R จะพอดีกับการถดถอยมีข้อผิดพลาด ARIMA ลองมาดูตัวอย่างที่ฉันใช้ชุดข้อมูลมาตรฐานที่มีแนวโน้มและฤดูกาลและเพิ่ม "การส่งเสริม"

library(forecast)
AirPassengers # a built-in dataset
#      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 1949 112 118 132 129 121 135 148 148 136 119 104 118
# 1950 115 126 141 135 125 149 170 170 158 133 114 140
# 1951 145 150 178 163 172 178 199 199 184 162 146 166
# 1952 171 180 193 181 183 218 230 242 209 191 172 194
# 1953 196 196 236 235 229 243 264 272 237 211 180 201
# 1954 204 188 235 227 234 264 302 293 259 229 203 229
# 1955 242 233 267 269 270 315 364 347 312 274 237 278
# 1956 284 277 317 313 318 374 413 405 355 306 271 306
# 1957 315 301 356 348 355 422 465 467 404 347 305 336
# 1958 340 318 362 348 363 435 491 505 404 359 310 337
# 1959 360 342 406 396 420 472 548 559 463 407 362 405
# 1960 417 391 419 461 472 535 622 606 508 461 390 432

set.seed(1) # for reproducibility
promos <- rep(0,length(AirPassengers))
promos[sample(seq_along(AirPassengers),10)] <- 1
promos.future <- c(0,1,0,0,1,0,0,1,0,0,1,0)
AP.with.promos <- AirPassengers
AP.with.promos[promos==1] <- AP.with.promos[promos==1]+120

model <- auto.arima(AP.with.promos,xreg=promos)
summary(model) # examine the model - you'll see the estimated promo coefficient
# Series: AP.with.promos 
# ARIMA(0,1,1)(0,1,0)[12]                    

# Coefficients:
#           ma1    promos
#       -0.3099  122.2599
# s.e.   0.0947    2.2999

# sigma^2 estimated as 151.2:  log likelihood=-457.4
# AIC=920.79   AICc=920.98   BIC=929.42

# Training set error measures:
#                     ME     RMSE     MAE        MPE     MAPE      MASE         ACF1
# Training set 0.2682805 11.12974 8.24397 0.06139784 2.867274 0.1860814 0.0008326436

fcast <- forecast(model,xreg=promos.future,h=length(promos.future))
fcast
#          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
# Jan 1961       447.1516 431.3951 462.9081 423.0542 471.2490
# Feb 1961       543.4115 524.2670 562.5559 514.1326 572.6904
# Mar 1961       449.1516 427.1345 471.1687 415.4793 482.8239
# Apr 1961       491.1516 466.5956 515.7076 453.5964 528.7068
# May 1961       624.4115 597.5556 651.2674 583.3389 665.4841
# Jun 1961       565.1516 536.1777 594.1255 520.8399 609.4633
# Jul 1961       652.1516 621.2044 683.0988 604.8220 699.4812
# Aug 1961       758.4115 725.6095 791.2135 708.2452 808.5778
# Sep 1961       538.1516 503.5942 572.7090 485.3006 591.0026
# Oct 1961       491.1516 454.9237 527.3795 435.7459 546.5573
# Nov 1961       542.4115 504.5869 580.2361 484.5637 600.2593
# Dec 1961       462.1516 422.7950 501.5082 401.9608 522.3424
promos.ts <- ts(c(AP.with.promos,fcast$mean),
                  start=start(AirPassengers),frequency=frequency(AirPassengers))
promos.ts[c(promos,promos.future)==0] <- NA

plot(fcast)
points(promos.ts,pch=19,col="red")

ARIMAX

จุดสีแดงคือการส่งเสริมการขาย โดยค่าเริ่มต้นคุณจะได้รับช่วงการคาดคะเนเป็นสีเทา คุณสามารถป้อนหลาย regressors ในแบบจำลองของคุณผ่านxregพารามิเตอร์ซึ่งคุณควรทำถ้าคุณมีการส่งเสริมประเภทต่างๆ ที่มีลักษณะพิเศษแตกต่างกัน ทดลองเล็กน้อย

ฉันขอแนะนำให้ดูข้อมูลที่ละเอียดยิ่งกว่ารายเดือนหากคุณมีข้อมูลเช่นรายสัปดาห์ โดยเฉพาะอย่างยิ่งถ้าโปรโมชันของคุณไม่ทำงานเต็มเดือน คุณสามารถทำสิ่งนี้แยกต่างหากตามผลิตภัณฑ์อีกครั้งโดยเฉพาะอย่างยิ่งถ้าคุณส่งเสริมผลิตภัณฑ์ที่เฉพาะเจาะจงหรือในหมวดหมู่ทั้งหมด

อีกทางเลือกหนึ่งคือให้คุณสนใจแนวคิดมากกว่าโค้ดเพื่อดูการปรับให้เรียบแบบเอกซ์โปเนนเชียลและเปลี่ยนให้เหมาะกับความต้องการของคุณโดยการเพิ่มส่วนประกอบส่งเสริมการขายให้กับองค์ประกอบสามระดับฤดูกาลและเทรนด์มาตรฐาน คุณสามารถทำสิ่งต่าง ๆ ได้มากขึ้นด้วยการเอ็กซ์โปเนนเชียลสมูทติ้งมากกว่าการพยายามประเมินความเป็นไปได้สูงสุดของแบบจำลอง ARIMAX แต่การปรับให้เรียบอาจกลายเป็นฝันร้ายของการทำบัญชีหากคุณมีโปรโมชันหลายประเภท


1
แบบจำลอง ARIMA พร้อมโควาเรียตถูกกล่าวถึงในส่วนที่ 9 ของหนังสือ: www.otexts.org/fpp/9/1
Rob Hyndman

ขอบคุณ Rob ผมต้องการที่จะไปผ่านหนังสือบ่อยขึ้น ...
สเตฟาน Kolassa

ขอบคุณ @StephanKolassa! คำถามข้างเคียงฉันจะได้รับหนังสือที่คุณพูดถึงในโพสต์ข้างต้นในรูปแบบ mobi หรือ epub?
Graviton

1
@ Graviton: คำถามที่ดี ดีที่สุดที่จะถามผู้เขียน หนึ่งในนั้นคือ Rob Hyndman ที่แสดงความคิดเห็นข้างต้น
เตฟาน Kolassa

1
@Graviton ทำงานกับมัน ดูrobjhyndman.com/hyndsight/fpp-amazon
Rob Hyndman

4

ก่อนอื่นคุณไม่มีข้อมูลจำนวนมากที่จะเล่นด้วยการสังเกตเพียง 24 ครั้ง ในกรณีของคุณหมายความว่าคุณมีพารามิเตอร์สองสามอย่างที่จะประเมินได้อย่างน่าเชื่อถือ วิธีที่เป็นระบบมากที่สุดในการพยากรณ์คือการสร้างกระบวนการสร้างข้อมูล (DGP) คุณตั้งสมมติฐานว่ากระบวนการที่แท้จริงสำหรับการขายของคุณคืออะไรจากนั้นลองประเมินพารามิเตอร์ของมัน

พิจารณาโมเดลอนุกรมเวลาบริสุทธิ์ที่มี AR (1) DGP:นั่นคือยอดขายของคุณในเดือนนี้เป็นค่าเฉลี่ยถ่วงน้ำหนักของยอดขายเดือนที่แล้วบวกและคงที่ คุณมีพารามิเตอร์ 3 ตัว (ค่าสัมประสิทธิ์สองตัวและค่าความแปรปรวนข้อผิดพลาด) ซึ่งหมายความว่าประมาณ 8 ค่าต่อการสังเกต - ไม่ชัดเจนมากนักxเสื้อ=φxเสื้อ-1+

(1-L)(1-L12)xเสื้อ=xเสื้อ=+φ1xเสื้อ-1+φ12xเสื้อ-12-φ1φ12xR-13. สิ่งนี้จะเพิ่มพารามิเตอร์อีกหนึ่งตัวที่จะประมาณดังนั้นคุณสามารถลดการสังเกตได้ถึง 6 ข้อต่อพารามิเตอร์ซึ่งเป็นการยืดตัวที่แท้จริง

ใน Matlab รุ่นนี้มีการระบุเป็น arima('ARLags',1,'SARLags',12)

นี่คือการสมมติว่ายอดขายของคุณมีความเสถียรเช่นโดยทั่วไปจะไม่เติบโต

หากคุณคิดว่ายอดขายของคุณเพิ่มขึ้นคุณมีสองทางเลือกคือ: การเดินแบบสุ่ม (RW) และแนวโน้มเวลา

ใน Matlab RW ถูกระบุด้วย arima('D',1,'SARLags',12)

เห็นได้ชัดว่านี่เป็นเพียงตัวอย่างของ DGP ที่แตกต่างกัน สิ่งที่คุณคำนึงถึงจำนวนพารามิเตอร์ที่จะประเมิน ด้วยการสังเกต 24 แบบของคุณจะต้องง่ายมากพารามิเตอร์ 4 ตัว (รวมถึงความแปรปรวน)


0

นี่คือสิ่งที่คุณควรทำสองกราฟ:

  • ยอดขายเทียบกับเวลาตลอด 24 เดือน
  • ยอดขายเทียบกับเวลาในปีที่สองที่วางแผนไว้ด้านบนของปีแรก

มองที่พวกเขา. อธิบายวันที่ของโปรโมชั่นพิเศษหรือกิจกรรมการแข่งขันที่รู้จัก "ธันวาคม" มักจะค่อนข้างชัดเจน แต่เพิ่มบันทึกย่อถ้าช่วยโทรออก

ไปข้างหน้าและพอดีกับรุ่นอนุกรมเวลา - ทุกรุ่น (มีหลายร้อย) แบบจำลองอาจให้การคาดการณ์ที่ดีขึ้นเล็กน้อยสำหรับรอบระยะเวลาถัดไป (t + 1) กว่าการตัดสินใจของคุณ อย่างน้อยก็จะท้าทายการตัดสินของคุณ นอกเหนือจากช่วงเวลาถัดไป (t + n, n> 1) โมเดลอนุกรมเวลาใด ๆ จะอึ forget ดังนั้นลืมเกี่ยวกับการประเมินเชิงปริมาณประสิทธิผลของแคมเปญการขายหรือผลกระทบของคู่แข่ง หากคุณเปรียบเทียบยอดขายจริงกับการคาดการณ์คุณจะพบว่าการคาดการณ์นั้นไร้สาระ การทำนายอนาคตเป็นเรื่องยากและไม่มีวิธีใดเปลี่ยนแปลงความจริงพื้นฐาน

คุณจะพบว่ากราฟสองของคุณมีประโยชน์มากกว่า ศึกษาคนเหล่านั้นซักพักแล้วใช้เวลาที่เหลือคิดหาวิธีเพิ่มยอดขาย - นี่จะเป็นการใช้เวลาของคุณที่ทำกำไรได้มากกว่าที่พยายามทำแบบจำลองอนุกรมเวลา

†คุณมีความหวังมากขึ้นถ้าคุณสามารถสร้างแบบจำลองการทำนายตามตัวบ่งชี้ชั้นนำได้เช่นการขายบ้านในเดือนก่อนอาจเป็นประโยชน์ในการทำนายยอดขายของเฉดสีหน้าต่างในเดือนปัจจุบัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.