What is Robyn?
Meta Marketing Science 에서 개발된 오픈소스 마케팅 믹스 모델링(MMM) 패키지로, AI/ML 알고리즘에 기반하여 마케팅 최적화 및 의사 결정을 향상시키기 위해 사용됨.
세분화되고 거대한 데이터를 위해 설계되었으며, ai 기반의 자동화를 통해 실시간 마케팅 의사 결정에 효율적으로 대응할 수 있도록 지원.
R 언어로 작성되었으나, Robyn API for python (Nevergrad)도 제공되어 다양한 환경에서 활용 가능.
Note (How to use Robyn API in python)
overall workflow:
[Robyn hosted on R] - [API on R/plumber] - [python]Prerequisites:
RRpackages: Robyn, plumber, …python
Steps:
brew install rRscript -e 'remote::install_github("facebookexperimental/Robyn/R")'Rscript -e 'install.packages(c('arrow', 'dplyr', 'plumber', 'ggplot2', 'jsonlite', 'tibble'))'
# follow steps for install nevergrad in R (https://github.com/facebookexperimental/Robyn/blob/main/demo/install_nevergrad.R)Key Features
- 자동화 및 AI 통합: hyperparameter 최적화를 위해 다목적 진화 알고리즘을 사용하여 주요 프로세스를 자동화.
- time-series decomposition: 장기 마케팅 전략에 필수적인 시계열 데이터의 추세 및 계절성을 처리.
- ridge regression: 복잡한 마케팅 모델에 fitting 하기 위해 regularized regression 을 사용하여 모델 안정성과 해석성을 개선.
- gradient 기반 최적화: ROI 목표에 따라 여러 마케팅 채널에 대한 예산 할당을 자동으로 최적화.
Code Example
using robyn API in python (Nevergrad):
import pyomo.environ as pyoimport nevergrad as ngimport nevergrad.functions.pyomo as ng_pyomo
# define coef.A = ['hammer', 'wrench', 'screwdriver', 'towel']b = {'hammer': 8, 'wrench': 3, 'screwdriver': 6, 'towel': 11}w = {'hammer': 5, 'wrench': 7, 'screwdriver': 4, 'towel': 3}w_max = 14
# define empty modelmodel = pyo.ConcreteModel()
# define decision variablesmodel.x = pyo.Var(A, domain=pyo.Binary)
# define objective functionmodel.obj = pyo.Objective(expr = -sum(b[i] * model.x[i] for i in A))
# define constraintsmodel.constr = pyo.Constraint(expr = sum(w[i] * model.x[i] for i in A) <= w_max)
# define nevergrad function (Pyomo로 만든 수학적인 model을 Nevergrad가 이해할 수 있는 파이썬 함수(func) 형태로 변환)func = ng_pyomo.Pyomo(model)
# define optimizer (문제를 풀 최적화 알고리즘(Optimizer)을 선택하고 설정)optimizer = ng.optimizers.BFGSCMA(parametrization=func.parametrization, budget=100)
# recommendation (실제로 최적화를 실행)recommend = optimizer.minimize(func.function)recommend.kwargs # {'hammer': 1.0, 'wrench': 0.0, 'screwdriver': 1.0, 'towel': 1.0}