我们的报告将分为六个部分,第一部分是研究背景与内容。受疫情影响以来,石化行业市场日趋饱和,竞争激烈,同时利润也受到压缩,大部分石化产业都需要转型开拓新市场,但同时又难以获取一些小品种化工品价格。所以我们希望通过机器学习方法实现敏锐捕捉市场化工品价格变化趋势,同时能够推算小品种化工品价格的目标。长此以往,我们希望能够建立属于我们自己的化工品价格体系,为石化行业提供新的机遇。
上图展示了我们工作的三个部分,第一部分是石化产品的相关性的分析,第二部分,我们希望通过六种机器学习方法建立石化产品的价格模型,最后,我们构建了一个信息管理的网站,希望能够支持价格模型在实际工程项目中的应用。
这是我们的技术流程图。在右边放了我们采用的六种机器学习模型,它们都是通过sklearn和torch框架搭建完成,我们的信息管理网站采用的是python语言中的Flask框架作为网页后端,JavaScript语言作为网页前端,同时使用CSS和ECharts库来完成。
第二部分是数据统计与分析。我们首先把所有的数据进行汇总,以日期列对齐,然后画出相关性热力图,然后以相关性系数大于等于0.7作为标准筛选出所有组合,再结合化工品的产业链上下游关系以及数据存在情况,共分为八个模型组合。这里以模型三为例,我们首先对它进行描述性统计分析,可以看到数据取值是在2018-2022年近五年当日化工品价格数据,它的价格数据波动幅度较大,标准差较大,但是某些化工品变化趋势大体一致,说明价格变化趋势具有较高的相关性。
接下来是模型构建和模型结果部分。针对确定的输入输出组合,我们选用了六种机器学习模型来对价格缺失的化工品进行预测。比较各个机器学习方法,在测试集的预测结果在10%和5%误差内的比例,然后进行横向和纵向的比较。总体来看,横向比较上展示了六种模型、八个模型组合下的预测结果,我们可以发现K近邻、决策树和随机森林取得了比较好的结果。神经网络的结果较差,我们推测可能是因为这个模型比较复杂而实际应用场景的预测数据比较简单,可能存在一些过拟合的问题。相反,一些简单模型反而能取得更好的结果。不同输入组合的纵向比较上,我们发现不同组合下最优模型一般是不同的,所以我们需要进行模型比选。
以下几张图展示了对不同机器学习模型进行横向和纵向比较的结果。这里以模型一的四氢呋喃为例,展示了随机森林、K近邻、决策树和LSTM四种模型的预测结果以及1:1的直线和相关系数的R^2值,可以发现R^2都在0.97以上。纵向比较以K近邻模型为例,选取四种化工品,同样可以发现它们的预测情况都非常好,R^2都在0.99以上。
接下来是模型结果分析,我们考虑到后续实际工作的应用场景,对原数据集进行了年平均,然后以年平均尺度数据来进行验证,以每个化工品品种误差最小模型来选择最优预测模型。下图横轴展示了19种需要预测的化工品,纵轴是误差百分比,可以发现对于每个化工品得到的最优预测模型预测误差在10%以内,总体在5%左右。
我们以上一步选到的最优模型在实际工作场景中进行验证,比较最优模型在验证数据集中的表现(也就是红线),并且与上一步年平均数据集结果(蓝线)以及验证数据集的最优模型(紫线)进行比较。因为蓝线和训练数据集来自同一批数据,所以它的预测效果最好,紫线表示在实际工作场景数据中可能达到的自由结果,红线表示以训练数据集优选模型来对工作场景数据进行预测的实际结果,也表示我们实际工作场景的预测情况,可以发现这里除了部分化工品存在数据缺失和离群值的情况,总体上模型表现良好,误差控制在10%左右。
但为了真实业务场景应用,我们还搭建了网页应用平台。下面由我演示网页使用方法。首先,左上角是中石化工程建设有限公司的logo,它同时也就是一个home键,然后左下方是这个输入的窗格,右边是我们的首图。往下翻是注释,基于12000余条数据建立的机器学习模型的19种化工品的价格预测工具。我们以丁基橡胶为例。选择了它之后,这个ECharts后面就会体现出动态化往年数据参考,把鼠标放上去,还可以看到具体数值。接下来是输入大宗化工品品种的含税价格,选择使用的模型。我们选中线性回归模型,然后提交按钮,按下之后马上返回参考价格,也可以与右侧往年数据的动态价格进行参考,非常方便业务人员线下使用。
最后总结一下。首先这个项目填补了小宗商品的市场价格的信息的空白,并且也提升了市场决策的准确性和效率。在数据统计分析方面,我们的相关性分析和描述性统计都为后续的数据产出做了准备,也为模型的建立提供了有价值的信息。在机器学习预测部分,我们提高了价格预测准确度,并且通过控制误差也确保了模型的可靠性和准确性。在信息系统建设方面,我们建的网页也非常方便公司的业务人员进行实际的业务的运用,也提高了工作效率,为后续的产品价格的决策提供了及时和可靠的价格预测结果。总之,我们的项目是一个非常完整并且有实际应用的一个项目,以上就是我们展示的全部内容。
编辑:文婧
校对:汪雨晴