先讓平均值說明它代表多少資料
同樣顯示平均溫度二十五度,一份報表可能用了六十筆有效值,另一份只有兩筆。數字相同,資料支撐程度卻不同。今天要做的不是替平均值增加小數位,而是在旁邊列出有效樣本數、排除原因與觀測期間,讓讀者知道這個平均值能回答什麼問題。
先固定統計對象、單位與時間範圍,例如同一支溫度計在八點至九點之間收到的事件。採開始時間包含、結束時間不包含的規則,去除已確認的重送,再檢查值是否存在、品質是否可用與單位是否一致,最後才計算。
有效樣本必須有明確定義。本文示例要求數值存在且品質良好;維護期間的模擬值另列,不納入製程平均。這是教學規則,不是所有現場的通用標準;規則應由資料用途決定並保存版本,不能看到結果不理想才臨時排除某些點。
適用於歷史資料、工業報表與資料庫查詢。樣本平均不一定是時間平均,也不是獨立樣本數或統計信心水準。資料有明顯自相關、取樣頻率改變或長時間缺值時,光列樣本數仍不足以證明報表代表整段製程。
用一組小資料把分母算清楚
假設去重後收到六列,內容依序為二十、二十二、缺值、二十四、二十六、零。其中二十四的品質不良,其餘有值列品質良好。依本文規則,有效值是二十、二十二、二十六與零,總和六十八,有效四筆,平均十七。
零是有效量測時必須留下;不能因零看起來像未初始化就一律刪除。若設備另有未初始化旗標,依旗標與定義排除,並把原因記錄下來。相反地,缺值不能補成零參加平均,否則分母與總和都失去原來的意義。
本例應並列收到六筆、有效四筆、缺值一筆、品質排除一筆。若要讓分類相加等於六,先制定互斥的排除優先順序;一筆同時缺值又品質不良時只能歸入一個主分類,詳細原因可以另外保留多個。
在PostgreSQL 18中,avg會忽略空值,count(*)計算資料列,count(值欄)計算非空值列。非空值不等於品質良好,因此有效計數與平均必須套用相同的品質條件;不要把count(值欄)直接命名為有效樣本數。
完成後應看到十七這個平均值旁邊有四筆有效樣本,並可展開到那四個事件。若畫面顯示有效五筆,先查品質不良的二十四是否被算入;若平均較低,先查缺值是否被補成零。用這組六列資料比看正式日報更容易定位。
樣本平均與時間覆蓋要分開看
假設溫度二十度維持九分鐘,三十度維持一分鐘,採保持前值的時間模型,十分鐘的時間加權平均是二十一度。若只把二十與三十兩個事件各算一筆,樣本平均是二十五度。兩個答案對應不同問題,不能只把其中一個稱為正確平均。
時間加權必須說明區間起點有沒有已知前值、最後一筆如何延伸,以及資料多久後視為過期。缺口不能無限沿用舊值;未涵蓋的時間另列。本文的九分鐘與一分鐘是已知完整持續時間,並不代表實際事件記錄天然具備這些條件。
固定每分鐘應有一筆的一小時模型,預期六十筆,實際四十五筆有效,可列有效筆數占預期百分之七十五。這個百分比是依排程的筆數覆蓋,不一定等於有效時間覆蓋;若四十五筆集中在前十分鐘,必須另看時間分布。
變化才保存的歷史庫不能直接用每分鐘六十筆當分母。先確認保存機制、死區、最長保存間隔與品質事件,才決定能否計算預期筆數。將不同機制的點位硬套同一覆蓋公式,可能把穩定訊號誤判成大量漏資料。
合併報表時保存總和與有效數。甲組兩筆平均十,乙組八筆平均二十,合併平均為十八,不是十五。這只適用於相同定義的樣本平均;若兩組重疊或包含相同事件,先去重,否則加總分母也會把重複資料算進去。
把空區間與低覆蓋呈現在畫面上
查詢區間沒有有效樣本時,顯示無有效資料與有效數零,平均保持缺值。不要顯示平均零度,因為那會被理解為實際測到零。若報表必須有每小時一列,先建立時間格,再連接統計結果,保留真正沒有資料的格子。
樣本不足的提醒門檻必須來自用途與約定。可以先以教學條件「固定六十筆預期、有效少於四十八筆須提醒」演練,再由現場訂定合理門檻;這不是品質或安全規範,也不能用來自動宣告設備合格。
失敗時依序查時間邊界、重送去重、空值、品質條件、單位與關聯查詢。把量測表接到一對多備註表,可能令一筆量測變成三列;平均偶然未變,但樣本數已膨脹。先核對唯一事件數,再檢查合併方式。
驗收另放入全空值、全不良品質、有效零值與邊界時間四組資料。確認有效數、平均與原因欄一致,並把查詢版本、規則版本及資料截止時間存進報表。遲到資料補入後,平均與有效數應一起更新,不能只改其中一欄。
練習與常見問題
練習:某區間收到十筆不重複事件,兩筆缺值,一筆有值但品質不良,其餘七筆總和一百四十。應呈現有效七筆、平均二十、缺值兩筆、品質排除一筆;若原定應收十二筆,再另外列未收到兩筆,不要混入十筆內的分類。
問:有效樣本越多一定越準嗎?答:不一定,偏差、重複資料與同源相關性不會因筆數增加就消失。
問:只有一筆能顯示平均嗎?答:算術上可以,但要顯示有效數一與不足提醒,避免看成整段穩定狀況。
問:把缺值補零後可以保持報表完整嗎?答:時間格可以完整,缺值語意仍要保留,不能偽造有效量測。
問:加總各班平均可以得到日平均嗎?答:不能;同一定義且不重疊時,使用各班總和與有效數重新計算。
參考:PostgreSQL 18 Aggregate Functions:avg、count與空值的正式定義。