2024년 3월 7일부터 Google은 Meridian 이라는 새로운 공식 베이지안 MMM 버전을 출시했습니다. Meridian은 현재 일부 광고주에게만 제한적으로 제공됩니다. 자세한 내용은 이 사이트를 방문하거나 Google 담당자에게 문의하세요. Meridian이 일반 공급되면 LMMM 버전은 종료됩니다.
문서 • 소개 • 이론 • 시작하기 • 참고 자료 • 커뮤니티 스포트라이트
MMM(마케팅 믹스 모델링)은 광고주가 광고 효과를 측정하고 미디어 채널 전반에 걸쳐 예산 할당 결정을 알리기 위해 사용됩니다. 집계된 데이터를 기반으로 한 측정을 통해 온라인과 오프라인 채널을 비교할 수 있을 뿐만 아니라 속성 모델링에 영향을 미칠 수 있는 최근 생태계 변화(일부는 개인정보 보호와 관련)의 영향을 받지 않습니다. MMM을 사용하면 다음을 수행할 수 있습니다.
MMM에 베이지안 접근 방식을 사용하면 광고주는 사전 정보를 모델링에 통합하여 다음을 수행할 수 있습니다.
LightweightMMM 패키지(Numpyro 및 JAX를 사용하여 구축됨)는 데이터를 적절하게 확장하고, 모델을 평가하고, 예산 할당을 최적화하고, 현장에서 사용되는 일반 그래프를 구성하는 기능을 제공하여 광고주가 베이지안 MMM 모델을 쉽게 구축하는 데 도움이 됩니다.
MMM은 미디어 채널 활동과 판매 간의 관계를 수량화하는 동시에 다른 요소를 제어합니다. 단순화된 모델 개요가 아래에 나와 있으며 전체 모델은 모델 문서에 설명되어 있습니다. MMM은 일반적으로 주별 수준 관찰을 사용하여 실행되지만(예: KPI는 주별 매출일 수 있음) 일일 수준에서도 실행할 수 있습니다.
여기서 kpi 는 일반적으로 기간별 판매량 또는 판매량입니다.
LightweightMMM은 국가 수준에서 집계된 데이터(표준 접근 방식)를 사용하거나 지역 수준에서 집계된 데이터(국가 하위 계층적 접근 방식)를 사용하여 실행될 수 있습니다.
국가 수준(표준 접근 방식). 이 접근 방식은 사용 가능한 데이터가 국가 수준에서만 집계되는 경우에 적합합니다(예: KPI는 기간별 전국 판매량일 수 있음). 이는 MMM에서 사용되는 가장 일반적인 형식입니다.
지리적 수준(국가 하위 계층적 접근 방식). 이 접근 방식은 데이터를 하위 국가 수준에서 집계할 수 있는 경우에 적합합니다(예: KPI는 국가 내 각 주에 대한 기간별 매출일 수 있음). 이 접근 방식은 모델을 맞추기 위해 더 많은 데이터 포인트를 사용하기 때문에 표준 접근 방식에 비해 더 정확한 결과를 얻을 수 있습니다. 가능하다면 미국과 같은 대규모 국가의 경우 하위 국가 수준 모델을 사용하는 것이 좋습니다.
판매에 대한 미디어 채널의 효과는 시간이 지남에 따라 천천히 감소하는 지연 효과를 가질 수 있습니다. 우리의 강력한 베이지안 MMM 모델 아키텍처는 이러한 효과를 포착하도록 설계되었으며 세 가지 접근 방식을 제공합니다. 사용자는 세 가지 접근 방식을 모두 비교하고 가장 효과적인 접근 방식을 사용하는 것이 좋습니다. 가장 잘 작동하는 접근 방식은 일반적으로 표본 외 적합도(생성된 출력 중 하나)가 가장 좋은 접근 방식입니다. 이 세 가지 접근 방식의 기능적 형태는 아래에 간략하게 설명되어 있으며 모델 문서에 완전히 표현되어 있습니다.
Lightweight_mmm을 설치하는 데 권장되는 방법은 PyPi를 사용하는 것입니다.
pip install --upgrade pip
pip install lightweight_mmm
최신 버전과 약간 덜 안정적인 버전을 사용하려면 github에서 설치할 수 있습니다.
pip install --upgrade git+https://github.com/google/lightweight_mmm.git
Google Colab을 사용하는 경우 설치 후 런타임을 다시 시작해야 합니다.
여기서는 시뮬레이션된 데이터를 사용하지만 이 시점에서는 데이터가 정리되었다고 가정합니다. 필요한 데이터는 다음과 같습니다:
# 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
스케일링은 일종의 예술입니다. 베이지안 기법은 입력 데이터의 규모가 작은 경우에 잘 작동합니다. 변수를 0에 중앙에 두어서는 안 됩니다. 매출과 미디어의 하한은 0이어야 합니다.
y
y / jnp.mean(y)
로 스케일링될 수 있습니다.media
X_m / jnp.mean(X_m, axis=0)
으로 크기 조정될 수 있습니다. 이는 새 열 평균이 1이 됨을 의미합니다. 우리는 더 광범위하게 사용되는 스케일러가 사용 사례에 맞지 않는 경우 곱셈과 나눗셈 스케일링을 적용할 수 있는 CustomScaler
제공합니다. 모델을 피팅하기 전에 그에 따라 데이터의 크기를 조정하세요. 다음은 이 CustomScaler
의 사용 예입니다.
# 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 )
0이 많이 포함된 변수가 있는 경우 0이 아닌 값을 기준으로 크기를 조정할 수도 있습니다. 예를 들어, 람다 함수를 사용하여 이를 수행할 수 있습니다: lambda x: jnp.mean(x[x > 0])
. 비용 확장에도 동일하게 적용됩니다.
모델에는 미디어 데이터, 추가 기능, 채널당 각 미디어 장치 비용 및 대상이 필요합니다. 또한 사용하려는 샘플 수와 체인 수를 전달할 수도 있습니다.
여러 체인을 병렬로 실행하려면 사용자는 numpyro.set_host_device_count
체인 수 또는 사용 가능한 CPU 수로 설정해야 합니다.
아래 예를 참조하세요.
# 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
사용하면 됩니다.
# 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 )
자세한 내용은 custom_priors에 대한 설명서를 참조하세요.
weekday_seasonality=True
및 seasonality_frequency=365
또는 weekday_seasonality=False
및 seasonality_frequency=52
(기본값)를 활성화하여 일별 데이터와 주별 데이터 간에 전환할 수 있습니다. 일별 데이터의 경우에는 이산형 평일과 평탄한 연간이라는 두 가지 유형의 계절성이 있습니다.
사용자는 다음과 같이 매개변수의 수렴 측정항목을 확인할 수 있습니다.
mmm . print_summary ()
경험상 모든 매개변수의 r_hat
값은 1.1보다 작습니다.
사용자는 다음을 통해 실제 KPI와 예측 KPI 간의 적합성을 확인할 수 있습니다.
plot . plot_model_fit ( media_mix_model = mmm , target_scaler = target_scaler )
preprocessing.CustomScaler()
에 사용되는 target_scaler
제공되면 대상의 크기가 조정됩니다. 베이지안 R-제곱 및 MAPE가 차트에 표시됩니다.
사용자는 다음을 통해 테스트 데이터에 대한 예측을 얻을 수 있습니다.
prediction = mmm . predict (
media = media_data_test ,
extra_features = extra_data_test ,
target_scaler = target_scaler
)
반환된 예측은 분포입니다. 점 추정이 필요한 경우 사용자는 주어진 분포를 기반으로 이를 계산할 수 있습니다. 예를 들어 테스트 데이터의 data_size
가 20이고 number_samples
가 1000이고 number_of_chains
가 2인 경우 mmm.predict
20개의 데이터 포인트가 있는 2000개의 예측 세트를 반환합니다. 사용자는 분포를 테스트 데이터의 실제 값과 비교하고 평균 및 중앙값과 같은 지표를 계산할 수 있습니다.
사용자는 다음을 통해 매개변수 추정에 대한 세부정보를 얻을 수 있습니다.
mmm . print_summary ()
위의 내용은 각 매개변수에 대한 평균, 표준편차, 중앙값 및 신뢰할 수 있는 간격을 반환합니다. 분포 차트는 다음에서 제공됩니다.
plot . plot_media_channel_posteriors ( media_mix_model = mmm , channel_names = media_names )
channel_names
각 차트의 미디어 이름을 지정합니다.
응답 곡선은 다음과 같이 제공됩니다.
plot . plot_response_curves ( media_mix_model = mmm , media_scaler = media_scaler , target_scaler = target_scaler )
preprocessing.CustomScaler()
에 사용되는 media_scaler
및 target_scaler
제공되면 미디어 값과 대상 값 모두 크기가 조정되지 않습니다.
미디어 효과 및 ROI 추정을 추출하기 위해 사용자는 다음을 수행할 수 있습니다.
media_effect_hat , roi_hat = mmm . get_posterior_metrics ()
media_effect_hat
은 미디어 효과 추정이고 roi_hat
ROI 추정입니다. 그러면 사용자는 다음과 같이 추정 분포를 시각화할 수 있습니다.
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 )
최적화를 위해 우리는 미디어의 총 비용이 일정하도록 미디어 입력을 변경하여 매출을 극대화할 것입니다. 또한 각 미디어 입력에 대해 합리적인 범위(예: +- x%)를 허용할 수도 있습니다. 우리는 시간 경과에 따른 최적화가 아닌 채널 전반에 걸쳐서만 최적화합니다. 최적화를 실행하려면 다음과 같은 주요 매개변수가 필요합니다.
n_time_periods
: 시뮬레이션하려는 기간 수입니다(예: 주간 데이터로 모델을 훈련한 경우 다음 10주 동안 최적화).n_time_periods
동안 할당하려는 budget
.n_time_periods
에 대한 훈련에 사용되는 추가 기능입니다.media_gap
훈련 데이터의 끝과 주어진 샘플 미디어의 시작 사이의 미디어 데이터 간격을 나타냅니다. 예. 100주간의 데이터가 훈련 및 예측 시작에 사용된 경우 훈련 데이터가 끝난 후 2개월 후에 훈련 데이터와 예측 데이터 사이에 누락된 8주를 제공하여 데이터 변환(광고재고, 이월 등)이 올바르게 발생할 수 있도록 해야 합니다. .아래 및 최적화 예를 참조하세요.
# 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 )
사용자는 다음과 같이 모델을 저장하고 로드할 수 있습니다.
utils . save_model ( mmm , file_path = 'file_path' )
사용자는 file_path
지정하여 모델을 저장할 수 있습니다. 저장된 MMM 모델을 로드하려면:
utils . load_model ( file_path : 'file_path' )
이 저장소를 인용하려면:
@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). 이월 및 형태 효과를 이용한 미디어 혼합 모델링을 위한 베이지안 방법. 구글 주식회사
찬, D., & 페리, M. (2017). 미디어 믹스 모델링의 과제와 기회.
Sun, Y., Wang, Y., Jin, Y., Chan, D., & Koehler, J. (2017). 지리적 수준의 베이지안 계층적 미디어 믹스 모델링.
LMMM은 공식 Google 제품이 아니기 때문에 LMMM 팀은 제한된 지원만 제공할 수 있습니다.
방법론에 대한 질문이 있는 경우 참고 자료 섹션이나 FAQ 페이지를 참조하세요.
LMMM 설치 또는 사용과 관련된 문제는 Github 저장소의 토론 또는 문제 탭에 자유롭게 게시하세요. LMMM 팀은 자유 시간에 이러한 질문에 응답하므로 안타깝게도 시기적절한 응답을 보장할 수 없습니다. 또한 커뮤니티가 여기에서 서로 팁과 조언을 공유하도록 권장합니다!
기능 요청은 Github 저장소의 토론 탭에 게시하세요. 우리는 LMMM 개발을 위한 내부 로드맵을 가지고 있지만 기능 요청에 주의를 기울이고 감사하게 생각합니다!
버그 보고서 는 Github 저장소의 Issues 탭에 게시하세요. 문제를 해결할 수 있게 되면 문제에 대한 의견을 통해 알려드리겠습니다.
끌어오기 요청은 감사하지만 이 저장소의 코드가 Google 내부 시스템에 연결되어 있고 내부 검토를 통과해야 하기 때문에 병합하기가 매우 어렵습니다. 끌어오기 요청을 제출했고 이를 병합하는 데 도움이 되는 리소스가 있는 경우 이에 관해 연락드리겠습니다!
Mario Filho의 LightweightMMM을 사용하여 마케팅 믹스 모델을 만드는 방법
Google LightweightMMM 작동 방식 및 Mike Taylor가 작성한 Google의 LightweightMMM 둘러보기입니다.