第 31 章
縱貫資料的機器學習與資料驅動探索
機器學習(machine learning)走進一本寫給心理學家的方法書,既不是救世主也不是威脅,只是一組工具;工具的價值一律由「它回答什麼問題、又避開什麼錯誤」決定。本章從頭到尾守住這個立場。開篇先把預測(prediction)與解釋(explanation)分開,也就是 Breiman 命名的那兩種文化(culture)。一個為了預報(forecast)某位新病人會不會復發而最佳化的方法,要接受的證據檢驗,和一個為了說明復發何以發生而建的模型並不相同;把兩者混為一談,正好長出應用機器學習特有的兩種病理:一個因為給不出洞見而受讚揚的黑箱(black box),或一個毫無預測技巧的漂亮因果故事。承重的一節是誠實評估。縱貫機器學習最要緊的事實只有一個:為獨立資料設計的重抽樣(resampling)配置,一旦各列是同一批人的重複測量,就會洩漏(leakage)。隨機切分各列來檢驗模型,等於有一部分是拿它已經看過的人在檢驗它,報出來的準確度是膨脹的,而且任何演算法上的精巧都修不掉。本章先以數字示範那道洩漏,再建起修補它的重抽樣紀律:摺(fold)依人分組,估計模型推廣到新的人有多好;摺沿時間串接,估計模型預報一個人的未來有多好。兩種配置各自對應它們誠實評估的那項預測任務,而每一項都要對照最卑微的基準(baseline),也就是上一次的值。在這個基礎上,本章再發展真正做得了縱貫工作的方法:混合效果樹與森林在不忽略巢套(nesting)的前提下切分異質性(heterogeneity);軌跡分群(trajectory clustering)是第 22 章模型本位混合分配模型在演算法這一邊的對手;正則化(regularization)處理密集設計造出來的多預測變項問題;逐人預報則讓第 25 章的合併(pooling)教訓穿著預測的衣服回來。評估那一節立下的紀律,後面每一個方法都繼承。
學習目標
讀完本章之後,你應該能夠:(1) 把預測、描述(description)與解釋分成三種不同的研究目標,並判斷一個縱貫問題要的是哪一種;(2) 設計尊重依賴(dependence)的重抽樣:以依人分組交叉驗證(person-grouped cross-validation)估計對新的人的推廣,以前向串接(forward-chaining)估計個體內的預報,並認得出天真的逐列切分造成的洩漏;(3) 配適並解讀為巢套資料調整過的樹(tree)與森林(forest)方法,包含用於次群體發現(subgroup discovery)的成長參數樹與混合效果樹;(4) 執行演算法式的軌跡分群,並說清楚它相對於模型本位混合分配模型的取捨;(5) 把正則化用在多預測變項的縱貫問題上,並對選擇後推論(post-selection inference)保持誠實;(6) 以適當的度量、校準(calibration)與必備的基準(含持續性(persistence))評估預測表現;(7) 以排列重要性(permutation importance)與部分依賴(partial dependence)呈現負責任地解讀黑箱模型,並一律讀成描述;(8) 依當前標準報告一份預測研究,把事前固定的與資料決定的分開。
31.1 兩種文化,一位研究者
Breiman (2001) 在統計實務的兩種文化之間畫了一條線。資料建模的文化設定一個把輸入連到輸出的隨機模型,估它的參數,再解讀那些參數;它的通貨(currency)是解釋,效度(validity)建立在模型大致正確之上。演算法建模的文化把資料生成機制(data-generating mechanism)當成未知而且不可知,只找一個能在新資料上準確預測輸出的函數,不管那個函數多難解讀;它的通貨是預測技巧(predictive skill),效度建立在誠實的樣本外(out-of-sample)評估(evaluation)之上。心理學幾乎完全活在第一種文化裡。Yarkoni and Westfall (2017) 認為這讓整個領域付出了代價:過度投資(overinvestment)於解釋、相應地忽視預測,養出一批「配適得了既有資料、卻預報不了任何事」的理論,而借用機器學習的預測紀律正是一劑矯正。這個論證有力道,也引來了深思熟慮的反駁:預測與解釋是不同的目標,不是對同一個目標互相競爭的答案,因此一個領域要在兩者之間怎麼選,得由它想學到什麼推出來 (Shmueli, 2010)。
本書一路採用的調解仍然是「估計標的(estimand)優先」:選方法之前先把推論的標的講清楚,再讓那個標的同時決定方法與證據的標準。有些縱貫問題確實是預測性的。一位病人下個月會不會復發、哪些學生有輟學的風險、一次適時介入(just-in-time intervention)該在什麼時候觸發,問的都是「某一位特定的人身上會發生什麼」,而一個樣本外預測技巧夠高的模型就答得很好,它的內部好不好解讀並不影響。另一些問題是結構性的或因果的,問的是一個結果何以發生、什麼會改變它;對這些問題,一個預測性的黑箱文不對題。錯誤不在使用機器學習,而在把它跟問題錯配(mismatch):把變項重要性讀成因果效果,或者因為一個經過良好驗證的預測模型缺少理論故事就否定它的係數。表 31.1 把本章的方法對映到它們服務的目標,圖 31.1 則畫出那兩種文化,以及橫在中間那道估計標的優先的橋。
註:Breiman 的兩種文化追求不同的目標:一邊靠一個被假設為正確的可解讀模型作解釋,一邊靠任何一個經樣本外驗證的函數作預測。它們不是等著被裁決的對手,而是等著被選擇的目標。本書「估計標的優先」的規則化解了這份張力:先決定問題是預測性的還是結構性的,再挑那個目標要求的方法與證據標準。失敗模式就是錯配,把一個預測模型的內部讀成解釋,或拿預測技巧去評判一個解釋性的模型。
表 31.1 研究目標與本章的方法。
| 目標 | 問題的形式 | 方法與證據 |
|---|---|---|
| 預測 | 這個人身上會發生什麼? | 森林、正則化、逐人預報;證據是對照一個基準的誠實樣本外技巧 |
| 描述 | 這份資料裡有什麼型態? | 軌跡分群、重要性、部分依賴;證據是穩定度(stability)與複製(replication) |
| 解釋 | 這個結果為什麼會發生? | 針對異質性的混合效果樹與 SEM 樹;證據是驗證與理論,不是配適 |
註:同一個演算法可以服務不同的目標:一個隨機森林(random forest)既能預報(預測),也能把特徵排序(描述),但它的變項重要性不是因果效果(解釋)。估計標的釘住的是哪一欄適用,因而也釘住需要哪一種證據。把預測技巧報告得彷彿它示範了一個機制,或把一個機制報告得彷彿它保證了預測技巧,就是那個反覆出現的範疇錯誤(category error)。
31.2 在依賴資料上作誠實評估
本章最重要的事實是:為獨立觀察設計的交叉驗證(cross-validation),用在重複測量上會有偏誤(biased),而且是樂觀的偏誤。資料的各列若是巢套在人之內的時機(occasion),把各列隨機指派到各摺,就會讓同一個人的一部分時機進訓練集、另一部分進測試集,模型於是有一部分是在它已經學過的人身上受評估。一個人之內的各次時機彼此相關,有時還相當強,因此看過某人其他時機的模型,預測被留出的那些時機時會比預測一位真正的新人準,報出來的交叉驗證準確度也就高於它實際使用時做得到的準確度。這就是洩漏(leakage)。它不是一個「記一筆然後擱在一旁」的細微偏誤,而是「一個在論文裡有效的模型」與「一個在部署時失效的模型」之間的差別。
示範用的是 affect_ema 資料,任務是拿當下的預測變項與一個延宕(lagged)的結果變項去預測當下的負向情緒,學習器是一個隨機森林。圖 31.2 呈現三種重抽樣配置下的結果。天真的逐列十摺交叉驗證忽略巢套,又多用了一個在完整樣本上算出來的個人層次彙總特徵(aggregate feature),報出的測試集 \(R^2\) 是 \(0.41\)。依人分組交叉驗證把整個人留出來,測試中的人完全不出現在訓練裡,報出 \(0.35\)。前向串接在每個人較早的時機上訓練、在較晚的時機上測試,報出的同樣是 \(0.35\)。天真那個配置在 \(R^2\) 上樂觀了 \(0.06\),相對膨脹百分之十七;這道落差在重複切分之間很穩定,兩個估計值相距七個標準誤(standard error)以上。這 \(0.06\) 拆得開,而拆開之後的比重值得注意:切分本身只值 \(0.004\),那個在完整樣本上算出來的彙總特徵值 \(0.056\),也就是九成三。逐列切分要能膨脹準確度,特徵裡必須有東西承載個人身分,好讓學習器由訓練列認出測試列屬於哪一個人;這裡的預測變項都是動量層次的、跨人可交換,那個彙總特徵卻是一欄純粹的身分標記。只帶當下預測變項的分析者因此看不到多大的切分漏,這不鬆動依人分組的紀律,只說明那道漏的大小取決於特徵裡承載了多少身分。持續性基準(persistence baseline)只是預測「負向情緒等於它上一次的值」,報出 \(0.27\),而它促成的比較才令人清醒:誠實的模型在 \(R^2\) 上只比上一次的值好了 \(0.08\)。報告天真那個數字的研究,宣稱的是它並不具備的技巧;省略持續性基準的研究,則為一個只比什麼都不做好一點點的模型宣稱新穎性。
註:三種重抽樣配置與一個基準之下,預測 affect_ema 資料中當下負向情緒的測試集 \(R^2\)。天真的逐列交叉驗證(紅)報出 \(0.41\),它樂觀有兩個來源:測試中的人也出現在訓練裡,個人彙總特徵又是在完整樣本上算出來的。依人分組與前向串接交叉驗證(藍)尊重巢套與時間的箭頭,報出 \(0.35\),這才是誠實的估計。持續性基準(灰)預測上一次的值,報出 \(0.27\):誠實模型相對於什麼都不做的優勢並不大。誤差槓是重複切分之間的 \(\pm 1.96\) 個標準誤。
修補的做法是把重抽樣配置與預測任務配起來,而任務有兩種。預測一位新的人的結果,也就是篩檢(screening)與預後(prognosis)的情形,用依人分組交叉驗證(person-grouped cross-validation)評估:它把人而不是列切進各摺(fold),每一位測試中的人在訓練期間都完全沒被看過;它的可交換性(exchangeability)論證是,測試摺裡的新人代表模型實際使用時要面對的那些新人。由一個人的過去預測他的未來,也就是預報(forecasting)與適時介入的情形,用前向串接(forward-chaining)評估,也叫滾動起點(rolling-origin)評估:對每個人以某個時間為界,在界前的時機上訓練、界後的時機上測試,絕不讓未來告知過去。表 31.2 是選用表,圖 31.3 把兩種配置畫出來。還有兩項紀律讓這幅圖完整。前處理(preprocessing),也就是任何的縮放(scaling)、插補(imputation)或特徵建構(feature construction),都只能在訓練摺之內發生;一個在完整樣本上配出來的轉換會把測試的訊息漏進訓練,前面那個個人彙總特徵引進的正是這道漏。而模型的超參數(hyperparameter)一旦要調校,那份調校本身也必須在訓練摺之內再作一次交叉驗證,也就是巢套交叉驗證(nested cross-validation),因為「以測試集表現挑超參數、再報告那份表現」是一種比較微妙的「在訓練資料上作測試」(Varma & Simon, 2006)。
註:藍色格子是訓練的時機,橘色格子是測試的時機。依人分組交叉驗證(上)把整個人指派到測試摺,測試中的人在訓練裡一次也沒被看過,估計的是對新的人的推廣。前向串接(下)在每個人較早的時機上訓練、較晚的時機上測試,絕不用未來去預測過去,估計的是個體內的預報。圖上沒畫的天真逐列切分,會把一個人的各次時機散到訓練摺與測試摺兩邊,因此洩漏。
表 31.2 縱貫預測的重抽樣選用表。
| 預測任務 | 配置 | R 的慣用寫法(分組/分塊) |
|---|---|---|
| 推廣到新的人 | 依人分組 \(k\) 摺 | group_vfold_cv(group=person) |
| 預報一個人的未來 | 前向串接/滾動起點 | sliding_period /逐人的時間切分 |
| 調校超參數 | 巢套交叉驗證(內層) | 每個訓練摺之內再一次 group_vfold_cv |
| 報告不確定性 | 重複交叉驗證 | 重複切分;報告離散程度 |
| 絕不(會洩漏) | 天真的逐列 \(k\) 摺 | (重複測量下不要使用) |
註:配置由任務決定,不由方便決定。依人分組的摺回答「這個模型預測一位新的人有多好」,前向串接回答「這個模型預報這個人自己的未來有多好」。前處理與調校都屬於訓練摺之內。rsample 與 tidymodels 的慣用寫法列在這裡供參照,它們的介面會變,要對照當前的說明文件查核。
基礎概念 • 為什麼分組交叉驗證估的是對新的人的誤差
假設每個人 \(j\) 貢獻一個隨機效果 \(u_j\),把這個人所有的時機一起位移,而目標是預測一位不在樣本中的人的時機。天真的逐列切分下,第 \(j\) 人的測試時機旁邊就擺著同一個人的訓練時機,任何學習器都能由那裡估出 \(u_j\);那份測試誤差反映的是「\(u_j\) 已知」下的預測,而部署(deployment)時的條件並不是這樣。依人分組的切分下,每一個測試時機都屬於一位沒有任何訓練時機的人,\(u_j\) 因此是未知的,恰如它對一位未來的人也將是未知的,而那份測試誤差就是對新的人誤差的不偏估計。授權這件事的可交換性,是在被留出的那些人與模型將要面對的那些未來的人之間:兩者若由同一個母體(population)抽出,分組交叉驗證估的就是真正要緊的那個量。把同一套邏輯用在時間而不是人上,就得到「要估預報誤差,得靠前向串接、不能靠隨機切分」。
常見陷阱 • 洩漏的分類
逐列洩漏:隨機切分重複測量的各列,把一個人同時放進訓練與測試;改用依人分組的摺。時間洩漏:讓未來的時機去預測過去的時機(隨機切分一條時間序列,或使用會偷看前方的特徵);改用前向串接。前處理洩漏:切分之前就在完整樣本上作縮放、插補或特徵工程;每一個轉換都要在訓練摺之內配。調校洩漏:拿來報告表現的測試集,同時也拿來挑超參數;把調校巢套起來。摺與前處理是兩道獨立的關卡:把摺改成依人分組、彙總特徵卻仍在完整樣本上算,樣本外 \(R^2\) 只比天真配置低 \(0.0098\),仍比誠實估計高 \(0.0499\),因為那個特徵本身就把測試中的人的結果變項帶進了訓練。部署時取不到的特徵,誠實地用也有害:同一個彙總特徵改成只在訓練摺之內計算,樣本外 \(R^2\) 比完全不用它還低 \(0.0398\),因為模型學會依賴一個對一位新的人根本不存在的東西。每一道漏都膨脹表面上的準確度,而且在報出來的數字裡都看不出來,只有稽核(audit)整條流程才找得到。讀者該要求的是那份稽核軌跡(audit trail),不是那個準確度。
31.3 巢套資料的樹與森林
決策樹(decision tree)把預測變項空間切成若干區域,在每個區域(region)裡配一個簡單模型;它們的整體(ensemble),也就是隨機森林,把許多長在自助(bootstrap)樣本上、每次只用隨機特徵子集(feature subset)的樹平均起來,藉此降低變異數(variance)。天真地搬到巢套資料上,它們會在兩個地方誤導。一個人之內的各次時機彼此相關,一棵樹只要實質上記住那些人,就能換到表面上的配適,而它的變項重要性會偏向剛好跟著群集(cluster)結構走的特徵,不是承載個體內訊號的特徵。修補的做法是保住隨機效果結構,只讓演算法在固定的那一部分上搜尋。混合效果樹與 RE-EM 程序 (Sela & Simonoff, 2012) 在「給定一棵樹估隨機效果」與「給定隨機效果長一棵樹」之間交替,切分(partition)解釋的因此是次群體之間固定的差異,個體內的依賴則由隨機效果吸收;廣義線性混合模型樹 (Fokkema et al., 2018) 在混合模型架構之內做同一件事,是偵測固定效果有差異的次群體時成熟的工具。混合效果森林把這個想法延伸到預測 (Capitaine et al., 2021; Hajjem et al., 2014),不過縱貫森林的套件生態仍然不如橫斷的那些穩定,這項成熟度告誡值得白紙黑字寫下來。
工作範例拿 growth_subgroups 資料問一個次群體發現的問題。那份資料的成長斜率由一棵共變項的樹決定:低社經地位的都市兒童陡、低社經的鄉村兒童中等、高社經的兒童平緩,而這個結構埋在四個不帶訊號的雜訊共變項之間。成長參數樹先用一個混合模型估出每個人的成長斜率,再以共變項對那些斜率作切分,把結構還原了出來:先切社經地位、再切都市居住,四個雜訊共變項完全沒被用到;它在留出來的驗證(validation)半份上的終端節點(terminal node)斜率 \(1.84\)、\(1.10\) 與 \(0.65\),在估計逐人斜率所引致的收縮之內,與植入的真值 \(2.0\)、\(1.2\)、\(0.5\) 相符。圖 31.4 把找出來的次群體疊在原始軌跡上。對一個斜率森林作的排列重要性分析確認了這項發現,社經地位與都市居住遠遠排在那四個雜訊共變項之上,見圖 31.5。Brandmaier et al. (2013) 與 Brandmaier et al. (2016) 的結構方程模型樹把這個想法由單一斜率推廣到一整個潛在成長模型,改用「能預測任何一個成長參數之差異」的共變項來切分樣本,並且繼承了第 22 章對混合分配模型要求的同一份紀律:被發現的次群體是一項假設,要在新鮮的資料上驗證,不是一項被「找到它的那份配適」所認證的發現。
註:一棵成長參數樹在 growth_subgroups 資料中找出的三個次群體,圖上是它們的平均軌跡。這棵樹先切社經地位、再切都市居住,正是兩個真正的調節變項(moderator),四個雜訊共變項一個也沒用;它在留出的驗證半份上還原的葉節點(leaf)斜率(\(1.8\)、\(1.1\)、\(0.7\))與植入的真值(\(2.0\)、\(1.2\)、\(0.5\)),在估計逐人斜率的收縮之內相符。被發現的次群體是一項待驗證的假設,不是一項被「產出它的那次搜尋」所認證的發現。
註:排列重要性,也就是打亂一個預測變項之後預測誤差的增加量,來自一個在 growth_subgroups 資料中預測逐人成長斜率的森林。真正的兩個調節變項社經地位與都市居住佔了主導,四個雜訊共變項都貼近零。重要性排的是預測上的貢獻,而且要讀成描述:它認出的是模型用到的特徵,不是結果變項的原因。
表 31.3 巢套縱貫資料的樹與森林變體。
| 方法 | 它切分什麼 | 說明與成熟度 |
|---|---|---|
| 天真的 CART/隨機森林 | 固定的那一部分,忽略巢套 | 重要性偏向與群集相關的特徵;巢套資料下避免使用 |
| RE-EM 樹 | 固定的那一部分,隨機效果保留 | 在樹與隨機效果之間交替;成熟(Sela 與 Simonoff) |
| GLMM 樹 | 固定效果的次群體,混合模型完好 | 次群體發現;成熟(glmertree) |
| 混合效果森林 | 帶隨機效果的預測 | 縱貫隨機森林;生態較不穩定(要查核) |
| SEM 樹/森林 | 任何一個潛在成長參數 | 成長模型裡的異質性;發現要驗證 |
註:統一的原則是讓演算法去搜尋固定的那一部分,依賴則交給一個混合模型吸收,被發現的次群體因此反映真正固定的差異,不是群集造成的假象(artifact)。套件的成熟度(maturity)各不相同,而且會變動;把工具與它的狀態一起寫進文章裡,把讀者引到一個已經停止維護的軟體上是幫倒忙。
31.4 軌跡分群:演算法這一邊的對手
軌跡分群依「一個人隨時間變化的形狀」把人分群,是第 22 章模型本位成長混合分配模型(growth mixture model)在演算法這一邊的對應物。成長混合分配模型設定一個機率生成模型,也就是各自帶著自己成長參數的潛在類別(latent class),再以最大概似(maximum likelihood)連同整套列舉(enumeration)與配適做法去估它;分群演算法則計算軌跡之間的距離(distance),把近的分到一起,完全沒有生成模型。縱貫資料的 k-means 做法 (Genolini & Falissard, 2010) 把每個人的序列當成一個向量(vector),直接套用 k-means;距離本位的變體改以一個知覺形狀的距離取代歐氏(Euclidean)距離,例如動態時間扭曲(dynamic time warping),它在比較之前先把形狀相同、時間不同的序列(sequence)對齊(alignment)。時間若是要移除的干擾(nuisance)、不是訊號(signal)本身,這種做法才用得上,而這正是第 30 章為對位所畫的那個相位對振幅的區分。
這場對決讓兩種哲學對上一個已知的真相。classes_sim 資料由三個潛在成長類別生成,圖 31.6 以「還原真實類別標籤(label)的程度」,也就是調整後 Rand 指數(adjusted Rand index),比較高斯混合分配模型、軌跡 k-means 與動態時間扭曲分群。模型本位的混合分配模型勝出,以 \(0.90\) 的調整後 Rand 指數還原那些類別,因為它的生成模型與資料生成歷程相符;軌跡 k-means 以 \(0.78\) 居次;動態時間扭曲分群以 \(0.71\) 排在最後,因為它那份扭曲的彈性解的是相位錯位,而這份資料根本沒有相位錯位,於是為了一次從來就不需要的對齊,丟掉了有用的振幅(amplitude)訊息。這個次序不是普遍的排名,而是一堂「把方法與結構配起來」的課:生成模型已知而且正確時,模型本位的方法最有效率;它未知或設定錯誤時,演算法的方法比較穩健(robust);動態時間扭曲則只有在時間錯位是真的時候才掙得到位置。表 31.4 陳述這份取捨,也一字不改地承載第 22 章的主張:混合分配模型與分群都沒有發現真實的類型,還原出來的分群結果是一項要在外部驗證的描述,絕不是一份被「產出它的那個演算法」所認證的分類。
註:(a):以調整後 Rand 指數表示的、對 classes_sim 資料三個真實類別的還原。高斯混合分配模型(\(0.90\))勝出,因為它的生成模型與資料相符;軌跡 k-means(\(0.78\))居次;動態時間扭曲分群(\(0.71\))居末,因為它的扭曲處理的是一種這份資料並不含有的時間錯位。(b):真實的類別平均軌跡(灰)與還原出來的混合分配模型群平均(虛線)幾乎重合。這個排名是一堂「把方法與結構配起來」的課,不是普遍的次序。
表 31.4 模型本位混合分配模型對照演算法分群。
| 特徵 | 成長混合分配模型(第 22 章) | 軌跡分群 |
|---|---|---|
| 基礎 | 一個機率生成模型 | 軌跡之間的距離 |
| 輸出 | 類別機率、參數、配適指標 | 硬性指派(hard assignment) |
| 強項 | 正確時既有效率又能推論 | 模型未知時穩健 |
| 時間 | 由模型指定 | 相位若是干擾,DTW 可對齊 |
| 共有的告誡 | 兩者都沒有發現「真實的類型」;分群結果是一項需要外部驗證的描述 | |
註:這個選擇是在「與資料相符時就有回報的生成模型」與「沒有模型可信任時仍然穩健的演算法」之間。兩者產出的分群結果都看起來像被發現的種類,其實不是:群數是一個建模上的選擇,而分群結果在實質上是否真實,必須由複製與外部相關(external correlate)來論證。這是與第 22 章共有的主張。
31.5 縱貫問題的正則化
密集設計造出多預測變項的問題:數十個當下題目、它們的延宕、它們的交互作用與它們的個人層次彙總(aggregate),加起來的候選預測變項可以多到一個古典迴歸估不動。正則化用懲罰(penalty)係數大小來處理,把小的效果往零收縮(shrinkage),套索(lasso)更把其中一些壓成恰好為零,選擇與估計一次完成。這個懲罰就是隨機效果所施加的那件收縮裝置,也是第 17 章貝氏(Bayesian)先驗(prior)的頻率學派(frequentist)表親;記住這個接點,正則化就從一門黑魔法還原成一份有紀律的收縮。用在 affect_ema 資料上,以當下預測變項、它們的延宕與所有成對交互作用(interaction)構成設計矩陣(design matrix),篩檢下一個時機的負向情緒,套索在依人分組交叉驗證之下選出一個七個預測變項的稀疏(sparse)模型,留下當下壓力、正向情緒與延宕的結果變項,加上少數幾個交互作用,其餘全部捨棄。圖 31.7 呈現那條交叉驗證路徑,以及選出這個稀疏誠實模型的一個標準誤法則(one-standard-error rule)。
有兩項縱貫上的複雜情況要小心。第一,一個預測變項若照第 7 章的建議分解成個體內與個體間成分,那兩個成分應該成對地懲罰;分開懲罰可能扭曲那份分解,至少要意識到這個風險。第二項更有後果:在選擇中存活下來的係數,不帶普通迴歸的標準誤與 \(p\) 值,因為它們是靠看資料選出來的,忽略這件事的選擇後推論無效。誠實的選項有三個:把正則化模型純粹用於預測,只報告樣本外技巧;把選出來的模型鎖定,在一份新鮮樣本上重配,那裡的推論才有效;或者把資料切開,一部分用來選擇、另一部分用來推論。務實的主張是把選擇與推論放進分開的隔間,絕不把一個套索係數配上天真的信賴區間(confidence interval)報出去,彷彿那次選擇不曾發生。
註:在 affect_ema 資料上篩檢下一個時機負向情緒的套索交叉驗證路徑,各摺依人分組,選出來的模型因此對新的人是誠實的。誤差在很寬的一段懲罰範圍上都很平,懲罰再變大才上升;一個標準誤法則(虛線)在「稀疏開始要付出準確度代價」的那一點附近,選出一個七個預測變項的稀疏模型。選出來的係數是給預測用的,要對它們作推論,得有一個鎖定的模型或一份新鮮的樣本。
31.6 個殊取向的預測與逐人的前沿
預測的問題可以往內轉,由「跨人推廣」轉成「預報單一個人的未來」,第 25 章的合併教訓於是穿著預測的衣服回來。有兩種策略在競爭。逐人模型配在每一位個體自己的歷史上,再用來預報這個人的未來,完整地尊重個殊取向(idiographic)的變異;合併模型跨人借力,配一個模型給所有人,再套用到每一個人身上。哪一個勝出,取決於每個人有多少歷史:逐人模型的參數只能由那個人自己的資料估出來,資料一少就不可靠。圖 31.8 呈現 affect_ema 資料裡的交叉點。只有六次時機的短歷史下,逐人模型預報得很差,均方根誤差 \(0.83\),合併模型則是 \(0.47\),六個點釘不住一個個體模型;歷史一加長,逐人的誤差就下降,在二十四次時機附近追過合併模型,到四十次時機時明顯勝出。這堂課就是收縮那堂課:資料稀疏時往母體合併是比較好的賭注,一個人累積了夠多自己的資料之後,個殊取向的模型才掙得到獨立。持續性基準一路跑在合併模型之上,也就是誤差一路較高,但相對於逐人模型只在歷史夠長之後才如此:\(k=6\) 時它輸給合併模型、卻贏過逐人模型(\(0.56\) 對 \(0.83\)),由 \(k=16\) 起兩個模型都勝過它。它仍然是必須先跨過的門檻,只是在這份資料上並不是最強的競爭者。
註:(a):affect_ema 資料中,逐人模型、合併模型與持續性基準的個體內平均預報誤差,隨逐人訓練歷史加長而變化。逐人模型在短歷史時不可靠,隨資料累積而改善,在二十四次時機附近(虛線)追過合併模型。(b):在一份豐富的四十次時機歷史下,逐人的誤差分配最低;不過只有二十二位參與者累積到這麼長的歷史,這一格的樣本因此遠小於全體的一百二十人。這個交叉點就是第 25 章收縮教訓的預測版:資料稀疏時合併,資料豐富時個體化。
解讀由此得出的模型,不管是合併的森林還是逐人的配適,都需要「在不過度宣稱的前提下摘要一個黑箱」的工具。前面用過的排列重要性,依「打亂一個特徵會讓預測退化(degrade)多少」把特徵排序,而它必須在尊重分組的前提下計算,也就是在重抽樣結構之內作排列,不跨結構。部分依賴與個體條件期望(individual conditional expectation)呈現,畫的是一個特徵變動、其他特徵固定或平均掉時,預測出來的結果怎麼移動;圖 31.9 呈現預測出來的負向情緒隨當下壓力上升的依賴,個別曲線則顯示平均之外的異質性。紀律在於這些呈現是描述,不是因果:部分依賴曲線呈現的是模型的預測如何回應一個特徵,要等於那個特徵的因果效果,得先接受一整套模型並未驗證、通常也無法驗證的假設。一條上升的壓力部分依賴曲線,意思是模型在壓力較高時預測較高的情緒,不是說降低壓力就會降低情緒;這兩種讀法之間的距離,就是本章開篇畫下的描述與解釋之間的距離。最後,預報的呈現一定要錨定在一個基準上,校準也要與區辨(discrimination)一起報告;圖 31.10 把每一種配置的誤差擺在持續性那條線旁邊,表 31.5 則列出一份預測報告需要的度量與基準。
註:部分依賴曲線(紅)呈現森林預測出來的負向情緒如何隨當下壓力上升,其他特徵已經平均掉;灰色的個體條件期望曲線顯示這份依賴在各筆觀察之間並不一樣。這些呈現描述的是模型的行為,不是世界的因果結構:那條曲線是模型對一個特徵的回應,要等於一個因果效果,得先接受未經檢驗的假設。讀成描述,它們揭露的是模型學會了使用什麼。
註:每一種配置下,預測 affect_ema 當下負向情緒的測試集均方根誤差;持續性基準(虛線)標出「預測上一次的值」的誤差。天真那個配置偏低的誤差,就是圖 31.2 那道洩漏換成誤差度量的樣子;誠實的兩種配置只落在持續性稍下。一項預測主張的強度,不會超過它相對於最簡單基準的邊際,而對縱貫結果變項來說,那個基準幾乎總是持續性。
表 31.5 表現度量與必備的基準。
| 結果變項類型 | 度量(區辨 + 校準) | 必備的基準 |
|---|---|---|
| 連續 | RMSE、\(R^2\);預測值對觀察值的校準 | 持續性(上一次的值);個人平均數(person mean) |
| 二元事件 | AUC、Brier 分數(Brier score);校準曲線 | 基本率(base rate);最後一次觀察 |
| 事件時間 | 一致性指數(concordance);各時程(horizon)上的校準 | Kaplan-Meier(第 29 章) |
註:區辨(把個案排序)與校準(讓預測值對上觀察到的量級)是兩回事:一個模型可以區辨得好、校準卻不良,因此兩者都要報告 (Steyerberg, 2019)。每一項預測主張都要陳述成「相對於一個基準的邊際」;對縱貫結果變項來說,那個基準就是持續性,也就是預測沒有變化,模型得先勝過它才算示範了什麼。
31.7 報告與預先註冊
一份預測研究靠「報告那些決定它的準確度是否為真的決策」贏得信任,而為臨床預測模型發展出來的報告標準可以直接移植 (Collins et al., 2015)。表現要連同重複重抽樣得到的不確定性一起報告,也要對照那個必備的基準,讀者才同時看得到模型有多準、以及它相對於什麼都不做改善了多少。重抽樣配置要指名並說明理由,洩漏稽核也要明白寫出來:各摺怎麼尊重人與時間、前處理坐在切分的哪一邊、調校又是怎麼巢套起來的。「事前固定了什麼」與「資料選了什麼」這道區分一定要保留,因為一份機器學習分析正是靠它才能預先註冊。預先註冊可以固定重抽樣配置、度量、基準、調校網格與特徵集合,只把配適出來的模型留給資料;這樣進行的分析,佔的正是本書第 36 章要回到的那條誠實的探索性車道:模型是被發現的,所以是探索性的;評估在看到模型之前就指定好了,所以是驗證性的。表 31.6 是那份檢核表,軟體方塊陳述本章承諾過的套件成熟度稽核,實作方塊則處理在規模上執行這些分析的計算與可複製性現實。
表 31.6 縱貫機器學習的報告檢核表。
| 項目 | 要報告什麼 |
|---|---|
| 估計標的與任務 | 預測、描述還是解釋;新的人對個體內 |
| 重抽樣 | 配置(分組/前向串接)、為什麼,以及那份洩漏稽核 |
| 基準 | 持續性與其他基準,以及模型相對於它們的邊際(margin) |
| 表現 | 區辨與校準,附來自重複交叉驗證的不確定性 |
| 調校 | 超參數網格(grid),以及它如何被巢套在訓練摺之內 |
| 固定對選出 | 什麼被預先註冊、什麼由資料決定 |
| 軟體 | 套件與版本(version),並坦白陳述成熟度狀態 |
註:這份報告圍繞著「讀者無法自行驗證的那些決策」組織:洩漏是怎麼避開的,模型又勝過基準多少。事前固定配置、度量、基準與網格,只讓資料選模型,這樣的分析同時是探索性的也是誠實的,正是第 36 章要形式化的那條車道。
軟體提示 • 一份套件成熟度稽核
縱貫機器學習的工具在成熟度上差異很大,坦白說出來,是替那些否則會引用到停止維護軟體的讀者著想。混合效果樹方面,glmertree 與 partykit 成熟而且有人維護,RE-EM 樹有一份歷時較久的參照實作。縱貫森林方面,LongituRF 實作了那些方法,但不像橫斷森林套件那樣久經考驗。軌跡分群方面,kml 已經確立,dtwclust 是距離本位分群的標準,latrend 想統一這些介面,使用前要查核它當前的狀態。正則化結構模型方面,regsem 實作了 Jacobucci et al. (2016) 的方法。分組重抽樣方面,tidymodels 之內的 rsample 提供了那些慣用寫法,不過它的介面會演變。這些套件沒有一個在基本工具箱裡,有幾個在產生本章的環境中還取不到,因此這裡的分析把核心邏輯手工建在 rpart、glmnet 與 base R 之上,包括那個森林、那個動態時間扭曲距離、那個混合模型與每一種重抽樣配置;這既是一道可複製性的防護,也示範了這些想法比它們的套件簡單。
實務要點 • 計算、種子與可複製性
交叉驗證過的機器學習,在切分、自助樣本與特徵子集上都是隨機的。可複製性因此要求每一個隨機步驟都設定並記錄種子(seed),而誠實的不確定性要求整套重抽樣重複好幾次,不能只信一次切分。計算量隨「摺數乘重複次數乘樹數乘調校網格點數」成長,依人分組與前向串接還多出一份天真迴圈(loop)所沒有的記帳;大型執行之前先估算這筆帳,並以「每個工作者各自的種子」跨摺平行化(parallelize)以維持可複製性,就能同時避開浪費的時間與無法複製的結果。這份紀律就是本書的實驗室標準:種子設好、條件排成網格、結果連同產出它的程式碼一起封存(archive),讓一張表裡的一個數字可以完全一樣地重新產生(regenerate)。
本章摘要
機器學習要與研究目標配對、並對依賴資料招來的洩漏保持紀律,才為縱貫研究服務。Breiman 的兩種文化,一邊透過可解讀模型作解釋、一邊透過任何一個經驗證的函數作預測,是要選擇的目標、不是要裁決的對手;估計標的優先的規則為每一個問題指派它的方法與證據標準,擋住「把預測讀成解釋」那個範疇錯誤。承重的紀律是誠實評估:對重複測量作天真的逐列交叉驗證會洩漏,讓模型有一部分在它看過的人身上受檢驗,在 affect_ema 資料上,它相對於依人分組交叉驗證把預測 \(R^2\) 高估了百分之十七。依人分組把整個人留出,估計對新的人的誤差;前向串接在過去上訓練,估計預報誤差;而持續性基準顯示誠實模型只小幅勝過上一次的值。前處理與調校都屬於訓練摺之內,讀者該要求的是那份洩漏稽核,不是那個準確度。巢套資料的樹與森林在搜尋固定那一部分的同時保住隨機效果結構:一棵成長參數樹在 growth_subgroups 資料裡還原出植入的次群體,切在兩個真正的調節變項上、忽略四個雜訊共變項,經驗證的葉節點斜率與真值相符;排列重要性把訊號與雜訊分開,同時保持描述、不作因果。軌跡分群是第 22 章混合分配模型在演算法這一邊的對手,對照一個已知的三類別真相,模型本位的混合分配模型勝出(調整後 Rand 指數 \(0.90\)),因為它的模型與資料相符,k-means 居次,動態時間扭曲分群居末,因為它的扭曲解的是一個資料並不具有的時間問題;兩種方法都沒有發現真實的類型,分群結果是一項要驗證的描述。正則化把多預測變項問題當成有紀律的收縮來處理,在分組交叉驗證下選出一個稀疏而誠實的模型,但它選出來的係數不帶普通的推論,附上 \(p\) 值之前必須先鎖定或先切分。逐人預報重演收縮那堂課:短歷史時合併模型勝過逐人模型,一個人累積夠多自己的資料之後就輸給它,交叉點落在二十四次時機附近,而每一次預報都對照持續性受評判。部分依賴與重要性呈現以描述、絕不以因果解讀黑箱;報告標準事前固定配置、基準、度量與網格,讓一個被發現的模型依事先指定的規則受評估,在模型上是探索性的、在評估上是驗證性的。
習題
- 31.1 洩漏示範。在
affect_ema上重現圖 31.2 的三種重抽樣配置,確認天真的逐列切分報出測試集 \(R^2\) 為 \(0.41\)、依人分組與前向串接都是 \(0.35\),再對照圖 31.3,以隨機效果 \(u_j\) 的語言說明為什麼只有後兩者估得出部署時真正要面對的誤差。 - 31.2 次群體發現。在
growth_subgroups上配適一棵成長參數樹與一個斜率森林,重現圖 31.4 的終端節點斜率與圖 31.5 的排列重要性排序,再寫出一段結果,把重要性讀成描述,並聲明找出來的次群體只是一項待驗證的假設。 - 31.3 分群對決。在
classes_sim上跑高斯混合分配模型、軌跡 k-means 與動態時間扭曲分群,重現圖 31.6 的調整後 Rand 指數次序,再依表 31.4 說明動態時間扭曲為什麼在一份沒有相位錯位的資料上敬陪末座。 - 31.4 選擇後的誠實。在
affect_ema上以依人分組交叉驗證跑一次套索篩檢,用一個標準誤法則選出圖 31.7 那樣的稀疏模型,再寫一份備忘錄,說明為什麼不能替存活下來的係數配上普通的 \(p\) 值,並在第 31.5 節的三個誠實選項中挑一個交代理由。 - 31.5 檢核表稽核。取一篇已發表的縱貫預測研究,依表 31.6 逐項稽核它的估計標的、重抽樣配置與洩漏稽核,再依表 31.5 查核它有沒有同時報告區辨、校準與持續性基準,並就它的疏漏寫出應有的審查意見。
- 31.6 逐人的交叉點。在你自己的密集縱貫資料上重現圖 31.8,把逐人模型、合併模型與持續性基準的預報誤差畫成訓練歷史長度的函數,找出交叉點落在幾次時機,並用第 25 章的收縮說明這個位置為什麼會移動。
本章重要名詞中英對照
| 中文 | English | 說明/首次出現處 |
|---|---|---|
| 洩漏 | leakage | 測試的訊息漏進訓練,膨脹表面上的準確度;第 31.2 節 |
| 依人分組交叉驗證 | person-grouped cross-validation | 把人而不是列切進各摺;估計對新的人的誤差;第 31.2 節 |
| 前向串接 | forward-chaining | 以過去訓練、以未來測試;估計個體內的預報誤差;第 31.2 節 |
| 持續性基準 | persistence baseline | 預測「等於上一次的值」;縱貫預測必備的比較對象;第 31.2 節 |
| 巢套交叉驗證 | nested cross-validation | 把超參數調校放進訓練摺之內再作一次交叉驗證;第 31.2 節 |
| 隨機森林 | random forest | 在自助樣本與隨機特徵子集上長出的樹的整體;第 31.3 節 |
| 混合效果樹 | mixed-effects tree | 在保住隨機效果的同時切分固定的那一部分;第 31.3 節 |
| 排列重要性 | permutation importance | 打亂一個特徵所造成的預測退化;描述性、非因果;第 31.3 節 |
| 軌跡分群 | trajectory clustering | 依變化形狀的距離把人分群,無生成模型;第 31.4 節 |
| 動態時間扭曲 | dynamic time warping | 比較之前先對齊相位的形狀距離(承第 30 章的對位);第 31.4 節 |
| 調整後 Rand 指數 | adjusted Rand index | 兩份分群結果一致程度的校正後度量;第 31.4 節 |
| 套索 | lasso | 把部分係數收縮到恰好為零的懲罰;同時選擇與估計;第 31.5 節 |
| 選擇後推論 | post-selection inference | 對「靠看資料選出來」的係數作推論;天真做法無效;第 31.5 節 |
| 部分依賴 | partial dependence | 預測隨一個特徵變動的曲線;描述模型、非世界;第 31.6 節 |
| 校準 | calibration | 預測值與觀察到的量級相符的程度,與區辨不同;第 31.6 節 |
參考文獻
Brandmaier, A. M., Prindle, J. J., McArdle, J. J., & Lindenberger, U. (2016). Theory-guided exploration with structural equation model forests. Psychological Methods, 21(4), 566–582. https://doi.org/10.1037/met0000090
Brandmaier, A. M., von Oertzen, T., McArdle, J. J., & Lindenberger, U. (2013). Structural equation model trees. Psychological Methods, 18(1), 71–86. https://doi.org/10.1037/a0030001
Breiman, L. (2001). Statistical modeling: The two cultures. Statistical Science, 16(3), 199–231. https://doi.org/10.1214/ss/1009213726
Capitaine, L., Genuer, R., & Thiébaut, R. (2021). Random forests for high-dimensional longitudinal data. Statistical Methods in Medical Research, 30(1), 166–184. https://doi.org/10.1177/0962280220946080
Collins, G. S., Reitsma, J. B., Altman, D. G., & Moons, K. G. M. (2015). Transparent reporting of a multivariable prediction model for individual prognosis or diagnosis (TRIPOD): The TRIPOD statement. BMJ, 350, g7594. https://doi.org/10.1136/bmj.g7594
Fokkema, M., Smits, N., Zeileis, A., Hothorn, T., & Kelderman, H. (2018). Detecting treatment-subgroup interactions in clustered data with generalized linear mixed-effects model trees. Behavior Research Methods, 50(5), 2016–2034. https://doi.org/10.3758/s13428-017-0971-x
Genolini, C., & Falissard, B. (2010). KmL: K-means for longitudinal data. Computational Statistics, 25(2), 317–328. https://doi.org/10.1007/s00180-009-0178-4
Hajjem, A., Bellavance, F. C., & Larocque, D. (2014). Mixed-effects random forest for clustered data. Journal of Statistical Computation and Simulation, 84(6), 1313–1328. https://doi.org/10.1080/00949655.2012.741599
Hastie, T., Tibshirani, R., & Friedman, J. (2009). The elements of statistical learning: Data mining, inference, and prediction (2nd ed.). Springer. https://doi.org/10.1007/978-0-387-84858-7
Jacobson, N. C., & Nemesure, M. D. (2021). Using artificial intelligence to predict change in depression and anxiety symptoms in a digital intervention: Evidence from a transdiagnostic randomized controlled trial. Psychiatry Research, 295, 113618. https://doi.org/10.1016/j.psychres.2020.113618
Jacobucci, R., Grimm, K. J., & McArdle, J. J. (2016). Regularized structural equation modeling. Structural Equation Modeling: A Multidisciplinary Journal, 23(4), 555–566. https://doi.org/10.1080/10705511.2016.1154793
James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning with applications in R (2nd ed.). Springer. https://doi.org/10.1007/978-1-0716-1418-1
Molnar, C. (2022). Interpretable machine learning: A guide for making black box models explainable (2nd ed.). Independently published. https://christophm.github.io/interpretable-ml-book/
Roberts, D. R., Bahn, V., Ciuti, S., Boyce, M. S., Elith, J., Guillera-Arroita, G., Hauenstein, S., Lahoz-Monfort, J. J., Schröder, B., Thuiller, W., Warton, D. I., Wintle, B. A., Hartig, F., & Dormann, C. F. (2017). Cross-validation strategies for data with temporal, spatial, hierarchical, or phylogenetic structure. Ecography, 40(8), 913–929. https://doi.org/10.1111/ecog.02881
Sardá-Espinosa, A. (2019). Time-series clustering in R using the dtwclust package. The R Journal, 11(1), 22–43. https://doi.org/10.32614/RJ-2019-023
Sela, R. J., & Simonoff, J. S. (2012). RE-EM trees: A data mining approach for longitudinal and clustered data. Machine Learning, 86(2), 169–207. https://doi.org/10.1007/s10994-011-5258-3
Shmueli, G. (2010). To explain or to predict?. Statistical Science, 25(3), 289–310. https://doi.org/10.1214/10-STS330
Steyerberg, E. W. (2019). Clinical prediction models: A practical approach to development, validation, and updating (2nd ed.). Springer. https://doi.org/10.1007/978-3-030-16399-0
Varma, S., & Simon, R. (2006). Bias in error estimation when using cross-validation for model selection. BMC Bioinformatics, 7, 91. https://doi.org/10.1186/1471-2105-7-91
Yarkoni, T., & Westfall, J. (2017). Choosing prediction over explanation in psychology: Lessons from machine learning. Perspectives on Psychological Science, 12(6), 1100–1122. https://doi.org/10.1177/1745691617693393
引用本章
APA 第 7 版沒有「單一作者專書之章」這個文獻類型:正式的參考文獻指向整本書,章次寫在內文引用裡。若您要讓引用直接連到本章這一頁,再採用下方第二組(依 APA 的網站文件格式)。
引用全書、於內文指明章次(建議)
只引用本章這一頁
英文稿件中引用
APA 第 7 版第 9.38 節:非英文著作保留原文題名,並於方括號內附英文翻譯。