利用数据分析和机器学习是提高产量预测准确性和及时性的一种方法。我们使用 JMP 构建了一个预测模型来预测甜菜产量。整个过程完全在 JMP 中完成:数据收集、清洗、预处理、探索性数据分析、特征工程、模型选择、训练、评估、调优以及后续的部署和维护。
大家好。今天我们来学习如何使用 JMP 进行预测建模,特别是农业产量预测。但值得一提的是,我接下来要展示的流程并非只适用于农业产量预测,它几乎可以应用于任何领域。希望这能帮助大家了解如何自己动手操作。JMP 中的一些小技巧会很有帮助,尤其是在预测农业产量方面。但正如我所说,无论你想预测什么,这个流程都适用。
接下来我将提供一个简要指南,并提供一些示例,说明如何在 JMP 中构建预测模型,特别是针对农业产量的预测模型。正如我刚才提到的,您可以将此方法应用于任何您想要实现的预测过程。这里的具体问题是,早期准确预测作物产量对于农业领域的商业决策至关重要。然而,难以实现这一目标的原因之一是,甜菜的产量和品质每年都存在很大的波动。事实上,随着时间的推移,这种波动的频率和严重程度都在增加,这使得预测更加困难。因此,利用 JMP 等应用程序的预测功能来准确预测产量变得越来越重要和必要。
造成产量差异增大的主要原因之一是气候变化。正如我们接下来将看到的,我只想给大家概述一下甜菜种植。我所说的产量究竟是什么意思呢?这里有一个甜菜,它包含两个方面。首先是甜菜的大小。这里可以看到标注的是清理后的根重。正如你所看到的,这颗甜菜上有一些泥土。清理干净后,这颗甜菜的重量就是产量的一个组成部分。
第二个组成部分是品质,也就是甜菜中糖分的浓度。简单来说,糖分浓度乘以甜菜的体积,就是你能获得的产量。
我们如何才能准确预测产量呢?首先,无论何种类型的企业,这个概念都是一样的。我们需要收集尽可能多的地点和年份的数据,从而生成一个包含所有可能影响农业产量的因素以及产量结果的大型表格数据集,以便进行比较。我们生成一个包含众多自变量和因变量的大型历史数据集。
对于农业而言,有些例子确实需要产量数据,理想情况下还需要土壤健康、天气、病虫害、农场管理措施、种子品种、土壤地形数据、遥感数据等数据。数据越多,数据质量越好,就越能准确预测产量,也就能更准确地将产量变化归因于这些因素中的某一方面,从而更能区分这些变量之间的差异。
在农业领域,影响最终产量的潜在变量数不胜数。几乎不可能,甚至根本不可能,将所有信息都包含在一个数据集中。但我们的目标是尽可能多地收集数据,以便更好地预测产量。首先,我们需要找到所有能够获取的数据,将这些数据合并成一个数据集,并进行数据清洗和处理。然后在JMP中,我们可以进行探索性数据分析,目的是发现数据集中隐藏的模式和趋势。由此,我们可以确定影响甜菜品质和产量的最重要预测因子。最后,我们可以利用这些重要预测因子构建预测模型,从而预测未来的产量。
简单介绍一下JMP的流程。第一步是数据收集,实际上也是最重要的一步。这一点我怎么强调都不为过。数据质量至关重要。我的一位导师常说:“垃圾进,垃圾出。” 如果没有高质量的数据,无论你的流程多么完善,都无法构建出好的模型。所以,务必专注于获取高质量的数据。
农业生产的一个优势在于,天气是影响产量的重要因素之一。如今,借助科技手段,我们有了非常好的方法来追溯获取特定田地、特定区域或其他任何地点的天气数据。现有的技术能够非常精确地从其他来源获取天气数据并加以利用。
就农业而言,这确实是一个非常重要的环节,因为在很多情况下,你需要依赖合作企业或公司已经建立了良好的数据管理体系,他们能够追踪许多重要变量,尽可能多地收集数据,并妥善存储以便于访问。如果情况并非如此,那么我们构建良好预测模型的可能性就会降低,而且可能需要数年时间才能收集到构建真正有效模型所需的全部数据。
接下来是数据清洗、预处理、特征工程、探索性数据分析、模型筛选、训练、调优和评估。最后是模型部署,可能还需要维护。第一步是收集数据。正如我所说,数据通常存储在许多不同的位置、不同的数据库中,甚至可能存储在不同的工作表中,而 JMP 的目标就是将所有数据整合在一起。
在这个农业产量案例中,我们有三个数据集:季中样本数据、天气数据和最终产量数据。关键在于找到所有数据集之间的共同点,我们稍后会详细介绍。之后,您可以使用 JMP 查询构建器,轻松快捷地将所有数据源整合到一个地方,确保准确无误。在本例中,共同点是合同编号和年份,我们可以以此为基础合并数据。
我们直接进入第一步,我要向您展示的是数据预处理。根据您拥有的数据和您计划进行的分析,您可能需要也可能不需要进行数据归一化,但它可以提高模型的性能。我们来看一下 JMP 中的操作。这里有 JMP 平台和一些天气数据。现在,如果我们打开它,进入分布表,我们可以看到一些天气变量。我们将它们添加到分布表中。
现在,我们来看这里,我把这个图表放大一些。可以看到,这里的降水数据呈左偏分布。未经标准化的数据可能会给模型带来问题。模型可能更难识别偏斜数据中的关系。我们可以采取的一个措施是标准化数据。这里是累计降水量数据,打开 JMP,找到该数据集。我们插入一个新列。公式。现在,我们讨论的列就是降水量。
现在,为了对这些数据进行归一化,我们需要对左偏数据求平方根。将其添加到列中的公式中。点击“应用”。现在我们看到这里有一个新的列。我们将其重命名以便区分:归一化降水量。现在,让我们回到分布图,同时查看这两列。暂时忽略它们,稍后会用到。我们可以看到这里的原始数据。让我们把这些坐标轴粘贴到这里。
现在,正如您在分布图中看到的,原始数据呈现明显的左偏分布。而经过标准化处理(取平方根)后,您会发现用这些数据建模会容易得多。不过,您需要记住一点:在与客户合作时,例如降水量,对他们来说很容易理解。如果您试图向他们展示一个基于取平方根后的数据的模型,那么降水量的平方根就失去了意义,而客户通常需要易于理解的数据。因此,您可能需要在流程的最后阶段对这些值进行逆平方根运算,使其更易于客户理解。
总之,这是我们能做的一件事。让我们回到幻灯片。下一步,进行一些数据清理和格式化通常很有帮助。首先我们可以看看表格拆分。在这个数据集中,你会注意到我们有不同的列,分别代表降水量、温度、最低温度、最高温度,以及月份。对于我们的分析来说,每个温度变量都对应一列,而月份列却只有一列,这可能不太理想。我们可能需要调整一下,所以我们进入表格,选择拆分。我们要按月份拆分。我们要拆分天气数据,并保留所有其他列。
现在,在这个新的数据集中,您可以很快看到,每个月都有一列,这对我们来说方便多了。可以看到,这里有“1月”、“2月”等列。现在每个月都有一列。这是我们可以查看的一个方面。我们先关闭这个窗口,暂时保留它。接下来我们可以合并数据,这是JMP非常强大的功能,可以快速合并多个数据集。我们快速看一下。
您可以看到,我们已经打开了天气数据。我们刚刚拆分了数据,现在这里有第二个表,其中包含合同 ID 和收益率,以及站点信息。我们想将这个数据集与天气数据合并。该怎么做呢?我们使用收益率数据集、表和查询构建器。这里有收益率数据。我们想把天气数据也整合进去。您可以看到,JMP 已经找到了两个与 JMP 相同的列:合同 ID,这正是我们想要的。
如果情况并非如此,通常您可能需要将其删除。点击这里的 X 删除,假设我们不需要删除。然后您可以添加您自己的合同 ID。我们将它作为共同的线索。接下来,我们决定要使用哪种连接方式。这里是一个 SQL 查询,左外连接。不,我们不需要它。我们只需要内连接,即两个数据集中的数据完全匹配。构建查询。我们可以在这里添加所有列,运行查询,最终得到一个合并了两个表的数据集。这是收益率数据。这里是我们所有的天气数据,现在我们可以开始分析了。
接下来,我们需要探索异常值。对于小型数据集,由于列数较少,使用 JMP 可以非常轻松地快速分析异常值,只需将所有要分析的数据导入即可。我们这里举个例子,进行分布分析。通常,很容易就能找出异常值所在的位置。可以看到,这里明显存在一个异常值。
然而,对于像我们这里这样可能包含数百列的大型数据集,手动操作太耗时了。在 JMP 中,我们可以选择“分析”、“筛选”、“探索异常值”来解决这个问题。在这里,我们可以添加所有列并运行异常值分析。我们选择“分位数范围异常值”选项。现在,我们立即得到了所有列的列表以及基于此测试的异常值数量。查看这些异常值的方法有很多,但这只是其中一种快捷方式。然后,我们可以选择异常值,并将其排除或删除。我们还可以选中异常值,并为单元格着色以便稍后查看。这里有很多选项。对于大型数据集,我们可以用这种方法快速排除所有异常值。
下一步是特征工程,我们可以通过提供更好的信息来提升未来模型的性能。这可能需要领域知识,或者基于探索性数据分析的结果,您可能已经预感到以特定方式组合某些列可以提高预测能力。例如,在这个例子中,我们可能想要创建一个以“夏季降雨量(单位:毫升)”为特征的指标。那么,该如何实现呢?
简单来说,我们回到 JMP。这里有我们的数据集,我们添加一个新列,命名为“夏季降雨量(毫米)”。公式方面,我们来看一下“夏季降雨量”这一列。统计方面,我们可以轻松计算平均值,并拖入我们想要应用的变量。现在我们有了一个新的特征,名为“夏季信息”,正如我们在这里看到的。这是我们之前用正方形网格划分的数据。特征工程是我们应该关注的内容,它通过构建能够提高数据可预测性的特征来尝试提升模型的预测能力。
这里还有一些我们可以在探索性数据分析中做的事情。响应变量筛选和预测变量筛选是JMP中非常强大的工具。我们这里就不详细讲解响应变量筛选了。它的原理和预测变量筛选是一样的。响应变量筛选会分析Y×X类型的变量,你可以查看各个自变量以及它们如何影响因变量。
预测因子筛选,我们现在来详细了解一下。这是一个在大数据集上发现潜在趋势的绝佳工具。在 JMP 中,依次点击“分析”、“筛选”、“预测因子筛选”,然后它会使用随机森林机器学习算法。我们想看看哪些预测因子对产量(即响应值)的影响最大,以及原因。通过分析,我们发现场地可能是一个重要因素。我们希望尽可能多地纳入变量,包括我们所有的数据。
现在这些都是样本数据,所以我们不要抱有任何期望。为了提高速度,我们今天也可以同时运行它。直接把数据放在这里。我们可以运行它,后台会运行这个自举森林,我们会在这里查看最重要的产量预测因子。你可以看到,根据这个分析,你必须谨慎对待,因为这仅仅是样本数据。你必须对结果持保留态度。你可以看到,在这种情况下,最重要的产量预测因子是地点。我们有三个不同的地点,最低温度为11。
现在,我们可以从中识别出一些重要的变量,以便稍后将其纳入模型。我们可以选中这些变量并高亮显示。我们之后可能会用到它们。预测因子筛选是一个非常优秀的平台,可以快速识别给定响应变量数据集中的最重要预测因子。
现在,有了这些预测因子,我们可以快速查看主成分分析。接下来,我们可以……将我们刚刚分离出的、可能对收益率有重要预测作用的变量添加到主成分分析中。同时,我们也把收益率本身添加进去。运行这个分析。我们先移除标签。可以看到,我们得到了这样的输出结果,它可以快速地告诉我们很多关于数据集的信息。在一个非常复杂的数据集中,我们可以开始非常简单地看到这里可能存在的关系。
您可以看到这里存在很强的相关性,当这些列的值很高时,例如这里是第 4 列,第 4 列是第 4 列,也就是最高土壤温度,根据这个规律,当这些值非常高时,我们也会看到全球辐射量很低。当这里出现直角时,在这种情况下,我们看不到这些变量与这些变量之间的关系。
现在来说说建模过程。这样做的好处在于,我们可以看到这两个变量——最高土壤温度2和最高温度2——不出所料地呈高度正相关。同时使用这两个变量不太可能为我们的模型提供更多信息,因此我们可以选择其中一个用于建模,而排除另一个。这里的情况也是如此,目的是为了优化我们的模型。主成分分析也是一个非常实用的小工具,可以用来优化我们的模型。
让我们回到幻灯片。模型筛选。现在我们有了重要的变量。我们可能想找到最适合我们的模型。现在我们只需回到 JMP,选择查询、筛选、非筛选、预测建模、模型筛选。在这里打开 JMP 平台,我们可以把之前找到的重要变量粘贴到这里。然后我们可以输入我们想要查看的结果。我们可以选择所有想要比较的不同模型。非常重要的一点是,在所有情况下,我们都可以尝试设置随机种子以确保结果的可复现性。
如果你以后想再来做这个,而你之前没有输入随机种子,你可能会得到不同的结果。但是,如果我们在这里输入随机种子值(比如 1、2、3,非常简单),结果就具有可重复性。然后我们可以查看所有这些不同的选项。我们已经可以集成到 JMP 中,让 JMP 构建验证列。我们可以添加不同的二次变量。今天我不会运行这个程序,因为它可能需要一些时间,但我们可以根据不同的指标来选择性能最佳的模型,通常是基于 RSC 和模型 R²。在平台内,我们还有其他选项可以选择。此外,还有一个不错的工具可以帮助我们找到最适合我们数据的模型。
下一步是验证。这将有助于模型训练。确保模型没有过拟合数据集至关重要。我们可以在 JMP 中快速创建验证列,接下来我会演示如何操作。这里是我们的数据集。我们依次点击“分析”、“预测建模”、“创建验证列”。在这里,您可以选择基于某一列进行分层。
在这个例子中,数据集包含来自三个站点的字段数据。现在,我们需要根据站点进行分层,因为我们稍后会拆分这些列,并随机赋予它们值 1、2 或 3。如果不按站点分层,可能会导致问题:如果数据集中的站点数量不相等,或者每个站点的行数不相等,则可能会使数据集和模型产生不成比例的偏差。
重要的是要考虑你需要对数据集中的哪些列进行分层。好的。然后我们可以快速创建多个数据集,这里有多种数据拆分方案,例如 70% 的数据用于训练,20% 用于验证,10% 用于测试。
现在您可以看到调整后的比率以及您将获得的行数。重要的是要考虑数据集的大小,这决定了您是要使用训练集、验证集和测试集,还是只使用训练集和验证集,以及您需要如何划分数据集。此外,根据您的数据集,这些值可能会略有不同。
接下来,我们继续。正如您在这里看到的,我们快速创建了一个验证列,这样在构建模型时,我们就可以将验证列添加到模型中。另外,正如我们在右侧看到的,这是一个提升树模型。值得一提的是,需要将模型调整到最佳的分割数、学习率、最小分割数等等,您可以在这里看到所有这些参数。您还可以使用调优设计表。花些时间尝试不同的选项,看看如何通过调整这些参数来获得最佳的误差和 R² 值,这是值得的。
不过,JMP 通常会根据你拥有的数据集给出这些参数的推荐值,我发现这些推荐值非常准确,而且通常表现最佳。即使你尝试其他选项,这些推荐值也相当不错。这是另一个需要考虑的因素。
现在我们进入模型评估环节,正如我刚才所说,这里有 R² 和 RMSE。我们将探讨一些评估模型性能的方法。回到 JMP,这里是我们刚刚创建的模型。在这里,我们可以进入因子分析,然后选择分析器。它已经开启了。这里是我们的模型和分析器,我们可以快速保存列,并在这里生成预测公式。
用于进行预测的后台公式将存储在数据集的某一列中。现在已经完成了。打开我们的数据集。您可以在这里看到产量的预测值。现在我们可以进行分析,计算 Y 对 X 的拟合优度。在 JMP 中有很多方法可以做到这一点。这只是其中一种方法。我们的响应变量是产量。我们向下看。得到了 X 的预测值。好的。正如我们所看到的,模型效果不太好。我们可以从这条线拟合一条线,然后转到拟合线。分析器。现在我们有了这个平台,可以看到产量的预测值。
假设我们预测的是 50,但我们不这么做。我们预测的是 50。我们可以说:“好的,当我们预测值为 50 时,真实值可能是多少?”答案是 49.694。我们高估了。然后,你可以立即得到两个非常有用的数字:95% 置信区间的下限和上限。这只是使用数据集实时评估模型预测效果的一种方法。它们在这里非常有用。
现在,我们来看一下模型部署。我们的分析器有一些非常棒的组件,尤其对农业产量预测很有帮助。任何想要预测未来情况的人,如果一年中不同时间会受到各种因素的影响,我们都可以利用模型模拟器来预测未来可能出现的各种情况,接下来我将向大家展示。
假设我们有了这个模型。我们进入分析器。现在,我们如何将它应用到农业领域呢?您可以看到,这里有三个不同的地点。我们有不同的变量,这些变量会在一年中的不同时间输入。我们进入模拟器。我们可以把所有这些变量都改为随机值。一个数字是……如果我们按住Shift键,然后继续按住Shift键,点击Shift键,而不是Shift键,而是Ctrl键。好了。按住Ctrl键,点击,选择随机值。
您可以看到,我们现在可以选择……稍微缩小一下。我们可以选择在下面随机生成模型运行次数。运行次数,10,000。您可以根据需要更改此数字。我们先设为 10,000。您还可以选择添加噪声。假设现在是三月份。这里的一些变量是在三月份之前设置的。在三月份,我们可以进行评估,好的。
3月份的全球累计辐射量实际上是60,000。我们固定这个值,其余所有值都可以随机设定,然后使用均值和标准差运行10,000次模型迭代。这样可以生成更多均值附近的值,减少极端值。如果我们这样做,就可以将其模拟到表格中,生成一个庞大的数据集。我们还可以运行一些潜在场景,这非常有用。假设我们这里采用正态删失模型。我们想要排除数据集中的某些部分。这里我们想要排除低于20和高于30的值。
您可以看到,我们现在已经对分布进行了截尾处理。我们排除了达到这些极端值的任何可能性。我们还可以进一步这样做。我们可以截断数据,然后模拟可能发生的情况。现在我们有了所有可能的结果。生成表格。从这里开始,分析分布。我们可以添加产量。好的。现在我们得到了模型生成的值,这些值是经过 10,000 次可能情况的模拟后得到的。
现在您可以看到平均值为 53,中位数为 52.96。根据我们输入的值,最可能出现的情况是 53 左右。您可以清楚地看到概率在这里显示。您可以复制这一列,将其粘贴到您需要的任何输出位置,并开始根据模型的不同输入绘制不同的结果图表。这对于预测不同夏季天气情景下的未来产量非常有用,并确保所有可能的情景都包含在分析中。让我们回到 Excel 表格。
总结一下,JMP 是一个一体化平台,您可以在其中构建预测模型。我们在这里展示了一些农业方面的洞察,适用于许多不同的商业案例。但整个流程非常适用于任何需要预测未来的用例。它能够帮助那些拥有海量数据集但尚未充分利用的企业,将这些数据整合起来进行探索,从而挖掘出隐藏的趋势,为未来的数据驱动决策提供支持。但至关重要的是,它依赖于足够多的高质量数据来构建一个好的模型。希望这些内容对您有所帮助。如果您有任何疑问,请随时联系。以上就是全部内容。谢谢。