見出し画像

統計調査の基本が学べる神ゲー「Supermarket simulator」

最近話題になっているSteamゲーム、「Supermarket simulator」。

名前の通り、スーパーマーケットの経営をするのだが、やることは「レジ打ち」「品出し」「商品の価格設定」「店の拡張」で、ゲーム性は意外とシンプル。

競合店もなく、商品の開発といった複雑な要素もない。

そのため、ほとんど何も考えず楽しめる系のゲーム、だと思っていた。

実は先に挙げた要素のうち、「品出し」と「商品の価格設定」が、ゲームを極めようとすると、かなりしっかりと考えなくてはならないのだ。私は、始めて3日目あたりでこのことに気づいた。


品出しと動線

最短の品出しルート

まず、比較的分かりやすい「品出し」から説明しよう。

このゲームは、スタッフを雇うことができ、品出しのスタッフを雇えば、ストレージ(倉庫)内の商品を、自動で商品棚に並べてくれる。

それだけでなく、並べ終わって空になった段ボールを、自動でゴミ箱まで持って行ってくれるのだ。

つまり、品出しスタッフは、「倉庫→店→ゴミ箱→倉庫」という順番で移動する。

赤:店 青:倉庫 黒:ゴミ箱

品出しの効率を最高にするためには、このルートを最短にしなければならない。

色々検証してみた結果、店の入り口の窓に商品棚を外側置くことで、バグによって店外から商品を補充できるようになり、最も距離が短くなった。

青丸の部分に商品を置くことができる

他の商品棚の設置場所

ただ、それだけだと棚の数が足りないので、少し効率は落ちるが、「店の入り口付近に棚を詰め込む」「倉庫と店をつなぐドア(画像奥)に棚を置く」という方法が、最適であることもわかった。

左側のドアが倉庫の入り口

このゲームは、とにかく商品の種類が多い。そのため、適当に商品を補充していると、特定の商品が売り切れてしまったり、逆に在庫が足りなくなってしまう。

こうしたことも考慮すると、棚の列ごとに設置する商品の種類を固定するのが望ましい。倉庫のラックも同じように設置する商品を固定すれば、どの商品が余っていて、どの商品が足りないのかひと目でわかる。

さらに、店の入り口に設置する商品は、倉庫の入り口のラックに設置し、奥に設置する商品は奥のラックに設置することで、品出しのルートも限りなく最短に近づけることができた。

私はこれを、「限界陳列」と呼んでいる。

価格設定の奥深さ

3つの価格

さて、品出しだけでもこれぐらいの奥深さがあるのだが、それより難しいのは「商品の価格設定」だ。

このゲームには、「仕入れ価格」「市場価格(競合店が無いにも関わらず!)」「販売価格」の3つがある。

仕入れ価格は、文字通り仕入れの値段のことで、販売価格は自分で設定する商品の売値のことだ。

面白いのが市場価格というもので、意味としては「商品の小売価格の平均」みたいな感じだろうが、仕入れ値が高い商品でも市場価格が安かったり、仕入れ値が安い商品でも市場価格は高かったりする。

そのため、商品の価格を決める際は、仕入れ価格よりも市場価格を参考にする方が良い。

値段と販売数の関係

しかし、参考にすると言っても、市場価格と同じ値段で売るべきなのか、安くするべきなのか、高くするべきなのかはわからない。

説明が大変なので結論だけを言うと、市場価格よりも高くするのが最も良い戦略である。

そのため、私は最初市場価格の1.4倍の値段で商品を販売していた。なんとなく、1.5倍で売ると買わない客が多くなってしまうが、1.4倍ならそこそこ買ってくれると考えたからである。

ちなみに、販売価格を「市場価格+〇ドル」といった形ではなく、「市場価格×〇倍」といった形にしたのは、商品の値段に関わらず一定の値上げ幅にできることや、市場価格の変更にも対応できる、というメリットがあるからだ。

しかし、しばらく続けていると、この値段でもよく売れている商品と、ほとんど売れていない商品があることに気づいた。

このことに気づいた私は、一度倉庫内にある商品の在庫を全てメモし、商品の仕入れを辞めて店の営業を行うことで、どの商品がどれぐらい減っているのかチェックすることにした。

その結果、特定の商品は半分近く減っていたが、物によっては1つも売れていないことが判明した。

この結果を踏まえて、よく売れている商品(2日で21個以上)は値上げ、そこそこ売れた商品(11~20個)は現状維持、あまり売れていない商品は値下げ(6~10個)、ほとんど売れていない商品(0~5個)はさらに値下げ、といった調整を行うことにした。

これで、商品が売れない問題は解決した。

だが、凝り性の私は「もう少し厳密な計測ができないだろうか」、と思い、計測モデルの作成に取りかかった。これが地獄の始まりとも知らずに。

厳密な価格設定への挑戦

値段と客の反応

商品に対する客の反応には、次の3つがある。

「商品を購入」
「商品が高すぎる」
「商品が見つからない」

商品の価格設定に使うのは、このうち「商品を購入」「商品が高すぎる」の2つである。

「商品が高すぎる」と言った客の数は、営業終了時のリザルトで確認することができる。商品の購入者数は、手動で計測する。

1つの商品に絞った計測

ここで私が考えついたのは、単一の商品だけを店に並べ、それに対する客の反応を調べることで、個々の商品の適切な価格を導き出す、という方法である。

この画像では、「粉糖(黄)」のみを販売している

というのも、このゲームは商品の種類と適切な価格にほとんど関連性がなく、油とオリーブオイルの適切な価格設定が違ったり、チーズとコーヒーの適切な価格設定が同じだったりする。つまり、完全なランダムなのだ。

そのため、適切な価格を導き出すためには、1つずつ検証していくしかない。

それだけでなく、2種類以上の商品を設置してしまうと、リザルトで「商品が高すぎる」と言われた商品が、どちらなのかわからなくなるという問題もある。

リザルト画面では、個別の結果は確認できない

具体的なやり方としては、

  1. 店に単一の商品を並べる

  2. その商品を購入した客の数を手動で計測する

  3. 「商品が高すぎる」と言った客の数をリザルト画面で確認する

このような方法で、計測を行った。

取り出した値の計算方法

次に、この結果を比較可能な値にするため、簡単な計算を行う。

その計算方法は、

商品の価格設定(市場価格への倍率)を「X」、その商品を購入した客の数を「A」、「商品が高すぎる」と言った客の数を「B」とすると、

X × {A/(A+B)}

になる。筆者は数学に明るくないため、計算方法や書き方には目をつむってほしい。

例として、ある商品を市場価格の1.5倍で売り、28人が購入し、2人が「高すぎる」と言った場合を考えてみよう。

この数値を計算式に当てはめると、

1.5 × {28/(28+2)}

となり、最終的な値は1.4となる。

もちろん、一度計測しただけでは、この価格設定が適切か分からないので、1.4倍や1.6倍に変えて計測を行い、最も数値が高かった値を採用する。

数値を高くするために

これは「Balatro」というゲームで学んだことなのだが、かけ算は「かける数」と「かけられる数」の差が小さいほど、得られる値の数が多くなる。

チップと倍率を平均化するプラズマデッキ 強い

つまり、値段の倍率を上げても、それによって購入者が減ってしまえば、結果的に得られる値は小さくなってしまう。

例として、さっきの商品を市場価格の1.6倍に値上げした結果、「高すぎる」といった客が3人増えた場合を考えてみよう(購入者は3人減って25人になる)。

1.6 × {25/(25+5)}

計算結果は、1.333…となり、先ほどの1.4よりも小さくなっている。値段を10%上げたとしても、たった3人客が減ってしまうだけで、損をするということだ。

それだけでなく、客はときどき商品を複数購入することがある。

ゲーム内時間で数日ほど試してみた結果、適正な価格であれば平均して1.5個ほど買うことが判明した。

より正確な値にするためには、こうしたことも考慮するべきなのだろうが、良い計算式が思い浮かばなかったため、「倍率より購入者の割合を重視する」という判断基準を設けるにとどめた。

実際、先に挙げた例からもわかる通り、購入者の割合が及ぼす影響はかなり大きい。そのため、購入数を意識しなくても、基本的に問題はない。

このゲームは、商品の価格を小数点第二位までしか設定できないので、計算の効率も考え、倍率は0.05単位で設定することにした。

「商品の購入確率」をどう扱うか

これは私の予想なのだが、客は商品の価格によって、購入するかどうかの確率が変化するのだと思われる。そして、購入する確率は値段を下げれば購入率は上昇し、値段を上げれば下降するということが、何回かの計測でわかった。

この「確率」という要素が、思ったより大きな問題となる。

例えば、「商品が高すぎる」と言った客の数が30人中2人だったとしても、たまたま少なかっただけで、長期的には3人になる可能性があるからだ。

私は統計学に詳しいわけでもないので、こうした問題をどう解決すれば良いか分からず、しばらく悩まされた。

ただ、商品の価格(倍率)と購入率には一定の相関があることや、「商品が高すぎる」と言った客の数が1人、もしくは0人になるのが最適な値段であることは、数回の検証で判明している。

色々考えてみた結果、

1.「商品が高すぎる」と言った客の数が3人以上の場合、値段を下げる
2. 「商品が高すぎる」と言った客の数が2人の場合、もう一度検証し、2人以上なら値段を下げる
3. 「商品が高すぎる」と言った客の数が1人以下かつ、それより高い値段の検証が終わっている場合、その値段を適正価格とする

このようなルールを設け、値段ごとの計算結果と合わせることで、そこそこ正確な値が導き出せるようになった。

しかし、一日の来店者数は30人ほどしかいないので、サンプル数として不十分という問題は依然として残っている。

とはいえ、計測効率なども考えると、おそらくこの方法が最も適切だと思う。

効率的な計測を目指して

1回10分

方法は決まったので、あとは検証するだけなのだが、この計測にも多くの問題がある。

まず、一日の時間が長い。おそらく10分ほどあるので、何度も検証していると、1つの商品だけでとんでもない時間がかかってしまう。

一応、適切な価格設定が1.1~1.25倍であることが分かっているので、1.2倍から始めれば、3回ほどで終わらせることはできる。しかし、それでも30分だ。

さらに、単一の商品しか置いていないので、商品の種類が増えるほど、「商品が見つからない」と言って帰る客の数が増える。

リザルト画面では、商品を購入した客の数は表示されないので、手動で計測するしかない。これだけなら良いのだが、帰る客の数が多いせいで、一日のサンプル数が15ぐらいになってしまうという事態も発生する。

MODの導入

これらの問題を解決するため、私はMODを導入した。

具体的には、「資金と獲得ポイントを無限にするMOD」「注文数の上限を無くすMOD」「ゲーム内時間を早めるMOD」を使った。

これらのおかげで、上に挙げたほとんどの問題は解決した。

しかし、手動でレジを行う場合、時間の流れを2倍以上にしてしまうとレジ作業が追いつかなくなる、という新たな問題が発生した。

レジ打ちのバイトを雇うこともできるのだが、そのためには自分で200回近くレジを行わなければならない。

計測の都合上、ゲームの進行度リセットすることがあるため、2倍以上時間を早めるためには、そのたびに200回レジ打ちをする必要があるのだ。

しかも、レジ打ちと同時に購入者をカウントする必要もあるため、プレイヤーの負担がとんでもなく大きくなる。

革命的手法の誕生

とはいえ他に方法もないので、しばらく我慢して計測を続けていた。

しかし、あるとき私はとんでもないことに気づいてしまった。

何度かの検証で、「商品が高すぎる」と言った客の数が1人以下であれば、適切な価格設定である確率が高いことは先に述べた。

つまり、レジ打ちや購入者数のカウントを行わず、ゲームを放置したまま一日を終わらせ、リザルト画面で「商品が高すぎる」と言った客の数を確認すれば、ほとんど同じ結果が得られるのだ。

このことに気づいたおかげで、1回15分以上かかっていた検証を、2分近くにまで短縮することに成功した。

MODのおかげで、来店者数は常にMAXなので、誤差も生まれにくい。

こうして、度重なる計測を経て、方法を改善していくことで、かなり良いところまで到達することができた。

最後に

感想と途中経過

私は統計調査をやったことはないが、モデルを改善していくことで、より正確に、そしてより短時間で計測が行えるようになることを、「Supermarket simulator」を通して学ぶことができた。

実況動画やいくつかのブログを見てみたのだが、ここまで厳密な検証を行っている人はいなかった。そのため、計測途中ではあるが、以下に示す適正価格のデータは、そこそこ貴重なものだと思う。

ただ、時間を経るごとに計測方法が変化していることもあり、完全に正確な値であるとは断言できない。とはいえ、理論値に近い値まで利益を伸ばすことができるのは間違いないだろう。

※左は商品名、右は倍率

シリアル(紫) 1.15

切り身パン 1.2

小麦粉(青) 1.1

油 1.15

パスタ 1.1

粉糖(赤) 1.25

水 1.1

チーズ 1.1

コーヒー1.1

卵(8パック)1.1

牛乳 1.1

紅茶 1.15

ピーナッツバター 1.15

小麦粉(赤) 1.1

オリーブオイル 1.1

スパゲッティパスタ 1.1

パスマティライス 1.1

塩 1.1

オレンジジュース 1.15

ソーダ(コーラっぽい見た目、オレンジ) 1.1

ソーダ 1.1

リンゴジュース 1.15

牛乳6パック 1.1

ソーダ(コーラっぽい見た目、赤)1.15

ケーキ(袋) 1.1

ケーキ(箱) 1.1

キャンディ 1.1

シリアル(黄) 1.1

チョコレートバー 1.1

ヨーグルト 1.05

モッツァレラ 1.05

パルメザン 1.05

ハチミツ 1.05

ツナ 1.1

卵(4パック) 1.1

粉糖(黄) 1.05

この記事が気に入ったらサポートをしてみませんか?