Introduction

Report Introduction

The business problem that is being addressed in our project is understanding the consumer behavior trends towards frozen pizza and helping increase sales.

How We Addressed This Problem

To understand consumer behavior, we analyzed transcriptional, product, and demographic data from Regork.

How Our Analysis Will Help Regork Grow

Our analysis provides highly valuable insights into who is buying frozen pizza, when it is bought, and factors that influence their purchases. Our proposed solution is broken down into 3 key findings and recommendations.

  1. Target High Spending Income Levels

Regork can target these groups with premium options, or loyalty incentives.

  1. Optimize Marketing for Households and Ages

Regork can utilize social media ads, convenience promotions, and meal deals

  1. Cross-Promotions with Beverages

Regork can take the meal deal promotion and bundle in drink and pizza promotions to continue to increase sales in all groups of consumers.

Packages Used

The packages that are used for this project are:

tidyverse: This is utilized to simplify data manipulation.

completejourney: This is utilized for importing our data set.

ggplot2: This is utilized to create our data visualizations.

dplyr: This utilized for data manipulation

# Load data sets
transactions <- get_transactions()
products <- products
demographics <- demographics

# Convert household_size "5+" to numeric
demographics <- demographics %>%
  mutate(household_size = as.numeric(ifelse(household_size == "5+", 5, household_size)))

# Merge transactions with products to get product descriptions
transaction_product <- transactions %>%
  left_join(products, by = "product_id")

# Merge transaction data with household information
transaction_data <- transaction_product %>%
  inner_join(demographics, by = "household_id")

# Filter for pizza products
pizza_transactions <- transaction_data %>%
  filter(product_category == "FROZEN PIZZA")

# Calculate average pizza sales
avg_pizza_sales <- pizza_transactions %>%
  summarise(avg_sales = mean(sales_value, na.rm = TRUE))

# Calculate average household size
avg_household_size <- demographics %>%
  summarise(avg_size = mean(household_size, na.rm = TRUE))

# Group by household size and calculate average pizza sales
avg_pizza_sales_by_household <- pizza_transactions %>%
  group_by(household_size) %>%
  summarise(avg_sales = mean(sales_value, na.rm = TRUE))

# Plot: Average Pizza Sales by Household Size
ggplot(avg_pizza_sales_by_household, aes(x = factor(household_size), y = avg_sales)) +
  geom_bar(stat = "identity", fill = "pink") +
  labs(title = "Average Pizza Sales by Household Size",
       x = "Household Size",
       y = "Average Pizza Sales")

Analysis of Average Pizza Sales by Household Size

This bar chart shows us that there is not much fluctuation between household size and buying frozen pizzas. This is useful for marketing purposes because we are able to market to all household sizes. Since a range of household sizes purchase frozen pizzas, the company would be able to mass market to all household sizes.

# Standardize product category filtering
frozen_pizza <- products %>%
  mutate(product_category = str_to_upper(str_trim(product_category))) %>%
  filter(product_category == "FROZEN PIZZA") %>%
  select(product_id, product_category)

# Join transactions with products and demographics
pizza_sales_by_age <- pizza_transactions %>%
  group_by(age) %>%
  summarise(total_sales = sum(sales_value, na.rm = TRUE), .groups = "drop")

# Ensure age is a factor and in the correct order
pizza_sales_by_age$age <- factor(pizza_sales_by_age$age, levels = c("19-24", "25-34", "35-44", "45-54", "55-64", "65+"))

# Plot: Frozen Pizza Sales by Age Group
ggplot(pizza_sales_by_age, aes(x = age, y = total_sales)) +
  geom_point(size = 3, color = "purple") +
  labs(title = "Frozen Pizza Sales by Age Group",
       x = "Age Group",
       y = "Total Sales ($)")

Analysis of Frozen Pizza Sales by Age Group

This scatter plot demonstrates that the 45-54 age group purchases the most frozen pizzas, with the 35-44 age group trailing slightly. Most frozen pizza customers are older millennials and younger generation X. On the other hand, the 55-64 and 65+ age groups buy the least number of frozen pizzas and are not the target customers for this product.

# Pizza purchases by income level
pizza_income <- pizza_transactions %>%
  group_by(income) %>%
  summarise(total_pizzas = n()) %>%
  arrange(desc(total_pizzas))

# Plot: Pizza Purchases by Income Level
ggplot(pizza_income, aes(x = reorder(income, -total_pizzas), y = total_pizzas, fill = income)) +
  geom_bar(stat = "identity") +
  labs(title = "Pizza Purchases by Income Level", x = "Income Level", y = "Total Purchases") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Analysis of Pizza Purchases by Income Level

This bar chart provides insight into frozen pizza purchases across different income levels. The data shows that households earning $50K-$74K make the most pizza purchases, followed closely by those in the $35K-$49K income range. Households earning under $15K also show notable pizza purchases, likely due to frozen pizza being an affordable and convenient meal option. We can see a negative correlation between sales and income, suggesting that higher-income households may prefer alternative meal options, such as dining out or purchasing fresher alternatives that may be more expensive.

# Pizza Purchase Analysis 
pizza_sales_trend <- pizza_transactions %>%
  mutate(date = as.Date(transaction_timestamp)) %>%
  filter(date < as.Date("2017-12-31")) %>%
  group_by(week = floor_date(date, "week")) %>%
  summarise(total_sales = sum(sales_value, na.rm = TRUE))

# Plot: Weekly Pizza Sales Trend
ggplot(pizza_sales_trend, aes(x = week, y = total_sales)) +
  geom_line(color = "violetred", size = 1) +
  geom_point() +
  labs(title = "Weekly Pizza Sales Trend", x = "Week", y = "Total Sales") +
  theme_minimal()

Analysis of Weekly Pizza Sales Trend Analysis

This line graph illustrates weekly frozen pizza sales trends over a one-year period. The shifts in sales with periodic spikes, likely corresponding with weekends, holidays, or promotional events. Notably, the highest sales periods occur at the beginning of the year and the end of the year, possibly due to colder weather or holiday season paired with convenience dining. While there are rises and drops, overall, pizza sales are consistently between $600 to $1,100.

# Beverage purchase analysis
beverage_products <- products %>%
  filter(product_category %in% c("SOFT DRINKS", "WATER - CARBONATED/FLVRD DRINK", "JUICE", "TEAS", "LIQUOR", "BEERS/ALES", "DOMESTIC WINE"))

pizza_beverage_transactions <- transactions %>%
  filter(basket_id %in% pizza_transactions$basket_id) %>%
  inner_join(beverage_products, by = "product_id")

# Summarize beverage purchases by category
beverage_summary <- pizza_beverage_transactions %>%
  group_by(product_category) %>%
  summarise(total_sales = sum(sales_value, na.rm = TRUE)) %>%
  arrange(desc(total_sales))

# Plot: Beverage Purchases with Pizza
ggplot(beverage_summary, aes(x = reorder(product_category, -total_sales), y = total_sales, fill = product_category)) +
  geom_bar(stat = "identity") +
  labs(title = "Beverage Purchases with Pizza", x = "Beverage Category", y = "Total Sales") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Analysis of Beverage Purchases with Pizza

This bar chart highlights that the highest-selling beverage category is soft drinks and is significantly higher than any other categories. This suggests that customers overwhelmingly prefer pairing pizza with carbonated beverages. This could lead to strategic promotions of bundling pizza and soft drink sales.

Summary

Problem Statement

The business problem that is being addressed in our project is understanding the consumer behavior trends towards frozen pizza and helping increase sales.

How We Addressed This

As a team, we analyzed transaction data, household purchases, and specific demographics. We wanted to focus on the key traits that frozen pizza buyers have. This can lead to putting more marketing efforts towards key groups and trying to increase sales in groups with potential.

Valuable Insights Found

Our Proposal to the Regork CEO

Limitations of our Analysis

We could improve our analysis with further research into regional trends and customer loyalty programs to enhance consumer behavior trends. Going beyond demographics can give us insights on the in-store behavior and purchasing habits. This can help reach our target audience based on how they shop, building off of our demographic findings.