何 佳,惠建忠*,袁亚男,刘凑华
(1.中国气象局公共气象服务中心 北京 100081;2.中国气象局国家气象中心 北京 100081)
正值国家提出构建新发展格局,全社会各行业积极融入高质量发展之际,气象服务产品性能提升成为实现气象服务高质量发展的核心任务。检验是揭示产品性能和促进性能提升的关键手段。2019 年10 月中国气象局公共气象服务中心组建检验创新团队,将对各类气象机构面向社会发布的各种主要气象服务产品,进行第三方独立检验和评估,快速提供客观、公正、多维度的检验结果,逐步形成检验方法科学、流程规范、结果权威的气象服务产品检验业务体系。
MetEva 是由国家气象中心预报技术研发室负责研发的一个纯python 程序库,提供了常用的各种气象预报检验评估算法函数、气象检验分析的图片和表格型产品制作函数。共包含检验基础算法100+项,检验应用工具20+项,并支持30+种分类方式开展精细化检验[1]。
本文以气象服务基础产品为对象,分析检验环节,以解耦思想进行流程设计。分析并应用MetEva和文档生成技术docxtpl 实现检验业务自动化。通过该项工作,实现定期输出检验报告并业务化运行,为产品发展和服务决策提供参考依据。
将检验对象分为单产品独立检验和多产品对比检验。目前开展检验的产品包括:地面实况分析产品(简称CARAS-SUR1km)、多模式集成预报产品(简称OCF)、天气雷达分钟降水产品(简称MQPF)、基于机器学习的AI 智能预报产品(简称AIW-PMKG)、短时临近预报产品(简称WEN)。其中,与地面实况分析产品进行对比检验的产品包括:国家气象信息中心发布的CMPAS(CMA Multisource merged Precipitation Analysis System,中国气象局多源融合降水分析系统)三源融合降水实况和CLDAS(CMA Land Data Assimilation System,中国气象局陆面数据同化系统)陆面同化实况。与多模式集成预报产品进行对比检验的产品包括:中国气象局数值预报中心中尺度数值预报系统模式产品(简称CMA-MESO)和国家天气预报库产品(简称NWFD)。产品简介如表1,考虑对比检验数据对齐,表中“预报时长”表示对原始产品进行截取后的时长,为空表示实况分析产品。空间分辨率为空表示站点产品。
表1 检验对象信息简表
实况观测数据选取经中国气象局观测司考核的国家级地面气象观测站和区域自动站约11000 个,从气象大数据云平台“天擎”获取[2]。
从事件视角出发,某一个事件是否发生的检验称为有无预报检验。雨雾预报检验是常见的示例。对于某些应用,可以指定阈值以分隔“是”和“否”,例如,风速大于10m·s-1。通过二分类列联表(列联表也称为频数表,对应机器学习领域的混淆矩阵[3])得出预测(是或否)和观测(是或否)的四种组合,基于列联表计算各种检验指标。常见的指标有命中率、空报率、漏报率、准确率、偏差、TS 评分等。
从类别视角出发,有两种情况,一是预报的对象本身不是数而是类别,比如降水相态有雨、雪、冻雨等,可以采用整数对不同类别进行编码。二是预报的对象本身是实数,人为根据数值大小划分为多个等级而构成类别。比如24h 降水量记[0.1,10),[10,25),[25,50),[50,100),[100,250),[250,∞)(单位mm·(24h)-1),分别为小雨、中雨、大雨、暴雨、大暴雨和特大暴雨,可以称为多分类检验。检验指标同有无预报检验,需要注意的是指标计算公式中各变量含义的区别,具体可参考MetEva 在线文档多分类预报检验章节的说明。
从数值视角出发,对连续型预报进行客观统计检验的方法。常见的指标有平均误差、平均绝对误差、均方根误差、相关系数、准确率、错误率等。
矢量检验方法针对具有方向和大小的气象变量如风等进行检验评估,常见的指标有:风速预报准确率、偏强率、偏弱率等。
以上提到的指标含义和计算公式可参考由陈昊明等[4]编写的《高分辨率区域数值预报业务检验评估指标及算法》、中国气象局发布的气发〔2005〕109号《关于下发中短期天气预报质量检验办法(试行)的通知》文件附件2《中短期天气预报质量检验办法(试行)解释说明》以及MetEva 在线文档。
除上述传统检验方法外,目前国外研究的基于目标诊断的空间检验方法MODE(Method of Object-Based Diagnostic Evaluation)及其检验工具MET[5]逐步进入业务。刘凑华等[6]介绍了基于目标的降水检验方法及应用。李佳等[7]介绍了目标检验方法在高分辨率数值天气预报检验中的应用。屠妮妮等[8]开展了基于MET 的SWCWARMS 及GRAPES 模式在西南地区的站点检验分析。此外从服务角度,催生了新的或改进的检验方法,如对传统TS 评分进行改进的DTS 评分。
确定检验方法后需要对方法中阐述的分类情况进行定义。例如,降水有无预报检验需要确定晴雨判定标准。通常以观测能达到的最小量程0.1mm 为阈值,小于0.1mm 判定为无雨(即晴),大于等于0.1mm判定为有雨。在进行多分类检验时,针对降水累积时段不同,需要分别确定各分类阈值。如多模式集成预报产品降水累计时段有1h、3h、和12h,需要分别设置降水等级阈值,可参考《中短期天气预报质量检验办法(试行)解释说明》。短临预报产品降水等级标准可参考《短时气象服务降水等级》[9]。
风力分级标准,默认采用我国2012 年6 月发布的《风力等级》国家标准[10]。同时支持自定义等级,如在地面实况分析产品检验中,采用将国家标准风力等级中两级合并为一级。
气温预报准确率的误差分级,采用自定义方式,通过参数进行传递。如本文定义了绝对误差=以1为间隔1~10℃共十个等级进行气温准确率的检验。
在实际检验时需要根据产品系统独特性对默认阈值进行调整。例如WEN 产品晴雨判断阈值为0.03mm,如果取默认值(0.1mm)则会得出错误结论。
借鉴MetEva 将数据收集和检验计算解耦的技术设计思想,检验流程总体分为三部分,各部分关系如图1 所示。
基于MetEva 基础数据结构设计,将检验数据处理为数据框[11],每个要素一个文件。数据收集流程如图2,包括以下步骤:
(1)采集。从气象大数据云平台“天擎”和公服业务环境中采集检验所需的各类数据(见表1)并进行解析。
(2)插值。对格点数据通过插值方法获得观测站点上的产品数据。
(3)清洗。对数据解析过程中产生的精度问题,以及数据本身存在的异常问题进行处理。
(4)合并。按照站点编号、数据时间、预报时效、海拔高度对预报和观测进行时空匹配。
根据业务需求,对MetEva 丰富的检验产品制作函数进行指标选取、参数调整和定制封装,流程见图3。
(1)预处理。使用MetEva 基础层函数读取数据收集流程产生的观测和产品合并数据,并对数据列名称进行设置、裁剪。
(2)指标选取。针对不同产品的不同要素定制检验指标。要素与指标之间是1 对多关系。
(3)参数调整。在确定检验指标后,根据业务需求,对方法中的参数进行调整。MetEva 大部分函数以参数方式支持自定义检验标准,比如,降水量级阈值。但也有不支持的参数如风速等级,需要通过调整源码来实现。
(4)定制封装。针对不同产品检验报告个性化需求,对接口内容进行定制化生成,通过命令行参数实现一键式生成各类检验产品。
例如:针对实况分析产品,包括选取气温、降水进行对比检验、风速独立检验,共计30+个图形检验产品。
格式化的报告是正式文件。在完成检验计算的基础上,将生成的检验图形产品、检验分析数据按章节形成可发布的正式报告。首先对报告内容框架进行设计,如图4 所示。再针对每个部分进行细化,最后对动态要素进行抽取,完成报告模版制作。经过检验计算环节生成检验图片产品和接口文件,最后运行报告生成程序,即可生成可发布的检验报告。该环节流程如图5 所示。
MetEva 采用分层思想,将函数自下而上分为4层:基础函数层、检验算法层、检验产品层、透视分析层(尚待开展),见图6。本文基于MetEva 实现数据收集过程中大部分功能和检验计算全部功能。
(1)基础函数层(meteva.base)位于流程最前端,主要实现数据收集功能。本层定义了站点和网格两类数据结构,用于存储各类预报和观测数据。提供了用于上述两种数据结构的定义、初始化、赋值、转换、输入输出等操作的方法。另外还提供了一些和时间格式转换、文件路径处理、文件格式转换等工具类函数。
(2)检验算法层(meteva.method)包括基于numpy数组作为基本输入的检验函数,其中输入的观测和预报数据都不带有时空坐标信息,仅仅包含要素值。可计算检验评分、绘制检验图表。该函数层提供了检验技术和图表绘制的最底层方法。
(3)检验产品层(meteva.product)以基础层定义的站点和网格类型数据作为输入,由于数据自带了时空坐标信息,因此为预报分组或者在检验结果中自动标记类别提供了方便。面对检验工作中难以分割的数据提取和检验分析这一问题,在meteva.base和meteva.method 中函数的基础上,将数据选取、分组、检验计算、图形绘制进行封装,极大的方便了检验工作。
Docxtpl 是一个很强大的包,主要依赖两个包:python-docx 和jinja2。python-docx 库[12]可以用来创建docx 文档,包含段落、分页符、表格、图片、标题、样式等几乎所有word 文档中能常用的功能。它的主要功能是用来创建文档。jinja2[13]是基于python 的模版引擎,实现对模版中变量、表达式和标签的管理。Docxtpl(python-docx-template)将二者进行结合,可以用来对docx 文档进行修改,诸如对文档中的文本、图片、富文本等几乎所有存在于文档中的都能替换。检验报告生成技术采用docxtpl,具体实现见图7。
初步建立了定时检验业务流程,实现自动化运行。截至2021 年12 月共形成检验报告30 多份(15份正式发布,其它试验性应用),弥合了产品“研发、生产、应用、改进”闭环中检验的缺失(或不连续),为中心高质量发展提供持续改进支持。目前以基于站点的统计检验方法为主,后续将在单站检验、产品样式、精细化(多维度),以及空间检验、灾害性天气过程检验等方面开展工作。
该项工作开展过程中发现的问题和体会如下:
(1)数据规范化。以两类产品为例,精细化产品以自有格式定义,使用时需要对照格式说明文档编写代码进行解析。通常需要获取文档、准确理解、文件读取三个步骤才能完成数据解析。在这个过程中,作者就遇到文档更新问题、文字说明的理解问题。基于雷达的分钟降水产品在格式方面采用了气象领域比较常见和标准的NetCDF 格式,在文件读取环节较为便捷。但是文件内容存在不规范的地方,比如,变量名称未遵循CF、全局属性不准确等。表面上看似小问题,但在使用上花费的时间不可忽略。建议业务部门进一步推进数据标准化、规范化,保障全流程链条的便利性。
(2)检验是静态和动态结合的业务。静态是指经过一定时间形成了较为固化的检验需求。比如检验要素、时间段、区域、指标等相对固定,功能实现后不再需要调整。动态是指检验所需的参数是动态形成的。比如,检验时间段取决于一次过程的开始和结束,检验区域则依据过程影响区域确定,以及其它因素也可能成为需求,尤其在气象服务上,不同行业受气象影响的因子不同。基于明确的需求,静态检验相对较为容易实现,而动态检验则需要在实践中不断进行探索,是一个较为长期和具有挑战的工作。
(3)工具是加速业务发展的利器。在MetEva 出现以前,难以形成检验业务的连续性和常态化,很大一部分原因是缺乏一套完备的工具。产品研发人员只能临时应对,编写的代码不具备通用性,形成检验零散化、突击性的现状。MetEva 的出现为我们解决这一问题带来了可落地的方案。
致谢:感谢国家气象中心提供的MetEva,为我们开展检验提供了一套全流程的解决方案。