R语言创建衍生变量 求解均值约束下α参数计算基础薪资
α取值确定与based_salary计算方法
你可以直接利用均值的线性性质求解符合要求的α,不需要复杂拟合,具体操作步骤如下:
- 计算全量数据的两个基础统计量
注意要用你手上的完整真实数据集计算,不要只用给出的3行样例:- 计算
pi字段的算术平均值,记为mean_pi - 逐行计算
qi和exep的乘积,再求这个乘积列的算术平均值,记为mean_qe
- 计算
- 代入公式求解α
根据均值的线性性质,不管字段之间的分布关系,整体based_salary的均值满足如下等式:mean(based_salary) = mean(pi) + α * mean(qi * exep)
已知目标均值为268,移项即可得到α的计算式:α = (268 - mean_pi) / mean_qe - 校验并计算最终字段
算出α后先检查值是否落在要求的(0,1)区间内:- 如果在区间内,直接逐行代入公式
based_salary = pi + α * qi * exep计算即可 - 如果不在区间内,说明你给出的268均值口径和现有字段不匹配,需要核对原始数据、均值统计范围是否有误
- 如果在区间内,直接逐行代入公式
样例验证(基于你给出的3行测试数据)
用你提供的3行样例计算的话:
mean_pi = (300 + 245 + 300)/3 ≈ 281.67- 逐行乘积分别为316=48、214=28、3*5=15,
mean_qe = (48+28+15)/3 ≈ 30.33 - 代入得α≈(268-281.67)/30.33≈-0.45,为负数不在合法区间,这是因为样例数据量太小,和真实整体分布存在差异,属于正常情况。
Pandas实现代码参考
import pandas as pd # df为你已有的原始数据框 # 计算两个均值 mean_pi = df['pi'].mean() df['_qe_tmp'] = df['qi'] * df['exep'] mean_qe = df['_qe_tmp'].mean() # 求解alpha alpha = (268 - mean_pi) / mean_qe # 范围校验 if not (0 < alpha < 1): raise ValueError(f"计算得到alpha={alpha:.4f},不在(0,1)区间,请核对数据口径") # 生成目标字段 df['based_salary'] = df['pi'] + alpha * df['_qe_tmp'] # 删除临时中间列 df.drop(columns=['_qe_tmp'], inplace=True)
内容的提问来源于stack exchange,提问作者Sami_kh
相关产品推荐
相关产品推荐

