はじめに
こんにちは、AI技術開発2グループの田村です。普段はデータ分析を通したプロダクト改善に従事しています。
今回は業務とは直接関係のない、個人的な興味から取り組んだ話題をご紹介します。
先日ラーメン屋に行った時、気になった場面に出くわしました。
店内はよくあるカウンター席のみで、自分の前の番は2人組のお客さんが並んでいました。
店はこの2人客を隣り合う席に案内しようとしていて、運用としては次のようなものでした。
- 空席ができても、隣同士で空いていなければ2人組は案内しない
- 2人客の後ろに1人客が並んでいても、1人客を先に案内しない(順番は守る)
こうした運用はラーメン屋では珍しくなく、2〜3人で来たときにはありがたいサービスでもあります。一方で、店の立場で考えると気になる点もあります。
店にとってはマイナスになり得る
カウンター席で1席だけ空いている状況はよくあります。
1人客ならすぐ案内できますが、2人客が先頭にいると「隣接2席が空くまで」待つことになり、空席がそのまま残る時間が発生します。
この空席時間は、店の売上(回転)に対してマイナスの影響があるはずです。
ここから素朴な仮説として、
2人客が増えるほど、席がうまく埋まらず回転が落ち、売上が下がるのではないか
という疑問が出ます。
この記事でやること
本稿では、2人客の増加が店の回転率に与える影響を、以下の手順で定量的に検証します。
- 数理モデルの構築: 損失系モデルをベースに、カウンター席特有の「隣接した2席が必要」という制約を加えた連続時間マルコフ連鎖(CTMC)を定義
- 定常分布と評価指標の定義: 長期的な営業状態における平均的なパフォーマンスを算出するため、各状態の出現確率を示す定常分布 $\pi$ を算出。これに基づき、入店確率および売上の指標となる人数スループット $T_{\text{people}}$ を定義
- シミュレーションによる影響評価: 到着率(混雑度)と2人客率($p$)の組み合わせにおいて、スループットがどのように変化するかを調査

1. モデル構築
この現象を解析するため、待ち行列理論をベースに独自の制約を加えたモデルを構築します。
1.1 損失系モデルと「席の配置」の考慮
待ち行列理論における損失系モデル(M/M/s/s)をベースに構築します。これは「到着した瞬間に案内可能な席がなければ、客は待たずに立ち去る」という仮定です。
通常の損失系モデルでは「店内に何人いるか」という合計人数のみを状態としますが、今回は「空席が2つあっても、離れていたら2人客は座れない」という配置の制約を扱う必要があります。そのため、各席の「空き(0)・埋まり(1)」の状態を並べたビット列 $s = (s_1, s_2, \dots, s_N)$ を一つの「状態」として定義します。
1.2 主要パラメータ:到着率 $\lambda$ と 2人客率 $p$
モデルの挙動を決定するメインの変数は以下の2点です。
- 到着率 $\lambda$(=混雑度): 単位時間あたりに平均して何組の客が来店するかを表す。(客が互いに独立かつランダムに現れるポアソン過程を仮定)
- 2人客率 $p$: 到着した客が「2人組」である確率(1人客である確率は $1-p$)
また、補助的なパラメータとして退店確率 $\mu$(各客が単位時間あたりに食べ終えて席を立つ確率)も定義しますが、今回は全客一律の固定値として扱います。
1.3 なぜ「定常分布 $\pi$」が必要なのか
店内の状態は、客の到着と退店によって時一刻と変化します。特定の瞬間の状態だけを見ても、店全体の長期的なパフォーマンスは測れません。
私たちが知りたいのは、長期間営業した際の「単位時間あたりの平均入店人数」という期待値です。この期待値を計算するために、各状態 $s$ に長期的に滞在する確率の分布である定常分布 $\pi(s)$ を求める必要があります。
1.4 定常分布を用いた指標の定義
定常分布 $\pi(s)$ が求まれば、以下のプロセスで評価指標を定義できます。
各客層の受け入れ確率 ($A_1, A_2$)
- 1人客の受け入れ確率 $A_1$: 来店時に少なくとも1席の空きがある状態の出現確率
- 2人客の受け入れ確率 $A_2$: 来店時に隣接する2席
00が空いている状態の出現確率
人数スループット ($T_{\text{people}}$)
最終的な評価指標として、単位時間あたりに入店できる平均人数を人数スループット $T_{\text{people}}$ と定義します。
$$
T_{\text{people}}(\lambda, p) = \lambda(1-p)A_1 + 2\lambda p A_2
$$
右辺第1項が「1人客の入店期待値」、第2項が「2人客の入店期待値(×2人分)」を表します。
この式では、2人客の項に係数 2 がかかっています。2人客率 $p$ が増えると、一度に2人を案内できるためスループットは向上する方向へ働きますが、同時に隣接席が埋まりにくくなり $A_2$ が減少する(席割れロス)という負の側面も持ち合わせます。
2. シミュレーション
理論上は平衡方程式 $\pi \mathbf{Q} = \mathbf{0}$ を解けば定常分布 $\pi$ が求まりますが、計算パターンの網羅性を優先し、シミュレーションによる近似推定を用いました。 (この手法の妥当性は Appendix D で検証しています。)
また、シミュレーションで使用したコードはこちらにまとめています。
2.1 実験のやり方(概要)
座席数 $N$ と退店確率 $\mu$ を固定し、到着率 $\lambda$ と 2人客率 $p$ を動かして $T_{\text{people}}$ を計算します。
2.2 シミュレーション結果:混雑度によるスループットの推移
座席数 $N=10$ とし、常に客の絶えない繁盛店($\lambda=15.0$)と比較的落ち着いた閑散店($\lambda=2.0$)の比較結果を以下に示します。

図1: 横軸は2人客率 $p$、縦軸は人数スループット $T_{\text{people}}$
結果から、到着率(混雑度)によって 2人客率 $p$ がスループットに与える影響が反転する挙動が確認できました。
- 閑散店($\lambda$ が小さい): $p$ が増えるほど $T_{\text{people}}$ は上昇する。隣接2席
00が自然に発生しやすいため、2人客を一度に案内できるメリットが直接的に寄与するためです。 - 繁盛店($\lambda$ が大きい): $p$ が増えるほど $T_{\text{people}}$ は低下する。「1席だけ空く」状態が増え、2人客用の
00が揃いにくくなることで、空席があるのに誰も座れない「席割れロス」が支配的になるためです。
また、中程度の到着率($\lambda=8.0$)では、2人客率が一定の閾値を超えると、スループットが低下に転じるピークが存在することも分かります。

図2: 横軸は2人客率 $p$、縦軸は人数スループット $T_{\text{people}}$
2.3 最適な2人客率 $p^*$ の探索
前節で観察された「混雑度によるスループットへの影響の反転」を定量的に捉えるため、様々な $\lambda$ に対してスループットを最大化する最適な2人客率 $p^*$ を計算し、その推移を調査しました。

図3: 横軸は到着率 $\lambda$、縦軸は最適な2人客率 $p^*$。
結果として、$\lambda$ の増加に伴い $p^*$ は単調に減少することが確認されました。繁盛店ほどスループット最大化の観点からは2人客率を低く抑えるべきであり、逆に空いている店では2人客を積極的に受け入れた方が効率的であると言えます。
これまでのシミュレーション結果から、単純に「2人客は悪」とは言い切れないことが分かりました。2人客は案内できれば一度に2人分の売上が立つため、
- 2人客が増えるメリット(人数が増える)
- 2人客が増えるデメリット(隣接2席が揃わず空席が生まれる)
のバランスは、混雑度によって大きく変わります。
まとめ
今回の結論はシンプルで、
2人客が店にとって得か損かは、混雑度によって変わる
ということでした。
カウンター席のように「隣接席が必要」という制約がある場合、
繁盛店ほど 2人客が“席割れ”を引き起こして回転を落とす可能性が高くなり、逆に、閑散店では 2人客は一度に人数を稼げるため、回転にプラスに働きやすいことが、モデルとそのシミュレーションから明らかになりました。
以上、損失系モデルをベースに「隣接2席が必要」という制約を追加し、2人客率がスループットに与える影響をシミュレーションで調べました。
今回の設定はかなり単純化していますが、今後は、2人客が同時に退店するケースや、行列(待ち)を明示的に入れたモデルなども検討してみたいと思います。
最後まで読んでいただき、ありがとうございました。
Appendix
A. 状態空間の厳密な定義
席数 $N$ に対し、店内の状態をベクトル $s=(s_1,\dots,s_N)$ で定義します(各 $s_i$ は0または1)。状態数は $2^{N}$ 通りとなり、到着および退店イベントによって各状態間を遷移します。
B. 受け入れ確率と人数スループット $T_{\text{people}}$
定常分布を $\pi(s)$ としたとき、各指標は以下のように定義されます。
ここで $\mathbf{1}[\cdot]$ は指示関数(indicator function)であり、括弧内の条件が真のとき1、偽のとき0を返します。
1人客の受け入れ確率 $A_1$:
$$A_1(\lambda,p)=\sum_{s}\pi(s)\,\mathbf{1}[s \text{ に } 0 \text{ を含む}]$$
2人客の受け入れ確率 $A_2$:
$$A_2(\lambda,p)=\sum_{s}\pi(s)\,\mathbf{1}\left[s \text{ に連続} 00 \text{ を含む}\right]$$
人数スループット $T_{\text{people}}$: $$T_{\text{people}}(\lambda,p) = \lambda(1-p)A_1 + 2\lambda p A_2$$
C. 「席割れ」の具体例($N=3$ の場合)
混雑時($\lambda=6, \mu=1, p=0.3$)における理論的な定常確率の分布です。
| 状態 $s$ | 定常確率 $\pi(s)$ | 2人客(00)可否 | 備考 |
|---|---|---|---|
111 |
0.5199 | × | 満席 |
110 / 011 |
0.2374 | × | 1席空き |
101 |
0.1018 | × | 席割れ(2人客不可) |
100 / 001 |
0.0751 | 〇 | 案内可能 |
010 |
0.0457 | × | 1席空き |
000 |
0.0201 | 〇 | 全空き |
D. 定常分布 $\pi$ の求め方と妥当性検証
定常分布 $\pi$ は、理論上は平衡方程式 $\pi \mathbf{Q} = \mathbf{0}$ を解くことで厳密に得られます。 今回は計算効率を考慮し、シミュレーションによるサンプリング近似を採用しています。
$N=3$ において厳密解と比較することで、この近似手法の精度を確認しました。
| 状態 $s$ | 厳密解 ($\pi \mathbf{Q} = \mathbf{0}$) | シミュレーション近似 | 絶対誤差 | 備考 |
|---|---|---|---|---|
000 |
0.020334 | 0.020149 | 0.000185 | 全空き |
001 |
0.036020 | 0.036237 | 0.000217 | |
010 |
0.049965 | 0.049387 | 0.000578 | |
011 |
0.115674 | 0.116972 | 0.001298 | |
100 |
0.036020 | 0.036111 | 0.000091 | |
101 |
0.108000 | 0.108216 | 0.000216 | 席割れ |
110 |
0.115674 | 0.115085 | 0.000589 | |
111 |
0.518312 | 0.517843 | 0.000469 | 満席 |