跳至主要内容

Prophet建模技术(1):Enumerations


如果您已将Prophet升级到2024年第四季度版本,可能已经注意到一个新增的实用功能——除了常规的数字(Number)和文本(Text)类型外,如今您还可以将变量(variable)定义为 enumeration类型了。 (你可以透过视频了解这篇文章的内容)

对于不熟悉枚举(enumeration)的人来说,我们可以将枚数是为一个维(dual-dimensional)组。第一0开始整数序列,第二对应文本值。可以之间轻松转换——整数获取文本,文本获取整数。

例如,我们为IFRS17的discount rates设置一个名为IFRS_DISC的枚举:
  • 第一个配对是0(整数)和“LIR”(文本),表示锁定利率;
  • 第二个配对是1(整数)和“VIR”(文本),表示当前利率。 
  • 我们可以使用类似对象的表示法引用它们:IFRS_DISC.LIRIFRS_DISC.VIR,这类似于VBA中的object oriented programming(“OOP”)方式。
如果我们需要进行整数和文本的转换的话,我们需要采用Prophet提供的转换函数。例如,您可以使用ENUM_TO_INTENUM_TO_TEXTIFRS_DISC.LIR获取0和“LIR”。您还可以使用INT_TO_ENUMTEXT_TO_ENUM将整数或文本值转换为枚举。

那么,何时在Prophet编码中使用枚数呢?在我看来,枚举使预设条件与逻辑更具可读性。与其使用0、1或2等原始值,不如使条件更清晰。例如:
  • 不使用枚数:IF CALC_LOOP = 0 THEN
  • 使用枚数:IF CALC_LOOP = ENUM_TO_INT(DISC_TYP.LIR) THEN 
使用枚举使逻辑更透明——您无需记住数字代表什么。此外,由于枚举必须在workspace objects中定义,这也有助于减少人为疏忽的错误。


由于Prophet现在支持将枚举作为变量类型,我们就可以进一步简化采用枚举的预设条件与逻辑。让我们检视之前的例子:
  • 您可以创建一个新变量,自动将CALC_LOOP转换为枚数,例如CALC_DISC
  • 然后,您可以简化预设条件的编码:IF CALC_DISC = DISC_TYP.LIR THEN,并无需进行任何的转换。
还有一个有用的应用场景——枚举变量可以帮助处理需要根据tCALC_LOOP变化的表后缀。众所周知,Prophet中的文本变量不能直接依赖于tCALC_LOOP。但有了新的CALC_DISC变量,您也可以这样定义列表的名称"ifrs_disc_" + ENUM_TO_TEXT(CALC_DISC) + "_pc"。

总结 

虽然Prophet新增将枚数作为变量类型一个小改进,但是它是可以改善我们编码的技术和代码可读性使用枚数不但使我们代码简洁、更易理解,减少错误。如果尝试使用枚数,我建议您不妨试一试——可能是Prophet编码带来更多结构清晰度简单方法。


相关文章:
  1. Prophet建模技术(1):Enumerations
  2. Prophet建模技术(2):新保单预测

    评论

    此博客中的热门博文

    Prophet建模技术(2):新保单预测

    根据我与Prophet用户的合作经验,大多数人对有效保单(in force policies)相关的运算,例如准备金(reserves)和内含价值(embedded values),都是相当熟悉。然而,许多用户在处理公司年度预算规划时所采用的 新保单预测(New Business Processing) ,却感到模糊或不确定。(我会在这篇文章中采用“NB”为new business的缩写) 我经常收到类似以下的问题: “为什么我不能只使用cross multiplication?” “为什么project method的运行时间这么长?”

    怎样才算“良好”的Prophet模型?(1) —— 避免黑箱模型

    如果你在寿险公司的精算部门的actuarial valuation团队工作,想必你已经和Prophet打过很多交道了。Prophet确实是一个我们用来做现金流预测和计算储备金,功能相当强大工具。然而,你有没有想过,你所使用的Prophet模型是否是一个“良好”的精算模型呢?