行為順序預測:動態貝氏網路 / Behavior Prediction: Dynamic Bayesian Network
這是巨量資料探勘與統計應用課程中行為順序檢定:滯後序列分析與分類與預測:貝氏網路的進階應用。滯後序列分析只能分析前後兩個行為之間的轉變,如果我們想要預測更多步之後的行為,那我們就需要藉助貝氏網路的預測和推理能力。我們可以決定要為幾步內的行為進行建模,如果是兩步之間的模型,稱之為「二時段貝氏網路」(Two-Timeslice Bayesian Network,2TBN)。而這篇文章將以「四時段貝氏網路」來為幼兒平行遊戲事件序列資料,建立能夠預測和解釋幼兒行為的貝氏網路模型。
Step 1. 準備資料集 / Prepare data set
這個例子來自Bakeman跟Gottman所著的「Observing interaction: an introduction to sequential analysis」。我之前的序列分析介紹也是用這個例子。
資料的格式請採用我在行為順序檢定:滯後序列分析這篇介紹的行為序列資料格式,必須包含研究對象編號、序列編號跟事件三個欄位。注意這個資料集中的資料類型,進行分類的資料必須全部都是「類別資料」的事件。如果你要處理的是連續資料的數值,請參考「AI能夠告訴你未來?用Weka實作多變項時間序列預測」這篇。
Step 2. 資料集轉換為動態分類資料 / Converting to dynamic data set
行為序列資料格式沒辦法讓我們直接輸入Weka中進行建模,我們必須把它轉換為動態分類資料。請使用滯後序列分析計算器:
請在選擇檔案輸入的地方,選擇幼兒平行遊戲事件序列資料表上傳。
接下來我們要決定模型所要預測的步數。假設是最多預測到後面3步之後 (換句話說,包含原本自己這一步,稱之為「四時段貝氏網路」),那麼在「滯後序列長度」的數值就是填「3」,再按下「動態分類資料」。
好,這樣我們就取得可以輸入Weka的資料檔案。
接著再按下「貝氏網路配置檔(平面)」按鈕,下載貝氏網路結構檔。
好,我們取得了貝氏網路結構檔了。
檢視資料跟網路結構 / Data and Network Structure
這邊我們要花點時間來看一下剛剛到底產生了什麼資料。上圖是原始的幼兒平行遊戲事件序列資料表,你可以看到事件以一行一行的順序表示,這位研究對象依序做了「U -> S -> P -> T 」四個事件。
再來這是剛剛下載的動態分類資料。資料裡面變成了4個資料特徵(attributes):
- lag-3:現在時間點前面的第三個動作事件。
- lag-2:現在時間點前面的第二個動作事件。
- lag-1:現在時間點前面的第一個動作事件。
- class:現在時間的動作事件。
因此第四行可以看到原本放在不同行的「U -> S -> P -> T 」四個事件,變成了放在同一排中。
上圖是剛剛下載的貝氏網路結構檔表現的樣子。根據時間序列分析的特性,我們一般會認為「前面所做的動作可能會影響後面的動作」,因此我們的貝氏網路結構檔設定為「前面三個動作,都會對現在這個動作有所影響」。
有了動態分類資料跟貝氏網路結構檔,我們就能夠來建立貝氏網路模型了。
Step 3. 建立貝氏網路模型 / Building Bayesian Network model
建立貝氏網路模型的方法請參考貝氏網路的結果預測與原因推理:基於專家知識建構的網路結構這一篇。輸入資料請用前面取得的動態分類檔與貝氏網路結構檔。建立過程中,我們可以看到模型的預測正確率為72.44%,算是一個尚可的模型。
如果你順利做完的話,應該會取得一個貝氏網路模型檔案。
上傳檔案,我們就可以看到貝氏網路模型了。
讓我們把節點挪個位置,讓整個網路圖更容易閱讀些。接下來就要來解釋模型囉。
Step 4. 解釋模型 / Explaining the model
就如之前在貝氏網路的預測與推理中所講的,貝氏網路的用法有三種:事前機率、預測結果的事後機率、推理原因的事後機率。讓我們來看看這怎麽操作。
整體狀況:事前機率 / Overview: Prior probability
在什麼都沒做的情況下,現在貝氏網路模型顯示的就是事前機率,也就是整體資料呈現的狀況。舉例來說,如果我們不看研究對象前面的任何動作,他會做「P」的機率最高(20.98%),做「U」的機率最低 (18.37%)。
預測結果:事後機率 / Prediction: Conditional probability
藉著我們換個角度,根據我們蒐集的文獻與理論指出,「如果研究對象在之前做了U、S、P的話,他下一步可能會做T」。真的是如此嗎?
讓我們在貝氏網路模型中,把「lag-3」選擇「U」、「lag-2」選擇「S」、「lag-1」選擇「P」,再來觀察「class」各種可能動作事件的機率變化。可以看到「T」發生的機率上升到42.87%,表示研究對象在做過「U、S、P」之後,很有可能會繼續選擇做「T」啊。
解釋原因:事後機率 / Inference: Conditional probability
從事前機率可以看到研究對象做「P」動作的機率最高,那麼他在做「P」動作之前,可能會做什麼動作呢?
讓我們在貝氏網路模型中取消勾選所有證據,然後在「class」選擇「P」,再來觀察「lag-3」、「lag-2」、「lag-1」各個動作事件的機率變化。可以看到各個節點中最高機率的動作事件為「lag-3」的「T」(23.15%)、「lag-2」的「T」(30.69%)、「lag-1」的「T」(29.25%)。因此我們可以合理推測,在做「P」動作之前,研究對象可能會做的是連續三次「T」。
到這裡為止,我們就完成了使用動態貝氏網路來預測行為順序的操作了。
結語 / In closing
使用動態貝氏網路的預測跟推理可以用在許多地方,包括這一篇所講的行為順序預測。但是細心一點的讀者可能會發現,前面結果的貝氏網路模型中,每個事件的機率其實都差異不大。甚至機率值很容易受到模型計算結果不同,最高機率的事件可能又會是另外一個結果,非常不穩定。
這樣的現象帶給我們一個啟示,就是貝氏網路模型並沒有將「隨機性」納入考量。事前機率中最高機率的「P」動作僅有20.98%,但跟最低機率的「U」18.37%差距實在是太小了,表示這個事件可能只是隨機發生,並不是什麼值得關注、甚至是可以忽略的結果。
如果我們克服「隨機性」的影響,找出超越「隨機性」的明顯差異的話,那就需要藉助推論統計的力量了。以這個例子來說,我們如果想要看看研究對象操作「G」、「P」、「S」、「T」、「U」的次數是否有明顯的多、或明顯得少的情況,我們需要使用的是卡方適配性檢定(Chi-square test for goodness of fit)。可惜我只有做卡方獨立性的計算器,如果要跑卡方適配性的話,請先使用SPSS或R-Web吧。或著說,如果你要看的是「T」之後做「P」的情況是不是真的很多,那就需要用行為順序檢定:滯後序列分析。
儘管使用動態貝氏網路來分析使用者行為有所極限,但這卻是一個非常泛用、可用於相當多情境的方法。如果不知道要怎麼分析使用者行為的話,不妨也來建一個貝氏網路模型,以此來認識你的研究對象吧。
附帶一提,這一篇是我在準備巨量資料探勘與統計應用課程中,在準備行為順序檢定:滯後序列分析跟分類與預測:貝氏網路的時候,順手做出來的功能。這篇的做法跟一般教課書裡面講述的動態貝氏網路不太一樣,正式的應用中似乎還有很多變化,我這篇只做了最簡單的一種,但也可以做到很多事情囉。
使用動態貝氏網路來預測行為的介紹就到這裡告一段落了,不知道你覺得如何呢?有沒有再次感到貝氏網路的博大精神呢?你覺得這個動態貝氏網路還能夠做什麼分析呢?我很想知道你對於這篇文章的看法,如果可以的話,歡迎在下面留言處與我分享你的想法,或是在AddThis分享工具按讚、分享我的文章到Facebook等社群媒體。感謝你的耐心閱讀,讓我們下次見囉。