まえがき
こんにちは、さつま芋です。
勝率50%と聞くと、2回に1回は勝てそうな錯覚を覚えますが、コイン投げでも裏が何回も続くことは珍しくありません。
トレードのような緊張状態の中、こういう思い込みを持っていると不利になることは疑いようがありません。
今回はメンタル安定にも役立つかもしれない確率の雑談をします。
コイン投げ100万回
コイン投げをシミュレーションしてみました。
もしも100万回のコイン投げをしたら、最大何連敗(コインの裏)するのかを調べてみました。
まず、表を+1、裏を-1として推移を図示したのが次です。
大負けしているように見えると思いますが、勝率は約50%です。
[1] "勝率: 49.9696 %"
図らずも、コンマ数%の劣位性が視覚化されています。
ここで一つ言えることは、優位性も劣位性も数値化すると実は僅差であり、おそらく常人が感覚的に捉えるには至難です。
連敗に注目
さて、話を戻して最大連敗数ですが、今回の試行では20連敗でした。
[1] "最大連敗数: 20"
また、平均連敗数も調べてみると、約2連敗でした。
[1] "平均連敗数: 1.99950442421287"
ここで注意点ですが、2連敗した後は勝ちやすいと考えるのは錯覚(ギャンブラーの誤謬)らしいです。
コイン投げは一回一回が独立の事象なので、2連敗した後でも勝率は50%ということです。
コード
# 必要なパッケージをインストールします
if (!require(ggplot2)) install.packages('ggplot2')
# 乱数の種を設定します
set.seed(123)
# 試行回数を設定します
num_tosses <- 1000000
# コイン投げのシミュレーションを行います
coin_tosses <- sample(c(-1, 1), size = num_tosses, replace = TRUE)
# 試行を繰り返します
bet <- 1
cumulative_sum <- numeric(num_tosses)
consecutive_losses <- numeric(num_tosses)
max_consecutive_losses <- 0
current_consecutive_losses <- 0
loss_streaks <- numeric()
current_loss_streak <- 0
for (i in 1:num_tosses) {
cumulative_sum[i] <- bet * coin_tosses[i]
if (coin_tosses[i] == -1) {
bet <- bet * 1
current_consecutive_losses <- current_consecutive_losses + 1
max_consecutive_losses <- max(max_consecutive_losses, current_consecutive_losses)
current_loss_streak <- current_loss_streak + 1
} else {
bet <- 1
current_consecutive_losses <- 0
if (current_loss_streak > 0) {
loss_streaks <- c(loss_streaks, current_loss_streak)
current_loss_streak <- 0
}
}
consecutive_losses[i] <- current_consecutive_losses
}
cumulative_sum <- cumsum(cumulative_sum)
# 最後の連敗数を記録します(ループの最後で勝っていない場合)
if (current_loss_streak > 0) {
loss_streaks <- c(loss_streaks, current_loss_streak)
}
# 勝った試行の数を計算します
num_wins <- sum(coin_tosses == 1)
# 勝率を計算します
win_rate <- 100 * num_wins / num_tosses
# 平均連敗数を計算します
average_loss_streak <- mean(loss_streaks)
# 最大連敗数が何回起こったかを計算します
max_loss_streak_count <- sum(loss_streaks == max_consecutive_losses)
# 結果を表示します
print(paste("勝率:", win_rate, "%"))
print(paste("最大連敗数:", max_consecutive_losses))
print(paste("平均連敗数:", average_loss_streak))
print(paste("最大連敗数が起こった回数:", max_loss_streak_count))
# データフレームを作成します
df <- data.frame(Toss = 1:num_tosses, CumulativeSum = cumulative_sum, ConsecutiveLosses = consecutive_losses)
# 折れ線グラフを作成します
ggplot(df, aes(x = Toss, y = CumulativeSum)) +
geom_line() +
labs(title = "Coin Toss Simulation", x = "Number of Tosses", y = "Cumulative Sum")
あとがき
余談ですが、100万回の試行で20連敗は2度ありました。
まさか偶然のコイン投げで2度も20連敗するとは思いもよりませんでした。
とにかく確率は摩訶不思議です。
以上、さつま芋でした。