原文链接:http://tecdat.cn/?p=23392
原文出处:拓端数据部落公众号
作者:Minghong Xu
某制药公司每年要花费大量的资金在电费上,由于电力公司的业务改革,该药企可以在一年或月开始时向电力公司预购一定数量的电力,如果实际消耗大于该值,则每多消耗一度电要付比以前更多的电费,如果实际上没有消耗这么多,也不会退还多余的电费,因此该公司打算预测未来的电力消耗以节省资金消耗。
解决方案
任务/目标
根据制药公司要求,运用多种数据源分析实现精准电力消耗预测。
数据源准备
为了预测电力的消耗,将电的主要使用分为生产车间的消耗,空调的电力消耗和其它消耗,其它消耗视为一个常量,在最后添加上去。
数据处理
在实际收到的数据中,有很多日期的某些电表的耗电量和某些车间的产量并没有被记录下来,因此使用拉格朗日插值法来补足中间的缺口。
特征转换
把不能处理的特征做一些转换,处理成算法容易处理的干净特征举例如下:
时间属性。就时间属性本身来说,对模型来说不具有任何意义,需要把日期转变成到天,年、月、日、周伪变量。
电量属性。由于收集的是单一电表的数据指标,所以合并相同类型的数据,作为车间和空调的总耗电来参与模型建设。
产量属性。由于车间生产了数种药品,且不同药品的每箱重量不同。有的工序的耗电量只和重量有关,有的工序的耗电量之和箱数有关,因此我们两种计量方式都要用上。
构造
划分训练集和测试集
考虑到最终模型会预测将来的某时间段的耗电量,为了更真实的测试模型效果,以时间来切分训练集和测试集。具体做法如下:用软件随机划分80%的数据作为训练集,剩下的20%作为测试集。
建模
一元线性回归,在考虑一些工序的耗电时,容易发现机器的耗电量和产量是呈线性关系的,此时就使用一元线性回归模型来拟合。(y=kx+b)
一元非线性回归,在工厂里为了维持生产车间的恒温,使用气暖和空调来进行调温。气暖消耗的是蒸汽,只有空调才会耗电。当室内温度高于一定值时,空调才会开启;室内的温度越高,空调的功率越大,因此空调耗电和气温是一元非线性关系。(y=f(x))
多元线性回归,有的生产工序不仅仅和产品的重量有关,还和产品的箱数有关,此时就使用二元线性模型来拟合。(z=k1x+k2y+b)
模型优化
1.上线之前的优化:特征提取,样本抽样,参数调参。
2.上线之后的迭代,根据实际的A / B测试和业务人员的建议改进模型
项目结果
在此案例中,分别用三种模型来计算耗电量的三个分量。
用一元非线性回归,计算空调耗电量,其可视化图形如下,其中这里的气温是日最高气温(关系式省略):
用一元线性回归,计算出部分机器的耗电量和
产量的关系图形如下(关系式省略):
这是三种机器的耗电量和产量的关系图,可以看到当产量为0时,机器待机时也有一定的耗电量。
用二元线性回归模型,计算出最后一种机器和产品重量和箱数的关系:
上面是截面图,下面是散点图
可以看出,几种耗电量的模型基本都可以较完美的拟合实际情况,置信度都有95%以上。这个模型主要有两个用途,一是预测,就可以利用模型和计划产量等因素来预测未来的耗电量,从而实现精确购电。二是异常检测,如果有一天预测值和实际耗电量有较大偏差的时候,说明机器很可能出现了故障,要及时检修。
预测模型仅仅是算法计算下的结果,在实际生活中,这样的预测值仅仅只能作为参考,在实际生活中还有更多的因素影响结果,需要从多方面来考量。
最受欢迎的见解
1.在python中使用lstm和pytorch进行时间序列预测
2.python中利用长短期记忆模型lstm进行时间序列预测分析