portfolio

Projects

Real datasets, real defects caught, real write-ups — no tutorial follow-alongs.

Marketing Campaign Performance Analysis

Excel · 2026 · Self-directed portfolio project · Jan–Jun 2026 dataset
complete

Cleaned and audited a deliberately messy 798-record, 6-channel ad performance dataset end to end, then caught a data-quality defect that was materially distorting the headline numbers.

798 → 780 rows after dedup
103 blank cells treated
89.7x anomalous ROAS flagged
33% campaigns below target
Data Cleaning
  • Removed 18 duplicate CampaignIDs; any analysis on the raw file would have double-counted them.
  • Consolidated 30 spelling/casing variants of Channel into 6 real channels, and 21 Manager variants into 5 — "TikTok" alone appeared under four different spellings.
  • Treated 103 blank cells across 5 columns via channel-average imputation or explicit "Unknown" labelling, documenting the choice per column.
  • Normalized a Date column mixing four formats, and converted Spend values stored as text ("$185.70") into numeric fields.
Key finding — Email showed $2.81M revenue on just $31.4K spend: an 89.7x ROAS versus 2.5–4.7x everywhere else, and 45% of all revenue from only 3% of spend. Flagged as a units error in the source data rather than a genuine result. Excluding it corrected blended ROAS from 6.4x down to 3.7x on $938.8K of real spend.
Budget Efficiency
  • Google Ads absorbs $345.5K — 36% of total spend, more than any other channel, but returns only 3.64x against a 4.0x target, with 53 campaigns Below Target.
  • LinkedIn is less efficient (2.46x vs. a 2.5x target, 62 campaigns Below Target) but carries far less budget ($201.8K) — making Google Ads the highest-dollar rebalancing opportunity.
  • 257 of 780 campaigns (33%) miss their channel benchmark, concentrated in LinkedIn, TikTok, and Google Ads. Facebook is the healthiest paid channel at 4.67x against a 3.5x target.
  • Revenue peaked in May 2026 at $1.35M, 56% above the January low; conversion rates barely move across audience segments (5.2–5.6%), so channel and timing — not targeting — drive the variance.
Methodology

Built entirely in Excel: PivotTables and PivotCharts, an INDEX/MATCH benchmark lookup table, IFS-based performance classification (Above/On/Below Target), and independent SUMIFS/COUNTIFS/AVERAGEIFS cross-checks to validate every figure two ways before it went into the write-up.

Excel PivotTables INDEX/MATCH IFS Logic SUMIFS/COUNTIFS/AVERAGEIFS Data Auditing

Car Price Analysis

SQL · PostgreSQL · 2026 · Self-directed portfolio project
complete

First SQL project: designed the schema and wrote 13 progressively advanced queries against a 10-field public vehicle-listings dataset, completing the full set within a self-imposed one-hour challenge.

13 SQL queries
10 dataset fields
1 hr self-imposed challenge
4 price drivers isolated
Methodology
  • Ran explicit null-count and duplicate-detection checks across all key fields before writing any analysis query.
  • Applied CTEs, window functions (RANK() OVER, PARTITION BY), and correlated subqueries to move from basic aggregation to brand-level price statistics.
  • Used CASE-based banding to segment pricing by engine-size range (0–2.0L, 2.0–3.0L, 3.0–4.0L, 4.0L+).
Findings

Isolated brand tier, mileage, model year, and engine size as the primary price drivers — luxury brands command the highest average prices, mileage strongly affects used-vehicle pricing, and newer model years consistently price higher. Full methodology documented in the public README.

PostgreSQL pgAdmin CTEs Window Functions Data Cleaning
All repositories on GitHub ↗