跳到主要内容
工程的博客

用销售预测和归因衡量广告效果

2020年10月5日 工程的博客

分享这篇文章

你如何将营销和广告支出的影响联系起来推动销售?随着广告领域的不断发展,广告商发现,在媒体组合中有效地确定各种创收营销活动的影响越来越具有挑战性。

各大品牌每年花费数十亿美元在零售市场推广自己的产品。这种营销支出是提前3到6个月计划的,用于推动促销策略,以提高知名度,产生试验,并增加品牌产品和服务的消费。这整个模式正在被COVID打乱。消费者的行为正在迅速变化,各大品牌不再有提前几个月计划促销支出的奢侈。品牌需要在几周或几天内,甚至接近实时地做出决定。因此,各品牌正将预算转移到数字广告和促销等更灵活的渠道。

对品牌来说,做出这种改变并不容易。数字策略通过传递最可能与单个消费者产生共鸣的信息,有望增加个性化。然而,传统的统计分析和媒体规划工具是建立在使用聚合数据的较长交货时间之上的,这使得在细分市场或个人层面优化消息传递变得更加困难。市场营销或媒体组合建模(MMM)通常用于了解不同营销策略相对于其他策略的影响,并确定未来计划的最佳支出水平,但由于整合不同级别聚合的广泛数据集的挑战,MMM是一项高度人工、耗时和向后看的练习。

你的平面广告和电视广告代理可能会每两周发送一份excel电子表格,提供指定市场区域(DMA)级别的印象;数字机构可能会提供CSV文件,显示邮政编码级别的点击和印象;您的销售数据可能会在市场层面上收到;搜索和社交媒体都有自己的专有报告,通过api根据各种因素划分受众。更复杂的是,随着品牌转向数字媒体和更灵活的广告方法,它们增加了需要快速整合和分析的不同数据集的数量。因此,大多数营销人员都会进行MMM练习最多一个季度一次(大多数情况下是一年一次),因为合理化和覆盖这些不同的数据源是一个可能需要几周或几个月的过程。

虽然MMM对更广泛层面的营销投资决策很有用,但品牌需要有能力在更精细的层面上快速做出决策。他们需要整合新的营销数据,进行分析,并将决策从几个月或几周加速到几天或几小时。能够对实时运行的项目做出响应的品牌,将会因为他们的努力而获得显著更高的投资回报。

介绍销售预测和广告归因仪表板解决方案加速器

基于我们与领先品牌合作的最佳实践,我们开发了用于常见分析和机器学习用例的解决方案加速器,为您的数据工程师和数据科学家节省数周或数月的开发时间。

无论您是广告代理商还是内部营销分析团队,这个解决方案加速器都允许您轻松插入来自各种历史和当前来源的销售、广告参与度和地理数据,以查看这些数据如何在本地层面推动销售。有了这个解决方案,你还可以在没有cookie/设备ID跟踪和映射的情况下,在总体趋势层面上进行数字营销,这已经成为一个更大的关注苹果弃用IDFA

通常情况下,归因是一个相当昂贵的过程,特别是在没有正确技术的情况下对不断更新的数据集运行归因时。幸运的是,Databricks提供了一个带有Delta Lake的统一数据分析平台——一个用于管理云数据湖的开源事务bob体育客户端下载层——用于在多云基础设施上进行大规模数据工程和数据科学。bob下载地址这篇博客将展示Databricks如何促进Delta Lake的多阶段转换、机器学习和活动数据的可视化,以提供可操作的见解。

与其他广告归因工具相比,这个解决方案加速器有三个独特之处:

  1. 能够轻松地将新数据源集成到模式中:Delta体系结构的优点之一是它可以很容易地将新数据混合到模式中。例如,通过Delta Lake中的自动化数据丰富,您可以轻松地集成使用与其他数据相比不同的时间/日期格式的新数据源。这使得您可以轻松地将营销策略覆盖到您的模型中,轻松地集成新数据源。
  2. 实时仪表盘:虽然大多数MMM结果是一个时间点分析,但加速器的自动数据管道很容易共享指示板一旦这些文件生成,业务用户就可以立即绘制或预测广告印象到销售的数据,从而获得日常级别甚至细分级别的数据可视化。
  3. 与机器学习的集成:通过这个解决方案中的机器学习模型,营销数据团队可以构建更细粒度的自上而下或自下而上的视图,了解哪些广告在日常甚至个人层面上与哪些客户群体产生共鸣。

通过在所有营销数据上提供结构和模式强制执行,Delta Lake on Databricks可以使其成为BI和AI团队的中心数据消费来源,有效地使其成为营销数据湖。

这种解决方案如何扩展和改进传统的预测和归因
该解决方案的两个最大优势是,通过将可靠的数据摄取和准备、敏捷的数据分析和机器学习工作结合到统一的洞察平台,可以更快地洞察和增加传统MMM、预测和归因的粒度。bob体育客户端下载

当试图通过MMM确定活动支出优化时,营销人员传统上依赖人工流程来收集长期的媒体购买数据,并观察可能影响活动的宏观因素,如促销活动、竞争对手、品牌资产、季节性或经济因素。典型的MMM周期可能需要几周或几个月,通常在活动启动很久之后才提供可操作的见解,有时直到活动结束才提供!当传统的营销组合模型被建立和验证时,为了确保最有效的营销活动而采取有价值的见解和关键因素可能为时已晚。

此外,MMM专注于从大局的角度推荐媒体组合策略,只提供自上而下的洞察力,而不考虑更细粒度的最佳消息传递。随着广告工作大量转向数字媒体,传统的MMM方法无法提供如何有效优化这些用户级机会的见解。

通过将广告数据的摄取、处理、分析和数据科学统一到一个平台中,营销数据团队可以在自顶向下和自底向上的颗粒级上生成见解。bob体育客户端下载这将使营销人员能够立即进行日常层面甚至用户层面的深入研究,并帮助广告商准确地确定在营销组合中,他们的努力在哪里产生了最大的影响,这样他们就可以在正确的时间通过正确的渠道优化正确的信息。简而言之,营销人员将从更有效和统一的测量方法中受益匪浅。

解决方案概述

Databricks销售预测和广告归因仪表板解决方案加速器的体系结构概述。

在较高的水平上,我们正在将过去30天内的区域销售时间序列与区域线下和在线广告印象联系起来。通过使用ML来比较所有地区的不同测量方法(电视印象或grp、数字横幅点击和社交点赞),我们将用户粘性类型与增量区域销售联系起来,以构建归因和预测模型。我们面临的挑战是如何将来自不同数据源的广告kpi(游戏邦注:例如,一个数据源可能使用日期部分来衡量印象,而另一个数据源则使用确切的时间和日期),如印象、点击和页面浏览量等。位置可能是一个来源的邮政编码,另一个来源的大都市地区)。

例如,我们使用SafeGraph丰富的数据集来计算同一连锁餐厅的客流量数据。虽然我们在本例中使用模拟的线下商店访问,但只要在销售数据中包含地区和日期,您就可以轻松地插入线下和在线销售数据。我们将读取不同地点的店内访问数据,在PySpark和Spark SQL中探索数据,并使数据干净、可靠和分析为ML任务做好准备。在这个例子中,营销团队想要找出哪一个在线媒体渠道是最有效的推动店内访问量的渠道。

主要步骤如下:

  1. 摄入:以SafeGraph格式模拟每月人流量时间序列-这里我们模拟了数据以适应模式(Bronze)
  2. 工程特点:转换为每月时间序列数据,以便我们匹配每个日期的访问次数(行=日期)(银)
  3. 数据浓缩:覆盖区域活动数据到区域销售。对分布检验、变量变换等特征进行探索性分析(Gold)
  4. 高级分析/机器学习:建立预测和归因模型

关于数据:

我们正在使用SafeGraph模式来提取店内访问量。SafeGraph的Places Patterns是一个匿名和汇总的美国3.6MM兴趣点(POI)游客流量和游客人口统计数据的数据集。在本练习中,我们查看了纽约市一组有限服务餐厅店内参观的历史数据(2019年1月至2020年2月)。

1.摄取数据为Delta格式(Bronze)

从笔记本“活动效果_预测客流量_etl”开始。

第一步是从blob存储中加载数据。近年来,越来越多的广告商选择将他们的广告数据吸收到blob存储中。例如,你可以通过FBX Facebook Ads Insights API以编程方式检索数据。您可以查询端点的印象、CTRs和CPC。在大多数情况下,数据将以CSV或XLS格式返回。在我们的示例中,配置非常无缝:我们将S3桶预挂载到dbfs,这样一旦设置了源文件目录,我们就可以直接将原始CSV文件从blob加载到Databricks。

Raw_sim_ft = spark.read。格式“csv”) .option (“头”“真正的”) .option (“9”",") .load (“/ tmp / altdata_poi / foot_traffic.csv”raw_sim_ft.createOrReplaceTempView (“safegraph_sim_foot_traffic”

然后我创建了一个临时视图,它允许我直接使用Spark SQL与这些文件交互。因为在这一点上,白天的店内访问是一个大数组,我们将有一些功能工程工作要做。此时,我已经准备好使用Delta格式编写数据,以创建Delta Lake Bronze表,以捕获指向blob位置的所有原始数据。青铜表是数据湖的第一站,原始数据通过批处理或流源源不断地从各种来源传入,在这里可以以原始格式捕获和存储数据。这一步的数据可能是脏的,因为它来自不同的来源。

raw_sim_ft.write。格式“δ”) .mode (“覆盖”) .save (“/ home /蕾拉/数据/表/ footTrafficBronze '

2.特征工程,使销售时间序列可以绘制(Silver)

在引入原始数据之后,我们现在有一些数据清理和功能工程任务要做。例如,要添加MSA区域并解析月/年。由于我们发现visit_by_date是一个Array,因此需要将数据分解为单独的行。这个函数块将使数组变平。运行后,它将返回visits_by_day df,并将num_visit映射到每一行:

def解析器元素):返回json.loads(元素)defparser_maptype元素):返回json。load (element, MapType(StringType(), IntegerType()))jsonudf = udf(解析器,MapType(StringType(), IntegerType())))Convert_array_to_dict_udf = udf(λArr: {idx: xidx x列举(json.loads(arr))}, MapType(StringType(), IntegerType())))defexplode_json_column_with_labelsDf_parsed, column_to_explosion, key_col=“关键”value_col =“价值”):df_explosive = df_parse .select(“safegraph_place_id”“location_name”“msa”“date_range_start”“年”“月”“date_range_end”爆炸(column_to_explode)) .selectExpr (“safegraph_place_id”“date_range_end”“location_name”“msa”“date_range_start”“年”“月”"key as {0}"格式(key_col),"value as {0}"格式(value_col))返回(df_exploded)

在特性工程之后,数据就可以供下游业务团队使用了。我们可以将数据持久化到Delta Lake Silver表,这样团队中的每个人都可以直接访问数据。在此阶段,数据是干净的,多个下游Gold表将依赖于它。不同的业务团队可能有自己的业务逻辑用于进一步的数据转换。例如,您可以想象这里有一个Silver表“分析功能”,它与几个具有非常不同目的的下游表相结合,如填充洞察仪表板,使用一组指标生成报告,或输入ML算法。

3.广告活动覆盖的数据丰富(Gold - Analytics Ready)

在这一点上,我们准备用在线活动媒体数据来丰富数据集。在传统的MMM数据收集阶段,在到达分析平台之前,数据丰富服务通常在数据湖之外进行。bob体育客户端下载无论采用哪种方法,目标都是相同的:将企业的基本广告数据(即印象、点击、转换、受众属性)转换为更完整的人口统计、地理、心理和/或购买行为。

数据丰富不是一次性的过程。受众位置、偏好和行为等信息会随着时间而变化。通过利用Delta Lake,广告数据和受众资料可以持续更新,以确保数据保持干净、相关和有用。营销人员和数据分析师可以建立更完整的消费者档案,与客户一起发展。在我们的例子中,我们有横幅印象、社交媒体FB点赞和网页登录页面访问量。使用Spark SQL可以很容易地将不同的数据流连接到原始数据框架。为了进一步丰富数据,我们调用谷歌趋势API,拉入谷歌趋势关键词搜索索引来表示有机搜索元素——此数据来自谷歌趋势

def解析器元素):x返回json.loads(元素)defparser_maptype元素):返回json。load (element, MapType(StringType(), IntegerType()))
              jsonudf = udf(解析器,MapType(StringType(), IntegerType())))Convert_array_to_dict_udf = udf(λArr: {idx: xidx x列举(json.loads(arr))}, MapType(StringType(), IntegerType())))defexplode_json_column_with_labelsDf_parsed, column_to_explosion, key_col=“关键”value_col =“价值”):df_explosive = df_parse .select(“safegraph_place_id”“location_name”“msa”“date_range_start”“年”“月”“date_range_end”爆炸(column_to_explode)) .selectExpr (“safegraph_place_id”“date_range_end”“location_name”“msa”“date_range_start”“年”“月”"key as {0}"格式(key_col),"value as {0}"格式(value_col))返回(df_exploded)

使用Databricks营销组合分析解决方案,您可以通过绘制时间序列图来快速生成见解,例如,可视化计数或数值随时间的趋势。

最后,生成一个结合店内num_visit和在线媒体数据的数据集。我们可以通过绘制num_visit时间序列来快速获得见解。例如,您可以使用图表来可视化随着时间变化的计数或数值趋势。在我们的例子中,因为日期和时间信息是一个连续的聚合计数数据,所以点沿着x轴绘制,并由一条连续的线连接。缺失的数据用虚线显示。

时间序列图可以回答有关数据的问题,例如:趋势如何随时间变化?还是我有缺失的值?下图显示了2019年1月至2020年2月期间的店内访问量。店内访问量最高的时期是2019年9月中旬。如果营销活动发生在这几个月,这将意味着活动是有效的,但只是在有限的时间内。

由Databricks营销组合分析解决方案生成的时间序列可视化可以粗略地回答诸如“趋势如何随时间变化?”或“丢失了什么数据?”

我们将这个干净、丰富的数据集写入Delta Lake,并在其上创建一个Gold表。

4.先进的分析和机器学习建立预测和归因模型

传统的MMM采用方差分析和多元回归相结合的方法。在这个解决方案中,我们将在第二个ML笔记本中演示如何使用ML算法XGBoost,它具有模型解释器SHAP的原生优势。即使这个解决方案没有取代传统的MMM进程,传统的MMM统计人员也可以只编写一个节点代码,并使用pandas_udf来运行它。

下一步,使用笔记本“活动效果_预测人流量_”机器学习”。

到目前为止,我们已经使用Databricks来摄取和组合所有原始数据;然后,我们将数据写入Delta Lake以获得更快的查询性能,从而对数据进行清理、转换并增加额外的可靠性

此时,我们应该对数据集感觉很好。现在是时候创建归因模型了。我们将使用精心策划的金表数据来仔细研究纽约市的人流量,以了解这家快餐连锁店的各种广告活动是如何推动店内客流量的。

主要步骤如下:

  1. 创建一种机器学习方法,根据一组在线媒体数据预测店内访问量
  2. 利用SHAP模型解释器分解模型预测,量化某一媒体渠道驱动的客流量

作为数据科学的标准步骤,我们希望了解目标变量商店访问和潜在特征的概率分布,因为它告诉我们数据的所有可能值(或间隔),这意味着总体的潜在特征。我们可以从这张图表中快速识别出,对于所有纽约州的店内访问,有两个峰值,表明多通道分布。这意味着不同部分的人口存在潜在差异,我们应该进一步深入研究。

sql选择选择地区、城市、一年作为整数一年作为整数一天作为整数一天总和(num_visits) num_visitslayla_v2。Subway_foot_traffic在哪里地区“纽约”num_visits> =50集团通过地区、城市、一年作为整数),作为整数),一天作为整数订单通过一年一天, num_visits

Databricks的营销组合分析解决方案使用归因模型来帮助广告商理解概率分布,并回答诸如一个城市的人流量如何或为什么与其他城市不同等问题。

当把纽约市的交通从所有其他城市中分离出来时,分布看起来接近正常——纽约市一定是一个独特的地区!

Databricks的营销组合分析解决方案允许广告商深入到一个数据集,并从纽约市特定的人流量中分离并得出结论。

然后,我们还使用Q-Q图和正态检验检查所有特征的分布。从图表中我们可以看出这些特征看起来是正态分布的。这里有很好的钟形曲线。

Databricks营销组合分析解决方案允许数据科学团队使用Q-Q图和正态性测试检查所有特征的分布。

在Databricks上进行分析的一个巨大优势是,我可以自由地从Spark dataframe切换到pandas,并在笔记本中使用流行的可视化库(如plotly到plot chart)来探索我的数据。下面的图表来自plotly。我们可以放大、缩小和深入查看任何数据点。

绘图图表与缩小面板

正如我们所看到的,在不离开相同的笔记本环境的情况下创建所需的所有统计图非常容易。

现在,我们有信心这些数据适合模型训练。让我们训练一个预测模型。对于算法选项,我们将使用XGBoost.由于数据集不大,因此单节点训练是一种有效的方法。当数据适合内存时,我们建议你在一台机器上训练ML模型,如果训练数据大小适合内存(例如HyperOpt -分布式调整模型的超参数,以便我们可以提高寻找最佳超参数的效率:

hyperopt进口fmin, tpe, rand, hp, Trials, STATUS_OK进口xgboostxgboost进口XGBRegressorsklearn.model_selection进口cross_val_score进口mlflow进口mlflow.xgboostsklearn.model_selection进口train_test_splitPDF = city_pdf.copy()X_train, X_test, y_train, y_test = train_test_split(pdf.drop([“地区”“年”“月”“天”“日期”“num_visits”),轴=1pdf (),“num_visits”), test_size =0.33random_state =55def火车参数个数):”“”一个示例训练方法,计算输入的平方。此方法将被传递给' hyperopt.fmin() '。:param params:超参数。其结构与搜索空间的定义是一致的。见下文。:返回:字段'loss'(标量损失)和'status'(运行成功/失败状态)的dict”“”curr_model = XGBRegressor(learning_rate=params[0),γ=int(params [1]),max_depth =int(params [2]),n_estimators =int(params [3.]),Min_child_weight = params[4)、客观=“注册:squarederror”score = -cross_val_score(curr_model, X_train, y_train, scores =“neg_mean_squared_error”) .mean ()分数= np.array(分数)返回“损失”:分数,“状态”: STATUS_OK,“模型”: curr_model}
              #定义搜索参数,是离散的还是连续的Search_space = [hp.uniform(“learning_rate”01),hp.uniform (“伽马”05),hp.randint (“max_depth”10),hp.randint (“n_estimators”20.),hp.randint (“min_child_weight”10#定义搜索算法(TPE或随机搜索)算法= tpe.suggesthyperopt进口SparkTrialssearch_parallelism =4spark_trials = SparkTrials(并行度=search_parallelism)mlflow.start_run ():Argmin = fmin(fn =火车,空间= search_space,算法=算法,max_evals =8试验= spark_trials)
              deffit_best_modelX, y):客户端= mlflow.tracking.MlflowClient()实验者_id = client. get_实验者_by_name(实验者_name).实验者_id
              Runs = mlflow.search_runs(experiment_id)Best_loss = runs[“metrics.loss”]。最小值()best_run =运行(运行(“metrics.loss”== best_loss]
              Best_params = {}best_params [“伽马”] =浮动(best_run [“params.gamma”])best_params [“learning_rate”] =浮动(best_run [“params.learning_rate”])best_params [“max_depth”] =浮动(best_run [“params.max_depth”])best_params [“min_child_weight”] =浮动(best_run [“params.min_child_weight”])best_params [“n_estimators”] =浮动(best_run [“params.n_estimators”])xgb_regressor = XGBRegressor(learning_rate=best_params[“learning_rate”),max_depth =int(best_params [“max_depth”]),n_estimators =int(best_params [“n_estimators”]),γ=int(best_params [“伽马”]),Min_child_weight = best_params[“min_child_weight”)、客观=“注册:squarederror”Xgb_model = xgb_regressor。fit(X, y, verbose=返回(xgb_model)#使用最佳参数拟合模型并记录模型xgb_model = fit_best_model(X_train, y_train)mlflow.xgboost.log_model (xgb_model“xgboost”#日志模型在这里
              sklearn.metrics进口r2_scoresklearn.metrics进口mean_squared_errortrain_pred = xgb_model.predict(X_train)test_pred = xgb_model.predict(X_test)

使用Databricks的营销组合分析解决方案,可以利用其Runtime AutoML功能(HyperOp)分布式调优模型的超参数,从而提高寻找最佳超参数的效率。

注意,通过指定Spark_trials, HyperOpt会自动在Apache Spark集群中分配调优任务。在HyperOpt找到最佳参数集后,我们只需要对模型进行一次拟合就可以得到最佳模型拟合,这比运行数百次模型拟合迭代和交叉验证来找到最佳模型要高效得多。现在我们可以使用拟合模型来预测纽约市店内流量:

deffit_best_modelX, y):客户端= mlflow.tracking.MlflowClient()实验者_id = client. get_实验者_by_name(实验者_name).实验者_id
              Runs = mlflow.search_runs(experiment_id)Best_loss = runs[“metrics.loss”]。最小值()best_run =运行(运行(“metrics.loss”== best_loss]
              Best_params = {}best_params [“伽马”] =浮动(best_run [“params.gamma”])best_params [“learning_rate”] =浮动(best_run [“params.learning_rate”])best_params [“max_depth”] =浮动(best_run [“params.max_depth”])best_params [“min_child_weight”] =浮动(best_run [“params.min_child_weight”])best_params [“n_estimators”] =浮动(best_run [“params.n_estimators”])xgb_regressor = XGBRegressor(learning_rate=best_params[“learning_rate”),max_depth =int(best_params [“max_depth”]),n_estimators =int(best_params [“n_estimators”]),γ=int(best_params [“伽马”]),Min_child_weight = best_params[“min_child_weight”)、客观=“注册:squarederror”Xgb_model = xgb_regressor。fit(X, y, verbose=返回(xgb_model)#使用最佳参数拟合模型并记录模型xgb_model = fit_best_model(X_train, y_train)mlflow.xgboost.log_model (xgb_model“xgboost”#日志模型在这里sklearn.metrics进口r2_scoresklearn.metrics进口mean_squared_errortrain_pred = xgb_model.predict(X_train)test_pred = xgb_model.predict(X_test)

通过Databricks的营销组合分析解决方案,可以使用HyperOpt在Spark集群中自动分配调优工作,例如,找到预测特定城市流量的最佳模型。

红线是预测,而蓝色是实际访问量——看起来模型捕捉到了主要趋势,尽管它错过了一些峰值。它以后肯定需要一些调整。不过,对于如此快速的努力来说,这还是相当不错的!

一旦我们得到了预测模型,一个自然的问题是如何模型能做出预测吗?每个特征对这个黑盒算法有何贡献?在我们的案例中,问题变成了“每种媒体输入对店内客流量有多少贡献”。

直接使用世鹏科技电子它是一个OSS模型解释器,我们可以快速获得诸如“推动我的线下活动的最重要的媒体渠道是什么?”

我们可以从使用SHAP中获得一些好处。首先,它可以在个体输入的层面上产生解释:与传统的特征重要性算法相比,每个个体观察都有自己的一组SHAP值,传统的特征重要性算法告诉我们在整个种群中哪些特征是最重要的。然而,如果只看全球层面的趋势,这些个体差异可能会消失,只剩下最常见的特征。有了个人层面的SHAP值,我们可以确定哪些因素对每个观察结果影响最大,从而使我们得到的模型更健壮,见解更可操作。因此,在我们的例子中,它将为每天的店内访问计算每个媒体输入的SHAP值。

从shapley值图中,我们可以快速识别出社交媒体和登录页面访问对模型的贡献最大:

世鹏科技电子。总和mary_plot(shap_values, X, plot_type=“酒吧”

使用Databricks的营销组合分析解决方案,可以使用SHAP库快速识别,例如,哪些社交媒体和登录页面访问对模型的贡献最大。

显示器(spark.createDataFrame (排序列表邮政编码(mean_abs_shape, X.columns)), reverse=真正的):8]、[“意思是| |穿刺法”“特性”)))

借助Databricks的营销组合分析解决方案,用户可以使用SHAP库快速获得诸如“推动我的线下活动的最重要的媒体渠道是什么?”

SHAP可以在个人层面上提供媒体组合贡献的粒度洞察。我们可以直接将特征值与输出单位联系起来。在这里,SHAP能够量化一个特性对模型目标单元的影响,即店内访问。在这个图表中,我们尝试预测工资,我们可以以访问为单位阅读特征的影响,这与特征重要性的相对得分相比,极大地改善了对结果的解释。

Plot_html = shap.force_plot(解释器。expected_value shap_values [n: n +1), feature_names = X。列,plot_cmap =“GnPR”displayHTML(bundle_js + plot_html.data)

使用Databricks的营销组合分析解决方案,人们可以使用SHAP库来量化,例如,一个功能对模型目标单元的影响,即店内访问。

最后,我们可以创建每日人流量时间序列的完整分解图,并清楚地了解到店内参观是如何与每个在线媒体输入相关联的。传统上,它需要数据科学家构建分解矩阵,包括混乱的转换和来回的计算。在这里,使用SHAP您可以从盒子中获得价值!

进口plotly.graph_objects作为
              FIG = go。图(data = [走了。栏(name =“base_value”x = shap_values_pdf [“日期”), y = shap_values_pdf [“base_value”), marker_color =“lightblue”),走了。栏(name =“banner_imp”x = shap_values_pdf [“日期”), y = shap_values_pdf [“banner_imp”]),走了。栏(name =“social_media_like”x = shap_values_pdf [“日期”), y = shap_values_pdf [“social_media_like”]),走了。栏(name =“landing_page_visit”x = shap_values_pdf [“日期”), y = shap_values_pdf [“landing_page_visit”]),走了。栏(name =“google_trend”x = shap_values_pdf [“日期”), y = shap_values_pdf [“google_trend”])])#更改栏模式fig.update_layout (barmode =“栈”fig.show ()

绘图图表与缩小面板

我们将提供分析背后的代码供下载和查看。如果您对如何在您的环境中部署此解决方案有任何疑问,请不要犹豫接触给我们。

带上笔记本

免费试用Databricks

相关的帖子

看到所有工程的博客的帖子