为了深入了解工业酵母产品在特定客户条件下的性能,Novonesis 的应用研发团队擅长生成富有洞察力的数据集,用于筛选适合客户规模的优质酵母候选产品。科学家们经常运用统计学方法来解决与广泛和具体的客户场景相关的复杂问题。
将贝叶斯方法引入 Python 库显著提升了我们计算模型和基于概率进行数据决策的能力,即使在无法获得传统统计显著性结果的情况下也是如此。此外,JMP 18 的新功能实现了与 Python 的无缝集成,使我们的科研人员能够在 JMP 中生成大型数据集并解答客户的特定问题。通过利用应用研究数据、客户试用数据和先验信息,我们正致力于基于充分的信息和贝叶斯统计来构建决策模型,而非依赖于统计上不显著的趋势。这种方法旨在更全面地理解和量化性能,最终实现更明智的决策。
大家好,我叫马特·沃茨,是Novonesis公司的高级科学家,主要从事生物能源研发工作。我们这里的生物能源项目主要就是将玉米转化为乙醇。我的工作是负责酵母和损伤酶的研发,这些酶能够提高生产效率,并为我们的客户带来尽可能高的产量。
今天,我很荣幸能和大家聊聊我们如何运用贝叶斯分析或统计学来辅助我们做出数据驱动的决策。我们会先简单介绍一下贝叶斯统计学的概念。对我来说,它还比较新,是我过去一年一直在学习的。我当然算不上这方面的专家,但我一直在不断探索学习。JMP18 版本进一步增强了 Python 集成。我们会探讨一下我在集成过程中的一些经验和发现,以及它如何改进,当然也包括一些最初遇到的困难。
贝叶斯统计学入门。它的核心在于利用概率陈述来做出更明智的数据驱动决策。它的优势在于能够利用先验知识进行估计。例如,你可以根据先验信息(比如乙醇浓度永远不会低于零)来约束不同的变量。这在构建模型时至关重要,而贝叶斯统计学恰恰擅长处理这类问题。
我引用了理查德·麦克尔雷斯(Richard McElreath)的一门课程,叫做《统计学的重新思考》(Statistical Rethinking)。链接在幻灯片的右下角。虽然链接无法点击,但希望你能看到。课程很短。这门课对我理解贝叶斯统计非常有帮助,我们接下来会从这门课中选取一个例子,来演示贝叶斯的工作流程,这有助于你理解运用贝叶斯方法时需要注意的事项。
接下来我们将探讨如何计算地球表面被水覆盖的比例。我们将遵循贝叶斯工作流程,具体步骤请参见右侧。你可以把它想象成一位艺术家。艺术家不会直接从一张白纸画出一只完整的猫头鹰。他们需要经过一系列步骤来添加细节。他们先画出形状,然后是线条,接着是眼睛结构、羽毛等等。
在考虑贝叶斯工作流程时,这一点至关重要。第一步是定义一个生成模型或因果模型,用于选择陆地或水域。我们可以直接使用地球仪,并选取多个样本,这些样本基本上就代表了陆地或水域。工作流程的第二步是定义一个估计值。这里的估计值是地球表面被水覆盖的比例是多少?第三步是更深入地了解情况。我们将开发一个统计模型,通过应用多个陆地或水域样本来生成该比例的估计值。
这就是贝叶斯方法真正难点所在,因为你可能需要针对每个估计值使用不同的统计模型。你必须精通统计模型,了解它们的含义,以及它们如何协同作用来提供所需信息。我一路走来找到了很多不同的资源来帮助我,稍后我会详细介绍其中一些。
在第三步,我们基本上要测试……实际上,是在第四步。在第四步,我们将添加更多细节。我们将使用生成模型来测试统计模型。这基本上就是我们一开始所做的,即直接选取地球。我们将把这些样本输入统计模型,看看是否能得到相同的地球被水覆盖比例。如果有效且合理,那么我们就可以对统计模型进行多次采样。
通常,我们会对多个链执行 10,000 次这样的操作,从而得到后验分布。这个后验分布可以帮助我们计算地球表面被水覆盖的概率。我们可以查看这张图表,可以看到最高概率表明地球表面被水覆盖的面积为 75%,这非常棒,因为它直观地展现了模型。在这些工作流程中,理解测试过程至关重要。你必须记录你的工作,这不仅可以减少错误,还能确保结果的可重复性,并方便其他人理解你的工作。
我们之前简要讨论过后验分布的概念,但它究竟是什么呢?后验分布是指后验概率的分布。这就涉及到贝叶斯概率论了。后验概率的计算方法是将似然值乘以先验概率,也就是先验信息除以你在实验中实际测量到的证据或指标。
您可以看到图中红色部分所示的分布情况,它帮助我们理解地球表面被水覆盖的概率高达75%。这些概率陈述正是我在开头提到的,它们有助于我们做出数据驱动的决策。以上是对贝叶斯方法的一些简要介绍。但在这里,我想重点谈谈我在JMP和Python集成过程中遇到的学习曲线。过程中既有陡峭的上升,也有低谷,遇到了一些痛点和困难,但最终我发现,在JMP中使用Python有很多好处,尤其是在将JSL和Python脚本合并在一起时。
我没时间把整张幻灯片都讲一遍,但其实我只是想推荐一下 PyMC。这个 Python 库不仅在贝叶斯分析的代码中至关重要,而且它的网站也提供了大量统计模型示例,可用于各种测试和其他用途。此外,它还会引导你使用另一个可视化软件(我们稍后会介绍),它可以帮助你在编写算法或其他类似程序之前,对模型进行充分的测试,从而得出最终结果。
PyMC 是专为 Jupyter Notebook 而生的,彻头彻尾的 Jupyter Notebook。所以人们会问我:“为什么要用 JMP 的 Python 解释器来做这件事?” 归根结底,是为了降低同事们的启动成本。我们公司一直在使用 JMP,而且是全程使用。如果我们能在 JMP 中实现只需点击一下就能完成的操作(后端是 Python),那么我的同事们就能使用这个新工具来辅助他们做出未来的决策。这基本上就是我们开始这项工作的原因。
在 JMP 中使用 Python 编程。可视化是 JMP 最吸引我的地方之一。你可以查看数据,探索数据。但我觉得这方面也比较繁琐,因为 Python 本身有很多库可以用来做可视化,但在 JMP 里却用不了。你基本上只能上传图片。我们这里写了一些代码,可以根据这些库提供的信息生成数据表,方便你探索数据,但我觉得这部分还是有点难用。
另一方面,JMP 在用户输入方面确实很有帮助,比如列列表或者判断用户是否要继续执行脚本。这些都只是弹出窗口,用户可以直接与之交互,而无需费力地去弄清楚需要在代码中输入什么、如何命名列等等。
最后,我发现真正受益匪浅的是,正如我之前提到的,将 JSL 集成到 Python 脚本中。现在,我们不仅可以显示图像的面板框,还可以在图像下方添加描述,帮助用户理解他们正在查看的内容。至少在我看来,这些都是非常棒的进步。
现在进入今天讨论的重点——脚本。首先,我们要选择一些会影响观察结果的因素。我们这里观察的结果是乙醇产量。这里使用的是JMP软件中的一个发酵过程示例数据集,所以任何人拿到脚本后都可以直接使用这个数据集。
首先,贝叶斯工作流程的核心仍然是反复测试。我们将对比模拟数据和观测数据,看看我们选择的统计模型是否有效。结果显示,它确实有效。它与观测数据吻合良好,且偏差不大。
然后我们就可以测试模型了。我们可以查看模型中的单变量参数,看看它们的密度分布如何。如果它们重合,那就说明模型运行良好。我们可以使用轨迹图(trace plots),这是另一个名为 rvs 的 Python 库的功能,可以帮助我们实现这一点。
最后,我们做的最后一个测试是能量图,观察这个无U型转弯采样器,这是得出答案的主要算法。同样,我们观察这些曲线,这些分布是否彼此重叠,它们确实重叠了。
接下来是最后一部分,也就是最终的数据集。这非常重要,因为我想展示 JMP 如何处理拟合模型。使用标准最小二乘法,我们发现储罐液位和空气对乙醇产量都有显著影响。如果我们采用贝叶斯方法,也会得到相同的结果。储罐液位和空气的影响都很显著,而且它们的影响值都远大于零。
但贝叶斯方法的妙处在于,它能让你更深入地了解其中的奥妙,那就是我们可以看到正负效应。这里,由于液位数值较大且为负值,这意味着液位越高,乙醇含量越低。由于空气数值较大且为正值,这意味着空气液位越高,乙醇含量越高。
作为一名发酵科学家,我不太认同最后的结论。当然,这只是一个样本数据集,但令人欣喜的是,我们从两种方法中都得到了相同的结果,而且贝叶斯方法还提供了额外的信息,有助于我们做出未来的决策。正如我的职位名称所示,我们在诺维信(Novozymes,或称Novonesis)公司负责酵母相关的决策。
我们选择了一个虚构人物作为产品名称,于是就有了克林特·耶斯特伍德 (Clint Yeastwood)。通过贝叶斯分析,我们能够做出概率陈述,从而帮助我们进行决策。根据贝叶斯分析,克林特·耶斯特伍德 (Clint Yeastwood) 的乙醇含量在 78% 的情况下比 BadFerm 高出 1.1%。这对于我们推进产品研发至关重要。
总而言之,今天我们讨论了JMP中的Python集成以及贝叶斯方法的探索。希望我们能激发大家的探索潜力,鼓励大家尝试新的思维方式,但切记要始终坚持测试、测试、再测试。贝叶斯方法需要测试,需要编写文档,这样不仅你自己理解,也能让你的同事或其他相关人员理解你的工作内容。
最后,一切都与决策有关。希望通过这些内容,您能够做出数据驱动的决策,我们也希望能够帮助您开拓思路,发现新的可能性。非常感谢您今天的聆听。希望这对您有所帮助。请访问网站,所有脚本和信息都在那里。如果您遇到任何问题,请随时联系我。谢谢。