Close Menu
    Facebook LinkedIn YouTube WhatsApp X (Twitter) Pinterest
    Trending
    • An interview with LinkedIn CEO Ryan Roslansky on how AI is affecting the jobs market, AI agents, dealing with fake AI-generated accounts, and more (Shirin Ghaffary/Bloomberg)
    • Today’s NYT Connections: Sports Edition Hints, Answers for June 22 #272
    • Affordable adventure e-moto with spare battery option
    • Truth Social Crashes as Trump Live-Posts Iran Bombing
    • Experts say China’s new national internet ID, currently voluntary, to sign in across social media apps and sites could further erode already limited freedoms (John Liu/CNN)
    • Today’s NYT Connections Hints, Answers for June 22, #742
    • New weight loss drug ecnoglutide shows promising results
    • Israel Says Iran Is Hacking Security Cameras for Spying
    Facebook LinkedIn WhatsApp
    Times FeaturedTimes Featured
    Sunday, June 22
    • Home
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    • More
      • AI
      • Robotics
      • Industries
      • Global
    Times FeaturedTimes Featured
    Home»Artificial Intelligence»New-Generation Marketing Mix Modelling with Meridian | by Benjamin Etienne | Feb, 2025
    Artificial Intelligence

    New-Generation Marketing Mix Modelling with Meridian | by Benjamin Etienne | Feb, 2025

    Editor Times FeaturedBy Editor Times FeaturedFebruary 2, 2025No Comments10 Mins Read
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr WhatsApp Email
    Share
    Facebook Twitter LinkedIn Pinterest Telegram Email WhatsApp Copy Link


    Let’s now use the Meridian library with knowledge. Step one is to put in Meridian with both pip or poetry : pip set up google-meridian or poetry add google-meridian

    We’ll then get the information and begin defining columns that are of curiosity to us.

    import pandas as pd

    raw_df = pd.read_csv("https://uncooked.githubusercontent.com/sibylhe/mmm_stan/fundamental/knowledge.csv")

    For the management variables, we are going to use all the holidays variables within the dataset. Our KPI can be gross sales, and the time granularity can be weekly.

    Subsequent, we are going to choose our Media variables. Meridian makes a distinction between media knowledge and media spends:

    • Media knowledge (or “execution”) : Comprises the publicity metric per channel and time span (comparable to impressions per time interval). Media values should not comprise unfavourable values. When publicity metrics should not obtainable, use the identical as in media spend.
    • Media spend : Containing the media spending per channel and time span. The media knowledge and media spend should have the identical dimensions.

    When do you have to use spends vs execution ?

    It’s normally really useful to make use of publicity metrics as direct inputs into the mannequin as they symbolize how media exercise has been consumed by shoppers. Nevertheless, nobody plans a funds utilizing execution knowledge. If you happen to use MMM to optimize funds planning, my recommendation can be to make use of knowledge you management, ie spends.

    Loading the information

    In our use case, we are going to solely use the spends from 5 channels: Newspaper, Radio, TV, Social Media and On-line Show.

    # 1. management variables
    CONTROL_COLS = [col for col in raw_df.columns if 'hldy_' in col]

    # 2. media variables
    spends_mapping = {
    "mdsp_nsp": "Newspaper",
    "mdsp_audtr": "Radio",
    "mdsp_vidtr": "TV",
    "mdsp_so": "Social Media",
    "mdsp_on": "On-line Show",
    }
    MEDIA_COLS = checklist(spends_mapping.keys())

    # 3. gross sales variables
    SALES_COL = "gross sales"

    # 4. Date column
    DATE_COL = "wk_strt_dt"
    data_df = raw_df[[DATE_COL, SALES_COL, *MEDIA_COLS, *CONTROL_COLS]]
    data_df[DATE_COL] = pd.to_datetime(data_df[DATE_COL])

    We’ll then map the columns to their knowledge kind in order that Meridian can perceive them. The CoordToColumns object will assist us try this, and requires necessary info :

    • time : the time column (normally a date, day or week)
    • controls : the management variables
    • kpi : the response we would like the mannequin to foretell. In our case, we are going to give it the worth income since we need to predict gross sales.
    • media : the media execution knowledge (impressions, clicks, and so forth.) or the spends if we now have no execution knowledge. In our case, we are going to put the spends.
    • media_spends : the media spends.

    There a number of different parameters which can be utilized, specifically the geo parameter if we now have a number of teams (geographies for ex.), inhabitants , attain , frequency . Particulars about these are out of this scope however the documentation will be discovered right here.

    We will subsequently create our column mappings :

    from meridian.knowledge import load

    coord_to_columns = load.CoordToColumns(
    time=DATE_COL,
    controls=CONTROL_COLS,
    kpi=SALES_COL,
    media=MEDIA_COLS,
    media_spend=MEDIA_COLS,
    )

    Subsequent, we are going to use our dataframe and the columns mappings to create an information object for use by the mannequin.

    loader = load.DataFrameDataLoader(
    df=data_df,
    kpi_type='income',
    coord_to_columns=coord_to_columns,
    media_to_channel=spends_mapping,
    media_spend_to_channel=spends_mapping
    )
    knowledge = loader.load()

    Exploring the information

    Gross sales

    fig, ax = plt.subplots()
    data_df.set_index("wk_strt_dt")[SALES_COL].plot(shade=COLORS[1], ax=ax)
    ax.set(title="Gross sales", xlabel='date', ylabel="gross sales");
    fig.tight_layout();

    There appears to be a pleasant seasonality with peaks round Christmas. Pattern is total fixed with a degree oscillating between 50 and 150M.

    Media Spends

    fig, ax = plt.subplots(5, figsize=(20,30))

    for axis, channel in zip(ax, spends_columns_raw):
    data_df.set_index("wk_strt_dt")[channel].plot(ax=axis, shade=COLORS[1])
    axis.legend(title="Channel", fontsize=12)
    axis.set(title=spends_mapping[channel], xlabel="Date", ylabel="Spend");
    fig.tight_layout()

    We observe a clearly reducing pattern for newspaper correlated with an rising pattern for Social Media. Spends appear to be additionally rising at or simply earlier than Christmas.

    Specifying the Mannequin

    Constructing the mannequin and selecting the best parameters will be fairly complicated as there are loads of choices obtainable. I’ll share right here my findings however be at liberty to discover by your self.

    The primary half is to decide on the priors for our media spends. We’ll use the PriorDistribution class which permits us to outline a number of variables. You possibly can change the priors of just about any parameter of the mannequin (mu, tau, gamma, beta, and so forth…), however for now we are going to solely give attention to the beta that are the coefficients of our media variables. My suggestion is, in case you are utilizing spends solely, to make use of the beta_m . You possibly can select the roi_m or mroi_m however you will want to adapt the code to make use of a unique prior.

    import tensorflow_probability as tfp
    from meridian import constants
    from meridian.mannequin import prior_distribution

    prior = prior_distribution.PriorDistribution(
    beta_m=tfp.distributions.HalfNormal(
    0.2,
    identify=constants.BETA_M,
    # If you wish to use the ROI imaginative and prescient as a substitute of the coefficients strategy
    # roi_m=tfp.distributions.HalfNormal(
    # 0.2,
    # identify=constants.ROI_M
    )
    )

    When defining the mannequin specs, you’ll then be capable of outline :

    • the priors (cf above).
    • max_len : the utmost variety of lag durations (≥ `0`) to
      embody within the Adstock calculation. I like to recommend selecting between 2 and 6.
    • paid_media_prior_type : for those who select to mannequin the beta_m , then select coefficient . Else, select roi or mroi .
    • knots: Meridian applies automated seasonality adjustment by means of a time-varying intercept strategy, managed by the knots worth. You possibly can set a price of 1 (fixed intercept, no seasonality modelling), or equal to a given quantity that have to be decrease than the size of the information. A low worth may result in a low baseline, a excessive worth may result in overfitting and result in a baseline consuming all the things. I like to recommend to set it to 10% of the variety of knowledge factors

    It is usually attainable to outline a train-test cut up to keep away from overfitting by way of the holdout_id parameter. I received’t cowl it right here, however it’s a finest apply to have this cut up finished for mannequin choice.

    In a nutshell:

    from meridian.mannequin import spec
    from meridian.mannequin import mannequin

    model_spec = spec.ModelSpec(
    prior=prior,
    max_lag=6,
    knots=int(0.1*len(data_df)),
    paid_media_prior_type='coefficient',
    )
    mmm = mannequin.Meridian(input_data=knowledge, model_spec=model_spec)

    Operating the mannequin

    Becoming the mannequin will be sluggish in case you have numerous knowledge factors and variables. I like to recommend to start out with 2 chains, and go away the default variety of samples:

    mmm.sample_prior(500)
    mmm.sample_posterior(n_chains=2, n_adapt=500, n_burnin=500, n_keep=1000)

    Mannequin Diagnostics

    As soon as the mannequin is completed operating, we are going to carry out a sequence of checks to make sure that we are able to use it confidently.

    1. R-hat

    R-hat near 1.0 point out convergence. R-hat < 1.2 signifies approximate convergence and is an inexpensive threshold for a lot of issues.

    An absence of convergence usually has certainly one of two culprits. Both the mannequin could be very poorly misspecified for the information, which will be within the chance (mannequin specification) or within the prior. Or, there may be not sufficient burnin, that means n_adapt + n_burnin isn’t giant sufficient.

    from meridian.evaluation import visualizer

    model_diagnostics = visualizer.ModelDiagnostics(mmm)
    model_diagnostics.plot_rhat_boxplot()

    We see that every one r-hat values are under 1.02, which signifies no divergence or subject throughout coaching.

    2. Mannequin hint

    The mannequin hint comprises the pattern values from the chains. A pleasant hint is when the 2 posterior distributions (as we now have 2 chains) for a given parameter overlap properly. Within the diagram under, you’ll be able to see that blue and black traces on the left-hand facet properly overlap :

    3. Prior vs Posterior distributions

    To know if our mannequin has realized throughout becoming, we are going to evaluate prior vs posterior distribution. In the event that they completely overlap, which means that our mannequin has not shifted its prior distributions and subsequently has most likely not realized something, or that the priors have been misspecified. To ensure our mannequin has realized, we want to see a slight shift in distributions :

    We clearly that that the priors and posteriors don’t overlap. For TV and Social Media for ex, we see that the orange HalfNormal priors have shifted to the blue quasi-Regular distributions.

    4. R2 and Mannequin Match

    Lastly, we are going to use metrics to guage our mannequin match. You most likely learn about metrics like R2, MAPE, and so forth., so let’s take a look at these values:

    model_diagnostics = visualizer.ModelDiagnostics(mmm)
    model_diagnostics.predictive_accuracy_table()
    picture by writer

    Clearly, a R2 of 0.54 isn’t nice in any respect. We may enhance that by both including extra knots within the baseline, or extra knowledge to the mannequin, or play with the priors to attempt to seize extra info.

    Let’s now plot the mannequin:

    model_fit = visualizer.ModelFit(mmm)
    model_fit.plot_model_fit()

    Contributions of media to gross sales

    Keep in mind that one of many targets of MMM is to give you media contributions vs your gross sales. That is what we are going to have a look at with a waterfall diagram :

    media_summary = visualizer.MediaSummary(mmm)
    media_summary.plot_contribution_waterfall_chart()

    What we normally count on is to have a baseline between 60 and 80%. Understand that this worth will be very delicate and depend upon the mannequin specification and parameters. I encourage you to play with totally different knots values and priors and see the impression it could have on the mannequin.

    Spends vs Contributions

    The spend versus contribution chart compares the spend and incremental income or KPI cut up between channels. The inexperienced bar highlights the return on funding (ROI) for every channel.

    media_summary.plot_roi_bar_chart()

    We see that the very best ROI comes from Social Media, adopted by TV. However that is additionally the place the uncertainty interval is the most important. MMM isn’t an actual reply : it offers you values AND uncertainty related to these. My opinion right here is that uncertainty intervals are very giant. Perhaps we must always use extra sampling steps or add extra variables to the mannequin.

    Optimizing our funds

    Keep in mind that one of many targets of the MMM is to suggest an optimum allocation of spends to maximise income. This may be finished first by taking a look at what we name response curves. Response curves describe the connection between advertising and marketing spend and the ensuing incremental income.

    We will see there that :

    1. incremental income will increase because the spend will increase
    2. for some touchpoints like newspaper, development is slower, that means a 2x enhance in spend won’t translate to a 2x incremental income.

    The objective of the optimization can be to take these curves and navigate to seek out the most effective mixture of worth that maximize our gross sales equation. We all know that gross sales = f(media, management, baseline), and we’re looking for the media* values that maximize our operate.

    We will select between a number of optimization issues, for ex:

    • How can I attain the sames gross sales degree with much less funds ?
    • Given the identical funds, what’s the most income I can get ?

    Let’s use Meridian to optimize our funds and maximize gross sales (state of affairs 1). We’ll use the default parameters right here however it’s attainable to fine-tune the constraints on every channel to restrict the search scope.

    from meridian.evaluation import optimizer

    budget_optimizer = optimizer.BudgetOptimizer(mmm)
    optimization_results = budget_optimizer.optimize()

    # Plot the response curves earlier than and after
    optimization_results.plot_response_curves()

    We will see that the optimizer recommends to lower the spends for Newspaper, On-line Show and recommends to extend spends for Radio, Social Media and TV.

    How does it translate by way of income ?

    3% enhance in income simply by rebalancing our funds ! After all this conclusion is a bit hasty. First, replaying the previous is straightforward. You don’t have any assure that your baseline gross sales (60%) would behave the identical subsequent 12 months. Consider Covid. Second, our mannequin doesn’t account for interactions between channels. What we now have used right here is a straightforward extra mannequin, however some approaches use a log-log multiplicative mannequin to account for interactions between variables. Third, there may be uncertainty in our response curves which isn’t dealt with by the optimizer, because it solely takes the typical response curve for every channel. Response curves with uncertainty appear like the image under and optimizing below uncertainty turns into much more complicated :

    Nevertheless, it nonetheless offers you an concept of the place you might be possibly over or under-spending.

    MMM is a posh however highly effective instrument that may uncover insights out of your advertising and marketing knowledge, assist you perceive your advertising and marketing effectivity and help you in funds planning. The brand new strategies counting on Bayesian inference present good characteristic comparable to adstock and saturation modelling, incorporation of geographic-level knowledge, uncertainty ranges and optimization capabilities. Pleased coding.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Editor Times Featured
    • Website

    Related Posts

    The Evolution of AI Voices: From Robotic to Human-Like

    June 21, 2025

    Why Open Source is No Longer Optional — And How to Make it Work for Your Business

    June 21, 2025

    Understanding Application Performance with Roofline Modeling

    June 21, 2025

    Why You Should Not Replace Blanks with 0 in Power BI

    June 20, 2025

    Computer Vision’s Annotation Bottleneck Is Finally Breaking

    June 20, 2025

    What PyTorch Really Means by a Leaf Tensor and Its Grad

    June 20, 2025

    Comments are closed.

    Editors Picks

    An interview with LinkedIn CEO Ryan Roslansky on how AI is affecting the jobs market, AI agents, dealing with fake AI-generated accounts, and more (Shirin Ghaffary/Bloomberg)

    June 22, 2025

    Today’s NYT Connections: Sports Edition Hints, Answers for June 22 #272

    June 22, 2025

    Affordable adventure e-moto with spare battery option

    June 22, 2025

    Truth Social Crashes as Trump Live-Posts Iran Bombing

    June 22, 2025
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    About Us
    About Us

    Welcome to Times Featured, an AI-driven entrepreneurship growth engine that is transforming the future of work, bridging the digital divide and encouraging younger community inclusion in the 4th Industrial Revolution, and nurturing new market leaders.

    Empowering the growth of profiles, leaders, entrepreneurs businesses, and startups on international landscape.

    Asia-Middle East-Europe-North America-Australia-Africa

    Facebook LinkedIn WhatsApp
    Featured Picks

    12 Terrific Sci-Fi Movies You Need on Your Prime Video Watch List

    May 8, 2025

    AI bots strain Wikimedia as bandwidth surges 50%

    April 19, 2025

    China embarks on deep ocean drilling with Meng Xiang

    June 8, 2025
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    Copyright © 2024 Timesfeatured.com IP Limited. All Rights.
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us

    Type above and press Enter to search. Press Esc to cancel.