Mulai 7 Maret 2024 Google telah merilis versi MMM Bayesian resmi baru yang disebut Meridian . Meridian saat ini tersedia terbatas untuk pengiklan terpilih. Silakan kunjungi situs ini atau hubungi perwakilan Google Anda untuk informasi lebih lanjut. Versi LMMM akan dihentikan setelah Meridian mencapai ketersediaan umum.
Dokumen • Pendahuluan • Teori • Memulai • Referensi • Sorotan Komunitas
Pemodelan Bauran Pemasaran (MMM) digunakan oleh pengiklan untuk mengukur efektivitas periklanan dan menginformasikan keputusan alokasi anggaran di seluruh saluran media. Pengukuran berdasarkan data gabungan memungkinkan perbandingan antara saluran online dan offline, selain tidak terpengaruh oleh perubahan ekosistem terkini (beberapa terkait dengan privasi) yang dapat memengaruhi model atribusi. MMM memungkinkan Anda untuk:
Mengambil pendekatan Bayesian terhadap MMM memungkinkan pengiklan untuk mengintegrasikan informasi sebelumnya ke dalam pemodelan, memungkinkan Anda untuk:
Paket LightweightMMM (dibangun menggunakan Numpyro dan JAX) membantu pengiklan dengan mudah membangun model MMM Bayesian dengan menyediakan fungsionalitas untuk menskalakan data dengan tepat, mengevaluasi model, mengoptimalkan alokasi anggaran, dan membuat grafik umum yang digunakan di lapangan.
MMM mengukur hubungan antara aktivitas saluran media dan penjualan, sekaligus mengendalikan faktor-faktor lainnya. Ikhtisar model yang disederhanakan ditunjukkan di bawah ini dan model lengkapnya ditetapkan dalam dokumentasi model. MMM biasanya dijalankan menggunakan observasi level mingguan (misalnya KPI bisa berupa penjualan per minggu), namun bisa juga dijalankan pada level harian.
Dimana kpi biasanya merupakan volume atau nilai penjualan per periode waktu,
LightweightMMM dapat dijalankan menggunakan data yang dikumpulkan di tingkat nasional (pendekatan standar) atau menggunakan data yang dikumpulkan di tingkat geografis (pendekatan hierarki sub-nasional).
Tingkat nasional (pendekatan standar). Pendekatan ini cocok jika data yang tersedia hanya dikumpulkan pada tingkat nasional (misalnya KPI dapat berupa penjualan nasional per periode waktu). Ini adalah format yang paling umum digunakan dalam MMM.
Tingkat geografis (pendekatan hierarki sub-nasional). Pendekatan ini cocok jika data dapat dikumpulkan pada tingkat sub-nasional (misalnya KPI dapat berupa penjualan per periode waktu untuk setiap negara bagian dalam suatu negara). Pendekatan ini dapat memberikan hasil yang lebih akurat dibandingkan dengan pendekatan standar karena menggunakan lebih banyak titik data agar sesuai dengan model. Kami merekomendasikan penggunaan model tingkat sub-nasional untuk negara-negara besar seperti Amerika Serikat jika memungkinkan.
Kemungkinan besar pengaruh saluran media terhadap penjualan mempunyai efek tertinggal yang perlahan berkurang seiring berjalannya waktu. Arsitektur model MMM Bayesian kami yang kuat dirancang untuk menangkap efek ini dan menawarkan tiga pendekatan berbeda. Kami menyarankan pengguna membandingkan ketiga pendekatan tersebut dan menggunakan pendekatan yang paling berhasil. Pendekatan yang paling berhasil biasanya adalah pendekatan yang memiliki kesesuaian sampel terbaik (yang merupakan salah satu keluaran yang dihasilkan). Bentuk fungsional dari ketiga pendekatan ini dijelaskan secara singkat di bawah ini dan diungkapkan sepenuhnya dalam dokumentasi model kami.
Cara yang disarankan untuk menginstal Lightweight_mmm adalah melalui PyPi:
pip install --upgrade pip
pip install lightweight_mmm
Jika Anda ingin menggunakan versi terbaru dan sedikit kurang stabil, Anda dapat menginstalnya dari github:
pip install --upgrade git+https://github.com/google/lightweight_mmm.git
Jika Anda menggunakan Google Colab, pastikan Anda memulai ulang runtime setelah instalasi.
Di sini kami menggunakan data simulasi tetapi diasumsikan data Anda sudah dibersihkan pada saat ini. Data yang diperlukan adalah:
# Let's assume we have the following datasets with the following shapes (we use
the `simulate_dummy_data` function in utils for this example ):
media_data , extra_features , target , costs = utils . simulate_dummy_data (
data_size = 160 ,
n_media_channels = 3 ,
n_extra_features = 2 ,
geos = 5 ) # Or geos=1 for national model
Penskalaan adalah sebuah seni, teknik Bayesian bekerja dengan baik jika data masukan berskala kecil. Kita tidak boleh memusatkan variabel pada 0. Penjualan dan media harus memiliki batas bawah 0.
y
dapat diskalakan sebagai y / jnp.mean(y)
.media
dapat diskalakan sebagai X_m / jnp.mean(X_m, axis=0)
, yang berarti mean kolom baru adalah 1. Kami menyediakan CustomScaler
yang dapat menerapkan penskalaan perkalian dan pembagian jika scaler yang lebih luas digunakan tidak sesuai dengan kasus penggunaan Anda. Skalakan data Anda sesuai kebutuhan sebelum menyesuaikan model. Di bawah ini adalah contoh penggunaan CustomScaler
ini :
# Simple split of the data based on time.
split_point = data_size - data_size // 10
media_data_train = media_data [: split_point , :]
target_train = target [: split_point ]
extra_features_train = extra_features [: split_point , :]
extra_features_test = extra_features [ split_point :, :]
# Scale data
media_scaler = preprocessing . CustomScaler ( divide_operation = jnp . mean )
extra_features_scaler = preprocessing . CustomScaler ( divide_operation = jnp . mean )
target_scaler = preprocessing . CustomScaler (
divide_operation = jnp . mean )
# scale cost up by N since fit() will divide it by number of time periods
cost_scaler = preprocessing . CustomScaler ( divide_operation = jnp . mean )
media_data_train = media_scaler . fit_transform ( media_data_train )
extra_features_train = extra_features_scaler . fit_transform (
extra_features_train )
target_train = target_scaler . fit_transform ( target_train )
costs = cost_scaler . fit_transform ( unscaled_costs )
Jika Anda memiliki variabel yang memiliki banyak angka 0, Anda juga dapat menskalakannya dengan nilai rata-rata yang bukan nol. Misalnya Anda dapat menggunakan fungsi lambda untuk melakukan ini: lambda x: jnp.mean(x[x > 0])
. Hal yang sama berlaku untuk skala biaya.
Model ini memerlukan data media, fitur tambahan, biaya setiap unit media per saluran, dan target. Anda juga dapat menyampaikan berapa banyak sampel yang ingin Anda gunakan serta jumlah rantainya.
Untuk menjalankan beberapa rantai secara paralel, pengguna perlu menyetel numpyro.set_host_device_count
ke jumlah rantai atau jumlah CPU yang tersedia.
Lihat contoh di bawah ini:
# Fit model.
mmm = lightweight_mmm . LightweightMMM ()
mmm . fit ( media = media_data ,
extra_features = extra_features ,
media_prior = costs ,
target = target ,
number_warmup = 1000 ,
number_samples = 1000 ,
number_chains = 2 )
Jika Anda ingin mengubah model sebelumnya (selain media sebelumnya yang selalu Anda tentukan), Anda dapat melakukannya dengan custom_priors
:
# See detailed explanation on custom priors in our documentation.
custom_priors = { "intercept" : numpyro . distributions . Uniform ( 1 , 5 )}
# Fit model.
mmm = lightweight_mmm . LightweightMMM ()
mmm . fit ( media = media_data ,
extra_features = extra_features ,
media_prior = costs ,
target = target ,
number_warmup = 1000 ,
number_samples = 1000 ,
number_chains = 2 ,
custom_priors = custom_priors )
Silakan merujuk ke dokumentasi kami di custom_priors untuk lebih jelasnya.
Anda dapat beralih antara data harian dan mingguan dengan mengaktifkan weekday_seasonality=True
dan seasonality_frequency=365
atau weekday_seasonality=False
dan seasonality_frequency=52
(default). Dalam hal data harian, kami memiliki dua jenis musiman: hari kerja diskrit dan tahunan lancar.
Pengguna dapat memeriksa metrik konvergensi parameter sebagai berikut:
mmm . print_summary ()
Aturan praktisnya adalah nilai r_hat
untuk semua parameter kurang dari 1,1.
Pengguna dapat memeriksa kesesuaian antara KPI sebenarnya dan KPI prediksi dengan:
plot . plot_model_fit ( media_mix_model = mmm , target_scaler = target_scaler )
Jika target_scaler
yang digunakan untuk preprocessing.CustomScaler()
diberikan, target tidak akan diskalakan. Bayesian R-squared dan MAPE ditunjukkan pada grafik.
Pengguna bisa mendapatkan prediksi untuk data pengujian dengan:
prediction = mmm . predict (
media = media_data_test ,
extra_features = extra_data_test ,
target_scaler = target_scaler
)
Prediksi yang dikembalikan adalah distribusi; jika perkiraan titik diinginkan, pengguna dapat menghitungnya berdasarkan distribusi yang diberikan. Misalnya, jika data_size
dari data pengujian adalah 20, number_samples
adalah 1000 dan number_of_chains
adalah 2, mmm.predict
mengembalikan 2000 set prediksi dengan 20 titik data. Pengguna dapat membandingkan distribusi dengan nilai sebenarnya dari data pengujian dan menghitung metrik seperti mean dan median.
Pengguna bisa mendapatkan detail estimasi parameter dengan:
mmm . print_summary ()
Di atas mengembalikan mean, deviasi standar, median dan interval kredibel untuk setiap parameter. Grafik distribusi disediakan oleh:
plot . plot_media_channel_posteriors ( media_mix_model = mmm , channel_names = media_names )
channel_names
menentukan nama media di setiap bagan.
Kurva respons disediakan sebagai berikut:
plot . plot_response_curves ( media_mix_model = mmm , media_scaler = media_scaler , target_scaler = target_scaler )
Jika media_scaler
dan target_scaler
yang digunakan untuk preprocessing.CustomScaler()
diberikan, nilai media dan target tidak akan diskalakan.
Untuk mengekstrak efektivitas media dan estimasi ROI, pengguna dapat melakukan hal berikut:
media_effect_hat , roi_hat = mmm . get_posterior_metrics ()
media_effect_hat
adalah estimasi efektivitas media dan roi_hat
adalah estimasi ROI. Kemudian pengguna dapat memvisualisasikan sebaran estimasi sebagai berikut:
plot . plot_bars_media_metrics ( metric = media_effect_hat , channel_names = media_names )
plot . plot_bars_media_metrics ( metric = roi_hat , channel_names = media_names )
Untuk optimasi, kami akan memaksimalkan penjualan dengan mengubah input media sehingga jumlah biaya media adalah konstan. Kami juga dapat memberikan batasan yang wajar pada setiap input media (misalnya +- x%). Kami hanya mengoptimalkan seluruh saluran dan tidak seiring waktu. Untuk menjalankan pengoptimalan, diperlukan parameter utama berikut:
n_time_periods
: Jumlah periode waktu yang ingin Anda simulasikan (mis. Optimalkan untuk 10 minggu ke depan jika Anda melatih model pada data mingguan).budget
yang ingin Anda alokasikan untuk n_time_periods
berikutnya.n_time_periods
berikut.media_gap
mengacu pada kesenjangan data media antara akhir data pelatihan dan awal keluarnya media sampel yang diberikan. Misalnya. jika 100 minggu data digunakan untuk pelatihan dan prediksi dimulai 2 bulan setelah data pelatihan selesai, kita perlu menyediakan 8 minggu yang hilang antara data pelatihan dan data prediksi sehingga transformasi data (adstock, carryover, ...) dapat berlangsung dengan benar .Lihat di bawah dan contoh optimasi:
# Run media optimization.
budget = 40 # your budget here
prices = np . array ([ 0.1 , 0.11 , 0.12 ])
extra_features_test = extra_features_scaler . transform ( extra_features_test )
solution = optimize_media . find_optimal_budgets (
n_time_periods = extra_features_test . shape [ 0 ],
media_mix_model = mmm ,
budget = budget ,
extra_features = extra_features_test ,
prices = prices )
Pengguna dapat menyimpan dan memuat model sebagai berikut:
utils . save_model ( mmm , file_path = 'file_path' )
Pengguna dapat menentukan file_path
untuk menyimpan model. Untuk memuat model MMM yang disimpan:
utils . load_model ( file_path : 'file_path' )
Mengutip repositori ini:
@software{lightweight_mmmgithub,
author = {Pablo Duque and Dirk Nachbar and Yuka Abe and Christiane Ahlheim and Mike Anderson and Yan Sun and Omri Goldstein and Tim Eck},
title = {LightweightMMM: Lightweight (Bayesian) Marketing Mix Modeling},
url = {https://github.com/google/lightweight_mmm},
version = {0.1.6},
year = {2022},
}
Jin, Y., Wang, Y., Sun, Y., Chan, D., & Koehler, J. (2017). Metode Bayesian untuk Pemodelan Campuran Media dengan Efek Carryover dan Bentuk. Google Inc.
Chan, D., & Perry, M. (2017). Tantangan dan Peluang dalam Pemodelan Campuran Media.
Sun, Y., Wang, Y., Jin, Y., Chan, D., & Koehler, J. (2017). Pemodelan Campuran Media Hirarki Bayesian Tingkat Geo.
Karena LMMM bukan produk resmi Google, tim LMMM hanya dapat menawarkan dukungan terbatas.
Untuk pertanyaan tentang metodologi , silakan lihat bagian Referensi atau halaman FAQ.
Untuk masalah dalam menginstal atau menggunakan LMMM , jangan ragu untuk mempostingnya di tab Diskusi atau Masalah di repositori Github. Tim LMMM menjawab pertanyaan-pertanyaan ini di waktu luang kami, jadi sayangnya kami tidak dapat menjamin jawaban yang tepat waktu. Kami juga mendorong komunitas untuk berbagi tips dan saran satu sama lain di sini!
Untuk permintaan fitur , silakan kirimkan ke tab Diskusi di repositori Github. Kami memiliki peta jalan internal untuk pengembangan LMMM tetapi tetap memperhatikan permintaan fitur dan menghargainya!
Untuk laporan bug , harap kirimkan ke tab Masalah di repositori Github. Jika/ketika kami dapat mengatasinya, kami akan memberi tahu Anda di komentar pada masalah Anda.
Permintaan tarik dihargai tetapi sangat sulit untuk kami gabungkan karena kode dalam repositori ini ditautkan ke sistem internal Google dan harus melewati tinjauan internal. Jika Anda mengirimkan permintaan penarikan dan kami memiliki sumber daya untuk membantu menggabungkannya, kami akan menghubungi Anda mengenai hal ini!
Cara Membuat Model Bauran Pemasaran Dengan LightweightMMM oleh Mario Filho.
Cara Kerja Google LightweightMMM dan Panduan LightweightMMM Google oleh Mike Taylor.