所持金5連続UP、適当に声をかけるだけでも何とかなる説
皆さん、水曜日のダウンタウンという番組は観ていますか?
今週の放送では「街行く人の所持金、5人連続UPできるまで帰れません」と企画が行われ、
その名の通り、街の人に声をかけて財布の中を見せてもらい、
所持金が5人連続でUPするまで帰れないという内容でした。
番組内では声をかけるにあたって様々な駆け引きがあり、
「バンドマンの多い街は所持金が低いだろう」「お年寄りの多い街では所持金が低いだろう」といった憶測をもとに
芸人さんが通行人に声をかけていました。
ここで一つ疑問が湧いてきます。
変に駆け引きをせずに、手当り次第速攻で声かけていったら
案外早く終わったんじゃないでしょうか。
森田ぐずぐずするなと誰もが思っていたはず。
ということで、今回はpythonを使って「街行く人の財布の中を見せてもらうシミュレーション」を作成し、
駆け引きなしで適当に声をかけた場合にかかる平均時間を調べていきたいと思います。
シミュレーションの実装
まずは必要なライブラリのimportから
import numpy as np
from random import random
from random import randint
次に所持金を返してくれる関数を作成します。
作成するにあたって以下の記事を参考にしました。
おとなの財布の中身はいくら?〇円以下が50%超 | 東証マネ部!
また所持金の端数はランダム, 所持金の最大金額は10万円と想定しています。
def show_money():
rand = random()
if rand < 0.076:
money = randint(0,1000)
elif rand < 0.328:
money = 1000 + randint(1,4000)
elif rand < 0.578:
money = 5000 + randint(1,5000)
elif rand < 0.803:
money = 10000 + randint(1,10000)
elif rand < 0.915:
money = 20000 + randint(1,10000)
else:
money = 30000 + randint(1,70000)
return money
最後に、所持金5連続UPの試行を100万回仮想的に挑戦し、
成功する確率や成功までに声をかけた平均人数を算出していきます。
# 所持金連続UPにトライする回数
n = 1000000
# n回の試行中、所持金5連続UPに成功した回数
count_success = 0
# 5連続UPに成功するまでに、所持金を聞いた回数
count_before_success = 0
# count_before_success を成功した試行毎に格納したリスト
count_before_success_list = []
for i in range(0,n):
# 一回前に聞いた所持金(スタートは-1円から)
pre_money = -1
for j in range(0,5):
count_before_success +=1
money = show_money()
if money <= pre_money: break
pre_money = money
else:
count_success +=1
count_before_success_list.append(count_before_success)
count_before_success = 0
print(f"成功確率:{count_success/n*100:.2f}%")
print(f"成功までに声をかけた平均人数:{np.average(count_before_success_list):.2f}")
# 成功確率:0.84%
# 成功までに声をかけた平均人数:322.16
結果の考察
シミュレーションの結果、成功までに声をかけた平均人数は322人となりました。
一人に声をかける平均時間を、インタビューや移動時間を含めて3分とすれば、
適当に声をかけると、成功までに平均16.1時間かかるということになりそうです。
やはり今回の企画は適当に声をかけるだけでは早く終わるのは難しく、
外見から所持金を推測することが重要となる企画のようでした。
だから森田がなかなか所持金を聞けないのも仕方がなかったと言えそうです。