如何運用 AI 分配有限預算達到效益最大化?
【自動預算分配篇 — Part 1】(附 Python 程式)
請各位讀者注意,系列七開始,筆者接下來會使用較多的統計數學式,若不習慣閱讀統計模型或數學式的讀者,可以直接向下搜尋「一起來找出遞延效應與市場飽和效應!」的小節,並直接用筆者寫好的Python程式碼一起來實作。
讀者可從下述QR code或從下述GitHub repository鏈接中找到topic02_forecast-marketing-roas-and-budget-optimization資料夾,將其複製(clone)下來,一起隨筆者實作程式碼。
1. 遞延效應與市場飽和效應如何結合到多元迴歸模型?
Danaher等學者在2008年於《Journal of Marketing Research》上有發表了一篇< The Effect of Competitive Advertising Interference on Sales for Packaged Goods> (Danaher et al., 2008),內容首次說明「遞延效應」與「市場飽和效應」如何相互結合,並首次探討對銷售(sales)的影響,並得出其對銷售之間是有明顯的效用。筆者善用本文獻之概念並對其改良,將「遞延效應」與「市場飽和效應」,以學者Akiba在2019年提出的機器學習高效修剪策略(efficient pruning strategy)(Akiba et al., 2019)為主的Optuna超參數(hyperparameter)調整方法來自動調整諸如:、、等原須人工決定的超參數,如此筆者便能根據不同個案以模型推導過往學者較難確切從「遞延效應」與「市場飽和效應」中知曉的相關超參數。接續的段落將闡述主要的迴歸模型與需要調整之超參數。
要將遞延效應與市場飽和效應如何結合到多元迴歸模型,會需要先建立本案所需的迴歸式,如方程式3所示。
接著,將遞延效用結合到迴歸式中,如方程式4所示。
其中xt、與問遞延效應的超參數,分別代表時間、移動框格與框格權重
- xt:代表每週不同時間下(t),各行銷通路廣告曝光的費用
- Φ:代表移動框格,在本案為「行銷影響用戶的週數」
- η:代表框格權重的強度或稱遞延效應的強度,介於 0 和 1 之間,在本案為「行銷效果影響用戶的比例」
再來將方程式4與市場飽和效應的方程式5相互結合。
即轉變為方程式6。
其中,x是在多元迴歸模型中使用的自變量,在本案即是三組行銷通路。則是一個超參數,以用來決定B商品之市場飽和度函數的形狀。
如此一來,便完成了多元迴歸模型與遞延效應與市場飽和效應的結合。在下一節,筆者將帶領讀者使用方程式8來實作找出遞延效應與市場飽和效應,並闡述其行銷之管理意涵。
2. 一起來找出遞延效應與市場飽和效應!
本節筆者將實作並找出Jasper本案的遞延效應與市場飽和效應,並闡述其行銷之管理意涵。筆者將遞延效應與市場飽和效應在程式碼8中融合到自創套件的函數「train_marketing_carryover_saturation」中與迴歸模型一同訓練,我們且稱該迴歸模型為「行銷迴歸模型」。請讀者特別注意,在行銷迴歸模型訓練的過程中,同時也會協助找尋遞延效應與市場飽和效應的最佳參數,如:移動框格、框格權重等,故會出現程式碼8產出成果中的「行銷迴歸模型訓練過程真實狀況」並且會持續以極快的速度生成出來,所以並不是電腦壞掉了,只是模型正在訓練中。
訓練完畢後,會印出best_param,就可看到不同行銷通路廣告的超參數已經被決定出來,舉Facebook通路來說,稱遞延效應的強度(carryover_strength;)即為34%,即原廣告效益若無100%,後續則是以34%的效益傳遞並逐步遞減;遞延效應的移動框格(carryover_window;)即為7週;飽和效應中決定市場飽和度函數形狀的參數為0.000107(saturation_exponent;)。其他通路之效應也以此類推。
程式碼 8
# %%
# SECTION - 程式碼8
# 將carryover與saturation融合到迴歸模型,並訓練之
tuned_model, best_param = train_marketing_carryover_saturation(X, y, n_trials=1000)
# 秀出最好的參數組合
print(f”best_param\n: {best_param})
# !SECTION – 程式碼8
產出成果
讀者可以特別注意的是,程式碼8同時也會產出一個程式碼檔案在資料夾中,名為tuned_model.dat,以利後續讀者重開Python IDE編輯器時,不用在重新訓練模型一次,則可以直接以程式碼9直接載入(load)資料夾中的模型,以節省讀者的時間,以利後續操作。
程式碼 9
# %%
# SECTION - 程式碼9
# —– load tuned marketing mix model —– #
tuned_model, best_param = load_tuned_model(tune_model_path=“tuned_model.dat”)
print(f”best_param\n: {best_param}“)
print(f”best_param\n: {tuned_model}“)
產出成果
Jasper回饋:「哈哈,我都聽傻了,也感覺自己都快成半個資料科學家了,也真的很厲害! 不過,我很好奇最後的成果是?」
以下筆者綜整了本主題各系列的連結以及其餘主題的連結,歡迎讀者取用!
系列四:AI 幫您擬定最適行銷預算分配戰略【預測營收篇】(附 Python 程式)系列五:AI 幫您擬定最適行銷預算分配戰略【市場飽和效應篇】
系列八:AI 幫您擬定最適行銷預算分配戰略【自動預算分配篇 — Part 2】(附 Python 程式)
系列九:AI 幫您擬定最適行銷預算分配戰略【自動預算分配篇 — Part 3】(附 Python 程式)
系列十:AI 幫您擬定最適行銷預算分配戰略【後記】
主題總頁:AI行銷學實作篇故事情境介紹 & AI行銷學分析工具應用實戰
References
Köhler, C., Mantrala, M. K., Albers, S., & Kanuri, V. K. (2017). A Meta-Analysis of Marketing Communication Carryover Effects. Journal of Marketing Research, 54(6), 990–1008. https://doi.org/10.1509/jmr.13.0580
作者:鍾皓軒(臺灣行銷研究有限公司 創辦人)、蔡尚宏(臺灣行銷研究 資料科學家)系列六:AI 幫您擬定最適行銷預算分配戰略【遞延效應篇】
更多實戰案例及情境好文推薦
好用的 Function 操作-模組化商務程式的整合者(附Python 程式碼)
好用的 Function 操作- 模組化商務程式的整合者(附Python 程式碼) Python是資料科學家進行分析的重要工具。在學習Pyt
不是行銷專家,一樣能找出自身市場定位(含範例與R程式碼)
不是行銷專家,一樣能找出自身市場定位(含範例與R程式碼) 您還記得STP這個行銷理論嗎?課本總是告訴我們要先對市場進行區隔 (Segment