An interactive R Shiny dashboard for analyzing and comparing bidding strategies in Google Ads campaigns through comprehensive A/B testing.
This project provides a data-driven analysis of two Google Ads bidding strategies: Average Bidding (automated) vs. Maximum Bidding (manual CPC). The dashboard visualizes key performance metrics, conversion rates, and cost efficiency to help determine which bidding strategy delivers superior results.
- Interactive Visualizations: Dynamic plots using Plotly for daily and cumulative metrics
- Statistical Analysis: Non-parametric hypothesis testing (Wilcoxon Rank Sum Test)
- Monte Carlo Simulation: Win probability analysis with 10,000 simulations
- Comprehensive Metrics: Conversion rates, cost metrics, and key performance indicators
- Professional UI: Clean, intuitive dashboard built with Shiny and shinydashboard
The dashboard includes four main sections:
- Test Introduction: Context, methodology, and data housekeeping details
- Conversion Metrics: CTR, Purchase Rate, and Cart Completion Rate analysis
- Key Metrics: Impressions, Website Clicks, and Purchases tracking
- Cost Metrics: Spend analysis, CPC, CPI, and Cost per Purchase
- R (4.x+)
- Shiny - Interactive web application framework
- shinydashboard - Dashboard framework
- Plotly - Interactive visualizations
- ggplot2 - Static visualizations
- dplyr - Data manipulation
- tidyr - Data tidying
- Statistical Packages: nortest, broom
.
├── server.R # Shiny server logic
├── ui.R # Shiny UI definition
├── data_cleaning.R # Data preprocessing and cleaning
├── conversion_metrics.R # Conversion rate calculations and plots
├── key_metrics.R # Key metrics calculations and plots
├── cost_metrics.R # Cost analysis calculations and plots
├── normality_check.R # Statistical normality tests
├── control_group.csv # Average bidding data
├── test_group.csv # Maximum bidding data
├── catch_all_prev_work/ # Archive of previous analysis iterations
└── rsconnect/ # Shiny deployment configuration
- R (version 4.0 or higher)
- RStudio (recommended)
install.packages(c(
"shiny",
"shinydashboard",
"plotly",
"ggplot2",
"dplyr",
"tidyr",
"reshape2",
"broom",
"nortest",
"scales",
"forcats",
"gridExtra",
"rsconnect"
))# Method 1: Using shiny::runApp()
shiny::runApp()
# Method 2: Run server.R directly
source("server.R")The dashboard will open in your default web browser at http://127.0.0.1:XXXX.
library(rsconnect)
rsconnect::deployApp()- Missing Data Handling: Removed 8/5/2019 from both groups to maintain balance (1 row out of 30)
- Data Cleaning: Converted data types, formatted dates, removed NaN values
- Feature Engineering: Created conversion rate metrics and cumulative calculations
- Visual analysis: Histograms, Box Plots, Q-Q Plots, Density Plots
- Statistical tests: Shapiro-Wilk and Anderson-Darling tests
- Result: Non-normal distribution detected (except Website Clicks)
- Test Used: Wilcoxon Rank Sum Test (non-parametric)
- Significance Level: α = 0.05
- Purpose: Determine if differences between bidding strategies are statistically significant
- Method: Monte Carlo Simulation
- Iterations: 10,000 simulations
- Purpose: Predict future performance likelihood for each bidding strategy
Also known as: Maximum Clicks or Automated Bid Strategy
Description: Set an average daily budget, and Google Ads automatically manages bids to maximize clicks within your budget.
Use Case: Best for businesses wanting to increase overall traffic without focusing on specific products, while maintaining budget control.
Also known as: Manual CPC Bidding
Description: Manually manage maximum cost per click for each ad group, keyword, or placement.
Use Case: Ideal for businesses wanting to prioritize specific high-value keywords or products with custom bid amounts.
- Clickthrough Rate (CTR): Website Clicks ÷ Impressions
- Purchase Rate: Purchases ÷ Impressions
- Cart Completion Rate: Purchases ÷ Add to Carts
- Impressions: Number of times ads were displayed
- Website Clicks: Number of clicks on the advertisement
- Purchases: Number of completed transactions
- Spend: Total advertising expenditure (USD)
- Cost per Click (CPC): Spend ÷ Website Clicks
- Cost per Impression (CPI): Spend ÷ Impressions
- Cost per Purchase (CPP): Spend ÷ Purchases
- Lift: Percentage difference between Average and Maximum Bidding
- p-value: Statistical significance indicator (Wilcoxon Rank Sum Test)
- Win Probability: Likelihood of future success (Monte Carlo Simulation)
The dataset used in this analysis is publicly available on Kaggle: Example Dataset for A/B Test
- Add time series forecasting for campaign performance
- Implement segmentation analysis by day of week
- Include ROI and ROAS calculations
- Add export functionality for reports
- Integrate with Google Ads API for live data
NYC Data Science Academy - R Project
This project is licensed under the MIT License - see the LICENSE file for details.
- Dataset provided by ilkeryildiz on Kaggle
- Google Ads documentation and bidding strategy guidance
- NYC Data Science Academy for project framework
For questions or collaboration opportunities, please open an issue in this repository.
Note: This is a portfolio project demonstrating skills in R programming, Shiny dashboard development, statistical analysis, and data visualization. The dataset is used for educational purposes only.