はじめに
最近は、小売業界もビッグデータやらAIが持て囃されていて、日々色々な相談が各部署からあります。
特に最近多いのが、店舗の部署から「来月の売上を予測して欲しい」「来週どれくらい売れれば良いと言えばいいのか」「来月追加で販促をやった方がいいか」といった将来の売上についてです。
以前は、前年同月比105%とかが目標だったのが、少子高齢化やらインバウンドやら異常気象やら、世の中変動が大きすぎて、前年同月比が役だたなくなってきています。
そこで、店舗ではいつも通りやっていたらどれくらい売れるのか・売れないのかを知っておいて、そこにイベントとか広告等で、いくら上乗せしていくかを考えていく基準にしたいというわけです。
何の分析がいいのか
私は今でこそデータを使う仕事をしていますが、バリバリの文系人間なので、統計の複雑な手法に詳しくありません。
それで、当初は、回帰分析で気象とか販促施策とか、周辺のイベントとかの情報を地道に入れて予測をしてみたのですが、精度が全く上がらない。。。
そんなときに、色々と調べてみると、株とかを予測するのに「時系列分析」っていうのがあるよと知りました。
時系列分析って何?
「全人類がわかる統計学」、「TV朝日の視聴率推移をSARIMAモデルで予測してみる」などを参考にしながら、私の理解で時系列分析を整理したいと思います。
(間違っていたらすみません。ぜひ難しい数式なしで、教えて下さい。。。)
1.時系列分析とは、過去の売上が予測変数に入ること
私が当初つくった回帰分析では、次のように売上を全く別の変数で説明しようとしていました。
売上 = a{1} * 気温 + a{2} * 販促費用 + ・・・
しかし、ある日の売上が1,000万円だとして、その翌日の売上はいくらでしょう?
100万円にはならないでしょう。逆に1億円にもならないでしょう。
たぶん、1,200万円とか800万円とか、前日の売上からそこまで大外しはしないだろうと考えられます。
そこで、次のように過去の売上を、説明変数につかっていくことで精度を上げていくというやり方です。
売上{n} = a{1} * 売上{n-1} + a{2} * 売上{n-2} + ・・・
これを、AR(自己回帰)と言うらしいです。
2.時系列分析とは、過去の誤差を考慮すること
1の自己回帰に対して、先月の売上が本来よりも高ければ、売上の先食いがあったと考えて、今月は売上が減る可能性を考慮するものです。
こちらは、次のように表すことができます。
売上{n} = b{1} * 誤差{n} + b{2} * 誤差{n-1} + ・・・
これを、MA(移動平均)と言うらしいです。
##3.時系列分析といっても、完全に同じ周期を繰り返すわけではない
周期が繰り返していれば簡単なのですが、そうで無いのが現実の時系列の厳しいところ。
それを、難しい言葉で「非定常過程」というらしいです。
短期的ではなく、中長期的なトレンドとして、上昇傾向だったり下降傾向だったりするのを考慮するということのようです。
この1~3をあわせて、ARIMA(Auto Regressive Integrated Moving Average)モデルと呼ぶそうです。
ARとMAが合体した感じが、カッコいいですね。
##4.時系列なので、季節性も考慮しないといけない
ここまでやっても、中々精度は上がりません。
でも、それは小売の人間なら分かっています。2月・9月は毎年売上が上がらないといった、季節性があるはずが、それらをここまで考慮していないんです。
季節性といっても、様々な周期があるように思います。
- 週の中の曜日 : 土日は、休日に買いだめが発生する店は売上が上がる
- 月の中の日 : 25日とか給料日後には、ちょっと高いものが売れて売上が上がる
- 年の中の月 : 上記の通り2,9月は売上が下がる
これらの周期も考慮していくことができるのが、SARIMAモデルというようです。
5.時系列以外の要素も考慮しないといけない
ここまで時系列の要素を見てきましたが、突発的な要素も組み込んでいきたいところです。
- 気象:雨が降るだけじゃなく、最近の異常気象もありますね
- イベント:店の近くで運動会やお祭りがあると、それだけで売上が大きくあがります
- 競合:ライバルの店が近くにできると、それ以降売上が10数~数10%の一定規模落ち込みます
これらの外部変数を考慮していくのが、ARIMAXモデルというようです。
これらをPythonで実現していくために参考にするサイト
-
Pythonによる状態空間モデル
ARIMAモデルに+データ解釈を加えたモデルを、状態空間モデルというようです -
時系列データの予測ライブラリ--PyFlux--
ARIMAやARIMAX、状態空間モデルを実装できるライブラリとしてPyFluxというものがあるみたいです -
RNNで来月の航空会社の乗客数を予測する
これらは、ニューラルネットワークっぽいですが
おわりに
今回は、文字ばかりですみません。
次回以降、実際に時系列分析を試していこうと思います。