W10-Dashboards Assignment

Project 1

Author

Karima Ajahiou

Published

April 26, 2026

Project 1

Project Description

This static dashboard provides an overview of marketing performance using important campaign metrics such as click-through rate (CTR), cost per click (CPC), cost per acquisition (CPA), and return on ad spend (ROAS). The purpose of the dashboard is to help identify overall campaign performance trends and highlight areas where marketing efforts can be improved. It is built for users who need a clear summary of results without requiring interactive filters or advanced analysis.

Data Description

The dataset includes campaign-level marketing performance tracked by date. Each observation represents a single campaign for a specific day and contains variables such as impressions, clicks, advertising cost, conversions, CTR, CPC, CPA, and ROAS. The dataset covers a 90-day period and is used to measure both campaign efficiency and overall return on marketing investment.

R Codes

Code
library(dplyr)
library(lubridate)

set.seed(123)

# Create 90 days of data
dates <- seq.Date(from = as.Date("2024-01-01"),
                  to = as.Date("2024-03-31"),
                  by = "day")

campaigns <- c("Brand Awareness", "Retargeting", "Search", 
               "Social Media", "Influencer", "Email")

df <- expand.grid(
  date = dates,
  campaign = campaigns
)

# Generate synthetic metrics
df <- df |>
  mutate(
    spend = round(runif(n(), 50, 500), 2),
    impressions = round(runif(n(), 5000, 50000)),
    clicks = round(impressions * runif(n(), 0.005, 0.03)),
    conversions = round(clicks * runif(n(), 0.02, 0.15)),
    revenue = round(conversions * runif(n(), 20, 150), 2)
  ) |>
  mutate(
    CTR = clicks / impressions,
    CPC = spend / clicks,
    CPA = spend / conversions,
    ROAS = revenue / spend
  )

write.csv(df, "data/marketing_data.csv", row.names = FALSE)
Code
library(dplyr)
library(ggplot2)
library(readr)

df <- read_csv("data/marketing_data.csv")

ROAS Over Time

Code
df |>
  group_by(date) |>
  summarise(avg_roas = mean(ROAS)) |>
  ggplot(aes(date, avg_roas)) +
  geom_line(color = "#0072B2", linewidth = 1) +
  labs(title = "Average ROAS Over Time",
       y = "ROAS",
       x = "Date")

Explanation

The ROAS Over Time chart illustrates how effectively each campaign generated revenue compared to advertising spend throughout the 90-day period. It helps reveal which campaigns consistently produced strong returns and which ones showed unstable or declining performance over time. Higher ROAS values usually indicate stronger conversion results and more efficient spending, while lower values may suggest budget inefficiencies or weaker campaign engagement. This visualization allows marketers to quickly identify high-performing campaigns and determine where strategy adjustments or budget reallocation may be necessary.

CTR by Campaign

Code
df |>
  group_by(campaign) |>
  summarise(avg_ctr = mean(CTR)) |>
  ggplot(aes(reorder(campaign, avg_ctr), avg_ctr, fill = campaign)) +
  geom_col() +
  coord_flip() +
  labs(title = "CTR by Campaign",
       y = "CTR",
       x = "Campaign")

Explanation

The CTR by Campaign chart compares how well each campaign attracts user attention and encourages engagement. Campaigns with higher click-through rates are more successful at generating interest and motivating users to take action, while lower CTR values may indicate weaker messaging, less effective targeting, or lower audience relevance. This visualization makes it easier to identify which campaigns perform strongest, such as social media or influencer campaigns, and which ones may need improvement. Understanding these differences helps marketers make better decisions about budget allocation and campaign optimization.

Spend vs Revenue Scatter Plot

Code
df |>
  ggplot(aes(spend, revenue, color = campaign)) +
  geom_point(alpha = 0.6, size = 2) +
  labs(title = "Spend vs Revenue",
       x = "Spend ($)",
       y = "Revenue ($)")

Explanation

The Spend vs Revenue scatter plot shows the relationship between advertising cost and the revenue generated from each campaign. Campaigns that appear above the trend line are performing more efficiently by producing stronger revenue compared to their spend, while campaigns below the line may be using budget less effectively. Groups of points also help reveal whether certain campaigns consistently perform well or struggle to convert spending into profitable results. This chart is useful for identifying which campaigns deserve additional investment and which ones may require optimization or strategy changes.

Findings From Data

The static dashboard reveals several important performance patterns across the 90-day marketing dataset. The ROAS Over Time chart shows that campaign efficiency changes throughout the reporting period, with some campaigns maintaining strong and stable returns while others experience noticeable declines. These changes suggest that certain campaigns perform better during specific periods and may require ongoing monitoring and adjustment.

The CTR by Campaign comparison highlights clear differences in audience engagement. Some campaigns, such as social media or influencer campaigns, produce stronger click-through rates, which indicates more effective messaging and stronger audience interest. Campaigns with lower CTR may need improvements in targeting, ad placement, or creative strategy to increase engagement.

The Spend vs Revenue scatter plot provides a strong visual representation of campaign profitability. Campaigns positioned above the trend line are generating stronger returns for their advertising investment, while those below the line may be underperforming. This helps marketers identify where budget increases may be justified and where spending should be reevaluated.

Overall, the dashboard makes it easier to recognize high-performing campaigns, identify inefficient spending patterns, and support better marketing decisions through clearer performance insights.