新商品のビタミン飲料はどれくらい売れるか予測する -ダミー変数を用いた回帰分析-
事例 ジャントリー社から新たなビタミン飲料が発売されることになった。テレビCMや健康番組でもかなり宣伝されているので,今後しばらくはどの店舗でも多く売れるのではないかと考えられる。そこで過去に類似のビタミン飲料が発売されたときの売り上げデータから,今回のビタミン飲料がどのくらい売れるか(すなわちどの程度の量を仕入れればよいか)を予測してみる。
使用データ 下表のデータは私が考えた仮想データです。実際にはもっと大量のデータを扱うことになるわけです。だから「月曜日のデータが1つしかないぞ」というツッコミはなしですよ(^_^)
売り上げ本数 | 単価 | 曜日 | 天気 |
198 | 120 | 土 | 晴 |
156 | 130 | 日 | 曇 |
123 | 130 | 月 | 晴 |
169 | 120 | 日 | 晴 |
97 | 150 | 火 | 曇 |
112 | 100 | 木 | 雨 |
120 | 110 | 水 | 曇 |
187 | 100 | 金 | 晴 |
170 | 120 | 土 | 曇 |
105 | 130 | 木 | 雨 |
129 | 120 | 火 | 曇 |
177 | 110 | 日 | 晴 |
156 | 120 | 水 | 晴 |
169 | 120 | 火 | 晴 |
185 | 100 | 土 | 曇 |
89 | 150 | 土 | 雨 |
96 | 120 | 火 | 雨 |
102 | 130 | 日 | 雨 |
79 | 100 | 水 | 雨 |
一般的な考え方 さて,このように売り上げ本数と単価,曜日,天気といったデータがあった場合にどうすればよいでしょうか。多くの場合は曜日と天気とに別けて売り上げ本数を棒グラフなどで表現してみることを考えるでしょう。もちろん,それも単純ではあっても良い方法です。
実際に以下のように「天候ごとの売り上げ本数」と「曜日ごとの売り上げ本数」を単純集計してみると,天候については晴の日に多く売れ,曜日については土曜日と日曜日に多く売れているようであることが分かります。小売業のバイヤーなどはこのようにして「土日と晴の日は多めに仕入れよう」と考えるはずです。
ただ,ビタミン飲料というのはスポーツ(例えばテニスやウォーキング)をしているときに飲む人が多いと予測できますから,人の出る土日や外で運動できる晴の日に多く消費されることは誰にでもある程度は予想できます。
天候 | 晴 | 曇 | 雨 |
売り上げ本数 | 1179 | 857 | 583 |
曜日 | 月 | 火 | 水 | 木 | 金 | 土 | 日 |
売り上げ本数 | 123 | 491 | 355 | 217 | 187 | 642 | 604 |
統計学的な考え方 前述したような考え方もとても重要ですし,単純集計は統計学の基礎中の基礎ですが,ここから分かるのはあくまでも「土日の晴の日には多く売れるだろう」ということだけです。これに加えて専門家が知りたいのは
ということなのです。そこで役に立つのがダミー変数を用いた回帰分析なのです。
最初に提示した売り上げデータ(原データ)における曜日と天候の変数をダミー変数に置き換えます(下表)。このとき,注意すべき点は「曜日の中で任意の曜日を1つ削除することと,天候の中で任意の天候を1つ削除するということ」です。今回は月曜日と晴のデータを削除しています。データを削除しても,その削除したデータの情報は失われません。削除した変数が基準となるというだけのことです。
売り上げ本数(y) | 単価(x1) | 火(x2) | 水(x3) | 木(x4) | 金(x5) | 土(x6) | 日(x7) | 曇(x8) | 雨(x9) |
198 | 120 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
156 | 130 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
123 | 130 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
169 | 120 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
97 | 150 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
112 | 100 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
120 | 110 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
187 | 100 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
170 | 120 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
105 | 130 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
129 | 120 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
177 | 110 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
156 | 120 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
169 | 120 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
185 | 100 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
89 | 150 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
96 | 120 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
102 | 130 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
79 | 100 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
このデータを実際にRで計算してみましょう。
Rでの実行
> dat <- excel.w(10) #Excelワークシートからの読み込み Read 190 items > #データフレームの作成 > mydat <- data.frame(y=dat[,1], x1=dat[,2], x2=dat[,3], x3=dat[,4], x4=dat[,5], + x5=dat[,6], x6=dat[,7], x7=dat[,8], x8=dat[,9], x9=dat[,10]) > #回帰分析の結果を代入 > result <- lm(y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9, mydat) > result #結果の表示 Call: lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9, data = mydat) Coefficients: (Intercept) x1 x2 x3 x4 x5 x6 222.4161 -0.7647 31.2715 14.8701 49.2845 41.0578 65.1978 x7 x8 x9 48.3881 -29.2390 -75.2556 > summary(result) #結果の要約を出力する Call: lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9, data = mydat) Residuals: Min 1Q Median 3Q Max -1.274e+01 -7.264e+00 -5.980e-16 6.474e+00 1.385e+01 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 222.4161 29.9453 7.427 3.99e-05 *** x1 -0.7647 0.2136 -3.580 0.005931 ** x2 31.2715 13.4515 2.325 0.045132 * x3 14.8701 14.4962 1.026 0.331770 x4 49.2845 16.3973 3.006 0.014820 * x5 41.0578 17.0917 2.402 0.039754 * x6 65.1978 13.5905 4.797 0.000977 *** x7 48.3881 13.0965 3.695 0.004961 ** x8 -29.2390 7.0307 -4.159 0.002452 ** x9 -75.2556 7.7500 -9.710 4.57e-06 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 11.2 on 9 degrees of freedom Multiple R-Squared: 0.9571, Adjusted R-squared: 0.9142 F-statistic: 22.32 on 9 and 9 DF, p-value: 4.095e-05
細かい数値の解釈は重回帰分析のページを参照。
分かりやすいように上の結果をまとめておきます。
222.4というのは定数項です。-0.8x1は単価を表しており,「単価を1円安くすれば1本は多く売れる」ということを示しています。x2〜x7は火曜日から日曜日まで(月曜日を0としている),x8とx9は曇と雨(晴を0としている)を表しています。
上の式より以下のような予測が立てられます。
問題 「明日は3連休の土曜です。今日の天気予報によれば天気は晴のようです。新作のビタミン飲料はどのくらい仕入れればよいでしょうか?なお,会社の部長からは200本以上売らなければいけないといっています。この場合には単価をいくらに設定すればよいでしょうか?」
まずは単価を120円として予測してみましょう。すると,この条件の下では191本売れるだろうということが分かります。つまり,バイヤーは単価を120円に設定するのであれば,190本ほど仕入れれば無駄がでないことになります。
y = 222.4 - 0.8 * 120 + 65.2 + 0 = 191.6(本)
しかしながら,部長からは200本以上売れといわれているのですから,単価,曜日,天候のいずれかを操作しなければいけないということです。当然,曜日や天候は操作できないので単価を120円から110円にしてみます。すると,今度は199.6本(約200本)売れるだろうと予測できるので,200本仕入れて,それを110円で売ればきれいに200本売れるようです。
y = 222.4 - 0.8 * 110 + 65.2 + 0 = 199.6(本)
プラス一歩 学校の授業ではここまでできれば満点解答ですが,現場では満点解答などありません。上の数値はあくまでも統計的な分析をして予測された数値ですから,実測値との誤差が生じます。この誤差をより小さくするのはバイヤーの経験と感がプラス要素で必要となるわけです。
例えば今回の場合は3連休なのですから,通常の土曜日よりも人が多く出るということが予想できます。だから
という点を考慮するべきです。
ところで,全く統計学を勉強したことがない人は「確かにすごい技だけど,ホントに予測に使えるの?」と疑問に思うことでしょう。そんな人のために今回用いたデータの実測値と上のモデル式によって得られた予測値とを比べてみましょう。
下表は実測値の折れ線(青い線)と予測値の折れ線(ピンクの線)を重ね書きしたものです。見て分かるように,実測値と予測値の折れ線はほぼ一致しています。もちろん,今回のデータは例データですから,現実のデータではこれほどきれいに一致することは少ないでしょう。しかし,全く情報がないところから,経験のみに頼って発注するよりははるかに効率的であるといえませんか?