首先,在深入挖掘数据和分析阶段之前,需要将有用数据从数据中识别出来。在第2章中,设计了启发法驱动假设(HDH),同时解析了问题。现在要复查和探索这个列表,了解是否准备好了采用这些数据来解决问题。通过检查和验证所确定的假设数据源,就可以达到这个目标。如果没有数据来证明/反驳大多数重要的假设,那么继续采用目前的方法将不会增加任何价值。拥有了数据之后,即可着手编写代码去拟出解决方案。
从第2章的“2.2.3根据数据可用性对假设优先排序和构建”小节可以看到,已经列出了几个假设,这些假设可能会是挖掘出(有用)洞见的潜在领域。这个假设列表如图3.1所示。
图3.1
假设列表包括原料使用比例不正确、操作效率低下、中间操作之间发生延误、工人技能、环境条件、机器运行能力、原料质量、机器故障、机器清洁度、机器操作配置、原料供应商情况、操作参数和与工具校准相关的主题。下面从更高层次去快速探究数据,看看是否对利用这些数据来分析和验证假设胸有成竹。
如果读者注册了帕克特出版有限公司的网站账号,登录后可从他们的存储库中下载本章数据。里面提供了一个电子表格,其中包含数据集中每列的元数据,供读者参考。在下载数据之前,先要分析清楚需用到哪些不同类型的数据。答案总是“越多越好”,但是根据解决方案设计,至少应该识别出一些对解决问题比较重要的领域。
如同从假设中看到的,希望数据能够为下述内容提供所需的信息。
原料比例/数量/质量的数据:这些数据涉及使用了哪些不同的原料,使用了多少,以及是否过量使用。此外,检测原料质量所采用的全部重要参数及其所产生数据有哪些。
操作数据:提供生产过程中的延迟、超时或丢失等与生产过程相关的数据。
技术员技能数据:提供负责处理生产过程的工人/技术人员的相关技能数据。
机器配置和校准数据:生产过程中机器配置和校准设置的数据采集。
供应商数据:有关各原料供应商信息的数据。
其他数据源:关于环境条件的信息;外部数据对当前问题解决也会有帮助。
注意:
读者可以浏览包含用例元数据的csv文件。
接着来查看这些数据,探索可用的数据源,查验数据的可用程度。这些数据提供了1000条记录,代表了1000个生产过程。每一行的数据对应一个生产订单,为一个完整的批次数据。在洗涤剂生产行业中,最终产品都是批量生产,后来再分成小包装。一个生产订单/批次可能有1000千克的洗涤剂或甚至更多。整个批次用一行数据来表示,提供生产过程所有数据维度的信息。
那么,这些数据提供了什么维度的信息?
最终产品相关信息:产品ID、产品名称、产品需求量和成品质量参数(4个不同的参数)。
生产环境信息:有关地点和位置、流水线和已用资源的详细信息。
原料数据:生产过程中每个阶段的原料及其质量参数的详细信息。
操作数据:关于加工时间、加工阶段、不同阶段延迟的指标、原料消耗量、每个阶段/时期层级的质量参数数据,每个阶段/时期层级的加工时间等的生产过程数据。
注意:
这个列表看起来十分完美!可是,有没有遗漏了什么?
虽然获得了相当数量的数据可用于继续分析,但是确实遗漏了原料供应商、技术人员技能和机器配置数据等相关信息。可是,现有的假设列表早塞得满满当当的了,这些假设已足以帮助开始着手分析。这时利用既有数据,可以尝试去证明60%以上已形成的假设中,其中大多数都极具影响力(具有高优先级)。有关环境条件和其他事件的外部数据可以从互联网上获取,以便了解更多具体情况。不妨暂将这些想法留着以备后用,这时先开始深入研究数据。
那么,在前面提到的每个数据源中都包含了哪些维度的信息?
此处用例的最终产品(假设)是一种洗衣粉,即汰渍。相关的数据源提供了一些信息,比如应该生产多少千克洗衣粉,还有洗衣粉的4个不同最终质量参数(即质量参数1、2、3和4)。这些质量参数决定了最终产品为良品或不良品,从而决定产品为合格或不合格。
这里的信息包括工厂在生产过程中使用的各种机械设备,以及它们经常在不同的时间使用相同的资源/流水线生产不同的产品。而且还包括在生产过程中发出的一个提示(flag),让人注意到在资源或机器中生产过的先前产品是一样的还是不一样的。同样,数据源还提供在生产过程中每个阶段的加工时间(产品的生产通常有5~6个阶段或时期)。
提供所用原料、生产过程之前的质量参数以及中间质量参数的详细信息。假设在第一阶段,两种原料混合并加工形成一种混合物料,然后将混合物料与一种或两种其他新原料一起传送到第二阶段。接着,在生产过程之前对每种单一原料检测并记录质量参数,同样地每个阶段混合物料后也需如此。另外,还记录了各个生产阶段所需原料的数量/比例和原料的实际消耗量。
操作数据提供了在每个阶段/时期中加工所需的时间信息。记录了每个阶段中不同加工阶段和延迟指标的单独详情。在每个阶段,应该按照预设的配方消耗规定量的原料。有时这些数量会被操作员/技术人员所忽略。还详细提供了每种单一原料的预估消耗量、实际消耗量以及可接受的浮动范围的信息。
至此对数据的维度已一清二楚,下面进一步去解决问题。
为了研究哪些因素影响了洗涤剂的成品质量,尝试探究整个数据维度的全貌。稍后将采用免费的R语言和集成开发环境RStudio来处理和可视化数据,这两者可用于各种UNIX平台、Windows和Mac OS系统。对共同结果的解释与代码无关。如果读者在技术上不熟悉编程,则只需阅读代码或跳过代码直接转到结果以理解步骤。读者不会因此错过解决问题和结果解释步骤的任何细节。
首先,导入数据,全方面地探索数据集。
数据可直接从作者(为本书创建)的公共存储库下载,或者通过从帕克特出版有限公司的存储库下载csv文件。为了方便起见,这里通过直接的公共存储库链接来获取数据:
数据导入软件后,可检查数据集的大小或维度。数据集显示为1000×122,这表明数据有1000行和122列。另外,通过查看数据中前20列的名称,可看到Product ID(产品ID)和 Product Name(产品名称)、Output Quality Parameters(成品质量参数)以及其他一些与生产加工相关的列。为了查明数据是如何组成的,这时要去探索每一列的内容:
注意:
由于列数非常高(>100),此处将采用一小块数据(一次20列)来探索数据。同时也可到互联网上免费获取一些R语言软件包。如果要在R语言中安装新软件包,请执行以下命令:
注意:
安装完成后,可用'library'命令将软件包加载到内存中:
接着将在R语言中选用一个名为dplyr的特殊软件包,毫不费力地完成这些数据工程步骤。dplyr软件包中的glimpse命令可帮助深入查看数据集。在这里开始探索前20列的内容,努力地将数据理解透彻。
第1列的X是一个整数变量和一个序列号。下面来验证这一点:
确实是有1000行数据,而unique函数求出该列的数据点计数也是1000。
Product_Qty_Unit(即产品数量单位)表示产品(即生产的洗涤剂)数量的测量单位。下面来看看采用了哪些不同的单位来测量产品的数量:
上述代码求出该列的值只有一个,因此可得出结论,所有记录产品生产量的计量单位都是相同的。
Product_ID和Material_ID是工厂生产的每个产品的唯一标识,可查看数据集里不同数量的产品。但是,在本用例的数据集里只有一种材料和一种产品的数据。假设产品是Apple iPhone 6S,材料是iPhone 6S 64 GB。在本用例中,材料Tide Plus Oxi是产品汰渍的一种洗衣粉变体。以下代码可探查数据中Product_ID和Material_ID的不同计数,并可查看相应的值:
Output_Quality Parameter(即成品质量参数)1~4列记录了产品的最终成品质量。这些参数共同决定最终产品是合格还是不合格。为了解决问题,接着就来探究成品质量的各项参数。
以下代码使用sunmmary命令给出了4个列的分位数分布摘要信息:
如上所示,全部4个参数在范围、数值和分布方面完全不同。Output Quality Parameter 1(成品质量参数1)的数值大部分落在350~500,而Output Quality Parameter 2(成品质量参数2)的范围则是从12000到25000不等,其他参数依此类推。
ManufacturingOrder_ID(即生产订单ID)表示用于每个生产订单的一个唯一键值(a unique key)。此处的数据表明一行数据即代表一个生产订单。
AssemblyLine_ID(即生产线ID)表示在哪条生产线上生产的产品。一般而言,在任何一个生产车间里,都会有多条生产多种产品的生产线。在这里,从下面代码可看到,有两条用于生产的不同生产线,即Line 1和Line 2:
Order_Quantity(订单量)和Produced_Quantity(生产量)表明订单的需求量和实际生产量。下面看看这两者数量是否总是完全相同或总是截然不同:
① Min.(最小值)、1st Qu.(第一四分位数)、Median(中位数)、Mean(均值)、3rd Qu. (第三四分位数)以及Max.(最大值)。——译者注
上述代码给出了Order_Quantity、Produced_Quantity的摘要(即分位数分布)信息,以及这两者绝对差值。在大多数情况下,order_quantity订单需求量大约是5000千克(请参阅order_quantity摘要中的中位数),但是生产量处处相差很小。生产量和需求量的绝对差值摘要显示为一个平均数,约为345,而中位数即第50百分位数则约为200,这表明在大多数情况下,需求量和生产量之间肯定存在差异。
Site_location(即生产地点)提供了生产产品的工厂地点。在这里的用例中,只有一个工厂地点的数据(因为该运营负责人只负责一个地点的生产):
Manufacturing_StartDate、Manufacturing_EndDate、Manufacturing_StartTS和Manufacturing_ EndTS分别记录每个生产订单的开始日期、结束日期、开始时间戳和结束时间戳。Total_Manufacturing_Time_mins则以分钟为单位记录总加工时间。
从加工时间的分布来看,很容易地发现异常值(第三四分位数与最大值之间的巨大差值),因此需要分别处理。可能有一些异常数据点的加工时间为0。
快速浏览了以上数据集的前20列之后,接着查看下一个20列的数据:
在探索接下来的25个列时,会看到这些列提供了更多阶段层级上的详情。第一阶段的所有属性都以Stage1作为后缀。如果查看前面全部的列,就能清晰地发现在目前的产品生产过程中,恰好包含有5个阶段:
上述代码首先从以Stage和名称中的前6个字符开头的列名中提取索引,最后再检查那些唯一索引。
在阶段1(Stage 1)中,Stage1_DelayFlag(即阶段1延迟提示)表明生产过程中阶段1是否有延迟。同样,Stage1_ProductChange_Flag(即阶段1产品变化提示)表示生产过程中产品是否发生了变化,即同一台机器上生产的先前产品是否不相同或是否相同:
Stage1_RM1_QParameter1(即阶段1原料1质量参数1)提供第一阶段中采用的第一种原料的第一个质量参数的一些值。
以上的命名规则相当简单,即按照Stage-x的形式进行命名。这里,x表示加工的阶段,可以是1~5的任何值。RM代表原料,RM1代表原料1等。QParameter1表示质量参数,1表示第一个。因此,Stage1_RM1_QParameter1表示第一阶段中采用的第一种原材料的第一个质量参数。同样地,Stage1_RM1_QParameter2表示在第一阶段中采用的第一种原材料的第二个质量参数。在特定阶段,可以采用多种原料,并且这些原料都可以各有多个质量参数。
而Stage1_QP2_Low(即阶段1质量参数2下限)说明阶段1中合成混合物的第二个质量参数。Low(下限)、High(上限)和Actual(实际)分别表示每个参数的相应值。Low表示控制下限,High表示控制上限,而Actual表示合成混合物质量检验的实际值。
同样地,Stage1_RM2_ConsumedQty(即阶段1原料2消耗量)表示阶段1原料2的消耗数量,并且Stage1_RM2_RequiredQty(即阶段1原料2需求量)指明了相应原料的需求量。在每个阶段,每种原料都设定有各不相同的消耗量以及可接受的浮动范围。每种原料的需求量、消耗量和可接受范围也可能有或者可能没有。
Stage1_PrevProduct(即阶段1先前产品)提供了前一个生产订单中在机器上生产的先前产品,并且Stage1_ResourceName表明了在阶段1生产过程中采用了哪些资源/机器。
阶段2至阶段5也采用了上述同样的命名规则。
下面详细探讨更多阶段1的信息:
阶段1中采用了两种原料,而每一种原料都有两个质量参数用于检测。此外,每个质量参数的值都落在不同的范围内。
同样,通过查看阶段1每种原料的需求量和消耗量,就能发现它们存在微小的差异,并且在很多情况下,可以断言这些需求量和消耗量都超出了可接受的量:
同样,在阶段1的加工完成之后,从原料1和原料2产生一种最终混合物。Stage1_QP1_Low列含有这个最终混合物质量参数的下限值。加工完成后,每个阶段检测4个不同的质量参数:
最后,资源名称(resource name)表示用于生产过程的机器和有关先前产品生产的信息。简而言之,在阶段1使用了5台不同的机器,以及在生产现有产品之前,机器先前生产了大约26种不同的产品:
可用类似的方式去探究阶段2、3、4和5的数据维度。每个阶段的列名称的命名规则都和阶段1保持一致。本书建议在进入探索性数据分析步骤之前,先要仔细地对所有列进行自探索。
最后的一个列为Detergent_Quality(即洗涤剂质量),它指明生产出来的产品的质量最终为Good Quality(良品)或Bad Quality(不良品)。这个数据维度对即将进行的分析大有帮助。以下代码显示了该列的摘要。可以看到,大约20%的产品因为属于不良品而被视为不合格产品。
目前对数据进行的数据探索性练习仍然十分浅显朴素。至此仅仅对所能够证明的假设,数据是什么样的,以及数据提供的信息等有了粗浅的了解而已。因此,从所有这些练习中所学习到的知识也只是鸟瞰一窥仅领略粗浅。前面研究了生产过程的各种数据维度,比如生产地点、生产出来的产品,生产量和需求量,以及其他高层次的细节。对于阶段1,探索了采用的单种原料和在阶段1生成的混合物的各种质量参数。还探查了每种原料的需求量和消耗量以及各自的可接受的浮动范围。此外,也深入了解阶段延迟,产品变化提示和阶段加工时间等各种类别因素。这里强烈建议对阶段2、3、4和5的所有数据维度都进行进一步的自探索。
以上在数据探查过程中对数据进行了广泛的研究。在此基础上,就可以切实地找出数据中有希望深入挖掘的领域。如果决策科学家深入彻底地研究数据,并且能够找出具体关键点或关键领域,这对决策科学家无疑收获很大。在这一节中,不会对各个方面深入研究,而是留待后续章节进行探讨。当前的主要任务是找到在前面练习期间所用数据的关键点。
首先学习用于深入分析数据的特征,即“特征工程”,这是一个应用领域知识创建特征/变量的过程。在探索较高层次的数据时,从直接使用的角度来看,数据集当中的一些变量/列具有不少分析价值。例如,生产起始日期或结束日期在开始时并不会真正增加任何分析价值。然而,如果仔细研究一下,那么对于生产中某一周或某一月的某一天极有可能是会产生影响的。原因可能各种各样,而且在许多情况下,最终对比后发现这些变化产生的影响可能极其微小。但是,如果在用例中出现这样一个罕见的情况,那么产生的效益却可能是无比巨大的。为了更透彻地理解这一点,以烹饪为例。在一年四季中,炒菜所需的时间会发生微小的变化。在一些特定的生产情况下,这种细微变化会造成不良品,因此研究季节性的影响并相应地采取预防措施不可或缺。
同样地,还有一些变量给出了不同阶段原料的消耗量、需求量和可接受的浮动范围。这三者是数据集当中的3个不同的变量,但是可以通过指出在原料消耗过程中观察到的偏差百分比,从而形成一个新的特征。这时从外行人的角度来思考:如果从一个特征获得的结果影响更大也更容易理解,那么就远远好过结合多个变量推断出的相同结果。这个过程不断地在演变。在许多情况下,创建出的一些特征不仅仅是由领域知识驱动的,而是统计学和业务知识两者的结合。可能有一些情况下,要用到更强大的统计技术去发掘数据中的潜在特征,帮助更清楚地理解问题。类似地,也可以应用诸如主成分分析(PCA)的复杂算法来创建完全由统计驱动的特征。从外行人的角度来看,这些特征可能并不是非常直观,但是当努力深入研究(探查性和预测性的)问题时,这些特征是大有作为的。
在接下来的小节和第4章节中,将详细探讨每一种情况,以便更好地解决问题。
截至目前,仅从数据的角度来处理数据,换言之,对与数据和问题有关的领域知识的掌握依然十分有限。在这种情况下,只是探清了数据的概况,还需对领域和流程相关的知识加以利用,深入接触和理解数据,以便更好地解决问题。在任何决策科学用例中,只要接收到了数据,最常采用的方法都是从端到端地探索数据。这种探索包括深入到数据的每个维度穷原竟委,努力发掘潜在的数据信息和模式,应用数据驱动的洞见去找出问题内在的联系。可是在这里,却忽略了领域的背景信息!而这些背景信息无疑是举足轻重,不可或缺的。在获得了更为详细的领域背景信息和流程层级的信息之后,才能够更透彻地理解数据。
为了识别出有价值的数据,可下一步查明与数据相关的领域和流程的信息。通常采取的做法是对数据进行初步的探查研究,再向行业专家(subject matter expert, SME)或领域专家针对数据提出问题,同时请他们对此做出澄清。为了方便起见,这里预先提供了解决问题所需的初始背景和几个与领域相关方面的信息。通常,在解决问题时,强烈建议读者向行业专家请教与问题相关的全部综合问题,以便完整无缺地把握数据的全貌。
以下摘录为数据和问题提供了更为深入的领域知识。在现实生活中,只需与几位领域专家、数据专家和运营专家口头交流并虚心求教,接着再对领域进行研究,就能实现这一目标。
在本用例中,宝洁公司是一家领先的消费品生产商,在全球各地生产大量的产品。宝洁公司其中一家生产工厂位于印度浦那。那里的生产车间拥有大约10条流水线(一条流水线负责一种产品的端到端生产)。每一条流水线都配备了多台机器,即资源,每台机器在生产过程中负责一个阶段的生产。一条流水线可以生产多种产品,比如不同品牌的洗涤剂可细分为各不相同的产品,并在同一条流水线上生产。
该用例涉及洗衣粉的生产,(假设)该洗衣粉是汰渍的另一种产品变体。在一个单独生产过程中,生产出大约5000千克的洗衣粉,再分装成1千克/0.5千克的小包装等。生产过程部分自动化,而负责该生产过程的技术人员有时可能会重置一些设置以避免生产出不良品。为了较好地理解这一点,用一个咖喱烹饪例子来做类比。比如您正在烹饪西红柿咖喱,而且您对配方也了如指掌。在烹饪过程中,您发现加了太多的水。所以继续加热咖喱混合物并搅拌一段时间,以期最后能按食谱做出您所期待的咖喱菜肴。当您发现从不同的供应商购买来的相同产品,却拥有不同的口味,有时您就可能会在菜肴中添加其他一些盐或香料。这种情况在洗涤剂生产过程中也同样适用。尽管生产流程的主要部分是自动化的,但是同一种产品有可能采用多种方式生产,而且仍然产生相同的结果(属性)。
在用例中,洗涤剂生产过程分为5个不同的阶段/时期。每个阶段都要完成一个特定的过程(如果是做一碗面条,把煮面当成第一阶段,接着把香料和蔬菜一起煮为第二阶段,最后第三阶段将蔬菜混合物浇淋在面条上成为一道面食)。在这个过程的不同阶段可以加入各种原料。在此用例中,阶段1有两种原料混合在一起形成混合物。在机器中加热数分钟后加工该混合物。加工后,混合物就被输送到阶段2,这时混合物按照不同的设置进行加工,此处无须添加任何新的原料(成分),之后加工后的混合物又被传送到下一个阶段。在阶段3中,加入两种新的原料,然后将得到的混合物加工几分钟以形成新的混合物。接着将阶段3的混合物传输到阶段4和阶段5,并在压力/温度等不同的设置下进一步加工。最后,阶段5的成品就是在生产过程中生产的洗涤剂。
图3.2从更高层次描述了整个生产过程。
图3.2
整个生产过程采用监控和数据采集(supervisory control and data acquisition, SCADA)系统进行监控。负责加工的技术人员可从中捕获到生产过程中和生产过程后每个阶段的有关成品和属性的数据。通过SCADA系统收集数据,再存储到其他地方用于调查和分析。在用例中,选用仅在印度浦那的一个地点生产的一种产品的数据。
出于安全原因,这里屏蔽了原料名称和质量参数名称。同样地,质量参数的值已利用算法进行缩放方便观察,但同时却保持(数据)关系完整。如果一些质量参数的值看起来没有科学意义,则假定这些值已被屏蔽。
图3.3让读者对生产工厂数据进行采集、处理和分析的整个过程了解得一清二楚。
图3.3
生产过程是在工厂中进行的,技术人员负责监督整个过程。主管可以访问复杂的软件和系统即控制基础架构,这有助于实时监控质量参数和生产过程相关参数。在现有条件的基础上,技术人员可能会在特定阶段采取加热或加工更长的时间。然后将生产过程中监控的数据存储到数据仓库中,稍后用于调查和分析。随后决策科学家访问该分析仓库(即分析就绪的数据仓库)进行分析。为了找出有助于决策过程的模式,决策科学家对海量数据进行提取、处理和搜集分析。
创建专门用于用例的各种分析表的过程称为数据整合(即针对特定用例将不同来源的数据整理在一起)。同样,采用这些数据集来探索数据,导出新数据并发现潜在模式的过程被称为数据整理。最后,使用新创建的、派生的和现有数据集去发现模式、解决问题和回答商业问题的技术和科学被称为决策科学。