有趣的統計學(1)

在完成數個月的訓練、成功解題完成專案之後。這些同仁們在自己的工作崗位,面對新的、類似的問題,就像換了一個人,把課堂所學的統計、實驗設計執行、甚至 minitab 的分析都丟在腦後,繼續用舊方法嘗試錯誤、浪費時間…

過去一年多以來,我的工作之一,是擔任公司 6 Sigma 黑帶大師。這個團隊主要在教導公司同仁如何用科學方法解決問題。我們一面開設 6 Sigma DMAIC 的課程,結合統計學、實驗設計、分析、minitab 的使用等…一面組織同仁形成專案小組,針對工廠實際面對的重大問題,輔導同仁實戰、解決問題。

另我十分驚訝的事實是,許多工作已有五年以上的研發、技術人員,對於如何做實驗、如何科學地分析實驗,得出結論(基本的模型)…了解十分有限。我詢問一位年資已經不短的同事,如果要開發一個新產品,可能的控制因子有十七個,那麼研發團隊要用什麼方法,把十七個因子的組合,做出一個客戶至少可以接受的產品? 那位同事緬腆並帶著神密的微笑說,G哥你不知道嗎,你們家附近有一間廟,十分靈驗…我不敢繼續往下問。不過,如果大部份的工程師,對於實驗設計的方法流程不清楚,主管也不要求,那麼做實驗基本上就淪為嘗試錯誤的吃時間、吃錢機器。

更另人難過的,在完成數個月的訓練、成功解題完成專案之後。這些同仁們在自己的工作崗位,面對新的、類似的問題,就像換了一個人,把課堂所學的統計、實驗設計執行、甚至 minitab 的分析都丟在腦後,繼續用舊方法嘗試錯誤、浪費時間…

在我們一再追問下,同事們反應,因為內心俱怕統計,所以即使知道使用科學方法是更有效率的解題方式,但真正對於使用 6 Sigma 和統計,內心還是十分抗拒。

有鑑於此,我思考用何種方式,讓統計變得更有趣、更生活化、更容易理解接受,進行在工作和生活中應用。接下來,我會做一些嘗試,把一些統計的觀念,透過例子和使用 python 程式的模擬和分析產生圖形,試著讓「數據說話」…如此一來,不單可以學習統計,也順變看一下程式如何寫。

我們如何開始呢? 不如從「有趣的例子」找起。

最近逛 Kindle 網路書店,也許是統計的書買比較多,Kindle 的 AI 推了一本「擊敗莊家-21點的有利策略」給我。這是由 Edward O. Thorp 所著「Beat the Dealer: A Winning Strategy for the Game of Twenty-One」的中文翻譯,讀起來十分地有趣。很棒的地方是很簡捷,前面兩章簡單地介紹了二十一點的規則,第三章開始就展開了基本策略。我一面讀這一本西元 1962 年出版的作品,一邊思考,也許我可以用 python 和統計來重新計算,作者給出的策略是否真的有用。當然,書中顯示的策略目前幾乎已經被賭場破解了,不過,這是一個十分有意思的題目,我可以用 Bayes 方法來計算一些可能性。

話不多說,我講一下這個程式的大致結構,有興趣的可以到 github 下載並測試。網址為:https://github.com/clin8870/playCards

整個模擬程式只有 350 行,扣掉一些物件的說明,應該很容易閱讀。如果你有 python 的環境,可以 pip install numpy, pandas, matplotlib, seaborn, jupyterlab 這些超級好用的模組,那麼本機就可以執行。如果不想麻煩建置本機的 python 環境,那麼推薦使用 google colab,直接可以連 github 的檔案(https://github.com/clin8870/playCards/blob/main/PlayCards.ipynb)執行看結果,省去諸多步驟。

程式一開始是建立一些模組的連結,咱們暫時不理它…這些模組的功能,後面用到時再慢慢說明。

第一個物件是 Player,建立一個玩家的基本資料,像賭本多少,下注金額的大小等等。下注和叫牌的邏輯都是最簡單的。未來如果我們的玩家有很厲害的算法的話,可以繼承這個基本物件做修改。

莊家我沒有用 dealer 這個字,因為「據說」大部份賭場都由機器來洗牌和發牌…莊家只是套用賭場的規則叫牌、輸錢時把錢賠給 Player,贏錢反之…在我的程式裏,我用 Bank,繼承 Player 物件,用 12 行程式碼就解決了。

然後就是撲克牌 Decker,也是一個很簡單的物件,定義了牌的點數、幾付牌的參數、洗牌的動作等等…含說明大約 50 行。

賭場 House 稍後複雜,因為要把這些玩家莊家撲克牌串在一起,然後每場牌局要紀錄下來以便我們事後分析。含說明 135 行。

因為只是自己測試研究,並不是商用的軟件,所以說明的部份比較簡陋…不過程式邏輯相當直覺,應該不難理解。

下一篇,我們就可以來解析,如何做到擊敗 21 點莊家…嗯…或是根本做不到…