media_transformation#

Module for applying media transformations to media data.

Examples#

Create a media transformation for online and offline media channels:

from pymc_marketing.mmm import (
    GeometricAdstock,
    HillSaturation,
    MediaTransformation,
    MichaelisMentenSaturation,
)

# Shared media transformation for all offline media channels
offline_media_transform = MediaTransformation(
    adstock=GeometricAdstock(l_max=15),
    saturation=HillSaturation(),
    adstock_first=True,
)
# Shared media transformation for all online media channels
online_media_transform = MediaTransformation(
        adstock=GeometricAdstock(l_max=10),
        saturation=MichaelisMentenSaturation(),
        adstock_first=False,
    ),
)

Create a combined media configuration for offline and online media channels:

from pymc_marketing.mmm import (
    MediaConfig,
    MediaConfigList,
)

media_configs: MediaConfigList([
    MediaConfig(
        name="offline",
        columns=["TV", "Radio"],
        media_transformation=offline_media_transform,
    ),
    MediaConfig(
        name="online",
        columns=["Facebook", "Instagram", "YouTube", "TikTok"],
        media_transformation=online_media_transform,
    ),
])

Apply the media transformation to media data in PyMC model:

import pymc as pm
import pandas as pd

df: pd.DataFrame = ...


media_columns = media_configs.media_values

coords = {
    "date": df["week"],
    "media": media_columns,
}
with pm.Model(coords=coords) as model:
    media_data = pm.Data(
        "media_data",
        df.loc[:, media_columns].to_numpy(),
        dims=("date", "media")
    )
    transformed_media_data = media_configs(media_data)

Classes

MediaConfig(name, columns, media_transformation)

Configuration for a media transformation to certain media channels.

MediaConfigList(media_configs)

Wrapper for a list of media configurations to apply to media data.

MediaTransformation(adstock, saturation, ...)

Wrapper for applying adstock and saturation transformation to media data.