1
0

背景

統計検定2級の問題で、2人の対戦相手(T君、U君)と合計3回対戦をして、2連勝する確率を問う問題がありました。
(統計検定2級受験予定で、この問題を解いてない方は、答えを見ないでくださいね。)

T君に勝つ確率がp、U君に勝つ確率がq、0<p<q<1 とすると、2連勝する確率は、

  1. T君→U君→T君 が高い
  2. U君→T君→U君 が高い
  3. どの順番でも関係ない
  4. 具体的なp,qによる、

のどれが正しいか、という問題です。

これを、プログラムで検証してみました

準備

まず、以下の準備。

  • 2連勝する確率を求める関数の定義
  • どの順番で対戦したほうが確率が高いかを出力する関数の定義
# 2連勝する確率を求める
def calc_probability_2_wins_in_a_low( p1, p2, p3 ):
  # 勝ち、勝ち(2戦で終了)
  p_win_win = p1 * p2
  # 負け、勝ち、勝ち
  p_lose_win_win = (1-p1) * p2 * p3

  # 2連勝
  return p_win_win + p_lose_win_win

# どの順番で対戦したほうが確率が高いかを出力する
def judge_higher_probabirity(order1,prob1,order2,prob2):
  if prob1==prob2:
    print(f'{order1}の確率 {prob1:.2f} と、{order2}の確率 {prob2:.2f} は同じ')
  elif prob1>prob2:
    order_h = order1
    prob_h  = prob1
    order_l = order2
    prob_l  = prob2
  else:
    order_h = order2
    prob_h  = prob2
    order_l = order1
    prob_l  = prob1
  print(f'{order_h}の確率 {prob_h:.2f} が、\n{order_l}の確率 {prob_l:.2f} より高い')

T君U君ではわかりにくいので、のひたくんとしゃいあんと対戦するように考えました。

p_nohita = 0.8  # のひたくんに勝つ確率
p_shian  = 0.2  # しゃいあんに勝つ確率

どの順番が2連勝する確率が高いか検証

# どの順番で対戦したほうが確率が高いかを出力する
judge_higher_probabirity(
  'のひたくん→しゃいあん→のひたくん',
  calc_probability_2_wins_in_a_low(p_nohita,p_shian ,p_nohita),
  'しゃいあん→のひたくん→しゃいあん',
  calc_probability_2_wins_in_a_low(p_shian ,p_nohita,p_shian)
)
しゃいあん→のひたくん→しゃいあんの確率 0.29 が、
のひたくん→しゃいあん→のひたくんの確率 0.19 より高い

なので、答えは、しゃいあん(勝つ確率の低い相手)と2回対戦するのが、2連勝する確率が高い、という結果になりました。
しゃいあんと2回対戦して、1回でも勝てたら、2連勝する確率が高まる、ということなので、しゃいあんと2回対戦がよいという結果になります。(冷静に考えると当然な結果です。)
これは、のひたくんに勝つ確率を1とするとわかりやすいです。

p_nohita = 1.0  # のひたくんに勝つ確率
p_shian  = 0.2  # しゃいあんに勝つ確率
# どの順番で対戦したほうが確率が高いかを出力する
judge_higher_probabirity(
    'のひたくん→しゃいあん→のひたくん',
    calc_probability_2_wins_in_a_low(p_nohita,p_shian ,p_nohita),
    'しゃいあん→のひたくん→しゃいあん',
    calc_probability_2_wins_in_a_low(p_shian ,p_nohita,p_shian)
)
しゃいあん→のひたくん→しゃいあんの確率 0.36 が、
のひたくん→しゃいあん→のひたくんの確率 0.20 より高い

のひたくんに勝つ確率が1なので、のひたくんとの対戦は確率に影響しないので、
のひたくん(1)→しゃいあん→のひたくん(1)は、しゃいあんと1回対戦して、1勝つ確率そのもの(0.2)です。
また、しゃいあん→のひたくん(1)→しゃいあんは、しゃいあんと2回対戦して、1回でも勝つ確率そのもの(0.36)です。

# 1回目で勝つ確率
p_shian_1 = p_shian
# 2回目で勝つ確率(1回目で負けて、2回目で勝つ)
p_shian_2 = (1-p_shian)*p_shian
# 合計すると
p_shian_1_2 = p_shian_1 + p_shian_2

print(f'1回目で勝つ確率{p_shian_1:.2f}')
print(f'2回目で勝つ確率{p_shian_2:.2f}')
print(f'2回対戦して、1回でも勝つ確率{p_shian_1_2:.2f}')
1回目で勝つ確率0.20
2回目で勝つ確率0.16
2回対戦して、1回でも勝つ確率0.36

なので、しゃいあん→のひたくん→しゃいあんのほうが、2連勝する確率が高くなる、ということになります。

冷静に考えれば簡単な問題ですが、限られた時間内で解く問題では誤解しやすいです。
しかも、このプログラムでは、わかりやすいように、のひたくんとしゃいあんとしているので、直観的に理解しやすいですが、T君に勝つ確率がp、U君に勝つ確率がq、0<p<q<1 と問題設定されると、どっちが強いんだっけ、を理解するまでに時間がかかるし、間違いやすいです。

問題をよく読まずに回答してしまうと、3回対戦して2回勝てば、と勘違いしやすいです。

単純に2勝すればよいという条件の場合

ちなみに、3回対戦して2回勝てば、という条件なら、

# 3回対戦して2回勝てば、という条件なら
def calc_probability_2_wins( p1, p2, p3 ):
  p_wins_in_a_low = calc_probability_2_wins_in_a_low( p1, p2, p3 )
  # 勝ち、負け、勝ち
  p_win_lose_win = p1 * (1-p2) * p3

  # 2勝
  return p_wins_in_a_low + p_win_lose_win

p_nohita = 0.8  # のひたくんに勝つ確率
p_shian  = 0.2  # しゃいあんに勝つ確率
# どの順番で対戦したほうが確率が高いかを出力する
judge_higher_probabirity(
  'のひたくん→しゃいあん→のひたくん',
  calc_probability_2_wins(p_nohita,p_shian ,p_nohita),
  'しゃいあん→のひたくん→しゃいあん',
  calc_probability_2_wins(p_shian ,p_nohita,p_shian)
)
のひたくん→しゃいあん→のひたくんの確率 0.70 が、
しゃいあん→のひたくん→しゃいあんの確率 0.30 より高い

当然の結果として、のひたくんと2回対戦するほうが確率が高いですが、この条件として解答してしまうと、間違ってしまいます。

あとがき

統計学の知識やそれをうまく使いこなせるか、という問題というよりは、どちらかと言うと、ひっかけ問題に近いように思いました。(良問ではあるが、冷静になって考えると簡単にわかる。)大学受験など、順位付けが必要な試験ならともかく、(それ自体もどうかとは思いますが、)資格試験で、このようなひっかけ問題が出題される、というのは、どうなんでしょうかね?今度、統計検定2級を受験する予定ですが、惑わされずに頑張っていきたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0