towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4444080567c58b7b2c0d88100cc89dd9.png
图片来源:Claudio Schwarz / Unsplash
作者:Arthur Cruiziat
发布平台:Towards Data Science
阅读时长:约20分钟
发布时间:2024年8月30日
本文为“建模与因果机器学习进阶”系列的第二篇,旨在从商业实践和技术实现两个维度深入剖析提升建模(uplift modeling)的应用。在继续阅读之前,建议先回顾本系列的第一篇文章,其中详细介绍了提升建模的基本概念及其对企业运营的价值。
相关文章链接:
https://towardsdatascience.com/?source=post_page---byline--6bd959b25741--------------------------------
https://medium.com/@arthur.cruiziat?source=post_page---byline--6bd959b25741--------------------------------
设想这样一个场景:你作为某银行的老客户,最近因应用操作复杂而萌生退意。就在你准备更换服务提供商时,一位客服人员主动来电,耐心指导你使用关键功能,极大改善了你的体验。与此同时,你的女儿也正因高昂的交易费用考虑终止账户——但就在她即将注销前,系统自动向她推送了一张“一个月内免交易费”的优惠券。
这些看似巧合的背后,其实隐藏着一种强大的数据科学方法:提升建模。不同于传统模型仅预测客户流失概率,提升建模关注的是干预措施对个体行为的影响程度。换句话说,它能告诉我们:如果给某个客户发送邮件、提供折扣或致电沟通,他们留下来的可能性会增加多少?
通过这种因果推断能力,企业可以精准识别出那些“因干预而改变决策”的客户群体,避免资源浪费在本来就不会流失或无论如何都不会留下的用户身上。这不仅提升了营销效率,还显著增强了客户关系管理的个性化水平。
今天,我们将以客户留存为例,系统性地拆解提升建模的实施流程。从用例定义、数据准备、模型构建,到单一流程和多策略场景的实际应用,一步步带你掌握这项前沿技术的核心要点。
要成功应用提升建模,首先必须对问题背景有清晰的认知。我们需要回答几个核心问题:
只有明确了这些问题,才能确保后续建模工作具备实际意义和可执行性。
流失的定义高度依赖于企业的商业模式和行业特性,因此没有统一标准。以下是几种常见情形下的参考定义:
对于交易型公司,可以考虑以下指标:
而对于订阅制企业,判断标准则更直接:
举例来说:
无论选择哪种定义,关键在于提前确定时间窗口和判定规则,以便准确标记训练数据中的“流失”状态。定义的复杂程度应根据公司实际需求平衡——既要足够精确,又要便于理解和执行。
除了定义“何时算作流失”,还需要明确“我们希望提前多久进行预测”。这个时间段被称为流失预测窗口,它决定了模型输出结果的时间敏感性和实用性。
例如:
合理设置预测窗口有助于匹配业务节奏,并为干预措施预留充足的操作时间。
明确了流失的定义之后,接下来我们需要确定希望防范的具体流失时间范围。也就是说,我们是要防止用户在接下来的15天内流失,还是30天内?这个选择将直接影响数据的组织方式以及留存策略的设计。建议在此处保持务实态度,原因有两点:
因此,设定一个合理的预测窗口至关重要。如果我们把“流失”定义为未来30天内停止使用服务的用户行为,那么我们的预测目标也应设定为30天。这样既能给予我们足够的时间来实施干预策略,也能确保模型具备良好的预测能力。
关键在于,所选的时间框架必须兼顾两方面:一是为我们执行留存动作留出操作空间;二是保障模型在该时间段内的表现力和可靠性。
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
另一个需要考虑的问题是:是否要针对特定用户群体开展留存活动?这背后的动机可能多种多样:
根据实际业务场景的不同,你可能会选择只对部分用户采取行动。在本例中,我们将重点关注流失概率较高的用户群体,以便集中资源服务于最需要帮助的人群。
最后一步是明确我们将对用户实施哪些具体的留存措施。这项决策通常需要与业务团队紧密协作完成。在当前案例中,我们计划采用以下四种策略:
其中,特别优惠的力度可以借助后续的提升模型进一步优化——例如判断何种折扣水平最能激发响应。而提升模型的核心作用正是帮助我们识别:对于不同用户而言,哪一种干预手段最有可能奏效。
至此,我们已经完成了关键准备工作:定义了流失标准、设定了预测周期,并规划了干预方案。现在,真正的挑战开始了——收集数据,并构建一个因果机器学习模型!
要建立一个高效的提升模型,高质量的数据集不可或缺。理想情况下,该数据集应融合用户静态信息与实验性干预记录。
首先,审视可用的用户数据。科技公司通常拥有丰富的用户行为和属性数据。在本案例中,我们需要获取以下层级的信息:
虽然原始数据本身具有价值,但更关键的是分析这些变量随时间的变化趋势。这有助于发现潜在的行为模式,从而提升模型性能。实现这一点的方法包括:
这些处理方式能够提取出“动态行为信号”,在预测用户响应倾向时极具价值。尽管具体特征工程细节超出本文讨论范围,但上述方法已被广泛验证为处理时间序列用户数据的最佳实践。
我们的最终目标是构建一个随时间演化的全面用户画像。这类动态数据将成为提升模型的重要基石,使我们不仅能预测谁会流失,更能精准判断哪些用户会对特定留存策略产生积极反应。
数据收集的第二阶段涉及与留存行动相关的干预数据。值得注意的是,提升建模并不强制要求随机实验数据。如果你已有历史干预记录——比如过去曾批量发送过促销邮件或发放优惠券——这些数据也可用于建模。然而,数据的新鲜程度和无偏性越强,结果越可靠。
非随机或观察性数据往往带有偏差,需通过额外技术(如倾向得分匹配)进行校正,这部分内容不在本文展开。
那么我们需要什么样的实验数据呢?本质上,我们要了解每项留存策略的实际影响。为此,应设计随机对照实验来测试这些干预措施的效果。关于如何正确设置此类实验,已有大量文献可供参考,此处不再赘述。仅强调一点:实验设计越严谨、样本量越大,训练出的模型效果通常越好。
实验结束后,我们会分析整体结果。虽然这些结果本身不直接用于构建模型,但它们提供了宝贵的基准信息,例如“平均处理效应”(ATE),即干预在整个群体中的平均影响。而在提升建模中,我们的真正目标是估计“条件平均处理效应”(CATE),也称“个体处理效应”(ITE)——也就是针对每个用户的个性化响应预测。
en.wikipedia.org/wiki/Uplift_modelling
在本示例中,我们将利用 Uber 开发的 causalml Python 包生成合成数据集。Uber 在提升建模领域投入了大量研究,并开源了一个功能强大且文档齐全的工具包,极大简化了建模流程。
即使无法开展真实实验,提升建模依然可通过观察性数据提供有价值的洞察。只要数据足够丰富,包含用户特征、行为轨迹及干预反馈,结合适当的去偏技术,仍能有效估计个体层面的干预效果。
如果你对生成合成数据感兴趣,以下是我们实现这一过程的具体方法。
首先,我们通过 Python 的 pandas 库加载必要的数据处理工具,并从 causalml.dataset 模块中导入 make_uplift_classification 函数,用于构建具有因果推断特性的分类数据集。
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
接下来,我们定义多个字典来控制不同干预措施(treatment)对用户留存的影响。这些字典分别描述了每种干预方式下特征的数量和影响强度:
此外,我们设定了基础留存率为 0.7,即在无任何干预情况下,约有70%的用户会自然留存。该参数作为生成数据时的基准水平。
最终,基于上述配置,系统将调用 uplift 数据生成函数,构造出包含多种处理组、协变量及响应结果的结构化数据集,适用于后续的增量响应建模与个性化策略分析。
我们首先生成用于提升模型(uplift modeling)的数据集,使用如下参数配置:
df, feature_names = make_uplift_classification(
n_samples=20000, # 增加样本量以获得更稳健的结果
treatment_name=['email_campaign', 'in_app_notification', 'call_campaign', 'voucher'],
y_name='retention',
n_classification_features=20, # 提升特征数量
n_classification_informative=10,
n_uplift_increase_dict=n_uplift_increase_dict,
n_uplift_decrease_dict=n_uplift_decrease_dict,
delta_uplift_increase_dict=delta_uplift_increase_dict,
delta_uplift_decrease_dict=delta_uplift_decrease_dict,
n_uplift_increase_mix_informative_dict=n_uplift_increase_mix_informative_dict,
n_uplift_decrease_mix_informative_dict=n_uplift_decrease_mix_informative_dict,
positive_class_proportion=positive_class_proportion,
random_seed=42
)
接下来,对处理组(treatment groups)进行数值编码,以便后续建模使用。定义映射关系如下:
encoding_dict = {
'call_campaign': 3,
'email_campaign': 1,
'voucher': 4,
'in_app_notification': 2,
'control': 0
}
基于上述字典,创建一个新的数值型处理组列:
df['treatment_group_numeric'] = df['treatment_group_key'].map(encoding_dict)
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
最终的数据组织形式应如上图所示。在实际应用场景中,这类数据通常会按时间维度进行聚合处理——例如,针对每位用户,在干预发生前汇总其过去每日或每周的行为与属性信息。
为了支持后续两种不同的分析场景,我们需要对原始数据做进一步的整理和划分。具体地,我们将构建两个独立的使用案例,并分别为每个案例准备训练集与测试集:
为此,我们定义一个通用的数据准备函数:
from sklearn.model_selection import train_test_split
def prepare_data(df, feature_names, y_name, test_size=0.3, random_state=42):
"""
准备用于 uplift 建模的数据,包括划分为训练集和测试集,
并生成单处理子集。
"""
# 构建二值化处理标识列
df['treatment_col'] = np.where(df['treatment_group_key'] == 'control', 0, 1)
# 将数据划分为训练集和测试集
df_train, df_test = train_test_split(df, test_size=test_size, random_state=random_state)
# 生成单一处理组的子集(用于 mono-treatment 分析)
# (此处省略具体实现细节,可根据需要补充)
return df_train, df_test, feature_names, y_name
该函数不仅完成了基础的数据分割任务,还引入了处理变量的二值编码逻辑,为后续 uplift 模型的训练打下基础。
首先,从训练集和测试集中筛选出单一处理组的数据,仅保留 'email_campaign' 与 'control' 两类:
df_train_mono = df_train[df_train['treatment_group_key'].isin(['email_campaign', 'control'])]
df_test_mono = df_test[df_test['treatment_group_key'].isin(['email_campaign', 'control'])]
接下来,针对完整数据集,提取特征变量、处理变量以及目标变量:
X_train = df_train[feature_names].values
X_test = df_test[feature_names].values
treatment_train = df_train['treatment_group_key'].values
treatment_test = df_test['treatment_group_key'].values
y_train = df_train[y_name].values
y_test = df_test[y_name].values
随后,对单一处理组的子集执行相同的操作,准备对应的模型输入数据:
X_train_mono = df_train_mono[feature_names].values
X_test_mono = df_test_mono[feature_names].values
treatment_train_mono = df_train_mono['treatment_group_key'].values
treatment_test_mono = df_test_mono['treatment_group_key'].values
y_train_mono = df_train_mono[y_name].values
y_test_mono = df_test_mono[y_name].values
将所有准备好的数据整合为字典形式返回,便于后续调用:
return {
'df_train': df_train, 'df_test': df_test,
'df_train_mono': df_train_mono, 'df_test_mono': df_test_mono,
'X_train': X_train, 'X_test': X_test,
'X_train_mono': X_train_mono, 'X_test_mono': X_test_mono,
'treatment_train': treatment_train, 'treatment_test': treatment_test,
'treatment_train_mono': treatment_train_mono, 'treatment_test_mono': treatment_test_mono,
'y_train': y_train, 'y_test': y_test,
'y_train_mono': y_train_mono, 'y_test_mono': y_test_mono
}
使用示例:调用数据预处理函数获取结果
data = prepare_data(df, feature_names, y_name)
输出测试集的维度信息以验证数据分割的正确性:
print(f"Full test set shape: {data['df_test'].shape}")
print(f"Mono-treatment test set shape: {data['df_test_mono'].shape}")
从返回的数据结构中提取所需变量,供模型训练或评估使用:
df_train, df_test = data['df_train'], data['df_test']
df_train_mono, df_test_mono = data['df_train_mono'], data['df_test_mono']
X_train, y_train = data['X_train'], data['y_train']
X_test, y_test = data['X_test'], data['y_test']
X_train_mono, y_train_mono = data['X_train_mono'], data['y_train_mono']
X_test_mono, y_test_mono = data['X_test_mono'], data['y_test_mono']treatment_train, treatment_test = data['treatment_train'], data['treatment_test']
treatment_train_mono, treatment_test_mono = data['treatment_train_mono'], data['treatment_test_mono']
数据已准备就绪,接下来我们简要回顾一些理论背景,并探讨几种可行的建模策略。
我们已经了解到,提升建模是一种利用机器学习算法来识别干预措施在不同个体间产生差异性影响的方法,这种差异被称为异质性治疗效应。该方法的核心在于估计条件平均治疗效应(CATE),即在给定特征条件下,接受干预与未接受干预的客户在结果上的期望差异。
目前有多种模型可用于CATE的估计,主要包括以下几类:
这是最直观的一种方式。通过采用专门设计的算法——例如经过损失函数优化的提升决策树——直接对提升效果进行建模。这类模型的目标是在一个统一框架内最大化处理组与对照组之间的结果差距。
在本例中,我们将使用提升随机森林分类器作为代表性的直接建模方法。
元学习者借助现有的机器学习模型来间接估计CATE,通常通过组合多个基础模型或在其预测输出上构建第二层模型实现。尽管存在多种变体,本文将重点介绍两种经典形式:S-Learner 和 T-Learner。
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
来源:causalml 文档 — S-Learner 示意图
S-Learner 是所有元学习方法中最简洁的一种。它仅依赖一个标准机器学习模型,将是否接受处理作为一个输入特征纳入训练过程。虽然实现简便,但当处理变量对结果影响较弱时,该方法可能难以准确捕捉其效应。
“T-Learner 通过强制模型根据处理状态进行分组建模,从而避免忽略处理变量的问题。具体而言,我们会分别为每个处理组训练独立的预测模型。”
在二元处理场景下,只需要构建两个模型,因此得名“T-Learner”。
en.wikipedia.org/wiki/Uplift_modelling
来源[3]
这些方法各有特点,适用性取决于数据结构和业务目标。在本文中,我们将实际应用三种模型——提升随机森林分类器、S-Learner 和 T-Learner,并对比它们在提升用户留存率任务中的表现效果。
现在进入模型训练阶段。首先,我们从直接建模方法开始:训练一个提升随机森林分类器;随后,基于XGBoost回归器构建我们的元学习模型。需要注意两点:
整个训练与评估流程包含以下几个关键步骤:
from causalml.inference.meta import BaseSRegressor, BaseTRegressor
from causalml.inference.tree import UpliftRandomForestClassifier
from xgboost import XGBRegressor
# 将结果保存到新的DataFrame中
df_results_mono = df_test_mono.copy()
# 初始化并训练提升随机森林分类器
rfc = UpliftRandomForestClassifier(control_name='control')
rfc.fit(X_train_mono, treatment_train_mono, y_train_mono)
# 初始化并训练S-Learner
learner_s = BaseSRegressor(
learner=XGBRegressor(
n_estimators=100,
max_depth=3,
learning_rate=0.1,
random_state=42
),
control_name='control'
)
# 初始化并训练 S-Learner
learner_s.fit(X_train_mono, treatment_train_mono, y_train_mono)
# 构建并拟合 T-Learner 模型
learner_t = BaseTRegressor(
learner=XGBRegressor(
n_estimators=100,
max_depth=3,
learning_rate=0.1,
random_state=42
),
control_name='control'
)
learner_t.fit(X_train_mono, treatment_train_mono, y_train_mono)
# 预测不同模型下的干预效果
df_results_mono[["mono_S_learner"]] = learner_s.predict(X=X_test_mono)
df_results_mono[["mono_T_learner"]] = learner_t.predict(X=X_test_mono)
df_results_mono["random_forest_learner"] = rfc.predict(X_test_mono)
# 展示各模型预测效果的均值
display(df_results_mono[["mono_S_learner", "mono_T_learner", "random_forest_learner"]].mean())
# 构造用于绘图和评估的数据副本
df_mono_results_plot = df_results_mono[[
"mono_S_learner", "mono_T_learner", "random_forest_learner", "retention", "treatment_col"
]].copy()
请注意,整个流程基于 causalml 库实现,其接口设计简洁直观,与 sklearn 的使用方式高度相似,便于快速上手和集成。
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
# 导入因果评估相关函数
from causalml.metrics import plot_gain
from causalml.metrics import auuc_score
# 计算归一化的 AAUC 分数
aauc_normalized = auuc_score(
df_mono_results_plot,
outcome_col='retention',
treatment_col='treatment_col',
normalize=True,
tmle=False
)
print(f"AAUC Score Normalized: {aauc_normalized}")
# 绘制增益曲线
plot_gain(
df_mono_results_plot,
outcome_col='retention',
treatment_col='treatment_col'
)
plt.title('Gain Curve - T-Learner')
plt.show()
en.wikipedia.org/wiki/Uplift_modelling增益曲线解析
增益曲线帮助我们理解通过使用提升模型或随机策略,能够在目标群体中实现多少“留存用户”的收益。这里的单位是实际的留存人数。
假设我们对所有用户发送电子邮件,预计可以额外保留约100名用户——这就是我们的基准情况。值得注意的是,无论采用哪种策略,当覆盖全部人群时,最终结果都会趋近于这一数值,这与增益的定义一致,属于正常现象。
那么该如何解读这条曲线呢?从图中可以看出,借助我们的模型:
仅触达50%的用户,就能多保留600名用户!
这相当于全面推送效果的六倍。其背后的机制在于:我们精准定位那些最有可能因接触而留下的用户,同时避开那些可能因收到邮件反而选择流失的个体。
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
这里需要做一个简要说明:本例使用的是合成数据,现实场景中几乎不可能达到如此理想的效果,但该示例有助于清晰地展示核心概念。
由此可见,模型让我们实现了资源更少、成效更高的运营目标。这正是提升建模的价值所在——通过聚焦小范围高潜力人群,显著降低执行成本,同时获取可观的留存成果。某种程度上,这也体现了帕累托原则的优势。
接下来,进入更具吸引力的部分:如何为每位客户实现个性化干预。
现在我们将重新开展分析,纳入前述四种用户留存策略:
为了支持这种多策略评估,我们需要进行多重处理实验(multi-treatment experiment),或者整合多个独立实验的数据。数据质量越高,模型预测的准确性就越强。然而,设计并实施这类实验往往耗时且需投入较多资源。
在本次演示中,我们将沿用之前生成的数据集。但必须强调:获取高质量的多重处理实验数据,通常是整个方法中最关键也是最难的环节。
我们继续使用与先前相同的模型架构:随机森林、S-Learner 和 T-Learner。不同的是,当前这些模型的目标是识别并区分四种处理方式各自带来的提升效应。
# 将测试结果保存至DataFrame
df_results_multi = df_test.copy()
# 定义可选操作类型
actions = ['call_campaign', 'email_campaign', 'in_app_notification', 'voucher']
# 初始化并训练Uplift随机森林分类器
rfc = UpliftRandomForestClassifier(
n_estimators=100,
max_depth=5,
min_samples_leaf=50,
min_samples_treatment=10,
n_reg=10,
control_name='control',
random_state=42
)
rfc.fit(X_train, treatment_train, y_train)
# 初始化并训练S-Learner
learner_s = BaseSRegressor(
learner=XGBRegressor(
n_estimators=100,
max_depth=3,
learning_rate=0.1,
random_state=42
),
control_name='control'
)
learner_s.fit(X_train, treatment_train, y_train)
# 初始化并训练T-Learner
learner_t = BaseTRegressor(
learner=XGBRegressor(
n_estimators=100,
max_depth=3,
learning_rate=0.1,
random_state=42
),
control_name='control'
)
learner_t.fit(X_train, treatment_train, y_train)
完成模型训练后,下一步是对每种处理方式进行效果预测。针对每一位用户,模型将输出四种干预手段各自的提升值。基于这些信息,我们可以挑选出最具正向提升作用的策略;若所有处理均无显著正向效果,则决定不进行任何联系。
def predict_multi(df, learner, learner_name, X_test):
"""
预测多种处理下的提升效果,并确定最优干预方式。
"""
# 预测各处理的提升效应
cols = [f'{learner_name}_learner_{action}' for action in actions]
df[cols] = learner.predict(X=X_test)
# 确定最优的处理效应
df[f'{learner_name}_learner_effect'] = df[cols].max(axis=1)
# 确定最优处理方案
df[f"{learner_name}_best_treatment"] = df[cols].idxmax(axis=1)
df.loc[df[f'{learner_name}_learner_effect'] < 0, f"{learner_name}_best_treatment"] = "control"
return df
# 对每个模型应用预测
df_results_multi = predict_multi(df_results_multi, rfc, 'rf', X_test)
df_results_multi = predict_multi(df_results_multi, learner_s, 's', X_test)
df_results_multi = predict_multi(df_results_multi, learner_t, 't', X_test)
towardsdatascience.com/causal-machine-learning-for-customer-retention-a-practical-guide-with-python-6bd959b25741?source=collection_archive---------1-----------------------#2024-08-30
我们通过上述流程可以从每一个模型中获取对应的预测结果。对于每一位用户,系统将能够基于模型输出挑选出最合适的干预策略。
模型性能评估
在多处理场景下,我们的评估方式需要进行相应调整。具体步骤如下:
- 针对每位用户,识别出能带来最大正向影响的处理方式;
- 根据该最佳处理所对应的效果值对所有用户进行排序;
- 回顾真实结果:观察这些用户最终是留存还是流失。
遵循这一逻辑,我们可以清晰地看到,相比于随机分配策略,精准定向一小部分人群即可显著提升整体效果。基于此思路,我们绘制增益曲线并计算标准化与非标准化的AAUC(Area Above the Uplift Curve)指标。整个过程借助 causalML 工具库高效完成。
代码实现如下:
# 计算AAUC得分
aauc_normalized = auuc_score(df_t_learner_plot_multi, outcome_col='retention', treatment_col='treatment_col', normalize=True, tmle=False)
aauc_non_normalize = auuc_score(df_t_learner_plot_multi, outcome_col='retention', treatment_col='treatment_col', normalize=False, tmle=False)
print(f"AAUC Score Normalized: {aauc_normalized}")
print(f"AAUC Score: {aauc_non_normalize}")
# 绘制增益曲线
plot_gain(df_t_learner_plot_multi, outcome_col='retention', treatment_col='treatment_col')
plt.title('Gain Curve - T-Learner')
plt.show()
结果分析
各模型表现如下:
- T-Learner:约 1.45(表现最优)
- S-Learner:约 1.42(紧随其后)
- 随机森林:约 1.20(尚可,但逊色于前两者)
- 随机策略:约 0.52(作为基准)
由此可见:
所有模型均优于随机分配方案,其中T-Learner再次取得最佳成绩。然而,相较于首次实验,各模型之间的差距有所缩小。这种变化可能源于多个因素,例如当前实验覆盖了更广泛的用户群体,而这一点在初始实验中并未体现。此外,这也可能表明现有模型在应对多种处理方式时的能力受限,提示我们需要持续优化建模策略以提升多处理情境下的表现。
为进一步理解模型行为,我们查看增益曲线的表现情况。
en.wikipedia.org/wiki/Uplift_modelling
多重处理增益曲线解读
增益曲线直观展示了不同比例目标人群中实施最优干预后的累积效果提升。曲线越陡峭、越高,说明模型在早期就能准确识别出高响应用户,从而实现更高的资源利用效率。
我们观察到,当对全部目标人群——即30,000名用户——进行覆盖时,预计可额外保留约850名用户。然而,借助我们构建的模型,仅需触达总体用户中的33%,便能成功保留1,600名用户,效果显著提升。
值得注意的是,当触达比例超过目标人群的40%后,所有增长曲线均开始呈现下降趋势,这表明继续联系后续客户所带来的价值极为有限,甚至可能为负。
en.wikipedia.org/wiki/Uplift_modelling
我们的目标已经达成:成功开发出一个能够有效支持个性化留存策略的模型,极大提升了投资回报率(ROI)。基于该模型带来的显著成效,公司决定将其部署至生产环境。此举不仅避免了向全体用户盲目推送所造成的资源浪费,还实现了精准施策,将运营资源集中于最具潜力的客户群体,累计节省成本达数百万元。
causalml.readthedocs.io/en/latest/index.html
当然,将此类模型投入实际应用并非一蹴而就。关键在于确保其在长期运行中的稳定性,并尽可能定期进行再训练以维持性能。为此,推荐采用如下框架:
这部分内容我们未来有机会可以进一步探讨。
matheusfacure.github.io/python-causality-handbook/landing-page.html
感谢你阅读至此!希望本文让你对增益模型(uplift modeling)的构建方法及其评估方式有了更清晰的认识。如果我的阐述足够清晰,你现在应当理解:增益模型是一种强大的因果推断工具,能够带来显著、直接且可量化的业务影响。它使我们有能力为正确的客户匹配最合适的干预手段。但同时也要注意,这类模型高度依赖高质量的实验数据进行训练,而保持数据的新鲜度与可用性往往是项目推进中的主要挑战之一。虽然也可以应用于历史或观测性数据,但必须引入专门的数据清洗和预处理步骤,以消除潜在偏差。
接下来呢?在深入探索因果机器学习的过程中,我希望听到你的声音。如果你有特别感兴趣的主题,认为可以在你所在企业中落地应用,并希望我做更深入的解析,请随时告诉我,我会尽力满足。让我们一起持续学习、共同进步!下次再见,祝你建模顺利!
除非另有说明,所有图片均由作者提供
[1]
[2]
[3]
扫码加好友,拉您进群



收藏
