目录
The Impact of Management Training
Adjusting with Regression
之前学习了如何使用线性回归调整混杂因素。此外,还向您介绍了通过正交化去偏差的概念,这是目前最有用的偏差调整技术之一。不过,您还需要学习另一种技术--倾向加权。这种技术涉及对治疗分配机制进行建模,并利用模型的预测对数据重新加权,而不是像正交化那样建立残差
本文内容更适合于有二元或离散干预的情况。不过,我还是会展示一种扩展方法,让你可以将倾向加权用于连续干预。
The Impact of Management Training
科技公司的一个普遍现象是,有才华的个人贡献者(IC)会向管理层发展。但是,由于管理层所需的技能往往与他们成为优秀个人贡献者的技能大相径庭,因此这种转变往往绝非易事。不仅对新任管理者,而且对他们所管理的人员来说,都要付出高昂的个人代价。
一家大型跨国公司希望减少这种过渡的痛苦,决定投资对新任经理进行经理培训。同时,为了衡量培训的效果,该公司尝试随机挑选经理人参加这一项目。我们的想法是,比较那些经理参加了培训的员工与那些经理没有参加培训的员工的敬业度得分。通过适当的随机化,这种简单的比较就能得出培训的平均干预效果。
遗憾的是,事情并没有那么简单。有些经理不想参加培训,就干脆不来了。还有一些人即使没有被指定接受培训,也设法接受了培训。结果,本来是一项随机研究,到头来却变成了观察研究。
现在,作为一名必须阅读这些数据的分析师,你必须通过调整混杂因素,使治疗和未治疗的数据具有可比性。为此,你会得到有关公司经理的数据以及描述他们的一些协变量:
import pandas as pd
import numpy as np
df = pd.read_csv("data/management_training.csv")
df.head()
处理变量是intervention,您感兴趣的结果是 engagement_score,即该经理的员工的平均标准化敬业度得分。除了干预和结果之外,该数据中的协变量还有
Adjusting with Regression
在进行倾向加权之前,我们先用回归法来调整混杂因素。一般来说,在学习新知识时,最好能有一些值得信赖的基准进行比较。这里的想法是检查倾向加权估计值是否至少与回归估计值一致。现在,让我们开始吧。
首先,如果只是比较治疗组和对照组,您会得到以下结果:
import statsmodels.formula.api as smf
smf.ols("engagement_score ~ intervention",
data=df).fit().summary().tables[1]
但话说回来,这个结果很可能是有偏差的,因为干预并非完全随机。为了减少这种偏差,您可以根据数据中的协变量进行调整,估计出以下模型:
其中,X 为所有混杂因素,加上一列常数作为截距。此外,性别和角色都是分类变量,因此您必须在 OLS 公式中用 C() 将它们包起来:
model = smf.ols("""engagement_score ~ intervention
+ tenure + last_engagement_score + department_score
+ n_of_reports + C(gender) + C(role)""", data=df).fit()
print("ATE:", model.params["intervention"])
print("95% CI:", model.conf_int().loc["intervention", :].values.T)
ATE: 0.2677908576676856
95% CI: [0.23357751 0.30200421]
请注意,这里的效果估计值比您之前得到的效果估计值要小得多。这在一定程度上表明存在正偏差,即员工参与度已经较高的经理更有可能参加了经理培训项目。好了,前言到此为止。让我们来看看倾向加权是怎么回事。