基于Python实践工业大数据相关分析有什么用,能给出什么样的结论?
0. 前言
最近,在做成品油油库大数据产品研发过程中,我使用Person相关算法做分析[1],例如对发油系统中各项数据做相关分析,给出了“皮尔逊相关热力图”。
设计讨论会上,领导说:相关分析有什么用?能给出什么样的结论?在相关分析中,两两数据项关系意义不大,能否看到整体相关关系?
近些年来,“大数据”这个词早已为大众所熟悉,“大数据”也一直是以高冷的形象出现在大众面前,面对大数据,相信许多人都一头雾水。
大数据时代,“我们不再热衷于寻找因果关系,而应该寻找事物之间的相关关系。[3]”。关于大数据思想请参考[3],本文不再累述。
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
1. 背景
工业大数据是互联网、大数据和工业产业相结合的产物。它是2025年中国制造、工业互联网、工业4.0等国家战略的立足点。
德国工业已经完成了工业自动化的过程,在自动化的基础上,以工业数据为基础,引入云计算和人工智能技术来提高工业的智能化水平,以满足社会对大规模定制生产的需求。美国拥有强大的云计算、互联网和数据处理能力。在此基础上,提出了一种通过大数据将单个设备、一条生产线和一家工厂的数据连接起来的工业互联网策略。挖掘工业服务业在诊断、预测、售后服务等方面的价值。 [4]
大数据在工业企业中的应用主要体现在三个方面:
- 一种是基于数据的产品价值挖掘。通过对产品和相关数据进行二次挖掘,可以创建新的价值。
- 二是提高服务型生产水平。提高以服务为导向的生产,就是要提高服务价值在生产(产品)中的比重。
- 三是创新经营模式。
专业咨询机构给出“工业大数据的八大应用场景 ”,分别是:
- 一、加速产品创新
- 二、产品故障诊断与预测
- 三、工业物联网生产线的大数据应用
- 四、工业供应链的分析和优化
- 五、产品销售预测与需求管理
- 六、生产计划与排程
- 七、产品质量管理与分析
- 八、工业污染与环保检测
2. 什么是相关性
“万物皆有联”,是大数据一个最重要的核心思维。
所谓联,这里指的就是事物之间的相互影响、相互制约、相互印证的关系。而事物这种相互影响、相互关联的关系,就叫做相关关系,简称相关性。
数学变量相关关系。 [6]
相关关系:当一个或几个相互联系的变量取一定的数值时,与之相对应的另一变量的值虽然不确定,但它仍按某种规律在一定的范围内变化。变量间的这种相互关系,称为具有不确定性的相关关系。
按程度分类
⑴完全相关:两个变量之间的关系,一个变量的数量变化由另一个变量的数量变化所惟一确定,即函数关系。
⑵不完全相关:两个变量之间的关系介于不相关和完全相关之间。
⑶不相关:如果两个变量彼此的数量变化互相独立,没有关系。
按方向分类
⑴正相关:两个变量的变化趋势相同,从散点图可以看出各点散布的位置是从左下角到右上角的区域,即一个变量的值由小变大时,另一个变量的值也由小变大。
⑵负相关:两个变量的变化趋势相反,从散点图可以看出各点散布的位置是从左上角到右下角的区域,即一个变量的值由小变大时,另一个变量的值由大变小。
按形式分类
⑴线性相关(直线相关):当相关关系的一个变量变动时,另一个变量也相应地发生均等的变动。
⑵非线性相关(曲线相关):当相关关系的一个变量变动时,另一个变量也相应地发生不均等的变动。
按变量数目分类
⑴单相关:只反映一个自变量和一个因变量的相关关系。
⑵复相关:反映两个及两个以上的自变量同一个因变量的相关关系。
⑶偏相关:当研究因变量与两个或多个自变量相关时,如果把其余的自变量看成不变(即当作常量),只研究因变量与其中一个自变量之间的相关关系,就称为偏相关。
大数据让很多以前听起来匪夷所思的事情都可以实现,因为过去我们做事都讲确定性,现在我们讲可能性。
在工业控制系统中,各个系统相关关系如何体现呢?本文重点探讨相关关系与因果关系,相关性与影响因素分析,以及实现算法方案。
2.1. 相关关系
相关分析与回归分析在实际应用中有密切关系。然而在回归分析中,所关心的是一个随机变量Y对另一个(或一组)随机变量X的依赖关系的函数形式。而在相关分析中 ,所讨论的变量的地位一样,分析侧重于随机变量之间的种种相关特征。例如,以 X X X 、 Y Y Y 分别记小学生的数学与语文成绩,感兴趣的是二者的关系如何,而不在于由 X X X 去预测 Y Y Y 。
例如,皮尔逊相关系数( Pearson correlation coefficient),是用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。
ρ X , Y = c o v ( X , Y ) σ X σ Y \rho_{X,Y}=\frac{cov(X,Y)}{\sigma _{X}\sigma_{Y}} σ X σ Y co v ( X , Y )
ρ X , Y = ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) ∑ i = 1 n ( X − X ‾ ) 2 ∑ i = 1 n ( Y − Y ‾ ) 2 \rho_{X,Y}=\frac{\sum_{i=1}^{n}(X_{i}-\overline{X})(Y_{i}-\overline{Y})}{\sqrt{\sum_{i=1}^{n}(X-\overline{X})^{2}}\sqrt{\sum_{i=1}^{n}(Y-\overline{Y})^{2}}} ∑ i = 1 n ( X − X ) 2 ∑ i = 1 n ( Y − Y ) 2 ∑ i = 1 n ( X i − X ) ( Y i − Y )
2.2. 复相关
研究一个变量 x 0 x_{0} x 0 与另一组变量 ( x 1 , x 2 , … , x n ) (x_{1},x_{2},…,x_{n}) ( x 1 ,x 2 , … , x n ) 之间的相关程度。例如,职业声望同时受到一系列因素(收入、文化、权力……)的影响,那么这一系列因素的总和与职业声望之间的关系,就是复相关。复相关系数 R 0 . 1 , 2 … n R_{0}._{1,2…n} R 0 . 1 , 2 … n 的测定,可先求出 x 0 x_{0} x 0 对一组变量 x 1 , x 2 , … , x n x_{1},x_{2},…,x_{n} x 1 , x 2 , … , x n 的回归直线,再计算 x 0 x_{0}x 0 与用回归直线估计值悯之间的简单直线回归。复相关系数为:
R 0.12 … n R0.12…n R 0 . 1 2 … n 的取值范围为 0 ≤ R 0.12 … n ≤ 1 0≤R0.12…n≤1 R 0 . 1 2… n ≤ 1 。复相关系数值愈大,变量间的关系愈密切。
多个变量同时与某个变量的相关关系不能直接测算,只能通过间接测算,复相关系数的计算:
设因变量 y y y
,自变量为
x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x 1 , x 2 , . . . , x n
,构造一个线性模型为:
y = b 0 + b 1 x 1 + . . . + b n x n + ε y=b_{0} + b_{1} x_{1} + ... + b_{n} x_{n} + \varepsilon b 1 x 1 + . . . + b n x n + ε
y ^ = b 0 + b 1 x 1 + . . . + b n x n \hat{y} =b_{0} + b_{1} x_{1} + ... + b_{n} x_{n} b 1 x 1 + . . .+ b n x n
对 y y y 与 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x 1 , x 2 , . . . , x n 作相关分析,就是对 y y y 与y ^ \hat{y} y ^ 做简单相关分析
记:
- r y . x 1 . . . x n r_{y.x_1...xn} r y . x 1 . . . x n 为 y y y 与 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1 , x 2 , . . . , x n 的复相关系数,
- r y . y ^ r_{y.\hat{y}} r y . y ^ 为 y y y 与 y ^ \hat{y} y ^ 的简单相关系数
r y . x 1 . . . x n r_{y.x_1...xn} r y . x 1 . . . x n 的计算公式:
R = c o r r ( y , x 1 , . . . , x n ) = c o r r ( y , y ^ ) = c o v ( y , y ^ ) v a r ( y ) v a r ( y ^ ) R = corr(y,x_1,...,x_n)=corr(y,\hat{y})=\frac{cov(y,\hat{y})}{\sqrt{var(y)var(\hat{y})}} c o r r ( y , x 1 , . . . , xn ) = c o r r ( y , y ^ ) = v a r ( y ) v a r ( y ^ ) c o v ( y , y ^ )
复相关系数常用于多元线性回归分析中,我们希望知道因变量与一组自变量之间的相关程度,即复相关,复相关系数反映了一个变量与另一组变量的密切程度。
2.3. 偏相关
研究在多变量的情况下,当控制其他变量影响后,两个变量间的直线相关程度。又称净相关或部分相关。例如,偏相关系数 r 13.2 r13.2 r 1 3 . 2 表示控制变量 x 2 x_2 x 2 的影响之后,变量x 1 x_1 x 1 和变量 x 3 x_3 x 3 之间的直线相关。偏相关系数较简单直线相关系数更能真实反映两变量间的联系。
3. 案例分析
3.1. 简化说明工业应用场景
油库发油过程中,我们工控系统记录如下数据,分析目标是提供发油工作效率,通过找出关键影响因素,优化发油工艺过程,以及相关操作流程。
相关分析得出如下结果:
3.1.1. 两两数据项相关
如下图所示,列举两个Person相关进行分析(相关程序代码详细说明见文档[1]):
(1)发油量与设定量正相关,而且是强相关;
(2)损溢量与月份负相关。
如果我们再深入分析,发现发油率与发油时长呈现弱负相关情况,也就是说,大吨位槽车在装油的过程中,将耗时更长些,为什么呢?
另外,矛盾多以两两存在,矛盾各方面权重与变量之间的关系,也可以用相关系数来衡量。
3.1.2. 每个数据项对于整体的复相关
以发油控制系统为例,由’时长’,‘鹤位’,‘设定量’,‘发油量’,‘发油率’,‘时间’,‘月份’,‘日期’,‘损溢量’,‘温度’,'密度’等数据项构成,假如我们分析时长与发油系统其他各个特征的关系,具体过程如下:
(1)“时长”设定为 y y y 值,其他[‘鹤位’,‘设定量’,‘发油量’,‘发油率’,‘时间’,‘月份’,‘日期’,‘损溢量’,‘温度’,'密度‘]构成多元输入 x 0 , x 1 , . . . , x n {x_0,x_1,...,x_n} x 0 , x 1 , . . . , x n ;
(2)建立多元线性回归模型(LinearRegression),按上述 X , Y X,Y X , Y 训练多元线性回归模型;
(3)通过模型预测 y y y 值,也就这里的“时长”;
(4)“时长”的预测值与实际值做Person相关系数计算,得出相关度;
(5)重复上述步骤,逐个特性为 y y y ,其他为 x x x 。
至此,可以形成如下图所示的相关度列表。
3.1.3. 相关度的使用,大数据分析的用法基础
由于上述举例,是在单个系统中,未能体现出相关分析的优势。不过,能与实际理论因果关系符合:
(1)设定量、发油量、损溢量三者对于发油系统来说是强正相关;
(2)同理,时长、温度、月份,与设定量、发油量、损溢量,对于发油来说都有较强的正相关;
(3)对于发油系统来说,日期和发油时间相关度不大,影响因素可以忽略。
根据发油系统业务特点,参照上述结果,我们可以做出如下假设:
(1)对发油时长,进行聚类分析,获取时长的规律,做为评价权重或指标设置的依据;
(2)针对发油效率分析,需要关联更多的数据项(含其他控制系统)再进行相关分析、趋势分析,并评价发油效率(发油率是实际发油量除以时长的计算值,但是呈现弱负相关,与发油系统相关度不是很高);
建议对槽车及所属公司进行发油效率评价。
(3)油库运营特点是中转油品,既上联炼化厂,下接销售终端加油站等;以存储量、周转吞吐量为运营宗旨。大数据分析就是限定存储量的基础上,关联市场(计划)因素,以安全和消防、环保为红线的为条件,评价油库运营情况,并分项分析。
3.1.4. 业务创新
在工业控制环境中,基于工业大数据谈创新很难,这里参照互联网思维,在数据分析上加强关联,加强内部与外部、不同系统间的相关关系分析,避开单独(小)系统固化因果关系思维。
例如本文案例中,从发油系统局部环境拓展到其他相关系统,把局部放到整体中分析,并展开到整体系统外部。
比如,模拟互联网某东自营进销存对标,提油人/车(客户)、油库(平台)、油品(货物),发油过程相当于网购过程,对于网购过程,大数据分析给出客户的爱好(什么时间来提油、提的油品)、客户的评价(槽车装油效率、操作水平、安全级别等)、提货/收货效率与安全(鹤位与油罐输油匹配度与安全等)。具体如下:
(1)内部与外部相关分析——槽车画像、发油岛/鹤位评价
发油系统与槽车,槽车相对于油库是外部系统,通过二者装车数据项相关分析,构建槽车画像,包括效率、安全评价,鹤位匹配度评价等(可以延伸到所对应到运输公司/分类),可以聚类分析;
用处:补充作业效率分析,实现槽车优选鹤位,达到装车效率高、损溢低、安全的目标。
(2)内部控制系统相关分析——鹤位与油罐匹配分析
发油系统、卸油系统中的鹤位和油罐存储系统,在输油过程中关联,通过鹤位与油罐数据项相关分析,构建输油效率模型、输油安全模型,在未知、不确定分析中,可以先采用无监督学习中聚类、受限玻尔兹曼机(RBM)等算法,分析出输油效率/能力类别、影响因素等。
用处:补充作业效率分析,实现鹤位与油罐匹配优选,达到高效、低损溢、安全的收发油目标。
(3)管理维度间的关系——管理维度重要程度分析
按某企业评价成品油油库高效运行保障、油库计划流程 、设备设施保障 、自动化和信息化 、现场管理、组织和管理 、健康安全环保等7个指标,可以通过复相关评价各项指标的与整体评价的相关度。
以数据驱动决策,让数据告诉我们哪个管理维度量化的重要程度,相互依存关系,并根据发展趋势为管理者提供决策依据。
3.2. 复相关实现Demo代码
3.2.1. 代码说明
源代码基于Win 10环境下Python 3.6.7版本开发,其中主要自定义函数有:
(1)feature_label_split
用于初始化数据集,做归一化处理(normalization=True),拆分出X和Y数据集。
(2)train_model
用于训练多元线性模型,使用sklearn.linear_model中的回归模型LinearRegression。
(3)multi_corr
用于计算Y与预测值间的Person相关系数,使用Pandas工具自带的方法:
data.corr(method=‘pearson’,min_periods=1)
3.2.2. 核心源代码
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.externals import joblib from sklearn.preprocessing import StandardScaler #归一化 from sklearn.metrics import mean_squared_error from pandas.core.frame import DataFrame #拆分数据集为x,y def feature_label_split(data,label_name,normalization=True): data.rename(columns={ 'OutletTotalTime':'时长','CraneP':'鹤位','SpecifiedL':'设定量','LCActualL':'发油量', 'Effi':'发油率','Time':'时间','Month':'月份','Day':'日期','LossL':'损溢量','OilTemperature':'温度','OilDensity':'密度'}, inplace=True) del_name = [label_name] #数据归一化处理 if normalization: scaler = StandardScaler() columns = data.columns indexs_train = data.index data = pd.DataFrame(scaler.fit_transform(data),index = indexs_train, columns = columns) #拆分特征与标签 y = data[label_name] x = data.drop(del_name,axis = 1) return x,y # 训练多元线性回归模型 def train_model(train_x,train_y): test_percent = 0.7 x_train,x_test,y_train,y_test = train_test_split(train_x,train_y,test_size = test_percent) model = LinearRegression() model.fit(x_train, y_train) score = model.score(x_train, y_train) print("Training score: ", score) ypred = model.predict(x_test) mse = mean_squared_error(y_test, ypred) print("MSE: %.2f" % mse) print("RMSE: %.2f" % (mse**(1/2.0))) return model # 计算复相关 def multi_corr(): df = pd.read_excel('e:/data1.xlsx') # e:/data1.xlsx key_name = ['时长','鹤位','设定量','发油量','发油率','时间','月份','日期','损溢量','温度','密度'] key_corr = [] for key in key_name: train_x,train_y = feature_label_split(df,label_name=key,normalization=False) model = train_model(train_x,train_y) ypred = model.predict(train_x) fit_y = DataFrame(columns=['预测值'],data = ypred) data = pd.concat([train_y,fit_y],axis=1) print(data) corr = data.corr(method='pearson',min_periods=1) key_corr.append(corr.iat[0,1]) print(key_corr) if __name__ == '__main__': multi_corr()
3.2.3. 输出结果
某个特征实际值与预测值输出结果:
Training score: 0.5983131306423572 MSE: 0.00 RMSE: 0.02 密度 预测值 0 0.7397 0.836339 1 0.7397 0.771213 2 0.7397 0.787371 3 0.7397 0.781056 4 0.7348 0.822460 ... ... ... 67615 0.7479 0.760884 67616 0.7479 0.745060 67617 0.7526 0.742016 67618 0.8180 0.855769 67619 0.7526 0.778705
最后的相关度结果如下:
4. 总结
今年5月份,工业和信息化部发布《工业和信息化部关于工业大数据发展的指导意见》(工信部信发〔2020〕67号),提出促进工业数据汇聚共享、深化数据融合创新、提升数据治理能力、加强数据安全管理,着力打造资源富集、应用繁荣、产业进步、治理有序的工业大数据生态体系。
本文从油库业务域的大数据应用入手,以应用拉动数据治理,以数据模型、算法模型分析为切入点,在传统统计分析基础上,量化指标与权重依据,研发数据深度、广度应用,发挥工业大数据价值。例如本文中提到的槽车画像、鹤位与油罐匹配、以及数据驱动决策等。
由于作者水平有限,欢迎讨论。