2020年7月14日 星期二

找死

延續上文的討論,若用現在手上的model賭馬不能贏錢,是否做一個更強的、統計指標更漂亮的model就能扭轉乾坤?個人觀點是,不宜過度關注及追求model的統計指標,而應該好好了解一下自認為有效model的“效果”從何而來。

如果用來砌model的那堆data叫D1,未開跑那堆data叫D2,池某所接觸過的model使用者,不論是用logit model的還是用AI的,無一例外,都總會全副心思放在D1,費盡精力尋找有效factors,絞盡腦汁令model的統計指標看起來更“靚”,認為只要將model做到越強越有效就行,而從不理會D2的分佈會有怎樣的可能。

然而,實際上贏錢與否無關model的強弱,反而與D1、D2的分佈是否一致的關係更大。若D2的分佈遠遠偏離D1,用D1的regression結果去“預測"D2顯然是找死,而且model越強越有效就死得越慘烈。

又由於D2相對於D1是小樣本,即使是random的因素,也會令其分佈偏離於D1成為大概率事件。最常見的就是兩、三個月不贏馬的騎師、練馬師突然一日贏兩、三場;或者一條一向利放頭的跑道突然轉向大利後上等等,涉及方方面面各個factor的例子不勝枚舉。

我們做過regression都知道,如果data的分佈是random的,factors就會無效,做出來的model也會沒什麼效果;data分佈極端且趨向明顯,做出來的model效果才好,統計指標才“靚”。因此,一個model看起來統計效果好、factors看起來有效,多數是因為data分佈極端偏離所致。用這樣一個本來就分佈偏離的D1的regression結果,去“預測"一個分佈偏離幅度更大且無定向的D2,不輸錢才怪。

但人們一旦輸了錢,首先想到的就係個model唔夠勁、factors唔夠有效,於是搜索枯腸,將同一堆data左配右搭,搓圓撳扁,生搬硬砌,以期砌出一個統計指標更好的、看起來更有效的model,結果是統計指標越“靚",偏離就越大,輸得越慘,然後,重來,砌一個更“勁"的model……,陷入死完再找死的循環之中。



Overfitting的問題,不是不懂,但人們總是會自然而然地踏上這條死路而不自知。找出不為人知的有效factors,固然是令model取得或保持優勢的最好方法。問題是,一旦聽聞或心裡覺得某個factor會有效,或有了factor A定會比factor B更有效之類的執念,經過一輪死砌爛砌之後,這些主觀想法是一定能自我實現的,於是就不經不覺地自掘墳墓,墮入自找的overfitting陷阱。

55 則留言:

  1. 好奇一問,D1個dataset可以拆成train set, validation set, test set,做cross validation應該可以避免overfit,定係仲有其他原因咁做都唔掂?

    Wanderer

    回覆刪除
    回覆
    1. Wanderer兄,你所做既野都仍然係用緊D1既data,但係如果D1既分布同D2相差太遠,咁係實戰情況就係你既factors對D2既解釋力弱。
      個人認為D1同D2既分布分別同大家所講既factor質素有關。
      加上池兄應該係想強調如果將某一個factor fitting到對D1極致,會令到該factor對D2變成毫無意義,或者會有反效果。

      刪除
    2. Wanderer師弟,其他統計問題是否這樣池某沒有深究,唔清楚。
      賭馬問題主要是因為心魔,自詡技術型的賭仔總帶點自負,自以為是,加上輕易就可獲得漂亮可靠的統計指標佐證自己先入為主的想法,很容易有點飄飄然的成功感而樂於身陷其中。
      池某認為要消滅這個心魔就需要放下執念,放任自然,接受不完美。寫下這篇,也是給自已一個警醒。

      刪除
    3. 宸獋憴兄,你表達得比池某更好更到point,應該也是在這問題打過轉才理解得這麼深刻。

      刪除
    4. 完全師承池兄。多得池兄blog上文章才能一探究竟。在此拜謝。

      刪除
    5. // 你所做既野都仍然係用緊D1既data,但係如果D1既分布同D2相差太遠,咁係實戰情況就係你既factors對D2既解釋力弱。

      打了一大段中英夾雜很別扭...

      If the non-stationarity of the distributions of D1 and D2 is the inherent property of the super data space D, then you should also expect such non-stationarity exists within the subspaces of D1, i.e. the distributions of D1_i and D1_j vary. The issue should show up when you do the cross validation, and it is impossible to achieve excellent performance in cross validation if your model has a strong assumption on stationarity.

      I just wonder what kind of special nature of horse racing data could possibly destroy cross validation. Again, I have zero knowledge of the horse racing data. I am just being curious as an enthusiast of data analysis.

      Wanderer

      刪除
    6. 為免誤會,我上面的「打了一大段中英夾雜很別扭」是指我原本在打的回覆中英夾雜太厲害,所以最後索性全英算了。

      Wanderer

      刪除
    7. Wanderer兄,

      小弟是肯定及認同Wanderer兄的數理底子的, 但小弟並非理科出身, 一直有很多統計學原理不明白, 有機會要請Wanderer兄指點一下。
      (1) 今天賽前我有一個factor A, 發現它的p-value大於0.05, 係咪將佢不放在model比較好?
      (2) 另外有個叫factor B, 發現它的p-value少於0.05, 係咪就將佢放入model比較好 ?

      兩個問題, 望兄能指點一二, 感謝

      門外看字

      刪除
    8. Wanderer師弟,用D1做model對D2作預測,很多方法都可以做到很好的效果,問題是好到什麼程度才足夠。
      賭馬問題特別之處是D2的分佈可能是「有形」的且是高標準的,其顯現的「形」就是RO,若model的結果不能戰勝RO,不管model做得多漂亮,統計指標有幾靚,也只是廢物一個。
      但RO的標準是很高的,而且一年比一年高,過去30年,RO的R^2已由0.13左右飆升至現在的0.22,這意味著過去能贏錢的model,如果不能與時並進,只會越贏越少,甚至由贏變輸;在2 step model顯示的結果就是alpha越來越細。
      要搞返大alpha,最好的方法當然是找出更多不為人知的有效factors(即你所說的special nature),而這是所有遊戲參與者幾十年來像尋寶一樣拚命發掘的東西,要找到別人未發現的寶物談何容易。
      即使找不到更多有效factor,還有另一個途徑也可以令alpha變大,而且非常容易,就是將原有的factors overfit,於是又走回那條死路。
      所以說這不是單純的技術性問題,而是心魔。

      刪除
    9. 為什麼把原有的factors overfit 會是非常容易? 把原有factors 做不同的transformation? 把原有factors 做interactions? 但要保持p-value < 0.05也不會是容易吧?

      刪除
    10. 難易是相對的,與找出不為人知的有效factor相比,這當然是容易得多。實際上要保持p-value < 0.05也不是難事,只要將各種條件不斷細分,再做transformation將邊緣的分佈稍稍凸顯出來就能做到。

      刪除
    11. 請問 這段「但RO的標準是很高的,而且一年比一年高,過去30年,RO的R^2已由0.13左右飆升至現在的0.22」

      RO的全寫是甚麼?

      刪除
  2. 池兄重新寫文~大力支持!

    回覆刪除
    回覆
    1. 哈哈。手痕時隨時可以寫,懶得寫時隨時可以唔寫,冇要求、冇包袱,咁先叫自由。春花小妹同意否?

      刪除
  3. Regression的好處, 是能夠充份地, 科學化地從歷史中學習
    而 Regression 的壞處, 是假設了歷史只會不斷重演

    回覆刪除
    回覆
    1. 於是賭馬又從統計學問題變成了心理學、哲學問題。XD

      刪除
    2. 歷史會不會重演係一個問題
      我哋有冇甘長命見到佢重演 又係另一個問題
      呢個題目好似應用响大彩池比較適合

      响win pla q中歷史好明顯係不斷重演
      只係你估得中時 馬會賠又吾足比你姐

      刪除
    3. 即使賽果一樣,形勢條件和賠率唔同咗,也不能算「重演」了。

      刪除
  4. 真係又去左哲學問題....呵呵
    羅文都有唱 : 知否世事常變,變幻原是永恒.......
    法無定法, 所有隨機性都是必然性, 所以我這類門外看馬迷要求model能不停變態, 只希望比普通馬迷反應快一點

    回覆刪除
    回覆
    1. 應對變化model的反應一定比普通馬迷慢。上篇文章談過了,大堆歷史數據會令model面對急劇變化時「積重難返」。

      刪除
    2. model可以是2D,3D,4D,5D...「積重難返」似乎是data的取樣過長, 不過大家取樣方式不同, 池兄的憂慮是合理。
      好些地方, 宏觀跟池兄想法一樣, 但處理做法甚至用詞, 卻跟池兄好多處是相反, 這正是砌模型好玩之處

      刪除
    3. 做法相反很好呀。千篇一律太沒個性,可供討論的空間也太狹窄。百花齊放、百家爭鳴才是思想交流的最理想環境。

      刪除
  5. HI
    DHFS 個賠率越來越差...
    600K 彩池1200注中 @@
    幾時會係個邊界變得無利可圖?
    另,有幾次好多注中的時候係自己MODEL 都放到好後, 可能有埋人發現左新計法去玩~

    回覆刪除
    回覆
    1. 呢個彩池好耐冇睇了。
      馬仔開始抖暑今日又咁啱執完啲data,無聊得滯篤下孖膽,竟然就中左。池某覺得派$3700算OK。呢注在池某個model排第14。
      池某個爛鬼孖膽model已經擺喺度12~13年了,一直冇upgrade過(時間和精力都放在馬仔了),冇理由過咗咁多年都冇更勁的新計法出現啩。

      刪除
  6. 由15年睇返你寫嘅嘢 好正 希望9月5號之後再見你

    回覆刪除
  7. 作者已經移除這則留言。

    回覆刪除
  8. 池兄, 請問你用SAS, 係咪用phreg?

    回覆刪除
    回覆
    1. 似乎無用錯function
      做了三十多個因子, 包括左啲大路野如騎師、練馬師、檔位、負磅、馬匹體重、體重變化、路程變化、近績等等
      r2 只得0.16x
      可能是時候要放棄了

      刪除
    2. 池某認為樓上宸獋憴兄的說法比較到位,Model的效果與factors的質素關係較大。

      刪除
    3. 可以請問池兄用proc logistics 和 proc phreg的分別嗎?

      刪除
    4. 呢個問題真係冇深入研究過。
      只記得好耐之前有睇過文章話用proc logistics對data有某啲限制(具體係乜限制都唔記得)而令舊版的SAS無法使用,從此就不再考慮proc logistics了。同時了解過censored data用proc phreg是合適的。

      刪除
    5. proc phreg在做prediction的時候沒有proc logistics那麼方便😂
      趕在開季前把code修改,看看兩個的分別

      池兄看馬會有無機會將拎賠率的xml link作出更改?

      刪除
    6. 8月中S1賽日條xml link仍正常。
      暫時發現馬會新賽季只改過排位表條link,且冇咗往季排位資料,如果現在剛起步搵資料做model就大鑊了。

      刪除
    7. 馬會咁狠
      以後會少左好多學術研究報告用香港賽馬,無資料無得研究

      刪除
    8. 部份資料可以由賽果同馬匹晨操表搵返,但係「優先參賽次序」呢類data就唔知點算了。

      刪除
    9. 我見坊間好多人/公司賣馬料,佢地要多謝馬會,哈哈

      池兄知道而家仲有邊到有得拎到過去既位置賠率嗎?蘋果馬網好似搵唔到

      刪除
    10. 真係唔知,位置不是池某主攻彩池。
      睇黎而家開始應該儲低,將來可以賣錢。XD

      刪除
    11. 如果香港賽馬彩池同港匯頂得住,啲馬料應該越黎越值錢🤣🤣

      刪除
  9. 池兄及各位高人好,此版確是很多厲害之人,大家的高見,小弟甚為佩服,故也有些問題想請各位指教.

    1.如池兄所說用2季data比較好,但實際情況是用太少data,又真的很難找到很多有效的factors,大部份都會撞,小弟實在不明白在如此小的sample size裡如何可以找到超過70甚至100個以上有效的factors,這方面該如何取捨?

    2.如上文所說model應優先考慮賽馬的基本情況對賽果的影響,那麼是不是也可以把一些常識上合理但p value大過0.5的factors也放進去用呢?

    3.請問如果想玩過關,可以用哪種方法來計算,因為小弟用的是2 step,不可能提前知道下一場的ro,池兄能否給一些hint呢?

    4.請問如何用獨贏ro來推算大概三重彩和單T的ro?

    謝謝

    回覆刪除
    回覆
    1. 1.多些data可以支撐多些factors,但factors對近期的分佈變化反應會較遲鈍,若在factors的質量與數量間取捨,個人傾向選擇前者。

      2.池某有時會保留個別p-value稍稍大於0.05的factors,因為可能更新一兩次data之後又會回復小於0.05。

      3.過關的注碼分配可以用simultaneous Kelly,但賠率的偏差肯定會很大,無法提前預估。

      4.用Harville formula或Benter Correction等等都可以。

      刪除
    2. 謝池兄解答

      基於問題1,如果是取較少sample size,即謂池兄所說比較重factors的質量, 如是者亦即是有效factors數量也會相對的較少.

      小白想不通的點是,相信無論是初級或是專業的model,基本打底的factors也應該離不開騎練勝率,檔位,負磅,馬匹體重,體重變化,路程變化,近績等等,而且上文說data愈raw愈好,但如上所說較少sample size會傾向得到較少有效factors數量,如是者在sample size的限制下,model本身已填滿了不少基本款factors,理論上能再塞入更多有效factors的空間也應該接近飽和,小白的model就是遇到這問題.

      小白怎樣也想不明,這樣的做法,有限的factors,真的可以砌到r2>0.22的model?
      還是真的整個model要棄用基本factors,而全部改用充滿極其有效但卻不為人知的factors才可能做到呢?

      被factors搞到頭昏腦漲的小白上

      刪除
    3. 這個完全是個人偏好問題,sample size的大細各有優點缺點。

      用較大的sample size,model會比較穩定,但對近期的分佈偏差反應較慢;用較細的sample size可以改善反應慢的問題,缺點是想維持各factor效果均衡就要很勤力做rebalancing。

      至於model相對於RO的效果,兩者是差別不大的。若比較2 step的alpha和beta,大家都知道sample size不變時,有效factors越多,alpha就越大;其實反過來做也一樣,有效factors數量不變時,data的sample size越細,alpha也會越大。

      印象中Benter曾說過,用500場以上的data就可以做出一個見到效果model,現在兩季data已越過1600場,不算少了。

      刪除
  10. 關於統計factors和variables的選用,小弟今個夏天在研究賭波的program時發現,以minimize p-value/adjusted R^2 既ratio來作model既選擇帶來既效益會系最大.不論actual return還是hit rate在backtesting都系表現最好的,不知池兄認為呢個condition是否有用?

    題外話,小弟的波馬program都是啟發自池兄這個blog,再開始落手落腳砌model.
    現在更對數據科學產生濃厚興趣,正在修讀master degree.在此十分感激池兄在這個blog的無私分享!實在獲益良多.

    回覆刪除
    回覆
    1. 首先梗係要祝兄台學業有成!可以找到自己的興趣又能投身其中,實在是一件幸福的事。
      砌model問題,砌出靚的統計指標當然是有用的,也是每個砌model者所追求的,現實中最大的問題是有些factors本身的data分佈偏向性不明顯,而會令其指標靚極有限。
      個人經驗是minimize p-value已經可以令backtest的表現最好,但實際操作上會出現一個矛盾,就是上面提及的分佈偏向性不明顯factors,若minimize其p-value,這類factors就會變得過強,危害很大。面對這類factors,池某的做法是寧願保留一個不太靚的p-value,也要盡量壓低其Hazard Ratio。

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. 小弟說得不夠清晰,minimize p-value/adjusted R^2 既ratio是指run multiple regression時的 model p-value 同R^2. 在這個process中suppose分佈偏向性不明顯的factors都會因為p-value高於0.05而被rejected.

      小弟的賭波model做法是assume左莊家對球隊實力已經有全面而準確的計算.所以主要是針對幾個關於盤口的factors例如賠率變化,水位高低之類作一點grouping,專業一點說就是classification. 由於model中所謂"基本因素"的factors相當少.基本上會用作regression的,80%都是raw data.但應該是因為賭馬model是有些在現實中不能夠忽略的factors例如檔位,跑道欄位之類,在model中reject是不符現實情況,所以池兄的做法會以minimize Hazard Ratio為目標.

      刪除
    4. 正是如此。賭馬model想搵多幾個有效factor都唔容易,若還要以苛刻的統計指標為「緊箍咒」,恐怕可用的factor所剩無幾。

      刪除
    5. 最近為收集賽馬Data發愁,發現非常複雜繁瑣。例如有一篇paper話用一個factor,馬匹average speed rating , 馬會本身都無呢個數據,想到只有用路程除時間代替,難到要我將呢匹馬的賽事都看一篇,然後再給一個評分。池兄有無解決辦法?

      刪除
    6. 池某鍾意簡單直接粗暴的解決問題方式,彎彎繞繞、轉轉折折的處理方法都會盡量避免。如果目的只是想比較跑過不同跑道及不同路程的馬匹的能力,池某認為使用兄台在樓下提到的跑道標準時間是更直接有效的做法。

      刪除
  11. 例如搵到呢個跑道標準及記錄時間,對於會用的人,呢個資料一定好有用。但對於我呢個門外漢,都不知道如何下手。

    https://racing.hkjc.com/racing/chinese/racing-info/racing_course_time.aspx

    賽馬太複雜,暫時又想轉去學玩孖膽。

    回覆刪除