问题:
我在R中训练了一个随机森林模型。我需要将这个模型部署在一个独立的Excel工具中,该工具将被销售网络中的350人使用,用于根据用户在电子表格中输入的数据进行实时预测。
我该如何做到这一点?
限制条件:
-
不能要求用户在本地计算机上安装R。
-
不能使用服务器(物理或云端)提供评分API。
我已经做了什么?
1. PMML
我可以将模型导出为PMML格式(XML结构)。通过研究,我发现Python和Java中有用于加载和执行PMML输入的库。然而,我没有找到在VBA/VB中实现的任何东西。
2. Zementis
我调查了一种名为Zementis的解决方案,它提供了一个Excel插件来部署PMML模型。然而据我了解,这需要对云服务器(例如AWS)进行Web服务调用,实际的模型执行发生在那里。我的IT安全部门不会允许这样做。
3. 其他
最常见的建议似乎是调用R来加载模型并运行预测函数。如上所述,这不是一个可行的选项。
详细背景:
随机森林模型在R中训练,包含约30个变量。该模型用于在销售过程中推荐“个性化”的产品价格。
模型需要分发给销售网络,约有350名用户。业务的偏好是将模型集成到销售团队当前用于计算交易盈利能力的现有电子表格工具中。
这意味着我需要以一种可以实现到Excel VBA中的方式导出模型。
鉴于时间限制,实施需要是自包含的,不需要IT基础设施或额外的应用程序安装。我们正在与组织的IT团队合作开发基于服务器的解决方案,但他们的部署时间表是12个月以上,这意味着我们短期内需要一个战术解决方案。
回答:
这里是一种获取树“规则”的方法(使用mtcars数据集的示例)
install.packages("randomForest")library(randomForest)head(mtcars)set.seed(1)fit <- randomForest(mpg ~ ., data=mtcars, importance=TRUE, proximity=TRUE)print(fit)## 查看变量重要性:importance(fit)# 打印森林中每棵树的规则install.packages("rattle")library(rattle)printRandomForests(fit)
使用500棵树的规则可能不现实,但也许你可以在VBA中实现100棵树,然后对结果取平均值(对于连续响应)或预测在所有树中得票最多的类别(对于分类响应)。