彭 俊 項 薇,2* 謝 勇,3 黃益槐 韓樂奇 吳成宇
1(寧波大學機械工程與力學學院 浙江 寧波 315211) 2(寧波大學先進儲能技術與裝備研究院 浙江 寧波 315211) 3(撫州幼兒師范高等??茖W校 江西 撫州 344099)
我國三甲醫院門診就診中普遍存在“三長一短”的問題,即“掛號排隊時間長、看病等候時間長、取藥排隊時間長、醫生問診時間短”。有學者統計研究表明門診患者的醫療診治時間僅占有門診總時間的10%~15%[1]。這其中的“三長”極大影響患者對醫院醫療服務滿意度,也直接造成患者就診過程排隊擁堵現象,影響醫療機構的正常運作管理。
基于不斷增長的醫療需求的影響,就診排隊等待現象似乎不可避免。目前,患者和醫院依然存在信息不對稱的情況,特別是當患者需要進行多項檢查及診治服務時,患者無法獲得各科室實時就診信息,僅依靠經驗選擇就診項目進行排隊等待。應用預測分析技術可以為醫院過度擁擠提供一個解決方案[2-3],把預測出的等待時間等信息通過電子屏幕等移動設備發布給患者,增強患者就診體驗,緩解患者因為焦急產生等待的焦慮,從而提高其滿意度。
針對醫療服務等待時間預測問題,依據其復雜性,可提煉成單一服務階段等待時間預測與多階段服務等待時間預測這兩類問題。單階段等待時間預測是指這類患者需要知道當前所在科室的實時等待信息,該患者已經在該科室的隊列中,我們需要預測該患者所在科室隊列的實時等待時間;多階段服務等待時間預測是指這類患者需要接受系列的就診服務,過程中有多重排隊隊列選擇,不僅需要知道當前所在科室的實時等待信息,還需要獲取下一流程所在科室的等待信息乃至在醫院的總逗留時長。通過文獻綜述發現,現有的服務等待時間預測研究主要為單階段等待時間預測,少有針對多階段服務等待時間預測的相關文獻。
國內學者朱啟東[4]基于科室、掛號時間、是否為工作日、月份、醫生、同科室候診人數、當天本科室掛號總人數和是否為節假日8個變量建立BP神經網絡患者候診時間預測模型。張會會[5]基于醫療信息系統數據將星期、是否周末、科室、卡號類型、卡號類型、預約時段等變量提取出來,分別利用線性回歸、Lasso回歸、隨機森林回歸、K最近鄰回歸四種方法建立患者等待時間預測模型,隨機森林和K最近鄰回歸精度最高,平均絕對誤差低至13分鐘左右。何躍等[6]將患者掛號月份、時間段、科室隊列人數和科室隊列流速作為預測模型的自變量,建立基于BP神經網絡急診科室患者等待時間預測模型,其研究顯示隊列流速對患者等待時間影響較小。
國外研究主要側重于急診科室患者等待時間的預測,與之相關的文獻采用了大量的統計方法。Austin等[7]基于患者年齡、性別、患者緊急情況、病情程度、是否為工作日等15個變量使用分位數回歸模型預測患者在請求急診服務科多久到達醫院。Poole等[8]使用正則化模型(Ridge and Lasso)和隨機森林回歸預測患者急診候診時間。Champion等[9]通過使用簡單的移動平均、滾動平均方法計算出等待時間的算術平均值來構建預測模型。Pianykh等[10]將科室隊列人數、最近的3位病人平均等待時間、隊列流速等作為輸入變量,建立線性回歸模型預測患者等待時間。Ang等[11]使用正則化回歸模型預測病情較輕患者等待時間。Arha[12]基于時間類變量(如這一天是星期幾、患者幾點到達等)、急診科室快速通道的狀態、患者類型、患者地點位置等變量,構建基于正則化回歸方法(Lasso、Ridge、Elastic Net、SCAD和MCP)和隨機森林的患者等待時間預測模型。
綜上所述,總結對患者等待時間統計建模輸入的變量:主要可分為時間類、患者類型、科室類型、掛號方式、地點位置5類變量,具體如表1所示?,F有的研究主要采用移動平均、回歸分析和神經網絡三類算法,具體如圖1所示。移動平均模型僅利用本身的歷史數據進行預測,數據需求簡單,但也因此忽略了其他因素的影響;神經網絡算法可解釋性較差同時需要大量的歷史數據;而經典的回歸分析方法如正則化方法、分位數回歸、K最近鄰、決策樹等預測技術由于欠擬合導致預測性能欠佳,同時也不適用在大數據樣本的預測。本文將選取醫療服務等待時間的預測問題為研究對象,引入基于LightGBM算法實現多階段服務等待時間的預測。
表1 統計預測建模輸入變量
圖1 統計學習預測方法
LightGBM算法屬于Boosting集成算法中的一種,Boosting是機器學習中集成學習算法的一個分支,是目前經典的用于預測的機器學習算法,由Schapire[13]提出,其主要思想是將多個弱監督學習模型進行有機組合得到一個性能更好更全面強監督學習模型,即便是某一個弱學習器得到了錯誤的預測,其他的弱學習器也可以將錯誤糾正。常見的機器學習Boosting集成算法有Adaboost、GBDT、XGBoost和LightGBM。Adaboost和GBDT都是經典的Boosting決策樹算法,XGBoost在GBDT基礎上進行了一定改進,使其性能得到提升。XGBoost算法雖然強大,但是由于XGBoost算法迭代次數和特征維度有很大關系,當樣本數據維度增加,每次迭代需要遍歷全部的數據樣本,在這種情況下XGBoost算法效率顯著降低。為了應對大數據樣本的挑戰,還需要對XGBoost進行優化。LightGBM是微軟2017年提出的新的Boosting框架模型[14],LightGBM算法在XGBoost基礎上進一步進行了以下改進:
(1) 梯度單邊采樣技術:梯度單邊采樣技術(Gradient-based One-Side Sampling,GOSS)可以剔除很大一部分梯度很小的數據,只使用剩余的數據來估計信息增益,從而避免低梯度長尾部分的影響。由于梯度大的數據對信息增益更加重要,所以GOSS技術在較之傳統GBDT少很多的數據前提下仍然可以取得相當高的預測精度[15]。
(2) 獨立特征合并技術和直方圖算法:獨立特征合并技術(Exclusive Feature Bundling,EFB)實現互斥特征的捆綁,以減少特征的數量,因為在高維特征的數據樣本中,很多樣本的特征存在互斥的情況,EFB技術識別并對這些特征進行捆綁。另外,在GBDT和XGBoost算法中,最耗時的步驟是利用預排序(Pre-Sorted)的方式在排好序的特征值上枚舉所有可能的特征點,然后找到最優劃分點,而LightGBM中使用直方圖算法替換了傳統的Pre-Sorted以減少對內存的消耗,直方圖算法的思路是將連續的特征值進行裝箱處理,裝箱處理其實就是離散化連續的特征值,而對于類別特征,一種取值就是一個箱,這樣處理的好處是在節點分裂時,XGBoost和GBDT中需要遍歷所有離散化的值,而在LightGBM中只要遍歷箱。因此LightGBM更加高效,占用內存更低。
(3) 不同于XGBoost和GBDT采用基于按層生長的決策樹成長方式,又叫做level-wise策略。LightGBM算法中單個決策樹的節點分離方法是基于葉子分裂的,又叫leaf-wise策略,這樣的好處是不會對許多分裂增益過低的節點進行遍歷搜索,降低了對計算資源的消耗。
本文預測分析過程如圖2所示,首先基于SIMIO獲取相關數據,對數據進行獨熱編碼及標準化預處理后使用Lasso、Ridge、GBDT、XGBoost和LightGBM算法建立預測模型,使用隨機搜索選擇參數,最后通過對比選出最佳模型。
圖2 預測分析過程
將患者服務等待時間定義為患者在醫院接受服務時間以及等待時間之和。醫院各科室隊列人數的實時狀態S、患者診療流程中的科室構成O是影響患者服務等待時間的主要因素。
(1)
所以,多階段患者服務等待時間可用式(2)表示,因為無法知道公式的具體形式,因此采用LightGBM算法建立回歸模型預測患者服務等待時間。
F=f(k1,k2,…,kn,p11,p12,…,p1n,…,pMnM)
(2)
對寧波某婦幼保健院以及寧波多家醫院的調研發現,目前醫院的HIS系統與排隊系統獨立運作,無法直接獲取多階段的原始數據,本文采用SIMIO軟件進行仿真,獲取模型訓練集和驗證集數據。
仿真首先需要仿真目標,本文基于文獻[16]建立仿真模型獲取相關實驗數據。論文中以大連某體檢中心實際工作流程為基礎,對于患者的就診流程、患者到達分布、人員設備配置、各科室服務時間、排隊過程均有詳細說明。
對于建模輸入變量,本文主要考慮患者和醫務人員兩方面的影響,主要包括時間類(患者到達時間)、科室類(各科室隊列人數類、患者檢查項目)這2大類變量對患者等待時間的影響,具體變量和變量類型如表2所示,通過SIMIO中添加觸發器并加入write step模塊將實驗相關數據輸出成.csv文件格式。對于上述共17類數據,服務等待時間是我們的預測目標,進入隊列時間既可獲取進入隊列時刻,也可與完成時間計算得到患者的服務等待時間,其他14個變量為輸入模型中的因變量,將仿真模型運行60天后匯總得到樣本共計8 110條。
表2 變量類別及類型
(1) 標準化。對數據進行標準化處理可以排除不同變量值域量綱差異過大的影響,有利于算法模型的收斂。通過式(3)進行轉換,假設原始變量集合為X={X1,X2,…,Xn},標準化處理后的變量集合為Z={Z1,Z2,…,Zn},使用sklearn.preprocessing中StandardScaler模塊可以快速進行數據標準化處理。本文對檢查科室總數、采血科隊列人數、一般檢查科隊列人數、眼耳口鼻科隊列人數、內科隊列人數、外科隊列人數和彩超科隊列人數進行標準化處理。
(3)
式中:μ是該變量的均值;s為該變量的標準差。
(2) 獨熱編碼。獨熱編碼即一位有效編碼,其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都有它獨立的寄存器位,并且在任意時候,其中只有一位有效。如對0和1進行編碼,首先只有兩個狀態就是需要兩個狀態寄存器,將其編碼為00和01。獨熱編碼使得特征間的距離度量合理,不過會增加特征維度。本文使用Python的第三方庫pandas中get_dummies()方法對進入隊列時刻、采血科是否檢查、一般檢查科是否檢查、眼耳口鼻科是否檢查、內科是否檢查、外科是否檢查和彩超科是否檢查共7個離散特征進行獨熱編碼。
為評估模型的泛化性能,將實驗源數據集,共計8 110條實驗源數據,隨機選取80%的數據(6 488個樣本)作為訓練集,20%的數據(1 622個樣本)作為測試集。
表3 數據集大小
使用兩個指標MAE和MAPE度量Lasso、Ridge、GBDT、XGBoost、LightGBM模型的預測精度。
(1) 平均絕對誤差(MAE)。平均絕對誤差可以直接衡量預測值與真實值的差值大小,具體MAE計算方式見式(4)。
(4)
式中:n為樣本個數;yobs,i為第i個實驗數據的真實值;ymodel,i為第i個實驗數據的預測值。MAE值越小說明算法預測精度越高。
(2) 平均絕對百分比誤差(MAPE)。平均絕對百分比誤差不僅僅考慮預測值與真實值的誤差,還考慮了誤差與真實值間的比例。MAPE計算方式見式(5),MAPE值越小說明算法預測精度越高,由式(5)可知當實際值為0時公式將不適用,因此在計算MAPE時將實際值為0的樣本刪除。
(5)
式中:n為樣本個數;yobs,i為第i個觀測樣本的實際值;ymodel,i為第i個樣本的預測值。
模型驗證實驗電腦配置為64位Window 10操作系統,8 GB運行內存,Intel Core i5- 8250U處理器。使用Python3.5編程語言進行分析建模,建模過程主要使用到的包和機器學習庫有pandas、numpy、matplotlib、seaborn、sklearn。
使用機器學習算法構建預測模型時,參數對模型的預測結果影響較大。對于Lasso模型,選取alpha和max_iter進行尋優;對于Ridge模型,選取alpha進行尋優;對于GBDT模型,選取learning_rate、n_estimators、max_depth和subsample這4個主要參數進行調優;對于XGBoost模型,選取learning_rate、n_estimators和max_depth這3個參數進行尋優;對于LightGBM模型,選取learning_rate、n_estimators、max_depth、num_leaves、min_data_in_leaf、feature_fraction和bagging_fraction共7個主要參數進行調優。使用隨機搜索自動選取參數。具體步驟如下:(1) 確定參數的尋優區間;(2) 為每個超參數定義成均勻分布;(3) 根據給定的分布進行隨機采樣,然后根據得到的采樣結果進行遍歷。使用sklearn中RandomizedSearchCV模塊可快速進行隨機搜索。使用5折交叉驗證選擇參數,超參數尋優時采用MAE為評分函數。確定參數后分別評估各模型在測試集上的預測性能,并整理實驗結果如表4所示。
表4 不同模型尋優耗時與MAE值對比
可以發現Ridge尋優時間最短,預測性能較差,在測試集上MAE僅為9.140 8。GBDT、XGBoost、LightGBM都可以取得較好的預測精度,MAE約為3分鐘左右,但是LightGBM模型可大幅降低尋優時間,其尋優時長僅為GBDT模型的3.3%,XGBoost模型的22.4%。因此,綜合尋優時間和預測精度來看,確定LightGBM為最佳模型。
使用MAPE評估各模型的預測精度在測試集上預測精度,通常我們認為模型MAPE小于10%說明預測模型精度較高。如表5為各個模型的MAPE值??梢园l現GBDT、XGBoost、LightGBM算法遠高于Lasso和Ridge模型預測精度,預測精度分別為8.62%和8.23%和8.52%,滿足實際應用需求。
表5 各算法MAPE值對比(%)
LightGBM建??墒褂媚P蛢戎煤瘮祊lot_importance提取特征對于模型的重要度,表6為各特征對模型重要度所占百分比,可以看出各科室隊列人數和檢查科室總數占比最高,計算可得這些特征占比總計達84.77%。這些特征是影響患者等待時間的關鍵。
表6 LightGBM模型特征重要度(%)
結合醫療工作,根據預測分析結果給出如下應用討論:
(1) 體檢流程作為典型的多階段服務流程,患者往往處在焦急的等待之中,在我們的實際應用中,可在預測出的等待時間的基礎上加上一段時間,使得患者實際感知的等待時間減少,提高病人滿意度。
(2) 對于多階段服務等待時間預測來說,獲取各科室信息是預測的基礎,因此建立統一的醫療信息系統尤為關鍵,結合文獻調研分析和本文的研究,采集患者的掛號科室數、各科室的隊列人數等信息對預測等待時間尤為關鍵。
(3) 多階段服務等待時間預測有助于優化序列預約,減少不必要的過號浪費現象發生,因為目前的情況是每個環節都需要排隊取號,存在大量過號,無法了解排隊情況,有了患者服務等待時間,可用于最優化序列預約。
本文基于Lasso、Ridge、GBDT、XGBoost、LightGBM建立多階段服務等待時間預測模型,預測結果顯示LightGBM取得預測性能最好,平均絕對誤差分別為3.439 1,平均百分比誤差為8.52%。本文的不足之處在于LightGBM雖然可以提高預測精度,但與Ridge算法相比,其算法運行時間較長,特別是在醫療大數據的背景下如何在獲得較高預測精度的同時降低算法尋優時長是以后研究主要內容之一。