Apache Spark上的因果推断
什么是因果推断?
近年来,一个备受关注的挑战是使用机器学习来推动政策和商业中的决策。 通常,企业和政策制定者希望研究某种激励或干预是否会导致预期的结果,以及影响的程度。 例如,如果我们给客户折扣(treatment),他们未来会购买多少(outcome)。 传统上,人们使用相关性分析或预测模型来理解相关因素,但从预测到有影响力的决策并不总是直接的,因为相关性并不意味着因果关系。在许多情况下,混杂变量会影响 治疗的概率和结果,引入更多的非因果相关性。
因果推断有助于弥合预测与决策之间的差距。
因果推断语言
| 术语 | 示例 |
|---|---|
| 处理 (T) | 观看广告 |
| 结果 (Y) | 购买特定新游戏的概率 |
| 混杂因素 (W) | 当前游戏习惯,过去购买记录,客户位置,平台 |
因果推断与双重机器学习
隔离因果问题的黄金标准方法是进行一项实验,该实验随机将治疗分配给一些客户。 随机化消除了混杂因素与治疗概率之间的任何关系, 因此,治疗和未治疗客户之间的任何差异只能反映治疗对结果的直接因果效应(治疗效果)。 然而,在许多情况下,治疗实验要么不可能,要么成本过高。 因此,我们转向因果推理方法,这些方法允许我们使用观察数据来估计治疗效果。
SynapseML因果包实现了一种称为“双重机器学习”的技术,该技术可用于通过机器学习模型估计平均处理效果。与基于回归的方法不同,这些方法需要严格的参数假设,而这种基于机器学习的方法允许我们对混杂因素、处理和结果之间的非线性关系进行建模。
用法
在 PySpark 中,你可以通过以下方式运行 DoubleMLEstimator:
from pyspark.ml.classification import LogisticRegression
from synapse.ml.causal import DoubleMLEstimator
dml = (DoubleMLEstimator()
.setTreatmentCol("Treatment")
.setTreatmentModel(LogisticRegression())
.setOutcomeCol("Outcome")
.setOutcomeModel(LogisticRegression())
.setMaxIter(20))
dmlModel = dml.fit(dataset)
注意:数据集中除“Treatment”和“Outcome”之外的所有列都将用作混杂因素。
注意:对于离散处理,处理列必须为
int或bool。0和False将被视为对照组。
在拟合模型后,您可以获得平均处理效果和置信区间:
dmlModel.getAvgTreatmentEffect()
dmlModel.getConfidenceInterval()
对于一个端到端的应用程序,请查看DoubleMLEstimator notebook 示例。