🧮
売上予測入門 第一回
まえがき
この記事では、データサイエンスを使った小売業における売上予測について学ぶことができます。
確率的売上予測
フェズのチーフデータサイエンティストの松﨑です。日々、売上データを予測しております。
「ある商品が明日何個売れるか」を、データサイエンスで予測することはできると思いますか?
答えは、「部分的にしか出来ない」です。
“部分的”というのは、売上が予測可能部分と不可能部分に分かれる、ということです。
具体的に何が予測可能で、何が予測不可能なのかを見ていきましょう。
予測可能な例は、明日何個売れるかの「期待値」です。例えば「明日は10個ぐらい売れるんじゃないの」という言明は、予測であると言えます。予測値には「^(ハット)」をつけます。
しかし、明日何が起こるかは分かりませんから、正確には「確率的な」言明です。
明日大規模停電が起きたら売り上げは0個になってしまいます。
このように期待値はもちろん予測可能ですが、予測可能なものはもっとたくさんあります。
実際に売れる個数をXとおくと、Xは整数値確率変数であるといえます。
そして、Xは10個にも20個にも0個にもなりえます。その確率をP(事象)と書きます。
ですから、予測とは、単一の値μを予測することではなく、Xについて出来る限り詳しく知ることなのです。
さて、「何が予測可能か」の答えは、「PMFのパラメーター」というものです。そして「何が予測不可能か」の答えは、「残差ノイズ」です。
Pを縦軸にとり、Xを横軸にとったグラフを確率質量関数(かくりつしつりょうかんすう、英: probability mass function, PMF)と言います。例えば、日々の売上の頻度表を作り、各成分を頻度の和で割れば、PMFになりえます。
上のPMFは無秩序すぎますが、PMFはきれいなカーブで表せることがあります。きれいなカーブは、シンプルなパラメーターで表せることがあります。
このカーブは二項分布というもので、たったひとつのパラメーターで表せる、最も単純な例です。
予測可能部分 〜二項分布の場合〜
二項分布が活躍する例を見ましょう。
1日の売上はお客様ひとりひとりの売上の総和です。ここでは、ある商品を、全てのお客様が等確率で買う場合を考察しましょう。
レジをお客様が次々と通過していきます。1回1回よく見ますと、売れている時(1)も、売れていない時(0)もあります。
たった23人のデータで乱数ですから、次の数字Xは確率的にしか分かりません。
念のためですが、現実には、「ある商品を、全てのお客様が等確率で買う」などということはまず起こりえません。しかし、二項分布をマスターしなければより複雑な売上予測は不可能です。
このToy(おもちゃ)モデルは、歪んで表が出る確率が変化したコインを複数回投げることに等しいので、ベントコインモデルと呼ばれることがあります。
1つのレジを、ある日の営業時間内にちょうど1000人のお客様が通過したとします。この日の売り上げが8個だったとします。この1000人あたりの購買数を、PI値(purchase index)といいます。
ですから、問題が「次のXを当てよ」であれば、「X=0」と答えれば99.2%の確率で当たるわけです。面白くもなんともないですね。
問題は「ある商品が明日何個売れるか」でした。明日も1000人来るとすれば、その確率は「1000回中n回X=1となる確率」ですから、二項分布になります。
「ある商品が明日何個売れるか」を求める方法は、「売り上げをシミュレーションする」です。そのために、このPMFを使います。
先程の例ではPI=8としましたが、実際には正確に知ることは出来ません。今のところ前述の、今日の23人の売上しかわからないとしましょう。23人中5人が買っているというデータです。このままいけば、1000人あたりでは、217人が買うことになりそうです。すなわちPI=217。はたしてこれは本当でしょうか。
シミュレーターを作るには、がわかれば十分です。しかし、神様であれば「真の」がわかりますが、人間にはは確率的にしかわからないわけです。
はデータと整合しなくてはならないので、制約があります。すなわち、データによって確率は変わるものです。これを条件付き確率と言います。今回のデータの例であれば、次のようになるでしょう。
この例では23回中5回が1ですから、具体的な値はさておき、直感的に
はありえないのでゼロ、
は高めな気がします。こうした勘も活用していきます。
という式で、これに「一様事前分布」と「二項分布学習モデル」を代入し、答えを得ます。
グラフを描画すると、こんな感じになりました。
売上シミュレーターは、に対応するシミュレーターを、確率的重み和で足し合わせたものになります。この手法を、事後予測分布(英:posterior predictive distribution, PPD)と言います。
積分は先が複雑すぎて紙と鉛筆では実行できませんが、コンピューター(モンテカルロシミュレーション)によって実行でき、グラフを書くことができました。
code(R)
シミュレーションの回数は、10000回です。シミュレーションは確率的に行われ、毎回値が異なります。
平均は239個。5/23=0.217...ですから、単純に標本平均をとった値からの予測(217個)からはだいぶ(プラス10%)ずれることがわかります。
さらに、最もシミュレーションの結果起こりやすい上位90%の結果(英:High Density Percentile Interval, HDPI)は、98〜371です。ゆえに、外す確率を10%以内に抑えたいならば、
かなり攻める(50%外すかも)なら、
と、予測範囲を半分以下に狭めることができます。
シミュレーションを使わない場合、売上が正規分布すると根拠の無く仮定されることがありますが、実際にシミュレーションをすると、著しく左右の非対称性が高まるということにお気付きでしょうか。
確率空間における可能性の絞り込み
シミュレーターが出来たので、期待値をはじめあらゆる統計量はモンテカルロ積分で計算できます。つまり予測可能です。
しかし、どうあがいても最終的な確率的ノイズを消すことはできません。
先ほどの結果を眺めてみましょう。
-79〜+34の、最大123本もの誤差を消すことが出来ていません。
また、人間は「真の」を知ることは出来ませんが、どんなにおいても、Xが期待値に一致する確率(尤度)は一見すると非常に小さいように見えます。例えばの場合を考えてみます。
これでは、全く予測ができていないではないかと、思われる方も多いことでしょう。シミュレーションではPPDを用いて平滑化されているので、さらにピーク確率は低下します。
この考え方は、場合の数を考えることですぐに覆すことができます。
さらに、1000人中先頭の239人が連続して買う確率は
です。この2つを掛け算すると、
となります。これは、先程の結果と一致しています。
この場合の数(二項係数)は、1000人中どの239人が買い、残りの761人が買わないかのパターン数を表しています。これを典型的空間と言います。全空間は、ひとりひとりが買う買わないの選択をするので、2の1000乗のバリエーションがあります。典型性は買う買わないのパターンの全ての可能性の、ほんの一部にまで絞り込んでいることを表し、典型的空間が全空間に占める割合は、以下の通りです。
典型的空間の小ささがお分かりでしょうか。この意味で、今回の予測は、与えられたデータの可能性を限りなく引き出した予測になっています。
ちなみに宇宙に存在する原子の数は約個、人間の細胞に含まれる原子の数が約個だそうですから、この絞り込み結果は広い宇宙の中から爪の先程の空間を選ぶくらいの小ささです。
データ不足と理論的限界
シミュレーターに戻ります。
このシミュレーターの予測誤差が大きいのは、1日分=1000人分のデータよりもっと少ない、23人分のデータしか使っていないからだとも考えられます。
では、データが十分である場合、例えば1日目全体で1000人お客様が来て、217個売れたデータがある場合、翌日の売上予測の精度は上がるのでしょうか?データ量は約50倍です。
結果(50%外すかもしれない”攻めた”場合):
-79〜+34の123本の誤差は、-13.6~+13.4の27本に収縮しましたが、約1/5になったに過ぎず、ゼロにはなりませんでした。また、23人のデータでシミュレーションした期待値は239本でしたが、今回の期待値がほぼ5/23に一致していること、そして左右の非対称性がほぼ消滅していることにも注意してください。
これは二項分布が正規分布に近づく、「ド・モアブル=ラプラスの定理」として知られている現象です。
結論としては、データを増やすことで予測誤差は減るが、限界があることがわかります。限界の場合、正規分布に近づいていきます。この正規分布のピークはおよそ30%であり、が点推定できたと仮定した場合の26%とほぼ一致しています。
実データと比較する
それでは、限界まで「明日何個売れるか」を予測できたので、実データと比較してみましょう。
といっても、守秘義務により実データの代わりに、実データの分布を参考に生成したダミーデータを使うことをお許しください。
実データと、シミュレーターの出力と、予測誤差のHDPI50%限界を同時に描画してみましょう。
赤の線がactual=実際の売上(ダミー)で、緑の線がprediction=二項分布から予測した売上です。top=HDPI50%の上限で、bottom=HDPI50%の下限です。
こうして見ると、何か違いますね。いったい何がおかしいのでしょうか?
まず、分散が異なり、現実の分散は予測よりも大きいことがわかります。
次に、現実のデータは期待値より大きな値が多く、予測データは期待値を下回ることが多いです。そして、よく見ると、現実のデータでは10・13・16日目に大きな売上が続いている現象が見られます。このことは、現実のデータが完全な乱数ではなく、何らかの規則性を備えていることを示唆します。
左は現実のデータで、明確に4日目の逆相関が見られます。どうやらこの商品は、大体3日周期で買うもので、4日目には3日目に買った分の反動が来るようです。
右は予測データで、全く自己相関が見られません。
このことから、「全てのお客様が等確率で買う」という最初の過程が誤りであったことがわかります。より具体的には、「特定のお客様は3日ごとにリピート購買をする」という仮説を置くことが考えられます。
『現実には、「ある商品を、全てのお客様が等確率で買う」などということはまず起こりえません。』という注意書きの通りになってしまいました。
おかしな仮定を見直す
このように、複雑で取り付く島がないかに見える実売上データは、最もシンプルなモデル、例えば二項分布モデルと比較することで、次第に正体を現します。
より複雑な売上予測モデルを選択することで、予測精度を上げることが出来ます。ここでは次回予告を兼ねて、入門用のモデルを5種類、簡単にご紹介します。
Zero Inflation
このモデルは、一定確率で強制的に行動が「買わない」になるモデルです。
例えば、消費期限が長めの商品は、ストックがある場合には購買行動が起こりません。
この現象は世帯単位で起こり、世帯起因の非購買確率をモデリングすることが可能です。
0が増える現象と、それにより分散が増える現象の両方を再現できます。
Negative Binomial
このモデルは、お客様ごとに異なる選好度が設定され、買う確率が異なるモデルです。
ガンマ関数と二項分布の積を周辺化すると負の二項分布になることから、こう呼ばれています。
先程、現実のデータの分散が、二項分布による予測よりも大きいということを指摘しました。
NBDモデルは理論的には、無限に巨大な分散を再現できます。1955年に、Andrew Ehrenbergによってマーケティング分野に応用されました。
Varying Slope
このモデルは、お客様ごとに行動を2種類ずつ持つというモデルです。
例えば、出勤途中に購買する場合と、退勤途中に購買する場合で、購買率が大きく異なるような場合に有効です。
一見単純に思えますが、共分散をモデリングする難解なモデルです。
Auto Regression
このモデルは、お客様が以前のお客様の購買行動に影響を受けるモデルです。
お客様は同一人物であってもよく、リピート購買の場合などが当てはまります。
自己相関関数を再現できる利点があります。
Local Level
このモデルは、「短期トレンド」によって購買率が変化すると仮定する場合のモデルです。
短期トレンドはあくまで偶然の産物であり、広告のような人為的なトレンドに対しては適用するには力不足であることもあります。
ここに挙げた5つはあくまで初心者向けモデルに過ぎません。データサイエンスの世界には、もっと複雑な確率モデルがたくさんあります。
でも焦ってはいけません。「学問に王道無し」です。
今後の記事ではまず、この5つのモデルに完全に習熟することを一緒に目指していきましょう。
おわりに
今回は、パラメーター数1個のモデルを使って売上予測の初歩をご紹介しました。
また、次回予告として、単純なモデルでは現実のデータを説明しきれない場合の考え方もご紹介しました。
フェズでは、売上予測のプロが開発した、パラメーター次元が数100以上にもなる、非常に複雑なモデルを運用しております。
脚注
※1 ベイズの定理
※2 ベータ関数
今回の場合は積分定数。1を足す点に注意。
※3 スターリングの公式
※4 1.96
正規分布95%信頼区間は1.96σ。
※5 自己相関関数
定常過程を仮定。