跳到主要內容
工程的博客

用銷售預測和歸因衡量廣告效果

2020年10月5日 工程的博客

分享這篇文章

你如何將營銷和廣告支出的影響聯係起來推動銷售?隨著廣告領域的不斷發展,廣告商發現,在媒體組合中有效地確定各種創收營銷活動的影響越來越具有挑戰性。

各大品牌每年花費數十億美元在零售市場推廣自己的產品。這種營銷支出是提前3到6個月計劃的,用於推動促銷策略,以提高知名度,產生試驗,並增加品牌產品和服務的消費。這整個模式正在被COVID打亂。消費者的行為正在迅速變化,各大品牌不再有提前幾個月計劃促銷支出的奢侈。品牌需要在幾周或幾天內,甚至接近實時地做出決定。因此,各品牌正將預算轉移到數字廣告和促銷等更靈活的渠道。

對品牌來說,做出這種改變並不容易。數字策略通過傳遞最可能與單個消費者產生共鳴的信息,有望增加個性化。然而,傳統的統計分析和媒體規劃工具是建立在使用聚合數據的較長交貨時間之上的,這使得在細分市場或個人層麵優化消息傳遞變得更加困難。市場營銷或媒體組合建模(MMM)通常用於了解不同營銷策略相對於其他策略的影響,並確定未來計劃的最佳支出水平,但由於整合不同級別聚合的廣泛數據集的挑戰,MMM是一項高度人工、耗時和向後看的練習。

你的平麵廣告和電視廣告代理可能會每兩周發送一份excel電子表格,提供指定市場區域(DMA)級別的印象;數字機構可能會提供CSV文件,顯示郵政編碼級別的點擊和印象;您的銷售數據可能會在市場層麵上收到;搜索和社交媒體都有自己的專有報告,通過api根據各種因素劃分受眾。更複雜的是,隨著品牌轉向數字媒體和更靈活的廣告方法,它們增加了需要快速整合和分析的不同數據集的數量。因此,大多數營銷人員都會進行MMM練習最多一個季度一次(大多數情況下是一年一次),因為合理化和覆蓋這些不同的數據源是一個可能需要幾周或幾個月的過程。

雖然MMM對更廣泛層麵的營銷投資決策很有用,但品牌需要有能力在更精細的層麵上快速做出決策。他們需要整合新的營銷數據,進行分析,並將決策從幾個月或幾周加速到幾天或幾小時。能夠對實時運行的項目做出響應的品牌,將會因為他們的努力而獲得顯著更高的投資回報。

介紹銷售預測和廣告歸因儀表板解決方案加速器

基於我們與領先品牌合作的最佳實踐,我們開發了用於常見分析和機器學習用例的解決方案加速器,為您的數據工程師和數據科學家節省數周或數月的開發時間。

無論您是廣告代理商還是內部營銷分析團隊,這個解決方案加速器都允許您輕鬆插入來自各種曆史和當前來源的銷售、廣告參與度和地理數據,以查看這些數據如何在本地層麵推動銷售。有了這個解決方案,你還可以在沒有cookie/設備ID跟蹤和映射的情況下,在總體趨勢層麵上進行數字營銷,這已經成為一個更大的關注蘋果棄用IDFA

通常情況下,歸因是一個相當昂貴的過程,特別是在沒有正確技術的情況下對不斷更新的數據集運行歸因時。幸運的是,Databricks提供了一個帶有Delta Lake的統一數據分析平台——一個用於管理雲數據湖的開源事務Beplay体育安卓版本層——用於在多雲基礎設施上進行大規模數據工程和數據科學。這篇博客將展示Databricks如何促進Delta Lake的多階段轉換、機器學習和活動數據的可視化,以提供可操作的見解。

與其他廣告歸因工具相比,這個解決方案加速器有三個獨特之處:

  1. 能夠輕鬆地將新數據源集成到模式中:Delta體係結構的優點之一是它可以很容易地將新數據混合到模式中。例如,通過Delta Lake中的自動化數據豐富,您可以輕鬆地集成使用與其他數據相比不同的時間/日期格式的新數據源。這使得您可以輕鬆地將營銷策略覆蓋到您的模型中,輕鬆地集成新數據源。
  2. 實時儀表盤:雖然大多數MMM結果是一個時間點分析,但加速器的自動數據管道很容易共享指示板一旦這些文件生成,業務用戶就可以立即繪製或預測廣告印象到銷售的數據,從而獲得日常級別甚至細分級別的數據可視化。
  3. 與機器學習的集成:通過這個解決方案中的機器學習模型,營銷數據團隊可以構建更細粒度的自上而下或自下而上的視圖,了解哪些廣告在日常甚至個人層麵上與哪些客戶群體產生共鳴。

通過在所有營銷數據上提供結構和模式強製執行,Delta Lake on Databricks可以使其成為BI和AI團隊的中心數據消費來源,有效地使其成為營銷數據湖。

這種解決方案如何擴展和改進傳統的預測和歸因
該解決方案的兩個最大優勢是,通過將可靠的數據攝取和準備、敏捷的數據分析和機器學習工作結合到統一的洞察平台,可以更快地洞察和增加傳統MMM、預測和歸因的粒度。Beplay体育安卓版本

當試圖通過MMM確定活動支出優化時,營銷人員傳統上依賴人工流程來收集長期的媒體購買數據,並觀察可能影響活動的宏觀因素,如促銷活動、競爭對手、品牌資產、季節性或經濟因素。典型的MMM周期可能需要幾周或幾個月,通常在活動啟動很久之後才提供可操作的見解,有時直到活動結束才提供!當傳統的營銷組合模型被建立和驗證時,為了確保最有效的營銷活動而采取有價值的見解和關鍵因素可能為時已晚。

此外,MMM專注於從大局的角度推薦媒體組合策略,隻提供自上而下的洞察力,而不考慮更細粒度的最佳消息傳遞。隨著廣告工作大量轉向數字媒體,傳統的MMM方法無法提供如何有效優化這些用戶級機會的見解。

通過將廣告數據的攝取、處理、分析和數據科學統一到一個平台中,營銷數據團隊可以在自頂向下和自底向上的顆粒級上生成見解。Beplay体育安卓版本這將使營銷人員能夠立即進行日常層麵甚至用戶層麵的深入研究,並幫助廣告商準確地確定在營銷組合中,他們的努力在哪裏產生了最大的影響,這樣他們就可以在正確的時間通過正確的渠道優化正確的信息。簡而言之,營銷人員將從更有效和統一的測量方法中受益匪淺。

解決方案概述

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數據收集階段,在到達分析平台之前,數據豐富服務通常在數據湖之外進行。Beplay体育安卓版本無論采用哪種方法,目標都是相同的:將企業的基本廣告數據(即印象、點擊、轉換、受眾屬性)轉換為更完整的人口統計、地理、心理和/或購買行為。

數據豐富不是一次性的過程。受眾位置、偏好和行為等信息會隨著時間而變化。通過利用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”,0,1),hp.uniform (“伽馬”,0,5),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

相關的帖子

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