PageSourceSearch

https://ejhudson.netlify.app/project/mediamix-project/

html ejhudson.netlify.app collected 2026-10-03 10:41:16 UTC 75,750 bytes, 294 lines download raw bytes

1<!doctype html><html lang=en-us><head><meta charset=utf-8>
2<!-- This site is hosted on Netlify. Anyone can build and deploy a site
3     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=7b9c31a3-2b3a-48d0-990e-a5d1d9ee1773
4     Netlify hosting facts for this site: static/SSR served via Netlify Edge. --><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=generator content="Wowchemy 5.0.0-beta.3 for Hugo"><meta name=author content="Emily J. Hudson"><meta name=description content="I put together this simple demonstration of a media mix modeling strategy in R to document my process teaching myself this technique. I will use a sample dataset “marketing” from the R package datarium."><link rel=alternate hreflang=en-us href=https://ejhudson.netlify.app/project/mediamix-project/><link rel=preconnect href=https://fonts.gstatic.com crossorigin><meta name=theme-color content="#1565c0"><link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css integrity="sha256-FMvZuGapsJLjouA6k7Eo2lusoAX9i0ShlWFG6qt7SLc=" crossorigin=anonymous><link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/styles/github.min.css crossorigin=anonymous title=hl-light media=print onload="this.media='all'"><link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/styles/dracula.min.css crossorigin=anonymous title=hl-dark media=print onload="this.media='all'" disabled><link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.min.css integrity="sha512-1xoFisiGdy9nvho8EgXuXvnpR5GAMSjFwp40gSRE3NwdUdIMIKuPa7bqoUhLD0O/5tPNhteAsE5XyyMi5reQVA==" crossorigin=anonymous media=print onload="this.media='all'"><link rel=preload as=style href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Roboto+Mono&family=Roboto:wght@400;700&display=swap"><link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Roboto+Mono&family=Roboto:wght@400;700&display=swap" media=print onload="this.media='all'"><link rel=stylesheet href=/css/wowchemy.003d2be57501b5669ca58ef75468ece2.css><link rel=manifest href=/index.webmanifest><link rel=icon type=image/png href=/media/icon_hua2ec155b4296a9c9791d015323e16eb5_11927_32x32_fill_lanczos_center_2.png><link rel=apple-touch-icon type=image/png href=/media/icon_hua2ec155b4296a9c9791d015323e16eb5_11927_180x180_fill_lanczos_center_2.png><link rel=canonical href=https://ejhudson.netlify.app/project/mediamix-project/><meta property="twitter:card" content="summary_large_image"><meta property="og:site_name" content="Emily J. Hudson"><meta property="og:url" content="https://ejhudson.netlify.app/project/mediamix-project/"><meta property="og:title" content="Media Mix Modeling Demo | Emily J. Hudson"><meta property="og:description" content="I put together this simple demonstration of a media mix modeling strategy in R to document my process teaching myself this technique. I will use a sample dataset “marketing” from the R package datarium."><meta property="og:image" content="https://ejhudson.netlify.app/project/mediamix-project/featured.jpg"><meta property="twitter:image" content="https://ejhudson.netlify.app/project/mediamix-project/featured.jpg"><meta property="og:locale" content="en-us"><meta property="article:published_time" content="2025-07-16T00:00:00+00:00"><meta property="article:modified_time" content="2025-07-17T22:45:30-05:00">
4<script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://ejhudson.netlify.app/project/mediamix-project/"},"headline":"Media Mix Modeling Demo","image":["https://ejhudson.netlify.app/project/mediamix-project/featured.jpg"],"datePublished":"2025-07-16T00:00:00Z","dateModified":"2025-07-17T22:45:30-05:00","author":{"@type":"Person","name":"Emily J. Hudson"},"publisher":{"@type":"Organization","name":"Emily J. Hudson","logo":{"@type":"ImageObject","url":"https://ejhudson.netlify.app/media/icon_hua2ec155b4296a9c9791d015323e16eb5_11927_192x192_fill_lanczos_center_2.png"}},"description":"I put together this simple demonstration of a media mix modeling strategy in R to document my process teaching myself this technique. I will use a sample dataset “marketing” from the R package datarium."}</script>
4<title>Media Mix Modeling Demo | Emily J. Hudson</title></head><body id=top data-spy=scroll data-offset=70 data-target=#TableOfContents class=page-wrapper data-wc-page-id=df37ee6ff9dd52279a54712268393f82>
4<script src=/js/wowchemy-init.min.eca9bbc7a71accd5ebd9eee0ff004132.js></script>
4<aside class=search-modal id=search><div class=container><section class=search-header><div class="row no-gutters justify-content-between mb-3"><div class=col-6><h1>Search</h1></div><div class="col-6 col-search-close"><a class=js-search href=# aria-label=Close><i class="fas fa-times-circle text-muted" aria-hidden=true></i></a></div></div><div id=search-box><input name=q id=search-query placeholder=Search... autocapitalize=off autocomplete=off autocorrect=off spellcheck=false type=search class=form-control aria-label=Search...></div></section><section class=section-search-results><div id=search-hits></div></section></div></aside><div class=page-header><nav class="navbar navbar-expand-lg navbar-light compensate-for-scrollbar" id=navbar-main><div class=container-xl><div class="d-none d-lg-inline-flex"><a class=navbar-brand href=/>Emily J. Hudson</a></div><button type=button class=navbar-toggler data-toggle=collapse data-target=#navbar-content aria-controls=navbar aria-expanded=false aria-label="Toggle navigation">
5<span><i class="fas fa-bars"></i></span></button><div class="navbar-brand-mobile-wrapper d-inline-flex d-lg-none"><a class=navbar-brand href=/>Emily J. Hudson</a></div><div class="navbar-collapse main-menu-item collapse justify-content-start" id=navbar-content><ul class="navbar-nav d-md-inline-flex"><li class=nav-item><a class=nav-link href=/#about><span>About</span></a></li><li class=nav-item><a class=nav-link href=/#projects><span>Projects</span></a></li><li class=nav-item><a class=nav-link href=/#publications><span>Publications</span></a></li><li class=nav-item><a class=nav-link href=/#tags><span>Topics</span></a></li></ul></div><ul class="nav-icons navbar-nav flex-row ml-auto d-flex pl-md-2"><li class="nav-item d-none d-lg-inline-flex"><a class=nav-link href=/ aria-label><i class="fas fa-" aria-hidden=true></i></a></li><li class=nav-item><a class="nav-link js-search" href=# aria-label=Search><i class="fas fa-search" aria-hidden=true></i></a></li><li class="nav-item dropdown theme-dropdown"><a href=# class=nav-link data-toggle=dropdown aria-haspopup=true aria-label="Display preferences"><i class="fas fa-moon" aria-hidden=true></i></a><div class=dropdown-menu><a href=# class="dropdown-item js-set-theme-light"><span>Light</span></a>
6<a href=# class="dropdown-item js-set-theme-dark"><span>Dark</span></a>
7<a href=# class="dropdown-item js-set-theme-auto"><span>Automatic</span></a></div></li></ul></div></nav></div><div class=page-body><article class="article article-project"><div class="article-container pt-3"><h1>Media Mix Modeling Demo</h1><div class=article-metadata><span class=article-date>Last updated on
8Jul 17, 2025</span></div></div><div class="article-header article-container featured-image-wrapper mt-4 mb-4" style=max-width:720px;max-height:480px><div style=position:relative><img src=/project/mediamix-project/featured_hudc08064bbced2769bbf94744a6c1cd49_85392_720x0_resize_q75_lanczos.jpg alt class=featured-image></div></div><div class=article-container><div class=article-style><link href=https://ejhudson.netlify.app/project/mediamix-project/index_files/htmltools-fill/fill.css rel=stylesheet>
8<script src=https://ejhudson.netlify.app/project/mediamix-project/index_files/htmlwidgets/htmlwidgets.js></script>
8<script src=https://ejhudson.netlify.app/project/mediamix-project/index_files/plotly-binding/plotly.js></script>
8<script src=https://ejhudson.netlify.app/project/mediamix-project/index_files/typedarray/typedarray.min.js></script>
8<script src=https://ejhudson.netlify.app/project/mediamix-project/index_files/jquery/jquery.min.js></script>
8<link href=https://ejhudson.netlify.app/project/mediamix-project/index_files/crosstalk/css/crosstalk.min.css rel=stylesheet>
8<script src=https://ejhudson.netlify.app/project/mediamix-project/index_files/crosstalk/js/crosstalk.min.js></script>
8<link href=https://ejhudson.netlify.app/project/mediamix-project/index_files/plotly-htmlwidgets-css/plotly-htmlwidgets.css rel=stylesheet>
8<script src=https://ejhudson.netlify.app/project/mediamix-project/index_files/plotly-main/plotly-latest.min.js></script>
8<p>I put together this simple demonstration of a media mix modeling strategy in R to document my process teaching myself this technique. I will use a sample dataset “marketing” from the R package <code>datarium</code>. This simulated dataset contains 200 weeks of sales data and marketing spends (in $1k units) for Youtube, Facebook and newspaper channels.</p><p>It is adapted from a tutorial at <a href=https://towardsdatascience.com/building-a-marketing-mix-model-in-r-3a7004d21239/ class=uri>https://towardsdatascience.com/building-a-marketing-mix-model-in-r-3a7004d21239/</a>, extended with additional packages, models and visualization tools (<code>ggplot</code> and <code>plotly</code>).</p><div id=load-data-and-look-at-correlations class="section level2"><h2>Load data and look at correlations</h2><p><img src=https://ejhudson.netlify.app/project/mediamix-project/index_files/figure-html/unnamed-chunk-1-1.png width=672></p><p>At first glance, youtube and facebook ad budgets seem to be correlated with sales; newspaper spend shows less of a clear relationship.</p></div><div id=adstock-adjustment class="section level2"><h2>Adstock adjustment</h2><p>Because advertising may affect a customer’s behavior for an extended period after exposure, we will adjust the spend amounts per week to include additional amounts from the previous two weeks (adstock). The exact decay rates vary depending on the medium and other factors; here I will use rates of 10%, 15% and 25% for facebook, youtube and newspaper, respectively. All will have a “memory” of two weeks.</p><p>The adstocked values are our new predictors (better than raw spend). We are specifying sales as the dependent variable in the lm() function</p><pre class=r><code>mmm_1 &lt;- lm(df_sample$sales ~ ads_youtube + ads_fb + ads_news)
9summary(mmm_1)</code></pre><pre><code>## 
10## Call:
11## lm(formula = df_sample$sales ~ ads_youtube + ads_fb + ads_news)
12## 
13## Residuals:
14##      Min       1Q   Median       3Q      Max 
15## -10.0023  -1.2174   0.3924   1.4328   4.0541 
16## 
17## Coefficients:
18##              Estimate Std. Error t value Pr(&gt;|t|)    
19## (Intercept)  1.947558   0.460560   4.229  3.6e-05 ***
20## ads_youtube  0.045187   0.001479  30.557  &lt; 2e-16 ***
21## ads_fb       0.188177   0.009220  20.410  &lt; 2e-16 ***
22## ads_news    -0.005953   0.006041  -0.985    0.326    
23## ---
24## Signif. codes:  0 &#39;***&#39; 0.001 &#39;**&#39; 0.01 &#39;*&#39; 0.05 &#39;.&#39; 0.1 &#39; &#39; 1
25## 
26## Residual standard error: 2.168 on 196 degrees of freedom
27## Multiple R-squared:  0.8819,	Adjusted R-squared:  0.8801 
28## F-statistic: 487.9 on 3 and 196 DF,  p-value: &lt; 2.2e-16</code></pre><p>There was a small but significant pearson correlation between newspaper and facebook ads in the raw data. Multicolinearity could make it hard to interpret the results, so let’s check for it with a Variance Inflation Factors test:</p><pre class=r><code>imcdiag(mmm_1, method = &quot;VIF&quot;)</code></pre><pre><code>## 
29## Call:
30## imcdiag(mod = mmm_1, method = &quot;VIF&quot;)
31## 
32## 
33##  VIF Multicollinearity Diagnostics
34## 
35##                VIF detection
36## ads_youtube 1.0032         0
37## ads_fb      1.1504         0
38## ads_news    1.1497         0
39## 
40## NOTE:  VIF Method Failed to detect multicollinearity
41## 
42## 
43## 0 --&gt; COLLINEARITY is not detected by the test
44## 
45## ===================================</code></pre><p>Fortunately no multicolinearity is detected. Checking for bias and heteroskedacity:</p><pre class=r><code>par(mfrow = c(2,2))
46plot(mmm_1)</code></pre><p><img src=https://ejhudson.netlify.app/project/mediamix-project/index_files/figure-html/unnamed-chunk-5-1.png width=672></p><p>Based on these residuals vs fitted value plots, the residuals are possibly a little biased, but not heteroskedastic. The Breusch-Pagan test confirms this.</p><pre class=r><code>lmtest::bptest(mmm_1)</code></pre><pre><code>## 
47## 	studentized Breusch-Pagan test
48## 
49## data:  mmm_1
50## BP = 4.1583, df = 3, p-value = 0.2449</code></pre></div><div id=add-time-series-element class="section level2"><h2>Add time series element</h2><p><br>It’s possible that cyclical seasonal effects (or an overall downward or upward trends) will have more influence on sales than marketing channels. To test this, first we need to add a timeseries variable (just 1:52 repeated over the length of the data; we don’t need to map it to real dates for now). We can decompose this timeseries with the <code>decompose</code> function and see the effect of seasons and trend.</p><pre class=r><code>## Add a time series column to investigate trend/seasonality
51ts_sales &lt;- ts(df_sample$sales, start = 1, frequency = 52)
52ts_sales_comp &lt;- decompose(ts_sales)
53plot(ts_sales_comp)</code></pre><p><img src=https://ejhudson.netlify.app/project/mediamix-project/index_files/figure-html/unnamed-chunk-7-1.png width=672></p><p>Are these factors significant? Let’s fit another linear model with trend and season added.</p><pre class=r><code>mmm_2 &lt;
53- tslm(ts_sales ~ trend + season + ads_youtube + ads_fb + ads_news)
54summary(mmm_2)</code></pre><pre><code>## 
55## Call:
56## tslm(formula = ts_sales ~ trend + season + ads_youtube + ads_fb + 
57##     ads_news)
58## 
59## Residuals:
60##     Min      1Q  Median      3Q     Max 
61## -6.8701 -1.0978  0.1012  1.1498  5.5102 
62## 
63## Coefficients:
64##              Estimate Std. Error t value Pr(&gt;|t|)    
65## (Intercept)  4.550710   1.269482   3.585 0.000461 ***
66## trend       -0.001346   0.002698  -0.499 0.618585    
67## season2     -2.439879   1.500236  -1.626 0.106066    
68## season3     -3.837931   1.511244  -2.540 0.012160 *  
69## season4     -0.019777   1.505982  -0.013 0.989540    
70## season5     -2.589598   1.533250  -1.689 0.093391 .  
71## season6     -2.975709   1.500929  -1.983 0.049317 *  
72## season7     -1.828409   1.498110  -1.220 0.224279    
73## season8     -1.737503   1.499661  -1.159 0.248538    
74## season9     -1.735511   1.542630  -1.125 0.262446    
75## season10    -2.379873   1.520560  -1.565 0.119747    
76## season11    -3.564521   1.504577  -2.369 0.019158 *  
77## season12    -2.221964   1.503207  -1.478 0.141552    
78## season13    -2.126054   1.502541  -1.415 0.159235    
79## season14    -1.757011   1.537121  -1.143 0.254913    
80## season15    -1.008243   1.507831  -0.669 0.504776    
81## season16    -0.971702   1.504299  -0.646 0.519340    
82## season17    -1.675260   1.510448  -1.109 0.269230    
83## season18    -1.487987   1.499527  -0.992 0.322714    
84## season19    -3.228179   1.516448  -2.129 0.034975 *  
85## season20    -0.920816   1.496122  -0.615 0.539217    
86## season21    -2.694057   1.496636  -1.800 0.073942 .  
87## season22    -2.724598   1.534971  -1.775 0.078008 .  
88## season23    -4.770156   1.513552  -3.152 0.001976 ** 
89## season24    -2.457553   1.519227  -1.618 0.107930    
90## season25    -0.131696   1.520747  -0.087 0.931110    
91## season26    -2.774732   1.523675  -1.821 0.070671 .  
92## season27    -5.345331   1.525779  -3.503 0.000612 ***
93## season28    -1.525467   1.516993  -1.006 0.316301    
94## season29    -3.807714   1.501743  -2.536 0.012295 *  
95## season30    -1.881424   1.501888  -1.253 0.212343    
96## season31    -2.258311   1.511899  -1.494 0.137444    
97## season32    -2.855228   1.502809  -1.900 0.059442 .  
98## season33    -2.696570   1.502977  -1.794 0.074887 .  
99## season34    -2.413012   1.510219  -1.598 0.112282    
100## season35    -2.534971   1.521820  -1.666 0.097937 .  
101## season36    -2.044690   1.504609  -1.359 0.176287    
102## season37    -0.511780   1.509610  -0.339 0.735092    
103## season38    -1.460185   1.502723  -0.972 0.332833    
104## season39    -1.605796   1.502239  -1.069 0.286887    
105## season40     0.044458   1.530591   0.029 0.976868    
106## season41    -0.503530   1.515917  -0.332 0.740250    
107## season42    -1.542739   1.511224  -1.021 0.309035    
108## season43    -2.440774   1.510239  -1.616 0.108250    
109## season44    -2.802112   1.506946  -1.859 0.065002 .  
110## season45    -4.075788   1.628560  -2.503 0.013443 *  
111## season46    -1.791812   1.624069  -1.103 0.271743    
112## season47    -1.542609   1.628470  -0.947 0.345085    
113## season48    -1.246402   1.616600  -0.771 0.441969    
114## season49    -3.781911   1.643492  -2.301 0.022819 *  
115## season50    -1.074279   1.637860  -0.656 0.512933    
116## season51    -4.164205   1.645888  -2.530 0.012480 *  
117## season52    -3.191509   1.648129  -1.936 0.054772 .  
118## ads_youtube  0.044778   0.001669  26.825  &lt; 2e-16 ***
119## ads_fb       0.185387   0.010483  17.685  &lt; 2e-16 ***
120## ads_news    -0.008845   0.006874  -1.287 0.200297    
121## ---
122## Signif. codes:  0 &#39;***&#39; 0.001 &#39;**&#39; 0.01 &#39;*&#39; 0.05 &#39;.&#39; 0.1 &#39; &#39; 1
123## 
124## Residual standard error: 2.11 on 144 degrees of freedom
125## Multiple R-squared:  0.9178,	Adjusted R-squared:  0.8865 
126## F-statistic: 29.25 on 55 and 144 DF,  p-value: &lt; 2.2e-16</code></pre><p>A couple of weeks are significant in this model, while overall trend is not. However, for predictive purposes, having 50 coefficients in a model with questionable value seems unnecessary and like it could lead to overfitting and inflated standard errors. I want to use a regularization process to select only the important variables for prediction. I will do this using Lasso (least absolute shrinkage and selection operator)</p><pre class=r><code># Best lambda
127best_lambda &lt;
127- cvfit$lambda.min
128print(best_lambda)</code></pre><pre><code>## [1] 2.750911</code></pre><pre class=r><code># Coefficients at best lambda
129coef(cvfit, s = best_lambda)</code></pre><pre><code>## 56 x 1 sparse Matrix of class &quot;dgCMatrix&quot;
130##                     s0
131## (Intercept) 2.07451978
132## ads_youtube 0.04496458
133## ads_fb      0.17632122
134## ads_news    .         
135## week2       .         
136## week3       .         
137## week4       .         
138## week5       .         
139## week6       .         
140## week7       .         
141## week8       .         
142## week9       .         
143## week10      .         
144## week11      .         
145## week12      .         
146## week13      .         
147## week14      .         
148## week15      .         
149## week16      .         
150## week17      .         
151## week18      .         
152## week19      .         
153## week20      .         
154## week21      .         
155## week22      .         
156## week23      .         
157## week24      .         
158## week25      .         
159## week26      .         
160## week27      .         
161## week28      .         
162## week29      .         
163## week30      .         
164## week31      .         
165## week32      .         
166## week33      .         
167## week34      .         
168## week35      .         
169## week36      .         
170## week37      .         
171## week38      .         
172## week39      .         
173## week40      .         
174## week41      .         
175## week42      .         
176## week43      .         
177## week44      .         
178## week45      .         
179## week46      .         
180## week47      .         
181## week48      .         
182## week49      .         
183## week50      .         
184## week51      .         
185## week52      .         
186## trend       .</code></pre><p>This shows us that all of the week dummy variables, as well as newspaper spend and trend, have zero coefficients, meaning they do not add predictive power to the model and can be dropped. Lasso penalizes complexity, removing even weakly significant variables if they don’t aid prediction.</p><pre class=r><code># Get nonzero coefficient names (excluding intercept)
187lasso_coefs &lt;- coef(cvfit, s = &quot;lambda.min&quot;)
188selected_vars &lt;- rownames(lasso_coefs)[which(lasso_coefs != 0)]
189selected_vars &lt;- setdiff(selected_vars, &quot;(Intercept)&quot;)  # exclude intercept
190print(selected_vars)</code></pre><pre><code>## [1] &quot;ads_youtube&quot; &quot;ads_fb&quot;</code></pre><p>Now refit an lm with only the selected variables, Facebook and Youtube spend:</p><pre class=r><code>formula_str &lt;- paste(&quot;sales ~&quot;, paste(selected_vars, collapse = &quot; + &quot;))
191formula_ols &lt;- as.formula(formula_str)
192
193# Use the same model matrix columns from df
194df_lm &lt;- as.data.frame(X[, selected_vars, drop = FALSE])
195df_lm$sales &lt;- y
196
197# Refit OLS
198ols_fit &lt;- lm(formula_ols, data = df_lm)
199summary(ols_fit)</code></pre><pre><code>## 
200## Call:
201## lm(formula = formula_ols, data = df_lm)
202## 
203## Residuals:
204##     Min      1Q  Median      3Q     Max 
205## -9.8037 -1.2752  0.4721  1.4149  4.3137 
206## 
207## Coefficients:
208##             Estimate Std. Error t value Pr(&gt;|t|)    
209## (Intercept) 1.770508   0.424036   4.175 4.46e-05 ***
210## ads_youtube 0.045147   0.001478  30.544  &lt; 2e-16 ***
211## ads_fb      0.184919   0.008606  21.487  &lt; 2e-16 ***
212## ---
213## Signif. codes:  0 &#39;***&#39; 0.001 &#39;**&#39; 0.01 &#39;*&#39; 0.05 &#39;.&#39; 0.1 &#39; &#39; 1
214## 
215## Residual standard error: 2.168 on 197 degrees of freedom
216## Multiple R-squared:  0.8813,	Adjusted R-squared:  0.8801 
217## F-statistic: 731.5 on 2 and 197 DF,  p-value: &lt; 2.2e-16</code></pre></div><div id=future-predictions class="section level2"><h2>Future predictions</h2><p>Because our model doesn’t retain any seasonal or trend components as significant, the only factors predicting sales outcome are youtube and facebook spend. Let’s project revenue in the future, adding some noise to weekly spend so as not to get an unrealistically flat line.</p><pre class=r><code>fb_mean &lt;- mean(df$facebook) 
218fb_sd   &lt;- sd(df$facebook)
219yt_mean &lt;- mean(df$youtube)
220yt_sd   &lt;- sd(df$youtube)
221
222df_scaled &lt;
222- df %&gt;%
223  mutate(
224    fb_spend_scaled = (facebook - fb_mean) / fb_sd,
225    yt_spend_scaled = (youtube - yt_mean) / yt_sd
226  )
227
228X &lt;- model.matrix(sales ~ fb_spend_scaled + yt_spend_scaled, data = df_scaled)[, -1]
229y &lt;- df_scaled$sales
230
231cvfit &lt;- cv.glmnet(X, y, alpha = 1, standardize = FALSE)
232
233# ---  Simulate 100 weeks of time-varying future spend ---
234
235n_future &lt;- 100
236future_weeks &lt;- (nrow(df) + 1):(nrow(df) + n_future)
237
238# Simulate using random draws from normal distributions
239set.seed(123)
240sim_base &lt;- data.frame(
241  week = future_weeks,
242  fb_spend = rnorm(n_future, mean = fb_mean, sd = fb_sd),
243  yt_spend = rnorm(n_future, mean = yt_mean, sd = yt_sd),
244  scenario = &quot;Forecast (Baseline Spend)&quot;
245)
246
247# Reallocation: +50% facebook spend
248sim_realloc &lt;- sim_base
249sim_realloc$fb_spend &lt;- sim_realloc$fb_spend * 1.5
250sim_realloc$scenario &lt;- &quot;Forecast (+50% Facebook)&quot;</code></pre><p>Scale simulated data using historical scaling</p><pre class=r><code>scale_future &lt;- function(data, fb_mean, fb_sd, yt_mean, yt_sd) {
251  data %&gt;%
252    mutate(
253      fb_spend_scaled = (.data$fb_spend - fb_mean) / fb_sd,
254      yt_spend_scaled = (.data$yt_spend - yt_mean) / yt_sd
255    )
256}
257
258sim_base_scaled &lt;- scale_future(data = sim_base, fb_mean, fb_sd, yt_mean, yt_sd)
259sim_realloc_scaled &lt;- scale_future(data = sim_realloc, fb_mean, fb_sd, yt_mean, yt_sd)
260
261X_base &lt;- model.matrix(~ fb_spend_scaled + yt_spend_scaled, data = sim_base_scaled)[, -1]
262X_realloc &lt;- model.matrix(~ fb_spend_scaled + yt_spend_scaled, data = sim_realloc_scaled)[, -1]
263
264# --- Predict sales using Lasso model ---
265
266sim_base$predicted_sales &lt;- predict(cvfit, newx = X_base, s = &quot;lambda.min&quot;)
267sim_realloc$predicted_sales &lt;- predict(cvfit, newx = X_realloc, s = &quot;lambda.min&quot;)
268
269# --- Combine with historical data for plotting ---
270
271df$scenario &lt;- &quot;Actual&quot;
272df$week &lt;- 1:nrow(df)
273df$predicted_sales &lt;- predict(cvfit, newx = X, s = &quot;lambda.min&quot;)
274
275plot_data &lt;- bind_rows(
276  df %&gt;% select(week, predicted_sales, scenario),
277  sim_base %&gt;% select(week, predicted_sales, scenario),
278  sim_realloc %&gt;% select(week, predicted_sales, scenario)
279)</code></pre><div class="plotly html-widget html-fill-item" id=htmlwidget-1 style=width:1056px;height:480px></div>
279<script type=application/json data-for=htmlwidget-1>{"x":{"data":[{"x":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200],"y":[24.61237893857669,14.817615635145945,14.804079509210446,21.105281079770744,15.881112408878304,15.01129107322874,14.073007034807619,14.542190064688342,4.5358153360383442,15.083672122342552,8.502013844215762,20.68450976859501,12.748160017975026,10.618568362547094,22.097038133442965,24.933209609248848,15.485326915906288,27.815106849796109,11.959876102465307,16.983339610499169,21.714219405547357,17.695235248415546,7.8742034686737314,19.83841912016775,9.8158884551531678,18.729116156528072,17.951259620831607,20.437738070176724,23.239268367913951,11.029557851448926,25.914777926294335,13.651564235140983,9.2375121107710907,22.567838767589301,9.1332679120382991,20.380715006527637,27.963290937838355,18.725534352518469,11.922350539829505,24.475385793324662,19.638293371314013,20.729736544497495,25.818754035958609,16.768767604032508,10.716163819905393,18.187501811804832,10.707384203794973,25.975036198474633,19.532289228100836,9.86561721988841,15.195531284516024,11.22429158608398,24.737112791340508,23.898987930317997,24.378273446999458,25.50456628200088,10.281535718267323,15.326007975462591,26.198830719501842,21.696634242374969,6.9641563347933451,27.411543946877156,20.125610818934735,15.824195701346696,20.327394384637049,9.4433145542730692,10.819395759328964,14.443734741381336,22.706525713787194,25.251125735916624,21.309578099784662,12.788834539316042,12.442096269442628,11.93465586956075,20.747784712411498,14.295524722387539,5.4555479892208893,16.549657624635802,10.580523704780905,11.650699379324983,13.739917071647252,17.602512710145554,12.248080060541509,17.285450624766415,24.869660038148552,18.25818323531271,13.913433573371602,18.721749889419648,14.120975855062477,20.283398404938819,12.023130939990308,5.4932158920714658,22.973578582487214,25.456841929592603,12.590723255935005,19.579275948483705,15.164939143684261,18.386823785098642,28.872173419049005,20.30508869573687,16.697536925957021,27.895560042432145,21.14991838852265,17.700438885176432,24.271475581372094,21.503935079504103,7.4220462942520431,8.597895394336712,4.4011112835428223,23.554763114756184,17.755615754519138,25.290268902818031,16.631850655460738,19.645501420401853,18.334902230578635,15.525823112935241,14.393532918758739,7.945612471061283,18.712715752316903,8.2349810818072253,17.304633285912931,9.4774265840655936,16.359802633749123,18.056251504735556,23.349179208149238,10.995995076224016,12.724984409980395,7.9740478062055695,26.583124711448285,9.5342872012084232,12.494058036545606,18.720422790243653,10.140228961640341,23.088199895304548,14.246192818859392,16.747656727239292,13.718908322485841,25.001042632286865,11.737917722598738,23.509973412643763,11.406104592885656,22.088685537976865,23.059291502272909,10.581032746765551,12.158384247053441,11.67946543214185,18.334785821315407,27.833042836932563,14.686553705534473,11.808334571968553,22.027338809807087,12.080210094028169,19.594561965753844,21.828046995950505,18.567482192376325,6.4155223184400647,18.453562527487115,12.063759424088294,12.49041591366155,14.901416217090743,17.061229083094894,16.283362494252682,17.929076165854717,20.753527550594246,13.282225542792098,17.156627522182745,12.985424521403218,16.047410808369069,20.633229543128675,21.485562018577589,8.9208167271618262,17.250987771009832,9.1631425271361273,14.376543047396995,16.496190434044767,29.650070167328437,23.910962542376666,14.631392713997574,19.213879937254227,14.872497770913364,12.725747972957366,16.730758930363614,7.9392843942136295,28.914154933274535,22.21460997436197,24.875525110254596,11.680543834985588,20.447860663268944,22.316621170727029,7.3242725125816799,14.947400731310131,10.133672294751911,5.4526535515079955,22.096982043054194,19.731839791435419,6.5093793499425718,9.8344096809545221,15.338124927736036,28.472110298799329,18.188967022709924],"text":["week:   1<br />predicted_sales: 24.612379<br />scenario: Actual","week:   2<br />predicted_sales: 14.817616<br />scenario: Actual","week:   3<br />predicted_sales: 14.804080<br />scenario: Actual","week:   4<br />predicted_sales: 21.105281<br />scenario: Actual","week:   5<br />predicted_sales: 15.881112<br />scenario: Actual","week:   6<br />predicted_sales: 15.011291<br />scenario: Actual","week:   7<br />predicted_sales: 14.073007<br />scenario: Actual","week:   8<br />predicted_sales: 14.542190<br />scenario: Actual","week:   9<br />predicted_sales:  4.535815<br />scenario: Actual","week:  10<br />predicted_sales: 15.083672<br />scenario: Actual","week:  11<br />predicted_sales:  8.502014<br />scenario: Actual","week:  12<br />predicted_sales: 20.684510<br />scenario: Actual","week:  13<br />predicted_sales: 12.748160<br />scenario: Actual","week:  14<br />predicted_sales: 10.618568<br />scenario: Actual","week:  15<br />predicted_sales: 22.097038<br />scenario: Actual","week:  16<br />predicted_sales: 24.933210<br />scenario: Actual","week:  17<br />predicted_sales: 15.485327<br />scenario: Actual","week:  18<br />predicted_sales: 27.815107<br />scenario: Actual","week:  19<br />predicted_sales: 11.959876<br />scenario: Actual","week:  20<br />predicted_sales: 16.983340<br />scenario: Actual","week:  21<br />predicted_sales: 21.714219<br />scenario: Actual","week:  22<br />predicted_sales: 17.695235<br />scenario: Actual","week:  23<br />predicted_sales:  7.874203<br />scenario: Actual","week:  24<br />predicted_sales: 19.838419<br />scenario: Actual","week:  25<br />predicted_sales:  9.815888<br />scenario: Actual","week:  26<br />predicted_sales: 18.729116<br />scenario: Actual","week:  27<br />predicted_sales: 17.951260<br />scenario: Actual","week:  28<br />predicted_sales: 20.437738<br />scenario: Actual","week:  29<br />predicted_sales: 23.239268<br />scenario: Actual","week:  30<br />predicted_sales: 11.029558<br />scenario: Actual","week:  31<br />predicted_sales: 25.914778<br />scenario: Actual","week:  32<br />predicted_sales: 13.651564<br />scenario: Actual","week:  33<br />predicted_sales:  9.237512<br />scenario: Actual","week:  34<br />predicted_sales: 22.567839<br />scenario: Actual","week:  35<br />predicted_sales:  9.133268<br />scenario: Actual","week:  36<br />predicted_sales: 20.380715<br />scenario: Actual","week:  37<br />predicted_sales: 27.963291<br />scenario: Actual","week:  38<br />predicted_sales: 18.725534<br />scenario: Actual","week:  39<br />predicted_sales: 11.922351<br />scenario: Actual","week:  40<br />predicted_sales: 24.475386<br />scenario: Actual","week:  41<br />predicted_sales: 19.638293<br />scenario: Actual","week:  42<br />predicted_sales: 20.729737<br />scenario: Actual","week:  43<br />predicted_sales: 25.818754<br />scenario: Actual","week:  44<br />predicted_sales: 16.768768<br />scenario: Actual","week:  45<br />predicted_sales: 10.716164<br />scenario: Actual","week:  46<br />predicted_sales: 18.187502<br />scenario: Actual","week:  47<br />predicted_sales: 10.707384<br />scenario: Actual","week:  48<br />predicted_sales: 25.975036<br />scenario: Actual","week:  49<br />predicted_sales: 19.532289<br />scenario: Actual","week:  50<br />predicted_sales:  9.865617<br />scenario: Actual","week:  51<br />predicted_sales: 15.195531<br />scenario: Actual","week:  52<br />predicted_sales: 11.224292<br />scenario: Actual","week:  53<br />predicted_sales: 24.737113<br />scenario: Actual","week:  54<br />predicted_sales: 23.898988<br />scenario: Actual","week:  55<br />predicted_sales: 24.378273<br />scenario: Actual","week:  56<br />predicted_sales: 25.504566<br />scenario: Actual","week:  57<br />predicted_sales: 10.281536<br />scenario: Actual","week:  58<br />predicted_sales: 15.326008<br />scenario: Actual","week:  59<br />predicted_sales: 26.198831<br />scenario: Actual","week:  60<br />predicted_sales: 21.696634<br />scenario: Actual","week:  61<br />predicted_sales:  6.964156<br />scenario: Actual","week:  62<br />predicted_sales: 27.411544<br />scenario: Actual","week:  63<br />predicted_sales: 20.125611<br />scenario: Actual","week:  64<br />predicted_sales: 15.824196<br />scenario: Actual","week:  65<br />predicted_sales: 20.327394<br />scenario: Actual","week:  66<br />predicted_sales:  9.443315<br />scenario: Actual","week:  67<br />predicted_sales: 10.819396<br />scenario: Actual","week:  68<br />predicted_sales: 14.443735<br />scenario: Actual","week:  69<br />predicted_sales: 22.706526<br />scenario: Actual","week:  70<br />predicted_sales: 25.251126<br />scenario: Actual","week:  71<br />predicted_sales: 21.309578<br />scenario: Actual","week:  72<br />predicted_sales: 12.788835<br />scenario: Actual","week:  73<br />predicted_sales: 12.442096<br />scenario: Actual","week:  74<br />predicted_sales: 11.934656<br />scenario: Actual","week:  75<br />predicted_sales: 20.747785<br />scenario: Actual","week:  76<br />predicted_sales: 14.295525<br />scenario: Actual","week:  77<br />predicted_sales:  5.455548<br />scenario: Actual","week:  78<br />predicted_sales: 16.549658<br />scenario: Actual","week:  79<br />predicted_sales: 10.580524<br />scenario: Actual","week:  80<br />predicted_sales: 11.650699<br />scenario: Actual","week:  81<br />predicted_sales: 13.739917<br />scenario: Actual","week:  82<br />predicted_sales: 17.602513<br />scenario: Actual","week:  83<br />predicted_sales: 12.248080<br />scenario: Actual","week:  84<br />predicted_sales: 17.285451<br />scenario: Actual","week:  85<br />predicted_sales: 24.869660<br />scenario: Actual","week:  86<br />predicted_sales: 18.258183<br />scenario: Actual","week:  87<br />predicted_sales: 13.913434<br />scenario: Actual","week:  88<br />predicted_sales: 18.721750<br />scenario: Actual","week:  89<br />predicted_sales: 14.120976<br />scenario: Actual","week:  90<br />predicted_sales: 20.283398<br />scenario: Actual","week:  91<br />predicted_sales: 12.023131<br />scenario: Actual","week:  92<br />predicted_sales:  5.493216<br />scenario: Actual","week:  93<br />predicted_sales: 22.973579<br />scenario: Actual","week:  94<br />predicted_sales: 25.456842<br />scenario: Actual","week:  95<br />predicted_sales: 12.590723<br />scenario: Actual","week:  96<br />predicted_sales: 19.579276<br />scenario: Actual","week:  97<br />predicted_sales: 15.164939<br />scenario: Actual","week:  98<br />predicted_sales: 18.386824<br />scenario: Actual","week:  99<br />predicted_sales: 28.872173<br />scenario: Actual","week: 100<br />predicted_sales: 20.305089<br />scenario: Actual","week: 101<br />predicted_sales: 16.697537<br />scenario: Actual","week: 102<br />predicted_sales: 27.895560<br />scenario: Actual","week: 103<br />predicted_sales: 21.149918<br />scenario: Actual","week: 104<br />predicted_sales: 17.700439<br />scenario: Actual","week: 105<br />predicted_sales: 24.271476<br />scenario: Actual","week: 106<br />predicted_sales: 21.503935<br />scenario: Actual","week: 107<br />predicted_sales:  7.422046<br />scenario: Actual","week: 108<br />predicted_sales:  8.597895<br />scenario: Actual","week: 109<br />predicted_sales:  4.401111<br />scenario: Actual","week: 110<br />predicted_sales: 23.554763<br />scenario: Actual","week: 111<br />predicted_sales: 17.755616<br />scenario: Actual","week: 112<br />predicted_sales: 25.290269<br />scenario: Actual","week: 113<br />predicted_sales: 16.631851<br />scenario: Actual","week: 114<br />predicted_sales: 19.645501<br />scenario: Actual","week: 115<br />predicted_sales: 18.334902<br />scenario: Actual","week: 116<br />predicted_sales: 15.525823<br />scenario: Actual","week: 117<br />predicted_sales: 14.393533<br />scenario: Actual","week: 118<br />predicted_sales:  7.945612<br />scenario: Actual","week: 119<br />predicted_sales: 18.712716<br />scenario: Actual","week: 120<br />predicted_sales:  8.234981<br />scenario: Actual","week: 121<br />predicted_sales: 17.304633<br />scenario: Actual","week: 122<br />predicted_sales:  9.477427<br />scenario: Actual","week: 123<br />predicted_sales: 16.359803<br />scenario: Actual","week: 124<br />predicted_sales: 18.056252<br />scenario: Actual","week: 125<br />predicted_sales: 23.349179<br />
279scenario: Actual","week: 126<br />predicted_sales: 10.995995<br />scenario: Actual","week: 127<br />predicted_sales: 12.724984<br />scenario: Actual","week: 128<br />predicted_sales:  7.974048<br />scenario: Actual","week: 129<br />predicted_sales: 26.583125<br />scenario: Actual","week: 130<br />predicted_sales:  9.534287<br />scenario: Actual","week: 131<br />predicted_sales: 12.494058<br />scenario: Actual","week: 132<br />predicted_sales: 18.720423<br />scenario: Actual","week: 133<br />predicted_sales: 10.140229<br />scenario: Actual","week: 134<br />predicted_sales: 23.088200<br />scenario: Actual","week: 135<br />predicted_sales: 14.246193<br />scenario: Actual","week: 136<br />predicted_sales: 16.747657<br />scenario: Actual","week: 137<br />predicted_sales: 13.718908<br />scenario: Actual","week: 138<br />predicted_sales: 25.001043<br />scenario: Actual","week: 139<br />predicted_sales: 11.737918<br />scenario: Actual","week: 140<br />predicted_sales: 23.509973<br />scenario: Actual","week: 141<br />predicted_sales: 11.406105<br />scenario: Actual","week: 142<br />predicted_sales: 22.088686<br />scenario: Actual","week: 143<br />predicted_sales: 23.059292<br />scenario: Actual","week: 144<br />predicted_sales: 10.581033<br />scenario: Actual","week: 145<br />predicted_sales: 12.158384<br />scenario: Actual","week: 146<br />predicted_sales: 11.679465<br />scenario: Actual","week: 147<br />predicted_sales: 18.334786<br />scenario: Actual","week: 148<br />predicted_sales: 27.833043<br />scenario: Actual","week: 149<br />predicted_sales: 14.686554<br />scenario: Actual","week: 150<br />predicted_sales: 11.808335<br />scenario: Actual","week: 151<br />predicted_sales: 22.027339<br />scenario: Actual","week: 152<br />predicted_sales: 12.080210<br />scenario: Actual","week: 153<br />predicted_sales: 19.594562<br />scenario: Actual","week: 154<br />predicted_sales: 21.828047<br />scenario: Actual","week: 155<br />predicted_sales: 18.567482<br />scenario: Actual","week: 156<br />predicted_sales:  6.415522<br />scenario: Actual","week: 157<br />predicted_sales: 18.453563<br />scenario: Actual","week: 158<br />predicted_sales: 12.063759<br />scenario: Actual","week: 159<br />predicted_sales: 12.490416<br />scenario: Actual","week: 160<br />predicted_sales: 14.901416<br />scenario: Actual","week: 161<br />predicted_sales: 17.061229<br />scenario: Actual","week: 162<br />predicted_sales: 16.283362<br />scenario: Actual","week: 163<br />predicted_sales: 17.929076<br />scenario: Actual","week: 164<br />predicted_sales: 20.753528<br />scenario: Actual","week: 165<br />predicted_sales: 13.282226<br />scenario: Actual","week: 166<br />predicted_sales: 17.156628<br />scenario: Actual","week: 167<br />predicted_sales: 12.985425<br />scenario: Actual","week: 168<br />predicted_sales: 16.047411<br />scenario: Actual","week: 169<br />predicted_sales: 20.633230<br />scenario: Actual","week: 170<br />predicted_sales: 21.485562<br />scenario: Actual","week: 171<br />predicted_sales:  8.920817<br />scenario: Actual","week: 172<br />predicted_sales: 17.250988<br />scenario: Actual","week: 173<br />predicted_sales:  9.163143<br />scenario: Actual","week: 174<br />predicted_sales: 14.376543<br />scenario: Actual","week: 175<br />predicted_sales: 16.496190<br />scenario: Actual","week: 176<br />predicted_sales: 29.650070<br />scenario: Actual","week: 177<br />predicted_sales: 23.910963<br />scenario: Actual","week: 178<br />predicted_sales: 14.631393<br />scenario: Actual","week: 179<br />predicted_sales: 19.213880<br />scenario: Actual","week: 180<br />predicted_sales: 14.872498<br />scenario: Actual","week: 181<br />predicted_sales: 12.725748<br />scenario: Actual","week: 182<br />predicted_sales: 16.730759<br />scenario: Actual","week: 183<br />predicted_sales:  7.939284<br />scenario: Actual","week: 184<br />predicted_sales: 28.914155<br />scenario: Actual","week: 185<br />predicted_sales: 22.214610<br />scenario: Actual","week: 186<br />predicted_sales: 24.875525<br />scenario: Actual","week: 187<br />predicted_sales: 11.680544<br />scenario: Actual","week: 188<br />predicted_sales: 20.447861<br />scenario: Actual","week: 189<br />predicted_sales: 22.316621<br />scenario: Actual","week: 190<br />predicted_sales:  7.324273<br />scenario: Actual","week: 191<br />predicted_sales: 14.947401<br />scenario: Actual","week: 192<br />predicted_sales: 10.133672<br />scenario: Actual","week: 193<br />predicted_sales:  5.452654<br />scenario: Actual","week: 194<br />predicted_sales: 22.096982<br />scenario: Actual","week: 195<br />predicted_sales: 19.731840<br />scenario: Actual","week: 196<br />predicted_sales:  6.509379<br />scenario: Actual","week: 197<br />predicted_sales:  9.834410<br />scenario: Actual","week: 198<br />predicted_sales: 15.338125<br />scenario: Actual","week: 199<br />predicted_sales: 28.472110<br />scenario: Actual","week: 200<br />predicted_sales: 18.188967<br />scenario: Actual"],"type":"scatter","mode":"lines","line":{"width":1.8897637795275593,"color":"rgba(0,0,0,1)","dash":"solid"},"hoveron":"points","name":"Actual","legendgroup":"Actual","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,28
2790,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300],"y":[10.705559922744422,16.88396945945891,23.436869286388646,15.549685425365649,13.011803076970097,25.160888340705782,15.445292860589428,2.7080670398612963,11.623159852009426,18.913071396577159,20.229577351255692,21.46864128776264,11.24225063872488,17.118082819501833,16.491630922682969,27.141079363448785,19.802622937693329,4.0264254459916868,16.339568626176455,9.67230408116726,12.05812907422648,11.30107084751771,9.4164028578350081,11.995414806741865,22.35334239492407,5.3683878453318012,22.104104132692353,17.956473160696689,6.6491940937233949,22.739671596429474,25.721004958288177,17.472653583785931,21.479964148640587,19.222239515785532,11.298687406413524,25.55949495756207,12.742112438841183,19.98597825441858,24.24878923207514,8.1652269995155589,16.654396007037725,14.562430044544303,3.1553115017313753,20.535468515160904,15.340480542124876,8.7435271165693909,7.969851179098689,17.725623111356317,30.55422081663264,10.380532469912147,21.780488641699915,20.288550607328837,18.170129556626744,18.920412502171512,15.142389358302994,23.068493841169737,11.748921280959305,17.994424493085045,22.022228986261233,16.147567694878081,23.651529403694607,9.4077904684403073,9.2617132253307979,26.939904282417526,9.5336433773584748,19.736769347793366,22.043098836223116,14.824055696247383,23.844017990173338,28.770034269294246,13.371271656301746,5.6280990903370247,21.678204514513016,23.267633594609652,9.9252205229161028,16.800754098184505,15.585266981286294,12.20000450294277,19.775875214853659,13.987080534790305,11.872908946036402,24.665926260345916,13.34179466142346,15.981603312966087,14.621259590107021,17.556044313884879,27.492884245428595,19.392269124102171,18.736666780021263,20.210940215119976,22.781792974305706,18.037755891377856,18.459646414006333,9.5028857628578702,17.463623155112369,23.195414793398093,30.539807919463101,18.599324565318955,12.788720784277578,6.1578790363549158],"text":["week: 201<br />predicted_sales: 10.705560<br />scenario: Forecast (+50% Facebook)","week: 202<br />predicted_sales: 16.883969<br />scenario: Forecast (+50% Facebook)","week: 203<br />predicted_sales: 23.436869<br />scenario: Forecast (+50% Facebook)","week: 204<br />predicted_sales: 15.549685<br />scenario: Forecast (+50% Facebook)","week: 205<br />predicted_sales: 13.011803<br />scenario: Forecast (+50% Facebook)","week: 206<br />predicted_sales: 25.160888<br />scenario: Forecast (+50% Facebook)","week: 207<br />predicted_sales: 15.445293<br />scenario: Forecast (+50% Facebook)","week: 208<br />predicted_sales:  2.708067<br />scenario: Forecast (+50% Facebook)","week: 209<br />predicted_sales: 11.623160<br />scenario: Forecast (+50% Facebook)","week: 210<br />predicted_sales: 18.913071<br />scenario: Forecast (+50% Facebook)","week: 211<br />predicted_sales: 20.229577<br />scenario: Forecast (+50% Facebook)","week: 212<br />predicted_sales: 21.468641<br />scenario: Forecast (+50% Facebook)","week: 213<br />predicted_sales: 11.242251<br />scenario: Forecast (+50% Facebook)","week: 214<br />
279predicted_sales: 17.118083<br />scenario: Forecast (+50% Facebook)","week: 215<br />predicted_sales: 16.491631<br />scenario: Forecast (+50% Facebook)","week: 216<br />predicted_sales: 27.141079<br />scenario: Forecast (+50% Facebook)","week: 217<br />predicted_sales: 19.802623<br />scenario: Forecast (+50% Facebook)","week: 218<br />predicted_sales:  4.026425<br />scenario: Forecast (+50% Facebook)","week: 219<br />predicted_sales: 16.339569<br />scenario: Forecast (+50% Facebook)","week: 220<br />predicted_sales:  9.672304<br />scenario: Forecast (+50% Facebook)","week: 221<br />predicted_sales: 12.058129<br />scenario: Forecast (+50% Facebook)","week: 222<br />predicted_sales: 11.301071<br />scenario: Forecast (+50% Facebook)","week: 223<br />predicted_sales:  9.416403<br />scenario: Forecast (+50% Facebook)","week: 224<br />predicted_sales: 11.995415<br />scenario: Forecast (+50% Facebook)","week: 225<br />predicted_sales: 22.353342<br />scenario: Forecast (+50% Facebook)","week: 226<br />predicted_sales:  5.368388<br />scenario: Forecast (+50% Facebook)","week: 227<br />predicted_sales: 22.104104<br />scenario: Forecast (+50% Facebook)","week: 228<br />predicted_sales: 17.956473<br />scenario: Forecast (+50% Facebook)","week: 229<br />predicted_sales:  6.649194<br />scenario: Forecast (+50% Facebook)","week: 230<br />predicted_sales: 22.739672<br />scenario: Forecast (+50% Facebook)","week: 231<br />predicted_sales: 25.721005<br />scenario: Forecast (+50% Facebook)","week: 232<br />predicted_sales: 17.472654<br />scenario: Forecast (+50% Facebook)","week: 233<br />predicted_sales: 21.479964<br />scenario: Forecast (+50% Facebook)","week: 234<br />predicted_sales: 19.222240<br />scenario: Forecast (+50% Facebook)","week: 235<br />predicted_sales: 11.298687<br />scenario: Forecast (+50% Facebook)","week: 236<br />predicted_sales: 25.559495<br />scenario: Forecast (+50% Facebook)","week: 237<br />predicted_sales: 12.742112<br />scenario: Forecast (+50% Facebook)","week: 238<br />predicted_sales: 19.985978<br />scenario: Forecast (+50% Facebook)","week: 239<br />predicted_sales: 24.248789<br />scenario: Forecast (+50% Facebook)","week: 240<br />predicted_sales:  8.165227<br />scenario: Forecast (+50% Facebook)","week: 241<br />predicted_sales: 16.654396<br />scenario: Forecast (+50% Facebook)","week: 242<br />predicted_sales: 14.562430<br />scenario: Forecast (+50% Facebook)","week: 243<br />predicted_sales:  3.155312<br />scenario: Forecast (+50% Facebook)","week: 244<br />predicted_sales: 20.535469<br />scenario: Forecast (+50% Facebook)","week: 245<br />predicted_sales: 15.340481<br />scenario: Forecast (+50% Facebook)","week: 246<br />predicted_sales:  8.743527<br />scenario: Forecast (+50% Facebook)","week: 247<br />predicted_sales:  7.969851<br />scenario: Forecast (+50% Facebook)","week: 248<br />predicted_sales: 17.725623<br />scenario: Forecast (+50% Facebook)","week: 249<br />predicted_sales: 30.554221<br />scenario: Forecast (+50% Facebook)","week: 250<br />predicted_sales: 10.380532<br />scenario: Forecast (+50% Facebook)","week: 251<br />predicted_sales: 21.780489<br />scenario: Forecast (+50% Facebook)","week: 252<br />predicted_sales: 20.288551<br />scenario: Forecast (+50% Facebook)","week: 253<br />predicted_sales: 18.170130<br />scenario: Forecast (+50% Facebook)","week: 254<br />predicted_sales: 18.920413<br />scenario: Forecast (+50% Facebook)","week: 255<br />predicted_sales: 15.142389<br />scenario: Forecast (+50% Facebook)","week: 256<br />predicted_sales: 23.068494<br />scenario: Forecast (+50% Facebook)","week: 257<br />predicted_sales: 11.748921<br />scenario: Forecast (+50% Facebook)","week: 258<br />predicted_sales: 17.994424<br />scenario: Forecast (+50% Facebook)","week: 259<br />predicted_sales: 22.022229<br />scenario: Forecast (+50% Facebook)","week: 260<br />predicted_sales: 16.147568<br />scenario: Forecast (+50% Facebook)","week: 261<br />predicted_sales: 23.651529<br />scenario: Forecast (+50% Facebook)","week: 262<br />predicted_sales:  9.407790<br />scenario: Forecast (+50% Facebook)","week: 263<br />predicted_sales:  9.261713<br />scenario: Forecast (+50% Facebook)","week: 264<br />predicted_sales: 26.939904<br />scenario: Forecast (+50% Facebook)","week: 265<br />predicted_sales:  9.533643<br />scenario: Forecast (+50% Facebook)","week: 266<br />predicted_sales: 19.736769<br />scenario: Forecast (+50% Facebook)","week: 267<br />predicted_sales: 22.043099<br />scenario: Forecast (+50% Facebook)","week: 268<br />predicted_sales: 14.824056<br />scenario: Forecast (+50% Facebook)","week: 269<br />predicted_sales: 23.844018<br />scenario: Forecast (+50% Facebook)","week: 270<br />predicted_sales: 28.770034<br />scenario: Forecast (+50% Facebook)","week: 271<br />predicted_sales: 13.371272<br />scenario: Forecast (+50% Facebook)","week: 272<br />predicted_sales:  5.628099<br />scenario: Forecast (+50% Facebook)","week: 273<br />predicted_sales: 21.678205<br />scenario: Forecast (+50% Facebook)","week: 274<br />predicted_sales: 23.267634<br />scenario: Forecast (+50% Facebook)","week: 275<br />predicted_sales:  9.925221<br />scenario: Forecast (+50% Facebook)","week: 276<br />predicted_sales: 16.800754<br />scenario: Forecast (+50% Facebook)","week: 277<br />predicted_sales: 15.585267<br />scenario: Forecast (+50% Facebook)","week: 278<br />predicted_sales: 12.200005<br />scenario: Forecast (+50% Facebook)","week: 279<br />predicted_sales: 19.775875<br />scenario: Forecast (+50% Facebook)","week: 280<br />predicted_sales: 13.987081<br />scenario: Forecast (+50% Facebook)","week: 281<br />predicted_sales: 11.872909<br />scenario: Forecast (+50% Facebook)","week: 282<br />predicted_sales: 24.665926<br />scenario: Forecast (+50% Facebook)","week: 283<br />predicted_sales: 13.341795<br />scenario: Forecast (+50% Facebook)","week: 284<br />predicted_sales: 15.981603<br />scenario: Forecast (+50% Facebook)","week: 285<br />predicted_sales: 14.621260<br />scenario: Forecast (+50% Facebook)","week: 286<br />predicted_sales: 17.556044<br />scenario: Forecast (+50% Facebook)","week: 287<br />predicted_sales: 27.492884<br />scenario: Forecast (+50% Facebook)","week: 288<br />predicted_sales: 19.392269<br />scenario: Forecast (+50% Facebook)","week: 289<br />predicted_sales: 18.736667<br />scenario: Forecast (+50% Facebook)","week: 290<br />predicted_sales: 20.210940<br />scenario: Forecast (+50% Facebook)","week: 291<br />predicted_sales: 22.781793<br />scenario: Forecast (+50% Facebook)","week: 292<br />predicted_sales: 18.037756<br />scenario: Forecast (+50% Facebook)","week: 293<br />predicted_sales: 18.459646<br />scenario: Forecast (+50% Facebook)","week: 294<br />predicted_sales:  9.502886<br />scenario: Forecast (+50% Facebook)","week: 295<br />predicted_sales: 17.463623<br />scenario: Forecast (+50% Facebook)","week: 296<br />predicted_sales: 23.195415<br />scenario: Forecast (+50% Facebook)","week: 297<br />predicted_sales: 30.539808<br />scenario: Forecast (+50% Facebook)","week: 298<br />predicted_sales: 18.599325<br />scenario: Forecast (+50% Facebook)","week: 299<br />predicted_sales: 12.788721<br />scenario: Forecast (+50% Facebook)","week: 300<br />predicted_sales:  6.157879<br />scenario: Forecast (+50% Facebook)"],"type":"scatter","mode":"lines","line":{"width":1.8897637795275593,"color":"rgba(178,34,34,1)","dash":"solid"},"hoveron":"points","name":"Forecast (+50% Facebook)","legendgroup":"Forecast (+50% Facebook)","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,28
2790,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300],"y":[11.636370769355462,17.266237101549539,20.848241904560641,15.432588498998165,12.797088259364951,22.312591358929499,14.679825517712489,4.8090195541097778,12.763851849067787,19.653205242254323,18.19668150430002,20.871079886039144,10.576668796730907,16.934266317985941,17.414744996245993,24.173460449193044,18.975816941791599,7.2924881050615644,15.174790665660149,10.457493184752453,13.831519040258412,11.663073043511707,11.120341423284502,13.205922107812693,23.391377381191244,8.1695665195582201,20.712747928434755,17.70175850442396,8.5393568731702185,20.657396415779086,25.012753805032812,17.962694031723977,19.993382743175424,17.76387789026932,9.9342452814739133,24.415834529366045,11.822192789854093,20.088798229009011,24.756917226251225,8.7970948366675064,17.808131758400759,14.90772900404237,5.2568205620221002,16.933371348623744,13.334355677944025,10.608731532851282,8.6389428281977487,18.500621753052226,29.258892470804014,10.51898778339665,21.35978950530712,20.335959677959437,18.241326738683458,16.647504020788233,15.517338891961517,20.550012804833898,14.321015033408294,17.02352625230214,21.816537848245595,15.788942381436618,23.02104251184036,10.242024964689186,9.815087932685703,28.631505015686407,11.313622409530534,19.232683660191814,21.298733713363958,14.736028840021815,22.312360784619827,25.365352774939321,14.186752468360385,9.4630550769623145,20.007922615231884,24.445439920892227,11.067831957880587,15.097534768745721,16.058204218462802,14.227313439925966,19.474775164357329,14.21774459210328,11.863336064876437,24.026071204089458,13.95736891539852,14.911453906202809,14.98743300823028,17.005036874717092,25.671307060575028,18.669540751505998,19.277958193719357,18.303056084022302,21.131829820744699,17.127004744028806,18.063172294499157,10.545681805515143,15.20391737601102,24.19229688441462,26.907191074155886,16.054038961457103,13.180160541117042,7.8625092251437101],"text":["week: 201<br />predicted_sales: 11.636371<br />scenario: Forecast (Baseline Spend)","week: 202<br />predicted_sales: 17.266237<br />scenario: Forecast (Baseline Spend)","week: 203<br />predicted_sales: 20.848242<br />scenario: Forecast (Baseline Spend)","week: 204<br />predicted_sales: 15.432588<br />scenario: Forecast (Baseline Spend)","week: 205<br />predicted_sales: 12.797088<br />scenario: Forecast (Baseline Spend)","week: 206<br />predicted_sales: 22.312591<br />scenario: Forecast (Baseline Spend)","week: 207<br />predicted_sales: 14.679826<br />scenario: Forecast (Baseline Spend)","week: 208<br />predicted_sales:  4.809020<br />scenario: Forecast (Baseline Spend)","week: 209<br />predicted_sales: 12.763852<br />scenario: Forecast (Baseline Spend)","week: 210<br />predicted_sales: 19.653205<br />scenario: Forecast (Baseline Spend)","week: 211<br />predicted_sales: 18.196682<br />scenario: Forecast (Baseline Spend)","week: 212<br />predicted_sales: 20.871080<br />scenario: Forecast (Baseline Spend)","week: 213<br />predicted_sales: 10.576669<br />scenario: Forecast (Baseline Spend)","week: 214<br />predicted_sales: 16.934266<br />scenario: Forecast (Baseline Spend)","week: 215<br />predicted_sales: 17.414745<br />scenario: Forecast (Baseline Spend)","week: 216<br />predicted_sales: 24.173460<br />scenario: Forecast (Baseline Spend)","week: 217<br />predicted_sales: 18.975817<br />scenario: Forecast (Baseline Spend)","week: 218<br />predicted_sales:  7.292488<br />scenario: Forecast (Baseline Spend)","week: 219<br />predicted_sales: 15.174791<br />scenario: Forecast (Baseline Spend)","week: 220<br />predicted_sales: 10.457493<br />scenario: Forecast (Baseline Spend)","week: 221<br />predicted_sales: 13.831519<br />scenario: Forecast (Baseline Spend)","week: 222<br />predicted_sales: 11.663073<br />scenario: Forecast (Baseline Spend)","week: 223<br />predicted_sales: 11.120341<br />scenario: Forecast (Baseline Spend)","week: 224<br />predicted_sales: 13.205922<br />scenario: Forecast (Baseline Spend)","week: 225<br />predicted_sales: 23.391377<br />scenario: Forecast (Baseline Spend)","week: 226<br />predicted_sales:  8.169567<br />scenario: Forecast (Baseline Spend)","week: 227<br />predicted_sales: 20.712748<br />scenario: Forecast (Baseline Spend)","week: 228<br />predicted_sales: 17.701759<br />scenario: Forecast (Baseline Spend)","week: 229<br />predicted_sales:  8.539357<br />scenario: Forecast (Baseline Spend)","week: 230<br />predicted_sales: 20.657396<br />scenario: Forecast (Baseline Spend)","week: 231<br />predicted_sales: 25.012754<br />scenario: Forecast (Baseline Spend)","week: 232<br />predicted_sales: 17.962694<br />scenario: Forecast (Baseline Spend)","week: 233<br />predicted_sales: 19.993383<br />scenario: Forecast (Baseline Spend)","week: 234<br />predicted_sales: 17.763878<br />scenario: Forecast (Baseline Spend)","week: 235<br />predicted_sales:  9.934245<br />scenario: Forecast (Baseline Spend)","week: 236<br />predicted_sales: 24.415835<br />scenario: Forecast (Baseline Spend)","week: 237<br />predicted_sales: 11.822193<br />scenario: Forecast (Baseline Spend)","week: 238<br />predicted_sales: 20.088798<br />scenario: Forecast (Baseline Spend)","week: 239<br />predicted_sales: 24.756917<br />scenario: Forecast (Baseline Spend)","week: 240<br />predicted_sales:  8.797095<br />scenario: Forecast (Baseline Spend)","week: 241<br />predicted_sales: 17.808132<br />scenario: Forecast (Baseline Spend)","week: 242<br />predicted_sales: 14.907729<br />scenario: Forecast (Baseline Spend)","week: 243<br />predicted_sales:  5.256821<br />scenario: Forecast (Baseline Spend)","week: 244<br />predicted_sales: 16.933371<br />scenario: Forecast (Baseline Spend)","week: 245<br />predicted_sales: 13.334356<br />scenario: Forecast (Baseline Spend)","week: 246<br />predicted_sales: 10.608732<br />scenario: Forecast (Baseline Spend)","week: 247<br />predicted_sales:  8.638943<br />scenario: Forecast (Baseline Spend)","week: 248<br />predicted_sales: 18.500622<br />scenario: Forecast (Baseline Spend)","week: 249<br />predicted_sales: 29.258892<br />scenario: Forecast (Baseline Spend)","week: 250<br />predicted_sales: 10.518988<br />scenario: Forecast (Baseline Spend)","week: 251<br />predicted_sales: 21.359790<br />scenario: Forecast (Baseline Spend)","week: 252<br />predicted_sales: 20.335960<br />scenario: Forecast (Baseline Spend)","week: 253<br />predicted_sales: 18.241327<br />scenario: Forecast (Baseline Spend)","week: 254<br />
279predicted_sales: 16.647504<br />scenario: Forecast (Baseline Spend)","week: 255<br />predicted_sales: 15.517339<br />scenario: Forecast (Baseline Spend)","week: 256<br />predicted_sales: 20.550013<br />scenario: Forecast (Baseline Spend)","week: 257<br />predicted_sales: 14.321015<br />scenario: Forecast (Baseline Spend)","week: 258<br />predicted_sales: 17.023526<br />scenario: Forecast (Baseline Spend)","week: 259<br />predicted_sales: 21.816538<br />scenario: Forecast (Baseline Spend)","week: 260<br />predicted_sales: 15.788942<br />scenario: Forecast (Baseline Spend)","week: 261<br />predicted_sales: 23.021043<br />scenario: Forecast (Baseline Spend)","week: 262<br />predicted_sales: 10.242025<br />scenario: Forecast (Baseline Spend)","week: 263<br />predicted_sales:  9.815088<br />scenario: Forecast (Baseline Spend)","week: 264<br />predicted_sales: 28.631505<br />scenario: Forecast (Baseline Spend)","week: 265<br />predicted_sales: 11.313622<br />scenario: Forecast (Baseline Spend)","week: 266<br />predicted_sales: 19.232684<br />scenario: Forecast (Baseline Spend)","week: 267<br />predicted_sales: 21.298734<br />scenario: Forecast (Baseline Spend)","week: 268<br />predicted_sales: 14.736029<br />scenario: Forecast (Baseline Spend)","week: 269<br />predicted_sales: 22.312361<br />scenario: Forecast (Baseline Spend)","week: 270<br />predicted_sales: 25.365353<br />scenario: Forecast (Baseline Spend)","week: 271<br />predicted_sales: 14.186752<br />scenario: Forecast (Baseline Spend)","week: 272<br />predicted_sales:  9.463055<br />scenario: Forecast (Baseline Spend)","week: 273<br />predicted_sales: 20.007923<br />scenario: Forecast (Baseline Spend)","week: 274<br />predicted_sales: 24.445440<br />scenario: Forecast (Baseline Spend)","week: 275<br />predicted_sales: 11.067832<br />scenario: Forecast (Baseline Spend)","week: 276<br />predicted_sales: 15.097535<br />scenario: Forecast (Baseline Spend)","week: 277<br />predicted_sales: 16.058204<br />scenario: Forecast (Baseline Spend)","week: 278<br />predicted_sales: 14.227313<br />scenario: Forecast (Baseline Spend)","week: 279<br />predicted_sales: 19.474775<br />scenario: Forecast (Baseline Spend)","week: 280<br />predicted_sales: 14.217745<br />scenario: Forecast (Baseline Spend)","week: 281<br />predicted_sales: 11.863336<br />scenario: Forecast (Baseline Spend)","week: 282<br />predicted_sales: 24.026071<br />scenario: Forecast (Baseline Spend)","week: 283<br />predicted_sales: 13.957369<br />scenario: Forecast (Baseline Spend)","week: 284<br />predicted_sales: 14.911454<br />scenario: Forecast (Baseline Spend)","week: 285<br />predicted_sales: 14.987433<br />scenario: Forecast (Baseline Spend)","week: 286<br />predicted_sales: 17.005037<br />scenario: Forecast (Baseline Spend)","week: 287<br />predicted_sales: 25.671307<br />scenario: Forecast (Baseline Spend)","week: 288<br />predicted_sales: 18.669541<br />scenario: Forecast (Baseline Spend)","week: 289<br />predicted_sales: 19.277958<br />scenario: Forecast (Baseline Spend)","week: 290<br />predicted_sales: 18.303056<br />scenario: Forecast (Baseline Spend)","week: 291<br />predicted_sales: 21.131830<br />scenario: Forecast (Baseline Spend)","week: 292<br />predicted_sales: 17.127005<br />scenario: Forecast (Baseline Spend)","week: 293<br />predicted_sales: 18.063172<br />scenario: Forecast (Baseline Spend)","week: 294<br />predicted_sales: 10.545682<br />scenario: Forecast (Baseline Spend)","week: 295<br />predicted_sales: 15.203917<br />scenario: Forecast (Baseline Spend)","week: 296<br />predicted_sales: 24.192297<br />scenario: Forecast (Baseline Spend)","week: 297<br />predicted_sales: 26.907191<br />scenario: Forecast (Baseline Spend)","week: 298<br />predicted_sales: 16.054039<br />scenario: Forecast (Baseline Spend)","week: 299<br />predicted_sales: 13.180161<br />scenario: Forecast (Baseline Spend)","week: 300<br />predicted_sales:  7.862509<br />scenario: Forecast (Baseline Spend)"],"type":"scatter","mode":"lines","line":{"width":1.8897637795275593,"color":"rgba(70,130,180,1)","dash":"solid"},"hoveron":"points","name":"Forecast (Baseline Spend)","legendgroup":"Forecast (Baseline Spend)","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[200,200],"y":[1.315759351022729,31.946528505471207],"text":"xintercept: 200","type":"scatter","mode":"lines","line":{"width":1.8897637795275593,"color":"rgba(102,102,102,1)","dash":"dash"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":49.607305936073061,"r":7.3059360730593621,"b":46.027397260273986,"l":37.260273972602747},"font":{"color":"rgba(0,0,0,1)","family":"","size":14.611872146118724},"title":{"text":"Sales Forecast with Time-Varying Spend Plans (click to zoom)","font":{"color":"rgba(0,0,0,1)","family":"","size":17.534246575342465},"x":0,"xref":"paper"},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-13.950000000000001,314.94999999999999],"tickmode":"array","ticktext":["0","100","200","300"],"tickvals":[0,100,200,300],"categoryorder":"array","categoryarray":["0","100","200","300"],"nticks":null,"ticks":"","tickcolor":null,"ticklen":3.6529680365296811,"tickwidth":0,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.68949771689498},"tickangle":0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176002,"zeroline":false,"anchor":"y","title":{"text":"Week","font":{"color":"rgba(0,0,0,1)","family":"","size":14.611872146118724}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[1.315759351022729,31.946528505471207],"tickmode":"array","ticktext":["10","20","30"],"tickvals":[10,20,30],"categoryorder":"array","categoryarray":["10","20","30"],"nticks":null,"ticks":"","tickcolor":null,"ticklen":3.6529680365296811,"tickwidth":0,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.68949771689498},"tickangle":0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(235,235,235,1)","gridwidth":0.66417600664176002,"zeroline":false,"anchor":"x","title":{"text":"Predicted Sales","font":{"color":"rgba(0,0,0,1)","family":"","size":14.611872146118724}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","layer":"below","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":true,"legend":{"bgcolor":null,"bordercolor":null,"borderwidth":0,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.68949771689498},"title":{"text":"Scenario","font":{"color":"rgba(0,0,0,1)","family":"","size":14.611872146118724}}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"909a4711af2a":{"x":{},"y":{},"colour":{},"type":"scatter"},"909a5a0312d9":{"xintercept":{}}},"cur_data":"909a4711af2a","visdat":{"909a4711af2a":["function (y) ","x"],"909a5a0312d9":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.20000000000000001,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
279<pre><code>## [1] &quot;Forecast sales with no Increase: $16623.31&quot;</code></pre><pre><code>## [1] &quot;Forecast sales with +50% Facebook spend: $16773.45&quot;</code></pre><pre><code>## [1] &quot;Return on Increase: $150.14&quot;</code></pre><pre><code>## [1] &quot;Cost of increased Facebook spend: $4520.3&quot;</code></pre><p>So, this doesn’t seem like a good ROI based on this simple simulation. A more realistic next step would be to include a capped budget and include the savings of reallocating, for example, all newspaper budget to Facebook and YouTube.</p><div id=references class="section level3"><h3>References</h3><p>Using R to Build a Simple Marketing Mix Model (MMM) and Make Predictions | Towards Data Science
280<a href=https://towardsdatascience.com/building-a-marketing-mix-model-in-r-3a7004d21239/ class=uri>https://towardsdatascience.com/building-a-marketing-mix-model-in-r-3a7004d21239/</a></p><p>Kassambara A (2019). <em>datarium: Data Bank for Statistical Analysis
281and Visualization</em>. R package version 0.1.0.999,
282<a href=https://github.com/kassambara/datarium class=uri>https://github.com/kassambara/datarium</a>.</p></div></div></div><div class=article-tags><a class="badge badge-light" href=/tag/r/>R</a></div><div class=share-box aria-hidden=true><ul class=share><li><a href="https://twitter.com/intent/tweet?url=https://ejhudson.netlify.app/project/mediamix-project/&text=Media%20Mix%20Modeling%20Demo" target=_blank rel=noopener class=share-btn-twitter><i class="fab fa-twitter"></i></a></li><li><a href="https://www.facebook.com/sharer.php?u=https://ejhudson.netlify.app/project/mediamix-project/&t=Media%20Mix%20Modeling%20Demo" target=_blank rel=noopener class=share-btn-facebook><i class="fab fa-facebook"></i></a></li><li><a href="mailto:?subject=Media%20Mix%20Modeling%20Demo&body=https://ejhudson.netlify.app/project/mediamix-project/" target=_blank rel=noopener class=share-btn-email><i class="fas fa-envelope"></i></a></li><li><a href="https://www.linkedin.com/shareArticle?url=https://ejhudson.netlify.app/project/mediamix-project/&title=Media%20Mix%20Modeling%20Demo" target=_blank rel=noopener class=share-btn-l
282inkedin><i class="fab fa-linkedin-in"></i></a></li><li><a href="whatsapp://send?text=Media%20Mix%20Modeling%20Demo%20https://ejhudson.netlify.app/project/mediamix-project/" target=_blank rel=noopener class=share-btn-whatsapp><i class="fab fa-whatsapp"></i></a></li></ul></div><div class="media author-card content-widget-hr"><a href=https://ejhudson.netlify.app><img class="avatar mr-3 avatar-circle" src=/author/emily-j.-hudson/avatar_hubb3e307997cdec075ccc12f9f4c80754_139917_270x270_fill_q75_lanczos_center.jpg alt="Emily J. Hudson"></a><div class=media-body><h5 class=card-title><a href=https://ejhudson.netlify.app>Emily J. Hudson</a></h5><h6 class=card-subtitle>evolutionary biologist and data enthusiast | she/they</h6><ul class=network-icon aria-hidden=true><li><a href=mailto:[email protected]><i class="fas fa-envelope"></i></a></li><li><a href=/><i class="fas fa-"></i></a></li><li><a href="https://scholar.google.com/citations?user=aeKQCqoAAAAJ&hl=en" target=_blank rel=noopener><i class="fas fa-graduation-cap"></i></a></li><li><a href=https://github.com/emhudson target=_blank rel=noopener><i class="fab fa-github"></i></a></li><li><a href=https://www.linkedin.com/in/ejhudson1/ target=_blank rel=noopener><i class="fab fa-linkedin"></i></a></li></ul></div></div><div class="article-widget content-widget-hr"><h3>Related</h3><ul><li><a href=/project/nash-sm4-project/>Nashville Autonomous Recording + BirdNET Project</a></li><li><a href=/project/landmap-project/>Endangered species critical habitat for sale</a></li><li><a href=/project/rangemap-project/>Sister species range maps</a></li><li><a href=/project/ggplot-test/>Songmeter Analysis</a></li></ul></div><div class="project-related-pages content-widget-hr"></div></div></article></div><div class=page-footer><div class=container><footer class=site-footer><p class=powered-by></p><p class=powered-by>Published with <a href="https://wowchemy.com/?utm_campaign=poweredby" target=_blank rel=noopener>Wowchemy</a> — the free, <a href=https://github.com/wowchemy/wowchemy-hugo-modules target=_blank rel=noopener>open source</a> website builder that empowers creators.</p></footer></div></div><div id=modal class="modal fade" role=dialog><div class=modal-dialog><div class=modal-content><div class=modal-header><h5 class=modal-title>Cite</h5><button type=button class=close data-dismiss=modal aria-label=Close>
283<span aria-hidden=true>&#215;</span></button></div><div class=modal-body><pre><code class="tex hljs"></code></pre></div><div class=modal-footer><a class="btn btn-outline-primary my-1 js-copy-cite" href=# target=_blank><i class="fas fa-copy"></i>Copy</a>
284<a class="btn btn-outline-primary my-1 js-download-cite" href=# target=_blank><i class="fas fa-download"></i>Download</a><div id=modal-error></div></div></div></div></div>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/instant.page/5.1.0/instantpage.min.js integrity="sha512-1+qUtKoh9XZW7j+6LhRMAyOrgSQKenQ4mluTR+cvxXjP1Z54RxZuzstR/H9kgPXQsVB8IW7DMDFUJpzLjvhGSQ==" crossorigin=anonymous></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.4/imagesloaded.pkgd.min.js integrity="sha256-lqvxZrPLtfffUl2G/e7szqSvPBILGbwmsGE1MKlOi0Q=" crossorigin=anonymous></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/3.0.6/isotope.pkgd.min.js integrity="sha256-CBrpuqrMhXwcLLUd5tvQ4euBHCdh7wGlDfNz8vbu/iI=" crossorigin=anonymous></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/highlight.min.js integrity="sha512-TDKKr+IvoqZnPzc3l35hdjpHD0m+b2EC2SrLEgKDRWpxf2rFCxemkgvJ5kfU48ip+Y+m2XVKyOCD85ybtlZDmw==" crossorigin=anonymous></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/languages/r.min.js></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/languages/python.min.js></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/languages/latex.min.js></script>
284<script src=https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.min.js integrity="sha512-SeiQaaDh73yrb56sTW/RgVdi/mMqNeM2oBwubFHagc5BkixSpP1fvqF47mKzPGWYSSy4RwbBunrJBQ4Co8fRWA==" crossorigin=anonymous></script>
284<script id=search-hit-fuse-template type=text/x-template>
285        <div class="search-hit" id="summary-{{key}}">
286          <div class="search-hit-content">
287            <div class="search-hit-name">
288              <a href="{{relpermalink}}">{{title}}</a>
289              <div class="article-metadata search-hit-type">{{type}}</div>
290              <p class="search-hit-description">{{snippet}}</p>
291            </div>
292          </div>
293        </div>
294      </script>
294<script src=https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.1/fuse.min.js integrity="sha256-VzgmKYmhsGNNN4Ph1kMW+BjoYJM2jV5i4IlFoeZA9XI=" crossorigin=anonymous></script>
294<script src=https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/jquery.mark.min.js integrity="sha256-4HLtjeVgH0eIB3aZ9mLYF6E8oU5chNdjU6p6rrXpl9U=" crossorigin=anonymous></script>
294<script src=/js/_vendor/bootstrap.bundle.min.f81d0a1705048649befc8b595e455a94.js></script>
294<script src=/en/js/wowchemy.min.e20609e6ad3f7fce339ee2e74f13682b.js></script>
294<script async defer src=https://buttons.github.io/buttons.js></script>
294</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.