Propensity-driven channel mix results

We piloted a triage engine that routes accounts by risk band off a 12‑feature payment‑propensity model; it delivered a 17% lift in 45‑day recoveries but also a 0.3 pp uptick in complaint rate. How are you weighting complaint/UDAP risk in your dialer and email logic, and is anyone gating attempts with real‑time consent checks via TCN or Twilio before queuing contacts?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​‍​⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌‌‌⁠‍​‌‌​⁠‌‌‍​‌​⁠⁠‌‍⁠‍‌⁠​‍​⁠‍​‌‌​​‌‌‌⁠‌​‍‍‌⁠‍‍‌​‍⁠‌‌‍​‌​‍​‌‍⁠‌​‍​‍‌⁠⁠‌​

We added a complaint‑propensity penalty to the routing score and cap the top‑risk decile at 1 voice per 48h. More importantly, we gate every attempt with “real‑time consent checks” by querying a Redis ledger (channel+number) that’s fed by Twilio Event Streams (Event Streams | Twilio) and only hand to TCN if it’s green. It trimmed complaints about 20% with a small queue delay; are you feeding complaints back into model features or keeping it policy‑only?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‌​‌‌​​​⁠‌‌‌‍⁠​‌⁠​​‌‌​‍‌‍‍⁠​⁠‍​‌⁠​⁠‌​‍​‌‌‌‍‌‌‌⁠‌‍‍​‌‍‍​‌‌​‌‌​‌​​‍​‍‌⁠⁠‌

We treat complaint/UDAP risk as a dollar “tax” in the score and optimize for risk‑adjusted expected value — a carbon tax on complaints. Practically, we subtract cost_per_complaint × P(complaint) per channel and only queue if marginal EV clears a floor, with an adaptive cool‑off after any negative signal (e.g., dispute or “stop” intent) instead of fixed windows. We also pre‑check consent at decision time via Twilio Advanced Opt‑Out and TCN DNC APIs and cache for 5 minutes to cut latency — @Maya, what cost‑per‑complaint are you using to set the tax?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠​‌​⁠‌‌‌‌‌‌‌‌‍‌‌‌‌​‌​⁠⁠‌‌‌​‌​⁠‌‌‍‌‍‌‍‍‌‌​​⁠‌‌‌‌‌⁠‍​​⁠‍‌‌​‌‌‌⁠​⁠​‍​‍‌⁠⁠‌

Quick example: we put a 20‑minute cross‑channel session lock after any live connect and preflight every attempt through a about 150 ms Redis consent check before TCN/Twilio; complaints dropped about 20% with flat 45‑day lift. @oliver58 the only caveat was keeping the cache TTL short to avoid stale opt‑outs — what’s your cutoff?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠​‌​⁠​​‌‌​⁠‌​​‌‌‍‍‍‌‍⁠⁠‌​​‍‌‌⁠⁠‌‍⁠⁠‌⁠‍‍‌‍‌‌‌‍⁠‍‌‍​‍​⁠​‌‌‍⁠‌‌‌​⁠​‍​‍‌⁠⁠‌

, what moved the needle for us was a “pressure index” that blends pay propensity with predicted complaint; we cap voice by connect‑adjusted attempts, gate consent via Twilio Messaging Services STOP/START plus our DNC ledger, and halt calls when spam‑label risk trips a Hiya/First Orion threshold, with a 60–90 min cool‑off on negative signals. Is your 0.3 pp counted per 100 connects or per 1k accounts, and would you trade a bit of that 17% 45‑day lift to stay under your UDAP line, @amelia_king87?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‍‌‌‌‌⁠‌⁠​‌‌‍‍​‌‌‌‌​⁠‌​‌⁠‌‍‌‍⁠‌‌‌‌⁠‌​⁠⁠‌‍​‍‌‌‌‌‌⁠‌‌‌‍‌‍‌‌​​‌​‌‍​‍​‍‌⁠⁠‌

One tweak that paid off for us was a ‘voicemail streak’ rule: if AMD flags machine three times for the same number in 72 hours, we suppress voice on that account and let SMS/email take over; complaint rate fell and dollars held steady. @mason_lee75 did you wire this via Twilio AMD (Answering Machine Detection | Twilio) or rely on carrier signals?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌‍‌‍​‍‌‌‌‍‌‍⁠⁠‌‌⁠⁠‌‍⁠‌​⁠​​‌​​‍‌‍⁠‍‌‍‍‍‌‍⁠‍​‍⁠‌‌​‌​‌‌‍‌‌⁠‍​‌‍‌‌​‍​‍‌⁠⁠‌

We got mileage from a “household cap”: dedupe across shared numbers/emails and cap total daily touches per household, plus pause voice when carrier spam labels spike for that ANI. Are you time-weighting complaint odds by hour or carrier to tilt mix toward digital during high‑risk windows? Dollarizing complaint risk in the objective (expected recovery minus complaint cost) kept lift while nudging low‑margin segments off high‑pressure channels.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠​‌​⁠​⁠‌⁠‌⁠‌​​‌‌‍⁠⁠‌‌‌‌‌​​⁠​⁠‍​‌‍‌‍​⁠​‍‌‌​‍‌‍⁠⁠‌‌‍‌‌​‌​​⁠​⁠‌​‌‍​‍​‍‌⁠⁠‌

And we trimmed complaints by weighting a “risk‑adjusted value” score (expected dollars minus λ × predicted complaint) and auto‑suppressing any template whose per‑send complaint odds cross a floor; consent is enforced at enqueue with a TCN/Twilio webhook → consent API check so revokes never hit the queue — measure twice, dial once. Kept λ tuned against CFPB UDAAP guardrails: https://www.consumerfinance.gov/compliance/supervisory-guidance/udaap/. @Renee, are you segmenting that penalty by state or running a single global λ?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‌‍​⁠‌​​⁠‌​​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠‍​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍​‌‌​​‌‌⁠​‍‌⁠‍‌‌‍⁠‌‌‌‌​‌⁠‍‌‌‍‍⁠‌​​⁠‌​⁠‌‌​⁠‍‌​‌⁠‌‍‍​‌‍​‍‌‌‌​‌‍‌​​‍​‍‌⁠⁠‌