過去1か月の記録に基づいて売上を予測するための適切な時系列モデルを開発する


12

今から2年連続でオンラインビジネスを営んでいるので、毎月の売上データが約2年あります。毎月の私のビジネスは、確かに季節変動(クリスマスなどのパフォーマンスが良い)と、おそらく私が気付いていない他のいくつかの要因の影響を受けています。

今後の売上をより正確に予測し、私の販売キャンペーンの効果、または新しい競合他社の影響を測定するために、適切な時系列モデルを開発して、現在の売上データを将来に推定できるようにしたいと考えています。これは、予測結果と実際の結果を比較するときに、販売キャンペーンの効果や競合他社の影響を定量的にテストできるようにするためです。

私の質問は、私には2年分の販売データがあることを考えると、とにかくこれについて予測時系列モデルを定式化できるかどうかです。

注:ブラックボックスツールではなく、背景の概念と理論にもっと興味があります。ツールと言えば、mathematica、matlab、R、Excel、Googleスプレッドシート...という名前です。


どのソフトウェアを使用していますか?
Dimitriy V.Masterov 2014

1
@ DimitriyV.Masterov、私はMatlab / R / Excel / Mathematicaを持っています...あなたはそれに名前を付けます。実際には、実際のコード自体を書くよりも、概念にもっと興味があります
Graviton

回答:


14

はい、これを行う方法があります。人々はこのようなことをやって生計を立てています;-)

因果関係の予測を探しています。予測に関するこの無料のオンライン教科書を見て、予測方法について学んでください。

対処する必要のある2つの重要な問題があります。1つは季節性(より一般的には、時系列構造、場合によっては自己回帰)、もう1つはプロモーションなどの因果的影響です。上記の教科書の第8章はARIMAのコンテキストで時系列のものを扱い、第5章は因果関係を扱います。

幸いにも、いわゆるARIMAX(Xは「外部効果」、つまり外部効果のあるARIMA)モデル、またはARIMAエラーのある回帰のいずれかを計算することで、両方の問題に対処できます。違いについては、「ARIMAXモデルマドル」に関するRob Hyndmanのブログ投稿を参照してください。Rパッケージのauto.arima()関数は、forecastARIMAエラーのある回帰に適合します。強い傾向と季節性を持つ標準データセットを取り上げ、「プロモーション」を追加する例を見てみましょう。

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

アリマックス

赤い点はプロモーションです。デフォルトでは、予測区間が灰色でプロットされます。xregパラメータを介してモデルに複数のリグレッサをフィードできます。これは、異なる効果を持つ異なるタイプのプロモーションがある場合に行う必要があります。少し実験してください。

毎週など、毎月よりも詳細なデータを確認することをお勧めします。特に、プロモーションが1か月間実行されない場合はもちろんです。これは、特に特定の製品を宣伝する場合、またはカテゴリ全体で行う場合は特に、製品ごとに個別に実行できます。

別の方法として、コードよりも概念に関心がある場合、指数平滑法を調べて、標準の3つのレベル、シーズン、トレンドコンポーネントにプロモーションコンポーネントを追加して、ニーズに合わせて変更することができます。ARIMAXモデルを最尤推定するよりも、指数平滑法を使用する方がはるかに多くのことができますが、複数の販売促進タイプがある場合、平滑化は簿記の悪夢に変わる可能性があります。


1
共変量を含むARIMAモデルについては、本のセクション9で説明されています。www.otexts.org/ fpp / 9/1
Rob Hyndman

ありがとう、ロブ。私は本を​​もっと頻繁に
読む

@StephanKolassaに感謝!余談ですが、上記の投稿で言及した本をmobi形式またはepub形式で入手できますか?
Graviton 2014

1
@Graviton:良い質問です。著者に質問するのが最善です。それらの1つは、上記でコメントしたRob Hyndmanです。
ステファンコラッサ2014

1
@Graviton。それに取り組んでいます。robjhyndman.com/hyndsight/fpp-amazonを
Rob Hyndman

4

最初に、操作するデータが多くなく、24の観測しかありません。あなたの場合、それはあなたが確実に推定するためのパラメータがほとんどないことを意味します。予測の最も体系的な方法は、データ生成プロセス(DGP)を考案することです。あなたはあなたの販売のための本当のプロセスが何であるかについて仮定をしてから、そのパラメータを推定しようとします。

xt=ϕxt1+c

(1L)(1L12)xt=cxt=c+ϕ1xt1+ϕ12xt12ϕ1ϕ12xr13。これにより、推定するパラメーターが1つ追加されるため、パラメーターごとに6つの観測値(実際のストレッチ)まで下がります。

Matlabでは、このモデルは次のように指定されています arima('ARLags',1,'SARLags',12)

これはあなたの売上が安定している、つまり一般に伸びていないことを前提としています。

売り上げが伸びていると思われる場合は、ランダムウォーク(RW)と時間トレンドの2つのオプションがあります。

MatlabではRWは以下で指定されます arima('D',1,'SARLags',12)

明らかに、これらは異なるDGPの例にすぎません。推定するパラメータの数を覚えておいてください。24の観測では、モデルは非常に単純でなければならず、最大で4つのパラメーター(分散を含む)でなければなりません。


0

2つのグラフを作成する必要があります。

  • 24か月全体の売上と時間
  • 初年度の上に2年目をプロットした売上と時間

それらを見てください。特別なプロモーションや既知の競争活動の日付に注釈を付けます。「12月」は通常はかなり明白ですが、それを呼び出すのに役立つ場合はメモを追加します。

先に進んで、時系列モデル-任意のモデル(数百あります)を適合させます。このモデルでは、次の期間(t + 1)の判断があなたの判断よりも少し良いかもしれません。少なくとも、それはあなたの判断に挑戦します。次の期間(t + n、n> 1)を超えると、どの時系列モデルもがらくたになります。実際の売上高を予測と比較すると、予測がくだらないことがわかります。未来を予測することは困難であり、その基本的な事実を変える方法はありません。

2つのグラフの方が便利です。しばらくそれらを研究してから、残りの時間を費やして、売り上げを増やす方法についてのアイデアを考えてください。これは、時系列モデルに適合させようとする時間のはるかに有益な使用法になります。

先行指標に基づいて予測モデルを作成できれば、より多くの希望があります。つまり、前月の住宅販売は、今月の窓の色合いの販売を予測するのに役立つ場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.