This report analyzes the performance of marketing campaigns from three beauty and cosmetic platforms: - Nykaa - Purplle - Tira
The dashboard evaluates campaign performance using metrics such as: - Revenue - ROI - Clicks and Conversions - Engagement Score - Customer Segments - Marketing Channels
# Ensure these files are in the same folder as this Rmd file
nykaa <- read_csv("nykaa_campaign_data.csv")
purplle <- read_csv("purplle_campaign_data.csv")
tira <- read_csv("tira_campaign_data.csv")
nykaa$Brand <- "Nykaa"
purplle$Brand <- "Purplle"
tira$Brand <- "Tira"
campaign_data <- bind_rows(nykaa, purplle, tira)
head(campaign_data)
## # A tibble: 6 × 17
## Campaign_ID Campaign_Type Target_Audience Duration Channel_Used Impressions
## <chr> <chr> <chr> <dbl> <chr> <dbl>
## 1 NY-CMP-1000 Social Media College Students 21 WhatsApp, Y… 57804
## 2 NY-CMP-1001 Paid Ads Tier 2 City Custo… 18 YouTube 91801
## 3 NY-CMP-1002 Influencer Youth 23 WhatsApp, G… 15536
## 4 NY-CMP-1003 Email Working Women 18 YouTube, Fa… 88114
## 5 NY-CMP-1004 Paid Ads College Students 10 Facebook, I… 96871
## 6 NY-CMP-1005 Influencer Youth 26 Email, Inst… 83919
## # ℹ 11 more variables: Clicks <dbl>, Leads <dbl>, Conversions <dbl>,
## # Revenue <dbl>, Acquisition_Cost <dbl>, ROI <dbl>, Language <chr>,
## # Engagement_Score <dbl>, Customer_Segment <chr>, Date <chr>, Brand <chr>
campaign_data$Date <- dmy(campaign_data$Date)
campaign_data <- campaign_data %>%
mutate(
CTR = (Clicks / Impressions) * 100,
Conversion_Rate = (Conversions / Clicks) * 100
)
summary(campaign_data)
## Campaign_ID Campaign_Type Target_Audience Duration
## Length:166665 Length:166665 Length:166665 Min. : 5.00
## Class :character Class :character Class :character 1st Qu.:11.00
## Mode :character Mode :character Mode :character Median :17.00
## Mean :17.49
## 3rd Qu.:24.00
## Max. :30.00
## Channel_Used Impressions Clicks Leads
## Length:166665 Min. : 10001 Min. : 202 Min. : 48
## Class :character 1st Qu.: 32566 1st Qu.: 2109 1st Qu.: 779
## Mode :character Median : 55110 Median : 3904 Median :1476
## Mean : 55061 Mean : 4682 Mean :1872
## 3rd Qu.: 77574 3rd Qu.: 6688 3rd Qu.:2598
## Max. :100000 Max. :14944 Max. :8876
## Conversions Revenue Acquisition_Cost ROI
## Min. : 17 Min. : 3895 Min. : 8.18 Min. :-0.990
## 1st Qu.: 401 1st Qu.: 177661 1st Qu.: 106.73 1st Qu.: 0.040
## Median : 776 Median : 359250 Median : 208.51 Median : 1.230
## Mean :1029 Mean : 513907 Mean : 376.09 Mean : 2.691
## 3rd Qu.:1404 3rd Qu.: 684797 3rd Qu.: 427.57 3rd Qu.: 3.580
## Max. :6686 Max. :4579910 Max. :15473.16 Max. :79.300
## Language Engagement_Score Customer_Segment Date
## Length:166665 Min. : 2.56 Length:166665 Min. :2024-07-01
## Class :character 1st Qu.: 8.38 Class :character 1st Qu.:2024-09-25
## Mode :character Median :13.59 Mode :character Median :2024-12-21
## Mean :13.77 Mean :2024-12-20
## 3rd Qu.:18.79 3rd Qu.:2025-03-17
## Max. :30.99 Max. :2025-06-24
## Brand CTR Conversion_Rate
## Length:166665 Min. : 1.996 Min. : 5.924
## Class :character 1st Qu.: 5.256 1st Qu.:15.242
## Mode :character Median : 8.499 Median :20.507
## Mean : 8.502 Mean :21.945
## 3rd Qu.:11.770 3rd Qu.:27.748
## Max. :15.000 Max. :47.870
str(campaign_data)
## tibble [166,665 × 19] (S3: tbl_df/tbl/data.frame)
## $ Campaign_ID : chr [1:166665] "NY-CMP-1000" "NY-CMP-1001" "NY-CMP-1002" "NY-CMP-1003" ...
## $ Campaign_Type : chr [1:166665] "Social Media" "Paid Ads" "Influencer" "Email" ...
## $ Target_Audience : chr [1:166665] "College Students" "Tier 2 City Customers" "Youth" "Working Women" ...
## $ Duration : num [1:166665] 21 18 23 18 10 26 21 6 27 11 ...
## $ Channel_Used : chr [1:166665] "WhatsApp, YouTube" "YouTube" "WhatsApp, Google, YouTube" "YouTube, Facebook, Instagram" ...
## $ Impressions : num [1:166665] 57804 91801 15536 88114 96871 ...
## $ Clicks : num [1:166665] 6156 3321 2182 8413 3743 ...
## $ Leads : num [1:166665] 3616 1971 952 2231 2060 ...
## $ Conversions : num [1:166665] 2355 1357 755 947 1258 ...
## $ Revenue : num [1:166665] 1867515 1046247 197055 376906 518296 ...
## $ Acquisition_Cost: num [1:166665] 111 180.8 90.6 249.1 228.6 ...
## $ ROI : num [1:166665] 6.14 3.26 1.88 0.6 0.8 3.09 1.17 1.4 3.73 1.61 ...
## $ Language : chr [1:166665] "Hindi" "Hindi" "English" "Hindi" ...
## $ Engagement_Score: num [1:166665] 20.98 7.24 25.03 13.15 7.29 ...
## $ Customer_Segment: chr [1:166665] "College Students" "College Students" "College Students" "College Students" ...
## $ Date : Date[1:166665], format: "2025-04-29" "2025-04-06" ...
## $ Brand : chr [1:166665] "Nykaa" "Nykaa" "Nykaa" "Nykaa" ...
## $ CTR : num [1:166665] 10.65 3.62 14.04 9.55 3.86 ...
## $ Conversion_Rate : num [1:166665] 38.3 40.9 34.6 11.3 33.6 ...
dim(campaign_data)
## [1] 166665 19
campaign_data %>%
group_by(Brand) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
ggplot(aes(x = Brand, y = Total_Revenue, fill = Brand)) +
geom_col() +
labs(
title = "Total Revenue by Brand",
x = "Brand",
y = "Revenue"
)
campaign_data %>%
group_by(Campaign_Type) %>%
summarise(Avg_ROI = mean(ROI, na.rm = TRUE)) %>%
ggplot(aes(x = Campaign_Type, y = Avg_ROI, fill = Campaign_Type)) +
geom_col() +
labs(
title = "Average ROI by Campaign Type",
x = "Campaign Type",
y = "Average ROI"
) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
campaign_data %>%
group_by(Brand) %>%
summarise(Avg_Conversion_Rate = mean(Conversion_Rate, na.rm = TRUE)) %>%
ggplot(aes(x = Brand, y = Avg_Conversion_Rate, fill = Brand)) +
geom_col() +
labs(
title = "Average Conversion Rate by Brand",
x = "Brand",
y = "Conversion Rate (%)"
)
ggplot(campaign_data, aes(x = Engagement_Score, fill = Brand)) +
geom_histogram(bins = 30, alpha = 0.7) +
labs(
title = "Distribution of Engagement Scores",
x = "Engagement Score",
y = "Count"
)
campaign_data %>%
group_by(Customer_Segment) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
ggplot(aes(x = reorder(Customer_Segment, Total_Revenue),
y = Total_Revenue,
fill = Customer_Segment)) +
geom_col() +
coord_flip() +
labs(
title = "Revenue by Customer Segment",
x = "Customer Segment",
y = "Revenue"
)
campaign_data %>%
mutate(Month = floor_date(Date, "month")) %>%
group_by(Month, Brand) %>%
summarise(Total_Revenue = sum(Revenue, na.rm = TRUE)) %>%
ggplot(aes(x = Month, y = Total_Revenue, color = Brand)) +
geom_line(size = 1) +
labs(
title = "Monthly Revenue Trend",
x = "Month",
y = "Revenue"
)
##
## 1. Social media and paid advertising campaigns generated high engagement and revenue.
## 2. Nykaa showed strong overall revenue performance across campaigns.
## 3. Influencer and Paid Ads campaigns produced higher ROI compared to Email campaigns.
## 4. College Students and Premium Shoppers were major contributing customer segments.
## 5. Conversion rates varied significantly across brands and campaign strategies.
This dashboard provides a comparative analysis of marketing campaign performance across Nykaa, Purplle, and Tira. The analysis highlights revenue trends, customer engagement, ROI, and campaign effectiveness. Businesses can use these insights to optimize future marketing strategies and target high-performing customer segments effectively.