如何在DataFrame中实现随活跃时长动态调整的加权特征计算
可变权重FS计算实现方案
最简实现(仅适配当前需求)
直接用numpy.where做行级条件判断,不需要修改原有标准化逻辑,仅调整FS计算段代码即可:
import numpy as np # 动态计算S1权重:活跃月小于6时用10%,否则用默认15% s1_weight = np.where(df_final['Months'] < 6, 0.1, 0.15) # 加权计算FS,其余列权重保持原规则不变 df_final['FS'] = (df_final['S1'] * s1_weight) + \ (df_final['S2'] * 0.15) + \ (df_final['S3'] * 0.5) + \ (df_final['S4'] * 0.2)
注意:如果需要保证总权重始终为100%,可将S1下调的5%分配到其他列,比如补到S3的话可新增S3的动态权重逻辑:
s1_weight = np.where(df_final['Months'] < 6, 0.1, 0.15) s3_weight = np.where(df_final['Months'] < 6, 0.55, 0.5) df_final['FS'] = (df_final['S1'] * s1_weight) + (df_final['S2'] * 0.15) + (df_final['S3'] * s3_weight) + (df_final['S4'] * 0.2)
通用扩展实现(适配多档位权重规则)
如果后续需要新增更多权重调整规则(比如不同活跃月区间对应多套权重),可以用自定义函数配合apply实现更灵活的配置:
def calc_fs(row): # 可根据需求新增任意条件分支 if row['Months'] < 6: s1_w, s2_w, s3_w, s4_w = 0.1, 0.15, 0.55, 0.2 elif row['Months'] > 24: # 可自定义高活跃用户的权重规则 s1_w, s2_w, s3_w, s4_w = 0.05, 0.2, 0.5, 0.25 else: s1_w, s2_w, s3_w, s4_w = 0.15, 0.15, 0.5, 0.2 return row['S1']*s1_w + row['S2']*s2_w + row['S3']*s3_w + row['S4']*s4_w df_final['FS'] = df_final.apply(calc_fs, axis=1)
内容的提问来源于stack exchange,提问作者woahtherebud
相关产品推荐
相关产品推荐

