張家臣 鄧金根 譚 強 石 林
(①中國石油大學(北京)石油工程學院,北京102249; ②中國石油大學(北京)油氣資源與探測國家重點實驗室,北京 102249)
測井資料在儲集層描述和油氣資源評估中具有十分重要的作用[1-3]。利用測井數據可以劃分巖性及評價儲集層物性、含油性、生產價值和生產情況[4-6]。但是由于鉆井、測井條件差異以及儀器故障等原因,經常出現部分測井段數據缺失的情況,甚至出于勘探成本考慮而放棄獲取某些特定的測井數據。為了解決這個問題,研究者試圖通過經驗模型和多元回歸分析等方法[7-10]揭示不同測井曲線之間的非線性關系,基于已有的測井數據對缺失段進行重構。但是,基于理想假設條件的經驗模型通常依賴研究者的主觀經驗,不具有廣泛適用性。多元回歸分析基于測井數據間的內在聯系生成測井曲線,然而井下地質情況復雜多變,數據間的映射關系很難用確定性的函數描述,所以預測精度通常較低。
近年來,隨著計算機科學的發展,機器學習方法逐漸應用于測井解釋[11]、巖性判別[12-13]和儲層預測[14-15]等。也有部分研究者將機器學習用于測井曲線的重構,其中大多采用人工神經網絡方法[16-20]。但是人工神經網絡在訓練過程中存在收斂速度慢、局部最小化和泛化能力差等問題,這些缺點限制了模型的預測性能[21]。同時,神經網絡這種典型的黑箱問題,相對于其他機器學習算法更不具有可解釋性[22]。在梯度提升決策樹(GBDT)的基礎上提出的XGBoost具有更高的性能及更快的速度[23],其中決策樹的結構可直接使模型可視化,并且通過全局特征重要性評估增強模型的可解釋性。相對于GBDT算法,XGBoost模型中加入了正則化項并將擬合模型精細化,因此在理論上擁有更強的預測能力,在眾多領域也取得了較好的預測效果[24-25]。在測井信息解釋方面,閆星宇等[26]通過XGBoost建立了致密砂巖儲層的孔隙度與滲透率回歸預測模型。谷宇峰等[27]從優化參數角度出發,基于XGBoost建立了滲透率預測模型。但是該模型算法應用于測井曲線重構方面的研究則很少。Zhong等[28]利用鉆井和測井數據,基于XGBoost對煤層氣井的地層密度進行了預測,但并未將其拓展到其他測井數據重構中,而且也未與其他機器學習算法進行比較。
本文提出利用XGBoost進行多源測井曲線的重構,內容包括測井曲線補全和生成兩個部分,然后將其與GBDT、隨機森林(RF)、全連接神經網絡(FNN)方法進行對比,最后結合地質背景分析預測效果。結果表明,無論在準確度還是穩定性方面,XGBoost模型都取得了較好的表現。
Chen等[23]提出的XGBoost是一種集成的樹模型,這種基于GBDT的改進Boosting算法具有訓練速度快、預測精度高等優點。Boosting屬于集成學習算法,由多個弱學習器按照不同的權重組合成為一個強學習器。本文的XGBoost算法選擇CART回歸樹作為基學習器,并在損失函數中添加正則項以約束損失函數的下降和模型的整體復雜度。XGBoost模型表達式為
(1)

XGBoost模型旨在通過迭代方式集成弱分類器以形成預測精度和魯棒性更高的模型[29]。每一次迭代都是在前一步的基礎上增加一棵樹,而新增的樹視為擬合上次預測的殘差。迭代過程為
(2)
目標函數是研究一切機器學習問題的出發點,XGBoost的目標函數由損失函數和正則項兩部分組成。正則項用于控制模型的復雜度,模型的預測精度由偏差和方差共同決定。為了降低方差、防止過擬合,需要在目標函數中添加正則項
(3)
式中:T為葉子結點數量;ωj為葉子節點分數;γ和λ均表示系數。
綜上,XGBoost的目標函數為
(4)

XGBoost采用增量訓練的方式進行迭代以最大化地降低目標函數[30]。在t輪迭代之后,目標函數更新為
(5)
為了使損失函數梯度收斂更快、更準確,XGBoost利用泰勒展開式對所有二階可導的損失函數做近似替換,目標函數近似為
(6)
將式(6)中每個數據的損失函數值相加,得
(7)
(8)


(9)
(10)

引入評價指標量化評估模型性能,評價指標衡量的是預測數據與真實數據之間的差異。本次研究選擇的三個評價指標分別是平均絕對誤差(MAE)、均方根誤差(RMSE)和預測模型擬合準確程度的R方值(R2)。
(11)
(12)
(13)

RMSE越小,說明模型穩定性越好; MAE越小,說明模型準確度越高;R2越接近于1,說明模型綜合性能越好。
本次研究數據來自渤海灣盆地的6口定向井,井位分布如圖1所示,B2、B3、B4、B5為訓練井,B1、B6為測試井,其中B1、B2、B3和B4井之間距離較近,B5和B6井與其他井距離較遠。研究的測井曲線包括聲波時差(DT)、井徑(CAL)、中子孔隙度(CN)、自然伽馬(GR)、深側向電阻率(RD)、自然電位(SP)、補償密度(DEN)和光電吸收截面指數(PE)。由于訓練數據的質量對機器學習模型預測的準確度具有很大影響,因此需要對原始測井數據進行預處理,主要包括異常值清理和缺失值填充。
(1)異常值清理。對于測井數據首尾兩端用于填充空值的異常值,可以根據經驗直接刪除。對于測井數據內部的異常值,利用基于距離的K近鄰算法對離群點進行識別清理。
(2)缺失值填充。首先評估所有測井數據的完整性,對于缺失值較少的測井數據,先利用K近鄰算法計算鄰近的k(本文k取100,即10m的長度)個數據,然后填充它們的均值; 對于具有部分測井數據缺失的井段,如果選擇直接刪除該井數據,就會使訓練數據更加稀少,而機器學習對數據的數量十分敏感,這樣可能導致預測模型準確度降低。因此,對于缺失部分數據的訓練井,可以通過對其現有數據進行訓練,然后對缺失段測井曲線進行預測補全,進而得到完整井段的測井曲線。
預處理前、后的數據量統計如表1所示。 B1~B4井的測井深度均達到4000m左右,B6井的測井深度較小。

圖1 井位分布圖

表1 預處理前、后數據量統計
為了測試XGBoost模型重構測井曲線的能力,進行了測井曲線補全實驗和生成實驗。主要研究內容包括:①評估XGBoost基于自身測井數據自動補全缺失井段數據的可信度; ②評估XGBoost基于鄰井數據生成特定測井曲線的準確度; ③對比XGBoost、GBDT、RF和FNN模型的性能。
如果一口井的部分井段測井數據缺失,可通過模型計算對缺失井段數據進行預測補全,然后將預測結果繼續作為訓練數據用于后續測井曲線生成實驗。測井曲線補全實驗可以彌補因部分數據缺失造成的數據量不足,在一定程度上也可以看作測井曲線生成實驗的數據預處理過程。以表1提供的B4井為例,驗證XGBoost自動補全缺失段數據的能力。
實驗涉及的測井曲線共6條,井深3480~4075m,測井段總長595m(圖2)。為了驗證補全數據的效果,將井深3850~4000m的CN、DEN、RD和PE測井曲線隱去,人為模擬數據缺失段,缺失段長度占總長度的22%。訓練數據集由3480~3850m和4000~4075m兩個完整測井段組成,采樣間隔為0.1m。以DT和GR作為輸入,CN、DEN、RD和PE作為輸出,通過XGBoost算法進行訓練。

圖2 測井曲線自動補全示意圖圖中黑色曲線為真實的測井數據,紅色曲線為XGBoost模型預測結果
由圖可見,預測補全的RD、PE測井曲線不僅能夠捕捉真實曲線的變化趨勢,而且具體數值也十分接近。而補全的CN曲線雖然沒有很好地捕捉到真實測井曲線的變化趨勢,但是其數值與真實曲線一直維持在較小的偏差范圍內。對于DEN曲線,雖然補全曲線沒有很好地模擬出真實測井曲線的波動幅度,但是兩條曲線的變化趨勢存在相似度,也具有一定的參考價值。整體來說,XGBoost模型具有較好的自動補全缺失段數據的能力。因此對于缺失大段數據而測井數據量不足的情況,可以考慮通過XGBoost模型利用該井中完整段的測井數據對缺失段進行自動補全。
將表1中的B2、B3、B4、B5井作為訓練井,B1、B6井作為測試井。每口井都包含相同類型的測井曲線,選取其中CAL、RD、SP作為輸入數據,DT、CN、GR、DEN作為輸出,分別采用XGBoost、GBDT、RF和FNN模型生成人工測井曲線。其中XGBoost、GBDT是基于決策樹的Boosting集合算法,RF是基于決策樹的Bagging集合算法,FNN為全連接神經網絡,屬于深度學習的范疇,本實驗構造的是具有3個隱藏層的全連接神經網絡。模型輸入和輸出的測井曲線之間映射關系可能非常復雜,因此在具體應用時通過K折交叉檢驗對模型性能進行驗證,選擇出使模型泛化性能最優的超參值。
使用網格搜索對上述四種機器學習模型進行參數調優,并通過5折交叉檢驗驗證模型性能,即將訓練集隨機劃分為5個部分,利用其中的4個部分作為訓練集,剩余的1個部分作為測試集,最后取平均測試誤差作為泛化誤差。使訓練集的所有樣本成為訓練數據地同時也必然有機會成為一次測試數據,從而更好地發掘訓練集數據的使用價值。圖3為4種模型的訓練過程學習曲線,可見,RF、FNN模型訓練曲線均有一定程度的欠擬合,FNN訓練效果最差; GBDT模型在訓練集表現較好,但是在交叉驗證集不盡人意,表現出過擬合的傾向; XGBoost則在訓練集和交叉驗證集中都表現出較好的效果,這是因為XGBoost在代價函數中加入了正則項,降低了模型的方差,使訓練模型更加簡單,同時XGBoost借鑒了RF模型算法,采用列采樣,既降低了過擬合又減少了訓練次數,使訓練速度大幅提高。

圖3 4種模型訓練過程學習曲線(a)XGBoost; (b)GBDT; (c)RF; (d)FNN
利用各個模型完成對B2~B5訓練井數據的訓練后,獲得了測試井B1、B6的生成曲線DT、CN、GR和DEN。
表2記錄了由4種模型得到的測試井生成曲線預測結果的評價指標數據,可以看出,FNN模型預測效果最差,此結論與交叉驗證中FNN訓練學習曲線欠擬合相對應。RF模型預測效果一般,XGBoost和GBDT模型的預測效果與前兩者相比明顯更好,并且XGBoost預測效果最好。以B1井為例,相對于GBDT、RF和FNN,其MAE分別減少了16.3%、50.0%和76.9%,RMSE分別減少了12.2%、33.5%和61.5%,R2分別增加了3.2%、9.1%和20.0%。說明XGBoost生成測井曲線的精度和穩定性都是最好。
圖4展示了基于XGBoost對B1井生成測井曲線的結果。生成的測井曲線包括DT、CN、GR和DEN,為了便于和真實測井曲線對比,將兩曲線上絕對誤差大于平均絕對誤差與標準差之和的部分標紅。由圖可見,DT、CN和GR曲線的預測效果非常好,大部分曲線段位于設定的誤差范圍內,即使是曲線波動幅度較大的井段,生成測井曲線的誤差也被控制在很小的范圍內。對于DEN曲線波動幅度較大的井段,生成的DEN測井曲線不能很好地捕捉其變化幅度,造成了較大偏差,但是其變化趨勢與真實測井曲線類似,整體的預測效果較好。

表2 測試井基于不同模型的預測結果
另外,由表2可知,B6井的預測效果較B1井差,原因可能有兩個方面:①B6井位于研究區北部,其余井位于研究區南部(圖1),研究區南、北地層受區域構造背景和成巖作用影響,具有不同的地層沉積特征。如圖5所示,B6井的地層與B1~B4井存在很大差異,B6井測井段中占據相當比例的明化鎮組,在B3、B5井僅存上部一小段,而B6井上部平原組在其他井測井段中則完全沒有。②B1、B2、B3和B4井之間距離較小,B1井處于4口井的中心位置,且其地層分布在訓練井中均發育; B6井與其他井距離較大,雖然其下部地層分布在B5井也發育,但是由于訓練井中對應數據量不足及B6井與訓練井所在區域距離較大,導致B6井預測效果有所降低。選擇該井作為訓練井,可以在一定程度上檢驗模型的泛化能力。

圖4 基于XGBoost生成的B1井人工測井曲線
以表2中預測結果相對不好的B6井為例,將基于XBGoost和FNN生成的測井曲線進行效果對比。如圖6所示,圖中第1列為輸入的3條已知測井曲線(CAL、RD和SP),第3、5、7、9列為基于XGBoost生成的人工測井曲線(紅色)與作為參照的實際測井曲線(黑色)的對比,第4、6、8、10列為基于FNN的生成測井曲線(綠色)與實際測井曲線(黑色)的對比。可以發現,由于B6井上部井段測井數據在其他訓練井中很少甚至沒有相關映射,導致其上部井段生成的測井曲線的準確度低于下部井段,XGBoost和FNN的預測結果均出現了偏差,但是XGBoost更好地預測了測井曲線的變化趨勢,生成曲線與實際曲線偏差比較小,這說明XGBoost在面對未知數據集時,具有較強的泛化能力。在井深1080~1160m處(圖中藍色虛線框內),可以發現DT、CN和GR曲線在此區間內出現一個階躍式變化,XGBoost和FNN模型也都捕捉到了測井曲線上的這種變化,但是FNN在此區間內生成的測井曲線與真實值存在較大偏差,而XGBoost的預測準確度和穩定性均顯著高于FNN。

圖5 研究區地層分布圖

圖6 基于XGBoost和FNN生成的B6井的人工測井曲線
(1)為了使梯度收斂更快、更準確,XGBoost算法對損失函數進行二階泰勒展開,并加入了正則項以權衡目標函數和模型的復雜程度,降低了模型的方差,可以很好地解決在基于神經網絡的測井曲線重構方法中容易出現的過擬合問題,有效地提升了XGBoost測井曲線重構的準確性。
(2)基于XGBoost對渤海灣盆地1口定向井的測井數據缺失段進行自動補全實驗。該測試井的測井曲線中有22%的數據缺失,實驗不包含其他井的測井數據,僅依靠同一口井中完整段的測井曲線對缺失段進行補全。結果顯示,測井曲線補全的準確度和穩定性均達到較好效果,能在一定程度上彌補數據缺失導致的數據量不足。
(3)基于XGBoost、GBDT、RF和FNN對渤海灣盆地2口定向井進行人工測井曲線生成實驗。通過K折交叉驗證檢驗上述模型的性能,并結合地質背景對預測效果進行對比分析。結果顯示,基于XGBoost模型生成的測井曲線準確度和穩定性最高,在面對未知的數據集時,XGBoost也表現出了較強的泛化能力。