网站建设与管理怎么做,道滘网站建设,好的做外贸的网站有哪些,安庆网络推广和竞价项目git地址#xff1a;https://github.com/Boris-2021/Oil-price-control-forecast 使用已知的历史数据#xff1a;日期、汇率、布伦特、WTI、阿曼原油价格#xff0c;预测下一个调价周期中的汽油、柴油零售限价的调价价格。 一. 需求
1.1 需求说明
使用已知的历史数据https://github.com/Boris-2021/Oil-price-control-forecast 使用已知的历史数据日期、汇率、布伦特、WTI、阿曼原油价格预测下一个调价周期中的汽油、柴油零售限价的调价价格。 一. 需求
1.1 需求说明
使用已知的历史数据日期、汇率、布伦特、WTI、阿曼原油价格预测下一个调价周期中的汽油、柴油零售限价的调价价格。 1.2 数据说明
原始数据中包含字段为。日期、汇率、布伦特、WTI、阿曼原油价格、汽油、柴油零售限价的调价价格、税率。其中汇率、布伦特、WTI、阿曼原油价格、为输入已知条件数据。汽油、柴油零售限价的调价价格为输出未知变量。
除日期字段其他都是数字类型可统一float税率列在算法开发过程没有被使用。
1.3 特别注意
如图绿框中的数据表示上一个十天的周期所带来的调价一般在下一个周期的第二天出现。中间隔了一天这一天的限价还沿用上个周期的数据。
二.数据分析
数据分析适当的统计分析方法对收集来的数据初步的认识提取有用信息和形成结论而对数据加以详细研究和概括总结。使用初步的数据认识和结论进一步规划数学建模的方法达到为建模提供思路和提高建模效率。
2.1 可视化 我们选取2022年1月到十月的输入数据绘制折线图。
从图中我们可以看出
1、三种原油价格变化相似性比较高。基本保持比较一致的波动。
2、汽油柴油的价格变化相似性也比较高。基本保持比较一致的波动。
3、四个输入字段对比汽油柴油数据来看三种原油的价格波动于目标输出有想似的趋势走向关系有直接的因果关系。而汇率字段的数据在趋势上看没有直接的趋势因果关系。 上图我们以汽油调价做Y周四种输入字段分别做X轴绘制散点图查看分布情况。可以看出。
1汽油调价和三种原油呈现一定的线性分布关系基本山随着原油价格的提高调价也会提高。3者分布中WT离散程度最高。阿曼最低。
2汽油调价和汇率散点图中的线性关系不明确有一些分散但是汇率高的时候一般汽油调价不会底。
2.2 相关性
相关性分析是指对两个或多个具备相关性的变量元素进行分析从而衡量两个变量因素的相关密切程度。 pearson相关系数衡量的是线性相关关系。若r0只能说x与y之间无线性相关关系不能说无相关关系。相关系数的绝对值越大相关性越强相关系数越接近于1或-1相关度越强相关系数越接近于0相关度越弱。 计算相关性系数绘制热力图记录相关性数据三原油价格和汽油调价价格相关性都大于0.7属于强相关因素。汇率小于0.5直接相关性比较弱。
由于汇率并不直接作用于调价数据。我们尝试将汇率乘进原油价格比较乘积数据的相关性。 计算相关性绘制热力图发现汇率乘进原油价格后与零售价格调整之间的相关性系数变大。可见汇率*原油价格的数据更直接影响价格的调整。
基于以上数据认知我们进行建模的初试。
三. 算法模型初探
3.1 线性模型
3.1.1 Lr线性回归模型
这节主要描述线性回归模型原理内容只关注使用可忽略此章节
回归分析是指一种预测性的建模技术主要是研究自变量和因变量的关系。通常使用线/曲线来拟合数据点计算出参数使曲线到数据点的距离差异最小。
假设目标值因变量与特征值自变量之间线性相关即满足一个多元一次方程如f(x)w1x1…wnxnb.。
然后构建损失函数。
最后通过令损失函数最小来确定参数。最关键的一步
那么因变量中的参数是如何通过算法确定的呢这里使用正规方程解的方式说明。
正规方程一般用在多元线性回归中原因等你看完也就能理解为什么。所以这里不再用一元线性回归举栗子了。
同样假设有n组数据其中目标值因变量与特征值自变量之间的关系为 其中i表示第i组数据这里先直接给出正规方程的公式 损失函数为 对损失函数求导并令其为0有 到此就求出了所有系数θ。
3.1.2 Lr模型初试
输入汇率3种原油价格、
只选取调价日当天的数据2022.1-2022.1019条、 训练集前14条数据验证在后5条数据。 结论1R2指标0.41 2后5条数据拟合情况很差 3在训练数据集种的数据拟合很好平均差值100左右验证数据平均差值大于500。
输入 选用特征3种原油价格原油价格*汇率、
只选取调价日的数据19条数据、 训练集前15条数据验证在后4条数据。 结论1R2指标0.88、2后4条数据拟合情况一般、3后四条数据预测和真实情况差距在300以内
发现模型预测的数据和真实数据还是有一定的距离而后四条测试的数据在验证涨跌这一块有一些问题后四次数据展示出一次涨三次跌预测的数据预只测对了两次跌的情况。
3.2 决策树模型
3.2.1 决策树回归模型
这节主要描述决策树回归模型原理内容只关注使用可忽略此章节
决策树是一种非常基础又常见的机器学习模型。
一棵决策树Decision Tree是一个树结构可以是二叉树或非二叉树每个非叶节点对应一个特征该节点的每个分支代表这个特征的一个取值而每个叶节点存放一个类别或一个回归函数。
使用决策树进行决策的过程就是从根节点开始提取出待分类项中相应的特征按照其值选择输出分支依次向下直到到达叶子节点将叶子节点存放的类别或者回归函数的运算结果作为输出决策结果。 上图是后边拟合残差形成的决策树图后边会对图进行解释说明。
简单讲有以下几步可训练得到一个决策树
准备若干的训练数据假设有 m 个样本
标明每个样本预期的类别本数据中为调价结果
人为选取一些特征即决策条件本数据中为输入指标
为每个训练样本对应所有需要的特征生成相应值——数值化特征
将通过上面的1-4步获得的训练数据输入给训练算法训练算法通过一定的原则决定各个特征的重要性程度然后按照决策重要性从高到底生成决策树。
这里边要理解一个决定特征重要程度是如何计算的决策树的构造过程是一个迭代的过程。每次迭代中采用不同特征作为分裂点来将样本数据划分成不同的类别。被用作分裂点的特征叫做分裂特征。选择分裂特征的目标是让各个分裂子集尽可能地“纯”即尽量让一个分裂子集中的样本都属于同一类别。如何使得各个分裂子集“纯”算法也有多种这里以ID3为例。
该算法的核心是以信息增益为度量选择分裂后信息增益最大的特征进行分裂。
首先我们要了解一个概念——信息熵。
假设一个随机变量 x 有 n 种取值分别为 {x1,x1,…,xn}每一种取值取到的概率分别是 {p1,p2,…,pn}那么 x 的信息熵定义为
Entropy(x)−∑ni1pilog2(pi)
熵表示的是信息的混乱程度信息越混乱熵值越大。
设 S 为全部样本的集合全部的样本一共分为 n 个类则
Entropy(S)−∑ni1pilog2(pi)
其中pi 为属于第 i 个类别的样本在总样本中出现的概率。
接下来要了解的概念是信息增益信息增益的公式为下式表达的是样本集合 S 基于特征 T 进行分裂后所获取的信息增益
InformationGain(T)Entropy(S)−∑value(T)|Sv||S|Entropy(Sv)
其中
S 为全部样本集合|S|为S 的样本数T为样本的一个特征value(T) 是特征 T 所有取值的集合v 是 T 的一个特征值Sv 是 S 中特征 T 的值为 v 的样本的集合|Sv|为Sv 的样本数。
这节主要描述决策树回归模型原理内容只关注使用可忽略此章节
3.2.2 决策树模型初试
输入 选用特征3种原油价格原油价格*汇率前一次价格、
只选取调价日的数据19条数据、 训练集前15条数据验证在后4条数据。 结论1R2指标0.96、2后4条数据拟合情况一般、3后四条数据预测和真实情况差距在300以内、4、在验证涨跌趋势这一块有提升
决策树模型的稳定性比较差经过多次测试有很多次结果都不是一致的。所以还是以线性回归模型做基准模型。
3.2.3 XGB集成学习模型
这个模型的尝试效果不佳暂不展开说明了。
四. 特征分析
在上边的算法模型初探中我们的输入都是调价日当天的也就是每个十天的周期只选择了一天的数据2022.1-2022.10有19个十天周期挑选出了19条数据。这样没有使用上10天的综合数据。
特征分析目的在于对输入做处理通过分析不同的输入特征方式来改善模型的效果。
4.1 不同特征组合对比
4.1.1 每组中十天的数据做输入 如图所示将每个十天周期中的第1天到10天的原油汇率乘积与本周期的调价结果放同一行。 通过相关性热力图布伦特十天数据为例可以看出调价和前8天数据的相关性都比调价日的高所以使用更多强相关的输入会提升线型模型的效果。
使用10天的数据做输入调价做输出训练模型。
输入 所有特征前十天数据
只选取调价日的数据19条数据、 训练集前14条数据验证在后4条数据。 y_test-y_pred: [0.0, -0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -54.0, 61.2, 145.9, 136.7]
y_test-y_pred表示图中真实值和预测值的差值。
结论0、做输入表现次好1后4条数据拟合情况还可以、3后四条数据预测和真实情况差距在150以内。
除了所有特征前十天数据做输入还进行了只使用布伦特x汇率前十天数据、只使用WTIx汇率前十天数据、只使用阿曼x汇率前十天数据、所有特征1\4\5\6\7天数据做输入的多种组合的尝试。总体效果比上一阶段有所提升他们之间区别不大不展开说明了。
4.1.2 每组中十天综合指标做输入
尝试输入新的指标特征提升模型效果加入每组中的输入的均值、斜率、中位数、等特征。
绘制相关性热力图我们发现汽油调价与均值中位值拟合中值相关性系数很高基本接近于1。加入这个特征做输入训练模型尝试效果。
使用10天的数据做均值调价做输出训练模型。
输入 所有特征前十天数据的均值 y_test-y_pred: [54.1, 56.2, -15.3, -98.3, 21.6, 60.4, -58.0, -17.5, -100.2, 9.5, 45.9, 31.9, 31.5, -21.9, 81.1, 54.3, 127.4, 97.0]
y_test-y_pred表示图中真实值和预测值的差值。
结论0、做输入表现次好1后4条数据拟合情况还可以、3后四条数据预测和真实情况差距在130以内。
除了所有特征前十天数据的均值做输入还进行了只使用十天数据的中位数、拟合中值、斜率、十天数据加以上指标的多种组合的尝试。总体上还是单使用均值做输入真实与预测的差值最小。
五.算法模型的优化
5.1 滑动窗口回测分析
回测是指基于历史已经发生过的真实油价数据在历史上某一个时间点开始按照上文的预测方式得出历史中的预测结果与真实结果比较。进一步分析模型在历史数据中表现的好坏。
以上步骤我们都只使用了2022.1-2022.10的19个调价周期的数据现在我们准备将数据增加2021.1到2022.11的43个调价周期的数据。在这些数据上使用以上的方式进行滑动窗口的模型回测。
1, 通过回测确定最好作为训练集数据的时间段。通过之前的工作发现将所有的数据作为训练集并不好。40组并不比20组数据好。一组10天
2通过回测确定最好的输入特征通过之前的工作确定好几个强相关性指标有很多种排列组合通过不同特征模型的回测数据确定那种效果是最好的
3通过回测确定最好的模型。之前实验过线性模型决策树模型XGB模型
y_pre_list-y_ture: [38.1, 21.7, -16.8, -18.0, -14.6, -39.4, -13.6, -53.6, 33.2, -10.3, -27.3, 1.9, -4.4, 1.1, 18.4, 65.1, 96.3, 87.4, -87.1, -53.3, 8.7, 50.9, 86.2, -23.9, -63.5, -48.9, 17.2, -30.0, 1.4, -108.3, -30.8, -119.3, -57.6]
y_pre_list-y_ture表示预测值和真实值的差。 1实验了分别使用5-20组时间段数据训练模型预测结论使用10组训练模型去预测结果较好。
2我使用了【原油X汇率均值原油X汇率拟合中值原油X汇率中位数本次限价价格】排列组合回测效果结果是使用【原油X汇率均值】拟合的模型效果好
3再确定输入特征的基础上模型试用了决策树XGB,线性回归再模型的稳定性上看结果是线性模型效果好
5.2 线性模型的不足
经过各种输入特征各种模型及训练集长度的回测测试后我们已经找到了一种做好的情况的组合。但是任然在一些情况下预测与真实差值会比较大。 在回测数据中真实值与预测的平均误差在48左右而真实值和预测值误差较大的地方一般出现在调整价格长期增长的时候或者长期下降的时候。 如图示第二个第三个子图分别表示历史布伦特汇率_均值最近2次周期中的价格斜率历史布伦特汇率_均值最近5次周期中价格斜率斜率表示价格增长或者降低的程度。第四子图表示真实值和预测值误差折线图。
可以到误差极大极小值一般都在短期斜率长期斜率都在高位或者低位的时候。
1预测值是基于历史前十组数据形成lr模型生成的结果它反应了历史近十组原油价格与调价结果的函数关系。
2了解1中的含义再看长期短期原油都在增长的是时期中前期阶段真实值小于预测值也就是真实值要低于原油价格反应出的调整价格基于历史十次周期。
3再此基础上将此现象示为调价的“长尾效应”即在外围原油成本价格上涨的时候国内价格调整并没有那么多也就是小于预测值。外围成本下降时相反。
4长尾效果并不会持续出力很长时间一方面新的数据参与进lr模型的训练使函数在预测增长偏于保守另一方面真实调整价格的压增长的行为可能也就进行几次之后会释放。这也就容易在长期增长的曲线中出现误差这次极大下次极小的震荡现象。
5.3 决策树模型
基于原油平均值拟合的lr模型已经基本拟合了平均误差48调整价格平均在10000的话误差占调整价格的大概不到0.5%。所以我们可以使用lr模型来做基准模型给我们预测值一个比较不错的数值范围。
而在上边的线性模型的不足中了解到有些较大的误差的出现可能时源自于价格调整中的长尾效应。想要进一步提高模型的准确性我们可以从这些较大误差入手我们将回测数据中的误差看作残差我们在训练一个拟合残差的模型来提升基准模型的准确度。 上表将长期短期同增长或下降的数据提出对比看起残差值。
布伦特汇率_均值_slop2 为布伦特汇率_均值在两次调价中表现的斜率、布伦特汇率_均值_slop5 为布伦特汇率_均值在五次调价中表现出来的斜率。
预测与真实调整价格差值 为正通常是在一定时间上升期中基模型通常遵循原油价格预测调控价格的值高于真实发改委给出的调控价格原因在长尾效应在上升期有意拉低上升的程度。
预测与真实调整价格差值 为负通常是在一定时间下降期中基模型通常遵循原油价格预测调控价格的值低于真实发改委给出的调控价格原因在于长尾效应在下降期有意延缓下降的程度。
认为残差的大小与长期短期增长斜率有关系所以使用这个数据训练决策树模型。 上图是决策树可视化图。决策树算法可以通过历史回测的误差数据的增多增加决策树的条件分支。增加模型的规模。
5.4 最终模型的确立 最终采用了lr模型决策树拟合残差模型的组合方式进行算法预测。
算法的计算过程
1使用历史数据回测基模型lr模型产生历史回测数据记录基模型的误差。
2使历史回测数据中记录的误差数据训练残差模型决策树模型用来弥补基模型的误差。
3在预测的使用阶段预测数据由 基模型lr模型预测数值 - 残差模型决策树预测数值 最终预测值
六.评估
6.1 回测评估
最终的计算预测的方式确立为lr模型决策树拟合残差模型的组合方式我们在使用这个算法模型在历史数据终回测查看效果。 经过基模型残差模块修正 的回测误差的均值由48多下降到30。
经过回测连续上升期或下降期前中期残差模块可以起到修正误差作用。
应该注意的是由于长尾效果并不会持续出力很长时间超过几次逆势调整之后的修正比较容易失效。所以出现了一些负向的误差负向增大的现象。
6.2 最新两次调价结果
使用这种预测方法在近两次真实调价中的表现结果
11月16号
预测值
汽油11159 价格下降
柴油9445 价格下降
真实值
汽油11194 价格下降
柴油9475 价格下降
误差
汽油-35
柴油-30
七.总结
目前已经在运用的预测调价油价的方法是通过单一的时间维度的价格调整数据其预测的本质基本都是围绕单一维度数调价价格。这一时序数据本身的周期性趋势性等特性来进行预测。
这种传统方式是有很大局限性的。首先决定调整价格结果的因素有很多仅仅使用单一维度的时序数据数据利用率很低并且训练算法模型很难保证准确率。其次时序算法是将过去的趋势延伸到来来因此这种方法无法预测时间序列的转折点。在这种情况下预测人员往往需要依靠自己的知识和经验对预测结果进行修正。
实时上国内油价调整价格受 国际原油价格汇率等指标强影响因此通过收集处理布伦特WTI、阿曼、汇率等数据。将这些数据纳入预测调价结果的模型可以大大提升可用数据利用率更重要的是也提高预测准确率。在误差的基础上训练自触发的修正学习模型可以对结果进行自动的进一步修正大大提升了算法的健壮性减少了人工的参与更加智能。
经过回测连续上升期或下降期残差模块可以起到修正误差作用。相对于传统人工对预测结果进行修正的方法本技术方案自动化修正大大提升了模型的应用性。