基于极端梯度提升树算法的测井曲线重构方法
2022-10-31齐春生郑志锋
齐春生, 丁 磊, 王 一, 郑志锋, 张 茜
(中海石油(中国)有限公司 海南分公司,海口 570311)
南海西部海域油气田在进行测井资料采集的过程中,由于仪器故障等原因,往往会出现部分井段测井资料丢失的情况,为测井解释精确评价带来困难。虽然可以通过现场随钻上提复测或电缆补测的方式重新采集测井资料,但这种方式一方面增加了作业成本,另一方面复测得到的测井资料可能会由于长时间泥浆浸泡出现失真的现象。
针对该问题,研究人员通常使用各类数学算法,根据已有测井曲线进行缺失曲线重构,达到缺失测井曲线补全的目的。目前,国内外学者使用的测井曲线重构方法主要有:①使用经验公式拟合法对曲线进行校正,主要有Gardner公式[1]和Faust公式[2];②使用岩石物理建模的方式针对不同性质储层进行建模正演[3];③使用多元线性回归方法进行拟合,建立现有曲线与目标曲线的线性相关关系[3-6]。以上几种方法虽然计算精度满足要求,但都存在应用局限性。近年来,随着机器学习技术的不断发展,研究人员开始尝试使用机器学习算法如BP神经网络[7]、MRGC图形聚类[8]、SVM支持向量机[9]等进行测井曲线重构,取得了良好的应用效果。
研究人员经过长期的应用实践后发现,机器学习算法与传统方法相比,在具备高度参数化、适用范围广的特点的同时,也存在着参数众多、容易发生过拟合现象的缺点;不仅如此,由于海上油田各井测井系列不同,导致难以建立大规模训练样本,也影响了机器学习模型的精度。
为解决传统机器学习算法在测井曲线重构中面临的问题,本文使用极端梯度提升树XGBoost算法[10],开发了一种支持参数自动优选的测井曲线重构方法。将其应用到靶区Z油田的测井曲线重构工作中,以期取得更便捷、更准确的应用效果。
1 XGBoost算法概述
1.1 算法原理
XGBoost算法是梯度提升树的一种,其主要思想是使用贪心策略和二次最优化的方法,逐步在集成中添加弱分类器,每一个弱分类器都通过拟合前序分类器的残差对其进行改正,由此得到强分类器[11]。
XGBoost算法使用的树模型为CART回归树模型,其预测模型以及目标损失函数为
(1)
(2)
采用加法模型计算第t个模型,并对其目标损失函数进行泰勒二阶展开,可以得到
(3)
(4)
式(4)中,i=1~n求和代表在样本中遍历,j=1~T求和代表在树叶子节点遍历,可以将该式全部转换为在树叶子节点遍历的方式,得到
(5)
(6)
(7)
确定了回归树的结构和每个叶子节点得分值计算方法之后,XGBoost算法利用贪婪算法,遍历所有特征的划分点,根据式(8)计算分裂后的得分增益,确定划分方向。
(8)
1.2 算法特点
XGBoost算法与传统机器学习算法相比做出了多项改进,主要表现在防止过拟合、特征重要性计算以及稀疏矩阵计算支持上。
1)防止过拟合。XGBoost算法除了在损失函数Obj(θ)中加入正则项Ω(fk)外,还使用了Shrinkage缩减法和Column Subsampling列抽样法,有效防止过拟合的发生。
2)特征重要性计算。XGBoost算法通过统计提升树中每个特征分裂点的得分得到特征重要性,由此直观展示每个特征对机器学习任务的贡献价值。
3)稀疏矩阵计算支持。当训练样本中某特征包含缺失值时,XGBoost算法可以使用稀疏感知分割算法分别将该特征划分到左子树和右子树,当划分到左子树时有
(9)
当划分到右子树时有
(10)
然后根据式(9)和式(10)分别计算得分收益,选择得分最高的方向划分子树。
综上所述,XGBoost算法可以有效避免过拟合现象的发生,还提供了特征重要性计算以及稀疏矩阵计算支持,能够解决传统机器学习算法在测井曲线重构中面临的问题。
2 XGBoost算法测井曲线重构效果研究
为测试XGBoost算法测井曲线重构效果,以靶区Z油田22井作为测试井,进行两方面研究:①分别使用测试井的本井测井曲线以及临井测井曲线组成训练样本重构电阻率曲线,对比分析XGBoost算法与传统机器学习算法BP神经网络、SVM支持向量机的计算效果;②分别基于特征数据完整以及存在特征数据缺失的临井测井曲线重构电阻率曲线,分析XGBoost算法针对稀疏测井曲线训练样本的计算效果。
2.1 测井曲线重构效果对比实验
靶区Z油田测试井以及6口临井均测量了自然伽马、电阻率、补偿中子、密度测井以及气测录井资料,本实验首先选取测试井2 512~2 650 m深度段测录井曲线数据组成本井训练样本,选取测试井2 651~2 879 m深度段测录井曲线数据作为测试样本,并使用XGBoost算法进行电阻率曲线重构;然后取临井同层段测录井曲线数据经标准化后组成临井训练样本,并使用BP神经网络、SVM支持向量机以及XGBoost算法进行电阻率曲线重构,得到图1所示的电阻率曲线重构效果对比图。
图1中共有4个电阻率重构道,道中红色实线为真实电阻率曲线,蓝色实线为重构电阻率曲线。前3道为使用BP神经网络、SVM支持向量机以及XGBoost算法学习临井训练样本得到的电阻率重构结果,第4道为使用XGBoost算法学习本井训练样本得到的电阻率重构结果。可以看出:①与BP神经网络、SVM支持向量机算法相比,使用XGBoost算法重构出的电阻率曲线与真实值更为吻合;②使用本井训练样本和临井训练样本学习得到的XGBoost算法模型效果接近。上述现象说明XGBoost算法适用于测井曲线重构,当一口井全井段需要重构测井曲线时,可以使用临井数据作为训练样本对目标井进行测井曲线重构,但是由于各井测井资料测量仪器和环境不同,需要首先对测井曲线进行标准化处理;当一口井仅有部分井段需要重构测井曲线时,可以直接使用该井其他深度段测井曲线作为训练样本对目标井段进行测井曲线重构,这种方式无需对曲线进行标准化,更为方便快捷。
图1 测试井电阻率重构效果对比
2.2 稀疏训练样本曲线重构实验
本实验基于临井训练样本,首先取训练样本中5口井,分别删除部分气测总烃曲线、补偿中子测井曲线值组成稀疏训练样本,然后取剩余一口特征数据完整井的测录井数据组成完整训练样本。基于上述3个训练样本使用XGBoost算法进行电阻率曲线重构,得到图2所示的电阻率曲线重构效果对比图。
图2中共有3个电阻率重构道,道中红色实线为真实电阻率曲线,蓝色实线为重构电阻率曲线。前两道为基于稀疏训练样本学习得到的电阻率重构结果,第3道为基于去除稀疏数据后的完整训练样本学习得到的电阻率重构结果。可以看出:①当测井训练样本存在特征数据缺失时,XGBoost算法依然可以有效地完成测井曲线重构任务,而且由于大量有用信息得以保留,模型精度相较于数据较少的完整训练样本有显著提高;②对比基于两种稀疏训练样本学习得到的电阻率重构效果,基于缺失补偿中子曲线的训练样本训练得到的重构效果更好。针对该现象,分析实验1中原始训练样本模型特征重要性(表1),总烃曲线的特征重要性为0.495,补偿中子曲线的特征重要性为0.018,说明总烃曲线特征重要性更高,该曲线缺失对电阻率重构任务精度影响更大。上述现象说明XGBoost算法可以有效应对测井训练样本数据缺失的情况,既能有效提高模型精度,又可以节约数据准备时间,可以为测井曲线重构带来极大帮助。
2.3 小结
综上,使用XGBoost算法进行测井曲线重构相比于传统算法有以下优势:
图2 稀疏训练样本电阻率重构效果对比
表1 XGBoost算法模型特征重要性
1)对单一井来说,测井曲线重构不需要进行归一化处理;对于多井来说,算法可以直接对包含稀疏数据的多井训练样本进行处理,所以可以大幅节约数据准备时间。
2)得益于更多的训练样本数据,使用XGBoost算法可以有效提高测井曲线重构精度。
3 应用实例
3.1 XGBoost算法测井曲线重构流程
基于XGBoost算法重构测井曲线的流程主要包括以下4个步骤:
1)选择本井或周围临井测录井曲线数据(临井测井曲线数据需要事先进行曲线标准化处理)组成训练样本。
2)对训练样本进行数据清理,删除异常值和重复值,并按比例将训练样本分为训练集和验证集。
3)使用XGBoost算法学习训练集,设置算法参数变化范围,使用网格搜索[12]得到最佳的参数组合,并在验证集上验证模型效果。
4)将得到的XGBoost算法模型应用于实际井进行测井曲线重构。
3.2 电阻率重构在低阻油田水淹层识别中的应用
靶区Z油田A油组经过多年的开发生产,构造高部位井点局部已经出现水淹。该油组为低阻油层,水淹类型为盐水水淹,故油层与水淹层电阻率响应特征类似,无法使用常规定性识别图版识别水淹层。随着油田挖潜工作的实施,如何准确识别水淹层并进行合理避射成为油田下一步深度开发的关键。
油田水淹过程中,随着储层内烃类物质的含量和组分发生变化,气测录井曲线也会随之发生变化。因此,综合分析测井、气测录井资料,可以帮助研究人员识别水淹层[13-14]。
基于上述原理,本文以靶区未水淹井为训练井,以训练井自然伽马曲线、物性曲线和气测录井曲线作为学习曲线,以电阻率曲线作为预测曲线,使用XGBoost算法建立未水淹电阻率重构模型,将该模型应用于水淹井得到原始未水淹电阻率曲线,对比该曲线与真实电阻率曲线形态差异,由于水淹类型为盐水水淹,所以水淹后电阻率曲线会低于原始未水淹电阻率曲线,由此识别水淹层。
3.2.1 模型建立
取训练井中自然伽马、密度、补偿中子、钻时、总烃、甲烷、乙烷、丙烷、异丁烷、正丁烷曲线数据为特征学习曲线,取电阻率曲线为预测曲线。XGBoost算法需要调整的参数及其变化范围见表2。
表2 XGBoost算法参数调整变化范围
使用网格搜索遍历34 560种参数组合,得到最优参数组合:max_depth为3,learning_rate为0.19,min_child_weight为1,subsample为1,colsample_bytree为0.8。该模型在验证集的应用效果如图3所示。可以看出重构电阻率值与真实电阻率值接近,分布在45°线附近,说明XGBoost算法重构电阻率模型精度较高,可以应用于水淹井的未水淹原始电阻率曲线计算工作中。
图3 XGBoost算法电阻率重构模型验证效果
图4 B1H井原始未水淹电阻率重构剖面图
3.2.2 水淹识别
将XGBoost算法计算得到的未水淹原始电阻率重构模型应用于Z油田水淹井B1H井,得到图4所示的原始未水淹原始电阻率重构剖面图。从图中可以看出,电阻率道中原始未水淹电阻率与实测电阻率在未水淹层段基本重合,在水淹层段出现明显包络现象,与实际情况相符,说明使用未水淹原始电阻率和实测电阻率交会可以有效完成靶区低阻油田水淹层定性识别任务。
4 结论
1)基于XGBoost算法的测井曲线重构方法计算精度高、调参难度低,而且支持对稀疏数据的处理,可以节约大量数据准备时间,为测井曲线重构带来极大帮助。
2)利用包络法将XGBoost测井曲线重构方法应用到靶区Z油田A油组低阻水淹层识别工作中,取得了较好的应用效果。