IBM SPSS Modeler 中的蒙特卡洛模拟算法蒙特卡洛方法也称统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。蒙特卡洛方法通常可以分成两类:一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。另一种类型是所求解问题可以转化为某种随机分布的特征数,比如 随机事件 出现的 概率 ,或者 随机变量 的 期望值 。通过随机抽样的方法,以随机事件出现的 频率 估计其 概率 ,或者以 抽样 的 数字特征 估算 随机变量 的 数字特征 ,并将其作为问题的解。这种方法多用于求解复杂的多维积分问题。在 IBM SPSS Modeler 中,蒙特卡洛模拟算法分为三个节点,其中“模拟生成”节点提供了一种使用大量统计分布从头开始生成综合数据的简便方法;“拟合”节点可以自动构建预配置的源节点,反映历史变量的分布和历史变量间的关系;“模拟评估”节点是设计用于评估由模拟分析流产生的字段的终端节点,并能提供有用的分布和相关图。 限于篇幅,本文将分为上下两篇进行阐述,上篇重点阐述模拟节点之拟合及生成节点,下篇则重点介绍模拟评估节点。本文为上篇。 回页首 模拟节点的属性及设置“模拟拟合”节点属性及设置1. 节点属性 “模拟拟合”节点是将一组候选统计分布拟合到数据中的每个字段。每个分布到字段的拟合可以通过拟合度标准进行评估。执行“模拟拟合”节点时,它可以为每个字段分配其最佳拟合分布并自动构建一个“模拟生成”节点(或更新现有节点)。使用“模拟生成”节点就可以为每个字段生成模拟数据。虽然“模拟拟合”节点是一个终端节点,但它不能生成模型,也不能输出或图表或者导出数据。 如果历史数据较为稀疏(即缺失值非常多),那么拟合组件可能很难找到足够多的有效值将分布拟合到数据。因此要将分布拟合到数据,拟合组件至少需要 2000 个有效值。因此当数据较为稀疏时应先去除不需要的稀疏字段或插补缺失值,然后再进行拟合。通过使用“数据审核”节点的质量选项卡上的选项,可以查看完整记录的数目、标识稀疏字段并选择插补方法。如果用于分布拟合的记录数不足,也可使用“平衡”节点来增加记录数。 2. 节点设置 双击“模拟拟合”节点打开节点的“设置”选项卡。在拟合选项中,通过这些选项可以指定分布拟合到字段的方式以及评估分布拟合的方式。
“模拟生成”节点属性及设置1. 节点属性 “模拟生成”节点提供了一种生成模拟数据的简单方法,即在没有历史数据的情况下,使用用户指定的统计分布生成数据;或者使用对现有历史数据运行“模拟拟合”节点而获取其分布并自动生成数据。如果模型输入中存在不确定性,那么在对预测模型的结果进行评估时,生成模拟数据就非常有用。
在“源”选用板中找到“模拟生成”节点,并且可以将其直接添加到流中。 双击打开此节点的设置对话框,选择的“模拟生成”节点将是完全空白的,不包含任何字段和分布信息。因此可以在完全没有历史数据的情况下创建模拟数据并指定字段、存储类型、统计分布和分布参数等。
运行“模拟拟合”节点,在“模拟生成”节点与“模拟拟合”节点之间会创建一个链接并自动生成“模拟生成”节点,该节点从“模拟拟合”节点中继承了所有字段、存储类型和统计分布信息。 2. 节点设置 在“模拟生成”节点对话框的“数据”选项卡上可以执行下列操作:查看、指定和编辑字段的统计分布信息;查看、指定和编辑字段之间的相关性;指定要模拟的迭代数和观测值数。“模拟生成”节点可在三个视图之间进行切换:模拟字段、相关性和高级选项。
使用历史数据产生的“模拟拟合”节点或更新“模拟生成”节点,在“模拟字段”视图中可直接查看并编辑每个字段的统计分布信息。如果没有历史数据,可以通过选择存储类型、分布类型并输入必需参数来定义字段并指定这些字段的分布。以这种方式生成的数据在对数据进行实例化之前有关字段测量级别的信息是不可用的。 在“模拟字段”视图下,可以增加和删除字段、改变字段显示的顺序、为每个字段指定存储类型、为每个字段指定统计分布以及为每个字段的统计分布指定参数值。 “模拟字段”表包含以下列: 字段:包含字段的名称,可在单元格中输入内容来编辑字段名称。 存储器:该单元格包含存储类型的下拉列表,可用的存储类型为字符串、整数、实数、时间、日期和时间戳。存储类型的选择确定了“分布”列中可用的分布。如果存储类型为日期时间,必须将分布参数指定为整数。例如,指定日期 1970 年 1 月 1 日,即为整数 0。 状态:该列中的图标表示每个字段的拟合状态。绿色图标表示字段设置为最接近的拟合分布。 锁定:通过选中带有锁定图标列中的复选框来锁定模拟字段,可以防止已链接的“模拟拟合”节点自动更新该字段。如果手动指定分布并希望确保在执行已链接的“模拟拟合”节点时自动分布拟合而不会影响该分布,选中此列即可。 分布:此列中的单元格包含统计分布的下拉列表,存储类型的选择决定了指定字段在此列中可用的分布。如果无法为每个字段指定固定分布而又希望生成的数据中每个字段都是固定字段,则可以使用后跟“平衡”节点的“用户输入”节点。 参数:此列显示与每个已拟合的分布关联的分布参数。参数的多个值之间以逗号分隔,为参数指定多个值将为模拟生成多个迭代。要为参数指定值,在对应相关字段行中单击此列,然后从列表中选择指定。打开“指定参数”子对话框即可进行编辑。如果在“分布”列中选择了“经验”分布,那么此列为禁用状态。 最小值、最大值:对于某些分布,可以在此列中指定模拟数据的最小值和/或最大值。小于最小值以及大于最大值的模拟数据将被拒绝,即使这些数据对于指定分布有效。在对应于相关字段行中单击此列,然后从列表中选择指定,打开“指定参数”子对话框即可进行编辑。如果在“分布”列中选择了“经验”分布,那么此列为禁用状态。 对于“使用最接近的拟合”按钮,只有在已使用历史数据根据“模拟拟合”节点自动创建了“模拟生成”节点,并且在“模拟字段”表中选择了单个行的情况下,才会启用该按钮。此按钮用于将所选行中字段的信息替换为该字段的最佳拟合分布信息。如果对所选行中的信息进行了编辑,那么单击此按钮会将信息重置为根据“模拟拟合”节点确定的最佳拟合分布。 “拟合详细信息”按钮,也是在根据“模拟拟合”节点自动创建了“模拟生成”节点的情况下才会启用并打开“拟合详细信息”子对话框。
预测模型的输入字段通常具有相关性,例如,身高和体重。因此必须考虑模拟字段之间的相关性并确保模拟值保留这些相关性。如果使用历史数据根据“模拟拟合”节点生成或更新了“模拟生成”节点,在“相关性”视图中可查看并编辑字段之间的相关系数。没有历史数据也可以手动指定相关性。在生成数据之前,会自动检查相关性矩阵以确保它为半正定矩阵,并且是否能因此进行反置,同时可以选择以矩阵格式或列表格式来显示相关性。 相关性矩阵:用于显示矩阵中字段对之间的相关性。字段名称按字母顺序列出,从矩阵的左上方向下列出。只能编辑对角线下方的单元格,该值大于等于-1 且小于等于+1。矩阵中仅包括连续字段和有序字段。 相关性列表:用于显示表中字段对之间的相关性。 如果需要手动指定相关性,并阻止使用“模拟拟合”节点和历史数据自动拟合分布时覆盖这些相关性,可以选择“在重新拟合时不重新计算相关性”。 将已拟合的多路列联表用于具有分类分布的输入:缺省情况下,所有具有分类分布的字段将包括在列联表或多路列联表中,具体取决于具有分类分布字段的数量。执行“模拟拟合”节点时,将构造列联表(与相关性相似)。
此选项显示用于指定要模拟的观测值数以及任何迭代的命名方式的选项。 最大观测值数:指定要生成的模拟数据的最大观测值数以及关联的目标值。 迭代数:由系统自动计算,每次对分布参数指定多个值时,将自动创建迭代。 总行数:只有在迭代数大于 1 的情况下,才会启用此选项,使用所显示的公式自动计算此数字。 创建迭代字段:只有在迭代数大于 1 的情况下,才会启用此选项。选择此选项后,将启用名称字段。 名称:只有在选中了创建迭代字段复选框,并且迭代数大于 1 的情况下,才会启用此选项,可以通过在此文本字段中输入内容来编辑迭代字段的名称。 随机种子:设置随机种子可以复制模拟。 复制结果:启用生成按钮和随机种子字段。 随机种子:只有在选中复制结果复选框的情况下,才会启用此选项,可以在此字段中指定要用作随机种子的整数,缺省值为 629111597。 生成:只有在选中复制结果复选框的情况下,才会启用此选项。用于在随机种子字段中创建介于 1 到 999999999 之间的伪随机整数。 回页首 模拟节点配置、评估实例说明及脚本实现模拟生成节点和拟合节点的的配置统计分布就是在 统计分组 的基础上,把总体的所有单位按组归排列,形成总体中各个单位在各组间的分布,是某个变量可以使用值的理论出现频率。在“模拟拟合”节点中,会将一组理论统计分布与每个数据字段进行比较。主题 分布 中描述了可用于拟合的分布,对理论分布的参数进行了调整,能够根据拟合度的度量实现与数据的最佳拟合;Anderson-Darling 或 Kolmogorov-Smirnov 标准,通过“模拟拟合”节点实现的分布拟合的结果显示拟合了哪些分布、每个分布的最佳参数估算以及每个分布与数据的拟合度。分布拟合期间,还可以计算具有数字存储类型的字段之间的相关性,以及具有分类分布的字段之间的偶然性。分布拟合的结果将用于创建“模拟生成”节点。 在分布与数据进行拟合之前,会在前 1000 条记录中查找缺失值。如果缺失值过多,则无法进行分布拟合。分布拟合未排除用户缺失值。如果数据包含用户缺失值,并且希望从分布拟合中排除这些值,则应该将这些值设置为系统缺失值。 拟合分布时,不会考虑字段的角色。角色为目标字段的处理方式与角色为输入、分区、分割、频率和标识等的字段相同。 分布拟合期间,会根据字段的存储类型和测量级别以不同方式对这些字段进行处理。表 1 描述了分布拟合期间的字段处理。 表 1. 根据字段的存储类型和测量级别进行的分布拟合
对于测量级别为有序的字段,其处理方式类似于连续字段,包含在“模拟生成”节点中的相关表内。如果要将二项式分布、负二项式分布或泊松分布以外的分布拟合到有序字段,那么必须将字段的测量级别更改为连续。如果先前为有序字段的每个值定义了标签,并且随后将测量级别更改为连续,那么这些标签将丢失。 在分布拟合到具有多个值的字段时,会以相同方式处理具有单个值的字段。具有存储类型时间、日期或时间戳记的字段将作为数字进行处理。 将分布拟合到分割字段:如果数据包含分割字段,并且希望对每个分割单独执行分布拟合,那么必须使用上游“重构”节点来变换数据。使用“重构”节点可以为分割字段的每个值生成一个新字段。随后,可以将此重构数据用于“模拟拟合”节点中的分布拟合。 以 drug1n 作为源数据进行拟合,连接“模拟拟合”节点,设置如图 1 所示。 图 1.“模拟拟合”节点设置界面 点击“运行”按钮,“模拟拟合”节点会自动生成“模拟生成”节点。双击该节点打开属性设置界面,如图 2 所示。 图 2. “模拟生成”节点设置界面 可以选择需要设置的字段进行修改和设置。右侧工具栏是对选择字段进行上下移动,添加以及克隆。例如选择第一行“Age”字段,默认的最佳拟合分布为均匀分布。在对应于相关字段行中单击参数列,然后从列表中选择指定,打开“指定参数”子对话框进行编辑。例如设置多个最小值,并以逗号作为间隔,预览图会显示相应的拟合曲线。如图 3 所示。 图 3.“指定参数”设置界面 确定后返回“模拟生成”节点配置界面,“Age”字段的状态会变为手动指定状态。如果将分布 改为泊松分布,“最小值,最大值” 会高亮显示,此时从列表中选择指定,打开“指定参数”子对话框进行编辑。例如设置最大最小值,如图 4 所示。 图 4. “指定参数”最大最小值设置界面 点击“模拟生成”配置界面右上角的按钮“使用最接近拟合”可以恢复到初始拟合状态。对于“拟合详细信息” 按钮,只有在已通过执行“模拟拟合”节点来创建或更新“模拟生成”节点的情况下,“拟合详细信息”对话框才可用。此对话框显示所选字段的自动分布拟合结果。分布按拟合度进行排序,最接近的拟合分布首先列出。您可以在此对话框中执行下列任务:检查拟合到历史数据的分布、选择其中一个已拟合的分布,如图 5 所示。 图 5. 拟合详细信息界面 处理方法(度量):显示所选字段的度量类型。此类型来自“模拟生成”节点对话框中的“模拟字段”表。可以通过单击箭头并从下拉列表中选择度量类型来更改此度量类型。提供了以下三个选项:连续、名义和有序。 分布:“分布”表显示适合于此度量类型的所有分布。已拟合到历史数据的分布将按拟合度从最佳到最差的顺序进行排序。拟合度由“模拟拟合”节点中选择的拟合统计量确定。未拟合到历史数据的分布按字母顺序列示在表中已拟合的分布下方。 “分布”表包含以下列: 使用:所选单选按钮指示当前为字段选择的分布。通过在“使用”列中选择与所需分布对应的单选按钮,您可以覆盖最接近的拟合分布。在“使用”列中选择单选按钮还将显示所选字段的历史数据直方图(或条形图)上叠加的分布图。一次只能选择一个分布。 分布:包含分布的名称。 拟合统计量:包含针对分布计算的拟合统计量。 连续:包含 Anderson-Darling 检验和 Kolmogorov-Smirnoff 检验的结果,还将显示与这些检验关联的 p 值。最先显示的是选择作为“模拟拟合”节点中的拟合度标准的拟合统计量,它用于对分布进行排序。Anderson-Darling 统计量显示为 A=aval P=pval。Kolmogorov-Smirnoff 统计量显示为 K=kval P=pval。如果无法计算某个统计量,那么将显示一个点来代替数字。 名义和有序:包含卡方检验的结果,还将显示与此检验关联的 p 值。统计量显示为 Chi-Sq=val P=pval。如果未拟合分布,那么将显示未拟合。如果无法以数学方法拟合分布,那么将显示无法拟合。注:对于经验分布,此单元格始终为空。 参数。包含与每个已拟合分布关联的分布参数。这些参数显示为 parameter_name = parameter_value,参数之间以单空格分隔。对于分类分布,参数名是类别,而参数值是关联的概率。如果分布未拟合到历史数据,那么此单元格为空,无法编辑此列。 对话框同时提供直方图缩略图(显示所选字段的历史数据直方图上叠加的所选分布图)和分布缩略图(显示所选分布的说明和图示)。 配置完成后,选择表格节点连接“模拟生成”节点,如图 6 所示,表格节点即可生成所有的拟合数据。 图 6. 拟合详细信息界面 脚本实现方法由“模拟拟合”节点生成“模拟生成”节点脚本配置: create simfit rename :simfit as 'simfitnode' connect Type to simfitnode set simfitnode.bins=150 set simfitnode.good_fit_type=AnderDarling execute simfitnode create tablenode at 450 100 connect simgen to Table execute :tablenode 由“模拟生成”节点生成自定义数据脚本配置: create simgen at 100 100 rename :simgen as 'simgennode' set :simgennode.Fields = [{"Fields1" "Real" "False" {"Poisson" [{"mean" "25,36"}]} "1" "100"} {"Age" "Integer" "False" {"Uniform" [{"min" "15"} {"max" "74"}]} "" ""} {"Na" "Real" "False" {"Uniform" [{"min" "0.500169"} {"max" "0.896056"}]} "" ""} {"Sex" "String" "True" {"Categorical" [{"F" "0.48"} {"M" "0.52"}]} "" ""} {"Drug" "String" "False" {"Categorical" [{"drugA" "0.115"} {"drugB" "0.08"} {"drugC" "0.08"} {"drugX" "0.27"} {"drugY" "0.455"}]} "" ""}] set :simgennode.Correlations =[{"Age" "Na" "0.011"} {"Age" "Fields1" "0.022"} {"Na" "Fields1" "0.034"}] set simgennode.max_cases = 20000 set simgennode.create_iteration_field = True set simgennode.iteration_field_name = "NewI" set simgennode.replicate_results = True set simgennode.random_seed = 7817639 create tablenode at 300 100 connect simgennode to Table execute :tablenode 回页首 结束语预测模型需要一组已知输入来预测结果或目标值,然而,在许多实际应用中,输入值通常是不确定的。蒙特卡洛模拟算法采用概率分布来对不确定输入进行建模,并从这些分布抽取生成其输入的模拟值。值已知的输入保持固定为已知值。采用每个不确定输入的模拟值和已知输入的固定值来评估预测模型,以计算模型目标。蒙特卡洛模拟算法在 IBM SPSS Modeler 中的引入,使得用户可利用新的“模拟源”节点,并为其提供了一种使用大量统计分布从头开始生成综合数据的简便方法。 |
|