張家艷, 鄭建立
(上海理工大學, 上海 200093 )
門診是醫院對外服務的窗口。人口老齡化導致患者人數的增加以及人們越來越關注自身健康狀況,每年的門診壓力越來越大。此外,門診量與體檢和住院服務的工作量直接相關[1]。對門診病人數量進行準確和可靠的預測,有助于科學合理地分配醫院的人力物力資源如醫生坐診人數、醫療設備等,從而能更好應對門診壓力。
在研究門診量隨時間變化過程中,影響其變化的因素太多,難以考慮全面。由于時間序列模型僅考慮日期因素,故常把門診預測當作時間序列數據分析。在時間序列模型中,最常見的是差分整合移動自回歸模型(ARIMA)[2-3]。ARIMA起初是出于經濟學目的設計,現已廣泛用于醫學領域。如范曉欣等人[4]用ARIMA預測門急診人次,mape為7.01%。近年來,人們采用深度學習等新技術預測,如Wang等人[5]將時間序列分解,再用廣義回歸神經網絡模型預測; Huang等人[6]使用經驗模式分解結合粒子群算法優化的反向傳播人工神經網絡預測;相比傳統技術,均得到了更準確的預測結果。但深度學習技術在大數據量上效果較好,針對少數據量的情況,常采用機器學習方法。Islam等人[7]用支持向量回歸預測社區醫院的門診人次。Yang等人[8]用多層感知器預測門診就診上呼吸道感染人數。2016年以來,xgboost[9]在Kaggle等各大數據科學比賽中都得到廣泛應用,成為比賽中的高分模型。
空氣污染是一個重大的全球性問題,空氣里的污染物能夠影響人體健康。同時,天氣的變化也能給人帶來不適,這些可能都影響門診量的變化。Seo等人[10]采用環境監測數據與氣象數據建立韓國結膜炎門診量預測模型,發現門診量O3濃度相關系數為0.49。經學者研究發現,臺灣干眼病與環境監測因素如一氧化碳、二氧化氮等的含量正相關(P<0.05)[11]。因此,在對門診量進行預測時,選擇氣象因素及環境監測因素作為門診預測因素是必要的。
極端梯度提升(Extreme Gradient Boosting,xgboost)是在集成學習GBDT的基礎上對目標函數進行了二階泰勒展開,在陳剛等人[12]提出之后,就得到了廣泛的應用,在許多問題上得到了優勝的解決方案。
xgboost是在GBDT上進行改進的算法,故也是由k個cart樹集成學習而來。但不同的是GBDT的基函數為決策樹,而xgboost的基函數為其他的機器學習器。在xgboost中,損失函數的計算公式在GBDT的損失函數的基礎上加上了正則化項Ω(ht),即損失函數為:
(1)
其中,Ω(ht)計算公式為:
(2)
其中,γ,λ為正則化系數;J為葉子節點的個數;wt, j為對應葉子節點Rt, j的輸出值。
在GBDT中,損失函數僅僅對誤差部分做負梯度、即一階泰勒展開,但在xgboost中對誤差部分做二階泰勒展開,從而使擬合結果更準確,即:

(3)
在最小化損失函數的過程中,由于L(yi,ft-1(xi))為常數,故不影響最小化的過程,可省略。同時,由上知wt, j的定義,而ht(xi)為xi經過第t個決策樹處理后在子節點區域的輸出值,故式(3)可改為:
(4)
其中,
機器學習技術廣泛應用在機器翻譯,語音識別等領域,而這些領域的數據有些是非數值數據,很少有數值不平穩的情況。但作為時間序列數據,門診量經常會存在不平穩的情況。非平穩序列包含了季節、趨勢等因素,這些不確定因素使預測結果的準確性降低[13]。故在數據預處理時,先對數據進行平穩性檢測,如不平穩,常用的方法是進行差分化處理,即將數據的后一個數減去前一個數,依次相減得到數據集,重復檢測直到數據轉化成平穩序列,最后將預測結果進行反差分化得到最終預測結果。
本文數據采用ADF平穩性檢測結果得到p-value值為0.874 3,即數據是不平穩的。將數據集進行一次差分后便發現p-value值變為0,數據已經變成平穩序列了。
本文采用kettle工具抽取了上海市某三甲醫院2017/01~2019/05年的門診日值數據。對假期和周末的門診異常值,匯合氣象環境數據后一起進行處理。
在中國氣象數據網上,下載了對應2017/01~2019/05的氣象數據。這些數據總共包括22個氣象特征,對其中缺失值和異常值采用均值法進行處理。選取的主要氣象數據特征及值見表1。

表1 部分氣象數據特征及值
同期環境監測數據來自于pm2.5歷史數據網站[13],其中的數據全部來自于國家環境保護部。對數據中的缺失數值采用均值處理。環境監測數據特征及值見表2。

表2 環境監測數據特征及值
整合上述三份數據,刪除其中的周末以及假期數據,共得到565份數據。從這565份數據中選取508份作為訓練集,將剩下的57份數據作為預測集。
2.2.1 超參數取值
本算法在調參時首先采用隨機搜索調參法,確定大致的參數范圍,然后采用網格搜索調參法獲取最優的參數組合。
在本次隨機搜索調參時,采用三折交叉驗證,n_iters選擇為10即搜索次數為10。在隨機搜索調參的結果上,取每個超參數左鄰和右鄰幾個數一起作為網格搜索參數的初始值,最終得到的網格搜索參數結果見表3。

表3 超參數取值
2.2.2 評價標準
對于門診量預測的結果,采用平均百分比誤差(mean absoulute percent error,mape)來衡量預測值與真實值之間的差距,采用模型擬合度R2來衡量模型的擬合程度,其計算公式具體如下:
(5)
(6)
其中,yreal表示實際的門診量值;ypred表示門診量預測值;yavg表示門診量平均值。
mape越小說明預測的準確程度越高,R2越大說明模型選擇越合理。
2.3.1 門診量預測
在模型確定之后,便可以訓練模型進行門診量預測。未來50天日門診量預測值與真實值的對比曲線如圖1所示。其中,虛線即為未來50天的預測值,實線為未來50天的真實值,由圖1可以看出除了在最高值或最低值處有部分偏差之外,預測走向基本一致。

圖1 未來50天日門診量預測值與真實值
Fig. 1 Forecast and actual values of daily outpatient visits in future 50 d
2.3.2 差分化處理對預測結果的影響
在數據預處理后,將數據進行差分化處理,轉化為平穩序列,再進行預測,最終得到的預測結果是差分數據。在計算R2和mape時,需要將差分數據反差分化得到最終數據集。差分處理與未進行差分處理的R2和mape值見表4。可以看出,對于非穩定的時間序列數據,差分處理對預測結果的準確性影響明顯,因此在預測之前進行差分處理是必要的。

表4 差分對模型結果的影響
2.3.3 氣象及環境監測因素對預測結果的影響
對于門診量的預測,傳統的方法就是采用日期和門診量數據當作時間序列數據進行預測。這種方法解決了門診量影響因素太多無法選取全部因素的問題。在此方法中,只用時間變量來替代所有變化的因素,從而達到大致較好的預測結果。但時間因素是個籠統的特征,內在的變量太多,時間變量并不能完全替代這些變量。本文將對疾病影響較大的氣象因素及環境監測數據再加上時間變量一起預測門診量,比僅采用時間變量預測效果好。結果見表5。

表5 預測結果對比
門診量數據為時間序列數據,由于數據隨著時間變化存在波動現象,即數據是不穩定的,常見的機器學習和深度學習領域,很少需要時間序列處理,故該領域的常規化處理思路便沒有差分化這一方法。為了改善預測效果,翻閱了大量統計學文獻后,進行了差分化處理,結果顯示采用差分化處理后的xgboost模型預測方法,得到的預測結果之平均絕對百分比誤差低于原生數據的xgboost模型,展現了強大的預測能力。而且,相對于僅用時間來預測門診量的方法,將氣象、環境監測因素引入門診量預測的方法,其平均絕對百分比誤差及模型擬合度均獲得更好的效果。與其他門診量預測的研究相比[7-8],本文提出的模型的預測結果高于平均水平。由于數據集較小,深度學習方法效果不好,在后續的研究中,可以考慮抽取更多的臨床數據以擴大數據量以及引入經濟因素,并采用優化的深度學習模型,進一步增大預測的準確性。