8+ years building analytics infrastructure that shapes how companies allocate capital, scale channels, and understand their customers. Fluent in SQL, Python, and statistical modeling — with active practice in quant finance, LLM tooling, and Web3 analytics.
Own the full measurement and analytics infrastructure — attribution, MMM, product analytics, and experimentation. Embedded IC partner to VPs across Marketing, Product, Customer Success, and Sales.
Owned BI infrastructure across operations, finance, and workforce planning. Built forecasting models, real-time dashboards, and automated pipelines consumed by 20+ stakeholders.
CX analytics across ecommerce, field services, and call center environments — linking behavioral signals to conversion, churn risk, and cost per acquisition.
Python ML pipelines over 1M+ CRM records, anomaly detection systems, and feature engineering for production ML compliance workflows.
Representative dashboard frameworks built in Tableau and Power BI across marketing attribution, operational BI, and customer lifecycle analytics. Layouts reflect real work; metrics are illustrative.
| Channel | Share | CAC |
|---|---|---|
| Paid Search | 38% | $118 |
| Paid Social | 25% | $167 |
| Organic SEO | 20% | $44 |
| Direct | 11% | $29 |
| Referral | 6% | $61 |
End-to-end MMM framework built and owned at SimplePractice. Designed to quantify true channel contribution, model saturation and diminishing returns, and drive $10M+ in annual budget allocation decisions.
Unified spend, impression, and conversion data across all paid and organic channels from GA4, Rockerbox, and platform APIs. Validated data quality, handled missing values, and constructed a clean time-series panel at weekly granularity covering 2+ years of history.
Applied geometric decay adstock to model carryover effects after campaigns end. Used Hill function saturation curves to model diminishing returns per channel — distinguishing channels with remaining headroom from those already saturated, enabling precise marginal ROI estimates.
Log-log regression with channel spend as inputs, revenue/conversions as outputs. Controlled for seasonality (Fourier terms), pricing changes, product launches, and macro trends — isolating true media contribution from external noise and confounders.
Validated MMM outputs against geo-based holdout experiments. The $40K/week Paid Social + Bing non-brand test produced a 16% conversion lift and 5% CAC increase — confirming model predictions within confidence bounds and becoming the organizational standard for channel validation.
Used calibrated model to run budget scenario simulations — optimizing channel allocation to maximize expected conversions at a target CAC. Translated outputs into Tableau scenario dashboards for VP-level quarterly budget reallocation decisions.
Full-lifecycle measurement architecture tracking the customer from first impression through retention and expansion. Applied across SaaS, security technology, and CPG environments.
All-in-One Trend System built in Pine Script v6 for TradingView. Multi-factor systematic strategy combining Fibonacci composite MAs, weekly HTF trend confirmation, Stochastic RSI momentum, VWAP alignment, and ATR-based risk management — with volume/impulse and slope filter layers. Supports both long and short signals with configurable RR and re-entry logic.
//@version=6 indicator("All-in-One Trend System", overlay = true, max_lines_count = 500, max_labels_count = 500) // ── INPUT GROUPS ──────────────────── grp_ma = "Moving Averages" grp_stoch = "Stochastic RSI (internal)" grp_trend = "Trend Logic" grp_sys = "System / Risk" grp_vis = "Visibility / Layout" // ── WEEKLY SMA LENGTHS ────────────── len50w = input.int(50, "50W SMA", group=grp_ma) len100w = input.int(100, "100W SMA", group=grp_ma) len200w = input.int(200, "200W SMA", group=grp_ma) // ── FIBONACCI EMA LENGTHS ─────────── fibLen1 = input.int(8, "Fib EMA 1", group=grp_ma) fibLen2 = input.int(13, "Fib EMA 2", group=grp_ma) fibLen3 = input.int(21, "Fib EMA 3", group=grp_ma) fibLen4 = input.int(34, "Fib EMA 4", group=grp_ma) fibLen5 = input.int(55, "Fib EMA 5", group=grp_ma) // ── WEEKLY MAs (HTF via security) ─── sma50w = request.security( syminfo.tickerid, "W", ta.sma(close, len50w)) sma100w = request.security( syminfo.tickerid, "W", ta.sma(close, len100w)) sma200w = request.security( syminfo.tickerid, "W", ta.sma(close, len200w)) // ── FIBONACCI COMPOSITE MA ────────── ema1 = ta.ema(close, fibLen1) ema2 = ta.ema(close, fibLen2) ema3 = ta.ema(close, fibLen3) ema4 = ta.ema(close, fibLen4) ema5 = ta.ema(close, fibLen5) fibComposite = (ema1+ema2+ema3+ ema4+ema5) / 5.0 // ── INTERNAL STOCH RSI ────────────── rsi = ta.rsi(close, 14) rsiLo = ta.lowest(rsi, 14) rsiHi = ta.highest(rsi, 14) rsiRange = rsiHi - rsiLo stochRaw = rsiRange != 0.0 ? (rsi - rsiLo) / rsiRange * 100.0 : 0.0 k = ta.sma(stochRaw, 3) // ── TREND CONDITIONS ──────────────── maBull = sma50w > sma100w and sma100w > sma200w maBear = sma50w < sma100w and sma100w < sma200w bullTrend = maBull and close > fibComposite and close > ta.vwap(hlc3) and k > 55 bearTrend = maBear and close < fibComposite and close < ta.vwap(hlc3) and k < 45 // ── VOLUME IMPULSE FILTER ─────────── volMA = ta.sma(volume, 20) volRel = volMA > 0 ? volume / volMA : 1.0 bodyPct = close != 0.0 ? math.abs(close-open)/close*100.0 : 0.0 bigMove = volRel > 2.0 and bodyPct > 1.5 bearImpulse = bigMove and close < open bearBlock = ta.barssince(bearImpulse) < 2 // ── ENTRY SIGNALS ─────────────────── crossUp = ta.crossover(close, fibComposite) crossDown = ta.crossunder(close, fibComposite) longSignal = bullTrend and crossUp and not bearBlock shortSignal = bearTrend and crossDown // ── ATR RISK MANAGEMENT ───────────── atr = ta.atr(14) stopMult = 1.5 rrRatio = 2.0 // ── PERSISTENT STATE ──────────────── var bool inLong = false var bool inShort = false var float longStop = na var float longTarget = na var float shortStop = na var float shortTarget= na if longSignal and not inLong inLong := true inShort := false longStop := close - atr * stopMult longTarget := close + atr * stopMult * rrRatio if shortSignal and not inShort inShort := true inLong := false shortStop := close + atr * stopMult shortTarget := close - atr * stopMult * rrRatio // ── EXITS ─────────────────────────── if inLong if low <= longStop or high >= longTarget inLong := false if inShort if high >= shortStop or low <= shortTarget inShort := false // ── PLOTS ─────────────────────────── plotshape(longSignal, style=shape.triangleup, location=location.belowbar, color=color.lime, text="LONG") plotshape(shortSignal, style=shape.triangledown, location=location.abovebar, color=color.red, text="SHORT") // ── INFO PANEL (top right) ────────── var table panel = table.new( position.top_right, 1, 6, border_width=1) // ── ALERTS ────────────────────────── alertcondition(longSignal, title="Long Entry", message="LONG {{ticker}} {{interval}}") alertcondition(shortSignal, title="Short Entry", message="SHORT {{ticker}} {{interval}}")
request.security() to pull higher-timeframe weekly SMAs onto the 4H chart. Bull trend requires 50W > 100W > 200W — institutional-grade trend confirmation. This prevents taking countertrend entries in structurally bearish weekly environments.ta.crossover(close, fibComposite) — price reclaiming the composite from below while all trend conditions are confirmed.ta.barssince(bearImpulse) < 2 to maintain a 2-bar impulse window. Optional slope/curvature filter on fibComposite also available.var state variables track open positions across bars. Auto-exits on stop/target hit with visual markers. Configurable re-entry, RR, ATR multiplier, and all filter toggles via input groups.alertcondition() blocks for entry, stop hit, and target hit — deliverable via TradingView webhook to any endpoint. Info panel shows live trend state, ATR, and trade distances.Web3 community project exploring community tokenomics, holder analytics, and the intersection of social coordination and decentralized data systems.
ZANE token deployed on Base — practical application of tokenomics research. Hands-on experience with smart contract deployment, on-chain liquidity mechanics, DeFi protocol interaction, and community analytics on Base L2.
Open to Staff / Principal Analytics, Data Science, and Senior IC roles at high-growth companies.