有趣的統計學(3)

雖然平均來看,莊家的優勢勝率沒有改變,但由於莊家明牌是可視的,明牌不同時,莊家與玩家的勝率是有變化的。這也是 Bayes 所教導我們的原理:看統計數字不能只看平均值和標準差。往下鑽研看到「條件機率」的話,也許可以改變局勢。

上一回用了些章節,說明這個 python 模擬程式的大致狀況。實際做了模擬,發現玩家僅僅改變叫牌策略並不能克服「先手劣勢」。在單一的叫牌策略中,低於(不含) 15 點叫牌的話,莊家的勝率是比較低的,約為 53.7%。這一節,我們來認識一下,莊家在平均53.7% 的勝率下,有沒有我們可乘之機?

二十一點的通用規則中,莊家會顯示一張「明牌」(下表欄位為Bank_Card)。我們試著從明牌的角度來分析莊家的勝率是否跟明牌顯示的結果相關。程式並不困難,利用前節所提的 python 物件組合成一位莊家四位玩家五萬次牌局的模擬程式。結果是這樣:

Bank Card 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Q 
K 
A 
Plays 
15172 
15350 
15475 
15355 
15595 
15592 
15512 
15480 
15108 
14895 
14940 
15544 
15758 
6633 
6785 
6514 
6431 
6254 
6720 
7187 
7832 
8295 
8405 
8458 
8809 
10151 
Loses 
7245 
7389 
7824 
7732 
8201 
7515 
6945 
6214 
5333 
4959 
5013 
5209 
4047 
Equals 
124? 
1185 
1138 
114? 
1141 
1457 
1379 
1434 
1480 
1521 
1459 
1525 
1570 
Win_Rate 
0.45 
0.46 
0.43 
0.47 
0.51 
0.56 
0.61 
0.63 
0.63 
0.63 
0.71

這張表告訴我們很重要的資訊,在平均53.7%的勝率下,莊家的明牌如果是 2~7,其勝率低於50%,而明牌如果是 8, 9 勝率在 50-60%,10 和 A 的勝率,都高於 60%。

修改玩家的叫牌策略,看來沒有很好的變化:低於(不含) 13 叫牌的結果如下表。我們發現一個規律,莊家明牌如果是 5,6, 降低叫牌可以增加1-2% 勝率。背後的邏輯很簡單,明牌如果 5 或 6,另一張不論是什麼牌,莊家都得再叫牌。只要叫牌,10點 (包括 10, J, Q, K)的機率約有 30%,很容易爆牌。另一個發現,莊家的明牌如果是 7,8,9,那麼莊家贏牌的機率變高約 2%。

Bank Card 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Q 
K 
A 
Plays 
15728 
15924 
15280 
15248 
15472 
15656 
15588 
15412 
15320 
15204 
14932 
15156 
15080 
Wins 
7153 
7152 
6604 
6301 
6083 
7089 
7657 
8306 
8834 
8869 
8688 
8766 
10153 
Loses 
7613 
7724 
7772 
8049 
8489 
7400 
6810 
5909 
5157 
5065 
5009 
5100 
3643 
Equals 
962 
1048 
904 
898 
900 
1167 
1121 
1197 
1329 
1270 
1235 
1290 
1284 
Win Rate 
0.48 
0.48 
0.46 
0.44 
0.42 
0.49 
0.53 
0.58 
0.63 
0.64 
0.63 
0.63 
0.74

所以,我們可以調整叫牌策略,當莊家的明牌為 5,6 時,我們要確保自己不爆牌。其他的時候,採用玩家勝率較高的叫牌策略 – 低於 15 叫牌。不過,我們知道,雖然提昇了些許勝率,但莊家的明牌如果是 10,J,Q,K,A 玩家勝率輸莊家太多,這樣的改變對輸贏的結果並沒有太大的幫助。

Bank Card 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Q 
K 
A 
Plays 
15796 
15332 
15292 
15648 
15540 
15352 
15452 
15252 
15216 
15508 
15360 
15204 
15048 
Wins 
7139 
6837 
6519 
6326 
6455 
6663 
7189 
7663 
8465 
8600 
8602 
8296 
9774 
Loses 
7314 
7319 
7660 
8504 
8252 
7322 
6916 
6174 
5187 
5350 
5218 
5310 
3710 
Equals 
1343 
1176 
1113 
818 
833 
1367 
1347 
1415 
1564 
1558 
1540 
1598 
1564 
Win Rate 
0.49 
0.48 
0.46 
0.43 
0.44 
0.48 
0.51 
0.55 
0.62 
0.62 
0.62 
0.61 
0.72

改變莊家的勝率不容易,但其實改變輸贏的結果不難。如果莊家的明牌對我們有利的時候,我們增加籌碼,例如,十倍的賭注,我們來看看結果:

當 莊 冢 5 , 6 , 12 以 下 : ; 牌 。 否 15 以 下 囗 L ; 牌 
玩 冢 : 1 ins : 21238 , 
loses = 24787 , in % = 0 · 461 , 
當 莊 冢 5 , 6 , 12 以 下 : ; 牌 。 否 15 以 下 囗 L ; 牌 
玩 冢 : 2 ins : 21459 , 
loses = 24574 , in % = 0 · 466 , 
當 莊 冢 5 , 6 , 12 以 下 : ; 牌 。 否 15 以 下 囗 L ; 牌 
玩 冢 : 3 ins : 21324 , 
loses = 24725 , in % = 0 · 463 , 
當 莊 冢 5 , 6 , 12 以 下 : ; 牌 。 否 15 以 下 囗 L ; 牌 
玩 冢 : 4 ins : 21262 , 
loses = 24666 , in % = 0 · 463 , 
基 本 邏 黽 , 17 以 下 牌 
money = 24386 
money=26029 
money = 25856 
money = 26823 
莊 冢 , w 工 ns : 98752 loses = 85283 in % = e . 537 , 
money= -13e94

哈,雖然平均來看,莊家的優勢勝率沒有改變,但由於莊家明牌是可視的,明牌不同時,莊家與玩家的勝率不同,這給了我們可乘之機。這同時也是 Bayes 所教導我們的原理:看統計數字不能只看平均值和標準差。往下鑽研看到「條件機率」的話,也許可以改變局勢。

改變二十一點的下注方式,將改變每次輸贏的期望值。如果每位玩家,在高優勢的牌局時提高下注的倍數,可以扭轉「輸牌等於輸錢」的情勢,變成「雖然輸牌的次數一樣,但能夠贏錢」…至於二十一點的規則,每一家賭場都有些許不同。一些書裏有說,某些賭場在發完牌,賭客還沒碰牌前,是可以調整賭注的。看來我們得去找到這些賭場,然後做做實驗了…

有趣的統計學(2)

從流程我們可以很明顯地看出來,玩家在叫牌的時候,有一定的可能會「爆」,爆了就輸牌輸錢。即使後手的莊家也爆牌,這一局兩人的對決還是莊家勝。這是典型的「先手劣勢」

擊敗莊家?

上一回用了些章節,說明這個 python 程式的大致狀況,接下來我們可以利用這個模型,看看統計和模擬可以教我們什麼。

首先,我們安排四位玩家和一位莊家,使用三副 156 張牌,用到剩下 40 張牌的時候,洗牌再玩。莊家的策略很清楚,依據二十一點的規則,莊家牌點小於十七的時候,必須叫牌。如果我們讓玩家的策略跟莊家一模一樣,低於十七點叫牌。下注都用最低標準的金額…假設為一塊錢(美金??)好了,我們看看結果如何? 對了,平手的局我們不算勝負,這樣子數據比較容易理解。

三十次的結果

玩家:1號, wins:14, loses=13, win%=0.519, money=10001

玩家:2號, wins:15, loses=12, win%=0.556, money=10003

玩家:3號, wins:14, loses=16, win%=0.467, money=9999

玩家:4號, wins:11, loses=16, win%=0.407, money=9996

莊家, wins:57, loses=54, win%=0.514, money=50001

在四位玩家使用同樣的策略下注叫牌、沒耍任何花招的狀況下,二號玩家勝率高達 55.6%,四號玩家只有 40.7%,這說明小數量的玩牌,的確有相當大的運氣關係。好消息是,玩了三十局,輸贏其實不大。小賭怡情,還行。

再一個三十次呢,玩家勝率的變化很大,限於篇幅,有興趣可以自行測試一番。

三千次的結果

玩家:1號, wins:1265, loses=1446, win%=0.467, money=9848

玩家:2號, wins:1235, loses=1469, win%=0.457, money=9792

玩家:3號, wins:1272, loses=1430, win%=0.471, money=9872

玩家:4號, wins:1290, loses=1439, win%=0.473, money=9883

莊家, wins:5784, loses=5062, win%=0.533, money=50605

在四位玩家使用同樣的策略下注叫牌、沒耍任何花招的狀況下,四位玩家的勝率開始接近,輸的金額也慢慢浮現,這說明較大數量的玩牌,輸贏跟運氣的關係就降低了,莊家的優勢出現。

五萬次的結果

玩家:1號, wins:20939, loses=24369, win%=0.462, money=7036

玩家:2號, wins:20934, loses=24263, win%=0.463, money=7199

玩家:3號, wins:20910, loses=24324, win%=0.462, money=7092

玩家:4號, wins:20904, loses=24452, win%=0.461, money=6915

莊家, wins:97408, loses=83687, win%=0.538, money=61758

在四位玩家使用同樣的策略下注叫牌、沒耍任何花招的狀況下,四位玩家的勝率基本上是相同的,平均 46.2%,輸的金額的差異也不很大。這說明更大數量的玩牌,勝負機率回歸本質,玩家輸牌是「天注定」的…莊家則是擁有53.8%勝率,雙方勝率的差異達到 7.6%。

超過五萬次的結果,跟重覆跑五萬次的差異不很大。我們暫時用這個次數,做為分析的基準。

同樣的策略,玩家為什麼輸?

從流程我們可以很明顯地看出來,玩家在叫牌的時候,有一定的可能會「爆」,爆了就輸牌輸錢。即使後手的莊家也爆牌,這一局兩人的對決還是莊家勝。這是典型的「先手劣勢」,玩家不可不查也。

玩家的數量多寡是否對勝率造成差異?

我們把玩家的數目 num_players 調整成三和五,經過五萬次牌局的模擬,其結果和四位玩家的勝率狀況一樣。如果玩牌的局數不多,本身就有很強的運氣因素存在,那個不可控,我們先放一邊。

三玩家

玩家:1號, wins:20833, loses=24498, win%=0.460, money=6841

玩家:2號, wins:21008, loses=24401, win%=0.463, money=7075

玩家:3號, wins:20917, loses=24451, win%=0.461, money=6945

莊家, wins:73350, loses=62758, win%=0.539, money=59139

五玩家

玩家:1號, wins:20829, loses=24532, win%=0.459, money=6778

玩家:2號, wins:20853, loses=24299, win%=0.462, money=7009

玩家:3號, wins:21053, loses=24380, win%=0.463, money=7193

玩家:4號, wins:21098, loses=24152, win%=0.466, money=7400

玩家:5號, wins:20801, loses=24557, win%=0.459, money=6708

莊家, wins:121920, loses=104634, win%=0.538, money=64912

「先手劣勢」解法

既然玩家因為先手,有「爆」的機率導致劣勢,那我們叫牌策略就不應該跟莊家一樣。降低叫牌的門檻是否可以完全克服這個劣勢? 是的,驢子也是這樣想…我們來實際模擬:

我們讓四位玩家不約而同,把低於十七-相同於莊家的叫牌邏輯,改到十六點以下(不含十六)才叫牌,同樣下一美元一注,五萬次牌局:

玩家:1號, wins:21147, loses=24531, win%=0.463, money=6941

玩家:2號, wins:20774, loses=24827, win%=0.456, money=6307

玩家:3號, wins:20997, loses=24626, win%=0.460, money=6733

玩家:4號, wins:20907, loses=24626, win%=0.459, money=6603

莊家, wins:98610, loses=83825, win%=0.541, money=63416

低於十六叫牌,模擬出來的結果跟低於十七叫牌的差別不大,玩家的勝率差不多在 45.9%,莊家是 54.1%

低於十五叫牌,模擬出來的結果跟低於十七叫牌的差別不大,玩家的勝率差不多在 46.5%,莊家是 53.5%

低於十四叫牌,模擬出來的結果跟低於十七叫牌的差別不大,玩家的勝率差不多在 46.0%,莊家是 54.0%

低於十三叫牌,模擬出來的結果跟低於十七叫牌的差別不大,玩家的勝率差不多在 45.5%,莊家是 54.5%

低於十二叫牌,模擬出來的結果跟低於十七叫牌的差別不大,玩家的勝率差不多在 44.4%,莊家是 55.6%

低於十一叫牌,哪怕是驢子都會笑出來,咱們就不丟這個臉了…看出來了嗎,在一切不變的狀況下,改變策略低於十五叫牌,玩家的勝率雖然較高,但也遠遜於莊家,雙方勝率還是有 7.0% 的差距。如果我們分析資料,會看出雖然我們「爆」的機率降低,但點數不夠被莊家吃掉的機率提高了。所以,僅只是改變叫牌點數,並不能克服這個「先手劣勢」。

別擔心,還是有新的策略可以研究,讓我們繼續看下去。