To bridge the gap between marketing activity and financial performance, Marc must move beyond lagging sales data toward an integrated customer mindset analysis. At Café Dulcis, the relationship between marketing variables and brand perception reveals a significant strategic misalignment. Data suggests that current advertising efforts are counterproductive, as they negatively impact Brand Liking which is the sole mindset metric that successfully converts into sales. Because Liking is already highly saturated, the café’s brand strength is rooted more in its specialty coffee experience than in paid media.
Furthermore, Brand Consideration emerges as the primary growth engine due to its unique combination of high potential and high stickiness, ensuring that consumer interest is both attainable and enduring. Conversely, while Brand Awareness shows significant room for expansion, its low stickiness indicates that it is highly volatile and prone to rapid decay without constant reinforcement. Understanding these specific mindset dynamics is essential for optimizing marketing investment appeal and securing sustainable revenue growth in the Lappeenranta market.
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.5.2
## Warning: package 'tidyr' was built under R version 4.5.2
## Warning: package 'readr' was built under R version 4.5.2
## Warning: package 'dplyr' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.0 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.2
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
install.packages("tseries")
##
## The downloaded binary packages are in
## /var/folders/7q/0037prxd67n6p7jc6_d61_r40000gn/T//RtmpVJybbR/downloaded_packages
library(tseries)
## Warning: package 'tseries' was built under R version 4.5.2
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
install.packages("vars")
##
## The downloaded binary packages are in
## /var/folders/7q/0037prxd67n6p7jc6_d61_r40000gn/T//RtmpVJybbR/downloaded_packages
library(vars)
## Loading required package: MASS
##
## Attaching package: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
##
## Loading required package: strucchange
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.5.2
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Loading required package: sandwich
##
## Attaching package: 'strucchange'
##
## The following object is masked from 'package:stringr':
##
## boundary
##
## Loading required package: urca
## Loading required package: lmtest
install.packages("R6")
##
## The downloaded binary packages are in
## /var/folders/7q/0037prxd67n6p7jc6_d61_r40000gn/T//RtmpVJybbR/downloaded_packages
library(R6)
data_cafe <-read.csv ("CafeDulcis.csv", header = TRUE, sep = ",")
head (data_cafe)
## Time Awareness Consideration Liking Advertising Promotion Price Sales
## 1 1 21.13 25.78 4.944 537.21 52.69 11.64 323
## 2 2 22.73 28.93 4.991 540.34 43.84 10.90 324
## 3 3 21.60 28.63 4.827 597.11 40.18 11.17 322
## 4 4 22.24 26.11 4.839 507.19 63.59 13.79 319
## 5 5 21.95 30.77 4.817 575.93 42.86 13.11 320
## 6 6 21.64 29.26 4.744 512.50 53.06 12.19 325
summary (data_cafe)
## Time Awareness Consideration Liking
## Min. : 1.00 Min. :21.01 Min. :16.87 Min. :4.733
## 1st Qu.: 25.75 1st Qu.:21.59 1st Qu.:25.07 1st Qu.:5.004
## Median : 50.50 Median :22.14 Median :26.62 Median :5.148
## Mean : 50.50 Mean :22.37 Mean :26.45 Mean :5.186
## 3rd Qu.: 75.25 3rd Qu.:23.26 3rd Qu.:28.93 3rd Qu.:5.394
## Max. :100.00 Max. :23.97 Max. :33.31 Max. :5.747
## Advertising Promotion Price Sales
## Min. :149.6 Min. :40.18 Min. :10.62 Min. :315.0
## 1st Qu.:251.2 1st Qu.:42.44 1st Qu.:14.67 1st Qu.:319.0
## Median :352.8 Median :44.48 Median :16.83 Median :322.0
## Mean :352.8 Mean :44.85 Mean :16.83 Mean :322.4
## 3rd Qu.:454.3 3rd Qu.:46.80 3rd Qu.:19.18 3rd Qu.:325.0
## Max. :597.1 Max. :63.59 Max. :21.52 Max. :330.0
# Awareness
potential_awareness <- (100 - mean(data_cafe$Awareness)) / 100
# Consideration
potential_consideration <- (100 - mean(data_cafe$Consideration)) / 100
# Liking
data_cafe$Liking_transformed <- data_cafe$Liking / 7
potential_liking <- (1 - mean(data_cafe$Liking_transformed))
# Create the table
table_potential <- data.frame(
potential = c("awareness", "consideration", "liking"),
value = c(potential_awareness, potential_consideration, potential_liking)
)
# Print the table
table_potential
## potential value
## 1 awareness 0.7763490
## 2 consideration 0.7354635
## 3 liking 0.2591694
Interpret the findings
Brand Awareness (77.6%): Has the highest potential. This means there is massive room for growth, making it our top marketing priority.
Brand Consideration (73.5%): Also has strong potential. Efforts to get people to consider the cafe will yield high returns.
Brand Liking (25.9%): Has the lowest potential because it is already close to its maximum level. Investing more here will likely result in diminishing returns.
#awareness
ar1 <- ar (data_cafe$Awareness, aic = TRUE)
#consideration
ar2 <- ar (data_cafe$Consideration, aic = TRUE)
#Liking
ar3 <- ar (data_cafe$Liking, aic = TRUE)
#Stickiness
stick_awareness <- ar1$ar[1] + ar1$ar[2] + ar1$ar[3]
stick_consideration <- ar2$ar[1] + ar2$ar[2] + ar2$ar[3]
stick_liking <- ar3$ar[1] + ar3$ar[2] + ar3$ar[3]
#table
table_stickiness <- data.frame (
stickiness = c("awareness", "consideration", "liking"),
value = c(stick_awareness, stick_consideration, stick_liking)
)
table_stickiness
## stickiness value
## 1 awareness 0.4309032
## 2 consideration 0.7631340
## 3 liking 0.7597322
Findings
Brand Consideration (76.3%): Has the highest stickiness. Gains here are stable and enduring, don’t need to constantly spend money to maintain them.
Brand Liking (76.0%): Very high stickiness. Once customers like the cafe, that positive attitude remains strong over time.
Brand Awareness (43.1%): Has the lowest stickiness. If you stop advertising, people will forget about the brand.
#calculate responsiveness by lagging a variable
data_cafe$lag_aware <- lag(data_cafe$Awareness)
data_cafe$lag_aware[1] <- 0
data_cafe$lag_consideration <- lag(data_cafe$Consideration)
data_cafe$lag_consideration[1] <- 0
data_cafe$lag_liking <- lag(data_cafe$Liking)
data_cafe$lag_liking[1] <- 0
data_cafe$lag_sales <- lag(data_cafe$Sales)
data_cafe$lag_sales[1] <- 0
#logarithmic model
response_aware <- lm(log(Awareness + 1) ~ log(lag_aware + 1) + log(Price + 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
response_consideration <- lm(log(Consideration + 1) ~ log(lag_consideration + 1) + log(Price + 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
response_liking <- lm(log(Liking + 1) ~ log(lag_liking + 1) + log(Price + 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
response_sales <- lm(log(Sales + 1) ~ log(lag_sales + 1) + log(Price + 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
#summary
summary(response_aware)
##
## Call:
## lm(formula = log(Awareness + 1) ~ log(lag_aware + 1) + log(Price +
## 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.064112 -0.032055 -0.005093 0.040784 0.062260
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.514229 0.463118 5.429 4.34e-07 ***
## log(lag_aware + 1) 0.019063 0.013364 1.426 0.157
## log(Price + 1) 0.087000 0.072010 1.208 0.230
## log(Promotion + 1) 0.001024 0.095661 0.011 0.991
## log(Advertising + 1) 0.055691 0.035517 1.568 0.120
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03982 on 95 degrees of freedom
## Multiple R-squared: 0.07181, Adjusted R-squared: 0.03273
## F-statistic: 1.837 on 4 and 95 DF, p-value: 0.128
summary(response_consideration)
##
## Call:
## lm(formula = log(Consideration + 1) ~ log(lag_consideration +
## 1) + log(Price + 1) + log(Promotion + 1) + log(Advertising +
## 1), data = data_cafe)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.38851 -0.09074 0.01923 0.08806 0.25870
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.934319 1.567083 2.511 0.0137 *
## log(lag_consideration + 1) 0.047457 0.040839 1.162 0.2481
## log(Price + 1) 0.184306 0.242478 0.760 0.4491
## log(Promotion + 1) -0.330519 0.322146 -1.026 0.3075
## log(Advertising + 1) -0.008968 0.117999 -0.076 0.9396
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1346 on 95 degrees of freedom
## Multiple R-squared: 0.1786, Adjusted R-squared: 0.144
## F-statistic: 5.164 on 4 and 95 DF, p-value: 0.0008291
summary(response_liking)
##
## Call:
## lm(formula = log(Liking + 1) ~ log(lag_liking + 1) + log(Price +
## 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.066539 -0.021356 0.001838 0.020272 0.054949
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.227791 0.337328 6.604 2.29e-09 ***
## log(lag_liking + 1) 0.001224 0.017292 0.071 0.9437
## log(Price + 1) 0.038035 0.052595 0.723 0.4714
## log(Promotion + 1) -0.055505 0.069992 -0.793 0.4297
## log(Advertising + 1) -0.052610 0.025632 -2.053 0.0429 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.02896 on 95 degrees of freedom
## Multiple R-squared: 0.5043, Adjusted R-squared: 0.4835
## F-statistic: 24.17 on 4 and 95 DF, p-value: 8.282e-14
summary(response_sales)
##
## Call:
## lm(formula = log(Sales + 1) ~ log(lag_sales + 1) + log(Price +
## 1) + log(Promotion + 1) + log(Advertising + 1), data = data_cafe)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.023836 -0.011129 -0.000738 0.010369 0.023744
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.7339902 0.1508148 38.020 <2e-16 ***
## log(lag_sales + 1) -0.0007524 0.0023926 -0.314 0.754
## log(Price + 1) 0.0111018 0.0234080 0.474 0.636
## log(Promotion + 1) 0.0011341 0.0311244 0.036 0.971
## log(Advertising + 1) 0.0022093 0.0115235 0.192 0.848
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01296 on 95 degrees of freedom
## Multiple R-squared: 0.006575, Adjusted R-squared: -0.03525
## F-statistic: 0.1572 on 4 and 95 DF, p-value: 0.9593
#extracting the coefficients to create a table
table_response_aware <- data.frame(round(response_aware$coefficients, 4))
table_response_consideration <- data.frame(round(response_consideration$coefficients, 4))
table_response_liking <- data.frame(round(response_liking$coefficients, 4))
table_response_sales <- data.frame(round(response_sales$coefficients, 4))
# Combine them all into one clean view
table_responsiveness_all <- data.frame(
Metric = c("Intercept", "Lagged_Metric", "Price", "Promotion", "Advertising"),
Awareness = round(response_aware$coefficients, 4),
Consideration = round(response_consideration$coefficients, 4),
Liking = round(response_liking$coefficients, 4),
Sales = round(response_sales$coefficients, 4)
)
print(table_responsiveness_all)
## Metric Awareness Consideration Liking Sales
## (Intercept) Intercept 2.5142 3.9343 2.2278 5.7340
## log(lag_aware + 1) Lagged_Metric 0.0191 0.0475 0.0012 -0.0008
## log(Price + 1) Price 0.0870 0.1843 0.0380 0.0111
## log(Promotion + 1) Promotion 0.0010 -0.3305 -0.0555 0.0011
## log(Advertising + 1) Advertising 0.0557 -0.0090 -0.0526 0.0022
Findings
Awareness & Consideration: None of marketing variables have a statistically significant short-term impact, all p-values are well above 0.05.
Brand Liking: Advertising has a negative and statistically significant impact on Liking (coefficient = -0.0526, p = 0.0429). This suggests that current advertising efforts are slightly harming how much people like the cafe.
Sales: Direct responsiveness is flat. Neither significantly drives short-term sales volume directly.
# Calculate Conversion
conversion_model <- lm(log(Sales + 1) ~ log(lag_sales + 1) + log(Awareness) + log(Consideration) + log(Liking), data = data_cafe)
# View the results
summary(conversion_model)
##
## Call:
## lm(formula = log(Sales + 1) ~ log(lag_sales + 1) + log(Awareness) +
## log(Consideration) + log(Liking), data = data_cafe)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.026010 -0.010043 -0.001408 0.011256 0.022169
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.6964570 0.1075106 52.985 <2e-16 ***
## log(lag_sales + 1) -0.0008229 0.0022440 -0.367 0.7147
## log(Awareness) 0.0007010 0.0305746 0.023 0.9818
## log(Consideration) -0.0042678 0.0090292 -0.473 0.6375
## log(Liking) 0.0600024 0.0286839 2.092 0.0391 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01271 on 95 degrees of freedom
## Multiple R-squared: 0.04526, Adjusted R-squared: 0.005057
## F-statistic: 1.126 on 4 and 95 DF, p-value: 0.349
Stop current Ads
Current advertising has a negative responsiveness (-0.05) on brand liking. It is actively hurting our brand. In the competitive Lappeenranta specialty coffee market, these campaigns are actively hurting the brand’s perception.
=> Action: immediately pause all current ad spend and redesign the creative content to better reflect the premium, high-quality coffee experience.
Drive Consideration (best ROI)
Consideration has high growth Potential (73.5%) and high Stickiness (76.3%). Gains made here will be substantial and long-lasting.
=> Action: shift budget to new, compelling trial promotions (first-time discounts, local partnerships, etc.), since current promotions show zero responsiveness.
Maintain continuous Awareness
Awareness has the highest Potential (77.6%) but very low Stickiness (43.1%). If we stop marketing, people forget us quickly.
=> Action: Use low-cost, continuous visibility tactics (local SEO, steady social media presence) rather than expensive, short-term ads to keep Café Dulcis top-of-mind.
Leverage Brand Liking
Liking is saturated (low Potential: 25.9%). Spending money to increase it will result in diminishing returns.
=> Action: lean into the strengths as a specialty coffee shop and rely on the excellence of the product itself. Implement referral programs to incentivize our already-satisfied customers to act as organic lead generators for the café.