RTP

老虎機變異數計算器:用標準差算出你 100、500、1,000 轉後的盈虧範圍

每次有人問我「這台機台我玩了 300 轉輸了 800 元,是不是機台有問題」,我都想回一句:你知道 300 轉的「正常範圍」是多少嗎?大多數人不知道,因為機台只告訴你 RTP,不告訴你標準差。這篇我把算法攤開,用三台模擬機台各跑一萬場驗證公式是對的,最後給你幾行可以自己改數字的程式碼。

TL;DR

  • 每轉標準差從賠付表算:Σ 機率 ×(賠率 − RTP)² 再開根號。我造的三台 RTP 96% 機台分別是 2.67、8.74、24.87。
  • n 轉後:期望值 = n × 注金 ×(RTP − 1),標準差 = 每轉標準差 × 注金 × √n。注金 10 元、500 轉、標準差 8.74 的機台:期望 −200 元,±1 個標準差是 ±1,954 元。
  • 本金 100 注的破產機率隨轉數暴增:中波動機台 100 轉 0%、500 轉 58.5%、1,000 轉 77%。期望值是負的,時間不是你的朋友。

變異數是什麼:RTP 只講平均,它講分散

RTP 是期望值:每押 1 元平均拿回多少。但「平均」掩蓋了一件事——老虎機的單次結果幾乎從來不等於平均。你一轉的結果是 0、0、0、2 倍、0、50 倍、0……平均起來是 0.96,但你實際經歷的是這串鋸齒。

變異數(variance)量的就是鋸齒有多大:每個可能結果跟平均的距離平方,用機率加權後加總。開根號得到標準差(standard deviation),單位跟注金一樣,比較好懂。公式:

RTP = Σ p_i × x_i
Var = Σ p_i × (x_i − RTP)²      ← 記得把「不中」那項 x=0 也算進去
SD  = √Var

我造了三台 RTP 都調到 96.00% 的模擬機台,賠付表長這樣(機率是每轉中該獎項的機率,賠率是注金的倍數):

機台 賠付結構(機率→賠率) 命中率 每轉標準差
低波動 20%→2.4、12%→4.7、5%→7.1、2.5%→11.8、0.8%→47、0.1%→118 40.4% 2.67
中波動 14%→1.4、7%→2.8、4%→5.6、2%→11、0.6%→42、0.15%→140、0.03%→700 27.8% 8.74
高波動 10%→1.3、5%→2.6、3%→6.4、1.2%→19、0.4%→64、0.12%→257、0.02%→1,285、0.004%→6,425 19.7% 24.87

讀這張表的方式:三台的 RTP 一模一樣,差別全部在「錢怎麼分配」。低波動把 96% 的回報切成很多小塊、頻繁發回來;高波動把大部分回報鎖在那個 0.004% 機率的 6,425 倍裡,平常你拿到的只是零頭。同樣押 1 萬轉,三台平均都還你 9,600 元,但過程的體感天差地遠,而體感就是標準差在量的東西。

這三台是我自己設計的假機台,不是任何真實遊戲;真實機台的賠付表通常不公開完整機率,所以你算不出精確值,但可以用「廠商標的波動等級」對應到這三個量級:低 2~4、中 6~10、高 20 以上。Wizard of Odds 的賭場遊戲總表列了一台老虎機的標準差 8.74,我的中波動機台就是刻意對齊這個數字。

從每轉標準差推 n 轉的範圍:√n 公式

n 次獨立旋轉加總,期望值乘 n、變異數也乘 n,所以標準差乘 √n。寫成錢:

期望盈虧   = n × bet × (RTP − 1)
標準差(元) = SD × bet × √n

套進注金 10 元:

轉數 期望盈虧 低波動 ±1σ 中波動 ±1σ 高波動 ±1σ
100 −40 ±267 ±874 ±2,487
500 −200 ±597 ±1,954 ±5,561
1,000 −400 ±844 ±2,764 ±7,865
5,000 −2,000 ±1,888 ±6,180 ±17,586

回到開頭的問題:300 轉輸 800 元正常嗎?中波動機台 300 轉的期望是 −120 元、標準差 1,514 元,輸 800 元離平均不到半個標準差,是非常正常的結果。機台沒有問題,是你的「正常」太窄了。

注意一個重點:期望值隨 n 線性成長(5,000 轉就是 −2,000),標準差只隨 √n 成長。轉數越多,那條負的期望線越壓過波動。低波動機台 5,000 轉之後期望 −2,000、標準差 1,888,你要有 +1 個標準差以上的運氣才能勉強打平。這就是「長期一定輸」的數學版本,長期模擬那篇有圖。

我一開始用 √n 公式算完就打算直接發文,後來覺得不踏實,畢竟公式假設結果是常態分布,但高波動機台的賠付表是極端右偏的——九成的時間在輸小錢,偶爾一個 6,425 倍。所以我寫了模擬器,每台機台每種轉數各跑 10,000 場來對。結果公式算的標準差跟模擬幾乎一致,但「範圍」不對稱:高波動 100 轉的 5% 分位是 −790 元、95% 分位是 +1,081 元,下檔比上檔窄。原因是你最多只能輸光注金 × n,卻可能贏一個大獎。公式給你量級,形狀還是要靠模擬。

破產機率:本金有限時,公式會騙你

√n 公式有一個隱藏假設:你的錢是無限的,可以一路轉到 n 次。現實是你帶了 1,000 元,中途歸零就結束了,那些「後來會贏回來」的路徑你走不到。這叫賭徒破產問題(gambler's ruin),維基百科上有不公平硬幣的封閉解,但老虎機的賠付是多值的,我直接用模擬:本金 1,000 元、注金 10 元(100 注),餘額不足一注就算破產。

轉數 低波動破產率 中波動破產率 高波動破產率 低/中/高 結束時有賺
100 0.0% 0.0% 0.0% 36.6% / 25.2% / 17.4%
500 12.3% 58.5% 80.9% 34.6% / 23.8% / 12.7%
1,000 38.2% 77.0% 90.5% 29.3% / 18.4% / 8.4%
5,000 87.8% 92.0% 97.1% 8.9% / 7.5% / 2.9%

三個觀察:第一,100 轉內沒有人破產,因為 100 注的本金撐 100 轉本來就綽綽有餘,波動還沒機會發揮。第二,500 轉是分水嶺,中波動已經過半破產、高波動八成,低波動只有 12%。第三,「結束時有賺」的比例在同樣的 RTP 下跟波動成反比——高波動機台不是「有機會大贏」而已,它是「大多數人輸光、極少數人大贏」,平均起來剛好 96%。

這張表的用法是反過來看:你今天帶的錢是「幾注」、打算轉幾次、機台什麼波動,查表就知道大概幾成機率會撐不到結束。想撐 500 轉又不想超過 10% 破產率,中波動機台的本金要拉到 200 注以上,這在資金管理那篇有更細的表。

自己算:十行程式碼

把你的賠付表(或你估的)填進去就能算:

import math
pay = [(0.14,1.4),(0.07,2.8),(0.04,5.6),(0.02,11),(0.006,42),(0.0015,140),(0.0003,700)]
rtp = sum(p*x for p,x in pay)
var = sum(p*(x-rtp)**2 for p,x in pay) + (1-sum(p for p,_ in pay))*(0-rtp)**2
sd  = math.sqrt(var)
bet, n = 10, 500
print(f"RTP {rtp:.4f}  SD/spin {sd:.2f}")
print(f"{n} spins: EV {n*bet*(rtp-1):+.0f}, 1σ ±{sd*bet*math.sqrt(n):.0f}")

跑出來:RTP 0.9600、每轉標準差 8.74、500 轉期望 −200、±1,954。如果拿不到完整賠付表(多數情況),退而求其次的做法是用 Demo 模式記 1,000 轉的每轉結果,直接算樣本標準差——不精確,但量級不會錯。

我第一版程式漏了「不中」那一項,算出來中波動機台的標準差只有 6.1。那一項的賠率是 0,看起來好像不用算,但它的機率是 72%,而(0 − 0.96)² × 0.72 貢獻了將近 0.66 的變異數。寫公式最容易漏的永遠是「什麼都沒發生」的那一格。

常見問題

老虎機的變異數和標準差怎麼算? 把賠付表每個獎項的「賠率 × 機率」加總得到 RTP;再把每個獎項(含不中的 0)的(賠率 − RTP)² × 機率加總就是變異數,開根號是每轉標準差。低波動大約 2~4,中波動 6~10,高波動超過 20。

知道標準差之後怎麼算 n 轉後的範圍? 期望值 = n × 注金 ×(RTP − 1),標準差 = 每轉標準差 × 注金 × √n。標準差 8.74、注金 10 元、500 轉:期望 −200 元、標準差 1,954 元。

為什麼轉越多次,破產機率越高而不是越低? 期望值是負的。標準差只隨 √n 長,期望損失隨 n 長。本金 100 注、中波動機台:100 轉破產 0%、500 轉 58%、1,000 轉 77%、5,000 轉 92%。

這個計算器能幫我贏錢嗎? 不能。它改不了 RTP,只能讓你事前知道「輸 500 元是正常範圍」,而不是輸了 500 才去追。

延伸閱讀