Velocity Rules
Before configuring velocity rules, ensure you have:
- Access to processor or fraud platform rules dashboard
- At least 30 days of transaction data for backtesting
- Understanding of card testing and ATO attack patterns
- Familiarity with rules vs ML trade-offs
- Velocity rules = Thresholds on transaction/action frequency to catch automated fraud
- Start with: 3 txns/card/hour, 10/card/day, 5/IP/hour—then tune from your data
- Always backtest: run in shadow mode 2 weeks before blocking
- Target: over 30% of flagged transactions are fraud, under 0.5% of traffic blocked
- Best for card testing, ATO; complement with ML at scale
Velocity rules catch the lazy fraud. A single card hitting your checkout 47 times in an hour is obvious. The challenge is tuning thresholds that catch fraud without blocking legitimate customers during flash sales.
Those threshold recommendations you see everywhere (3 transactions per hour, 10 per day) are someone else's guess. Here's how to find yours using your own fraud metrics.
Hypothesis: Rule X would have blocked Y% of fraud with Z% false positives.
Method:
- Pull last 30 days of transactions
- Apply proposed rule in shadow mode (flag, don't block)
- Calculate:
- Hit rate (% of traffic that would trigger)
- Fraud rate inside hits
- Good customer rate inside hits
Decision rule: Only enforce if more than 30% of flagged transactions were fraud AND fewer than 0.5% of total traffic is blocked.
Run length: At least 2 weeks or 5,000 transactions, whichever is longer.
Finding Your Thresholds
Start here, then adjust based on your data:
| Dimension | Starting Threshold | Tune By |
|---|---|---|
| Transactions per card per hour | 3 | Your flash sale patterns |
| Transactions per card per day | 10 | Your repeat customer behavior |
| Transactions per IP per hour | 5 | Your corporate/VPN traffic |
| Transactions per device per day | 15 | Your multi-account legitimate use |
| Failed auths per card in 10 min | 3 | Your retry patterns (see decline codes) |
Under $100K/month: Turn on your processor's default velocity rules and stop. You don't have enough data to tune anything meaningful. When you see a pattern, come back.
$100K-$1M/month: You can start experimenting. Run 1-2 custom rules in shadow mode. Manual review anything over $300 that gets flagged.
Over $1M/month: Manual review is now a bottleneck. You need automated reject thresholds for the bottom 10% of trust scores. Custom velocity rules become worth the effort.
Over $10M/month: You have enough data to train ML models. Velocity rules become backstops for ML misses, not your primary defense.
How to Actually Test a Rule
Week 1: Shadow Mode
Deploy the rule but only flag, don't block.
RULE: card_velocity_hourly
DIMENSION: card_number
WINDOW: 1 hour
THRESHOLD: 3 transactions
ACTION: flag_for_review (NOT block)
Week 2: Analyze Flags
For every flagged transaction:
- Was it fraud? (Check chargebacks 30-60 days later)
- Was it a good customer? (Check if they're still active)
- Was it a false positive? (Legitimate customer blocked)
Week 3: Decision
If the rule would have blocked:
- More than 30% fraud: Consider enforcing
- 10-30% fraud: Tighten the threshold or add conditions
- Less than 10% fraud: Kill the rule, it's not worth it
Week 4+: Enforce and Monitor
RULE: card_velocity_hourly
DIMENSION: card_number
WINDOW: 1 hour
THRESHOLD: 3 transactions
ACTION: block
EXCEPTION: customer_tenure > 12_months
Watch your false positive rate for the first two weeks. If you're blocking more than 0.5% of transactions, your thresholds are probably too aggressive.
Velocity by Fraud Type
Card Testing
High transaction count, low amounts, sequential card numbers, concentrated IP/device.
IF transactions_per_IP_1hr > 10
AND average_amount < $5
AND decline_rate > 50%
THEN block_IP
Backtest first: Pull last 30 days, apply this rule, check false positives. See fraud metrics for measurement guidance.
Account Takeover
Login velocity spike, profile change velocity, transaction pattern change. Use with behavioral analytics for best results.
IF failed_logins_1hr > 3
AND new_device = true
AND password_changed_24hr = true
THEN lock_account + step_up_auth
Bust-Out (Issuers)
Utilization velocity, cash advance velocity, balance increase rate. See portfolio monitoring for issuer-side detection.
IF utilization_change_7d > 40%
AND current_utilization > 85%
AND cash_advance_7d > $500
THEN flag_for_review
Velocity Windows
| Window | Use Case | Watch Out For |
|---|---|---|
| Real-time (seconds) | Card testing, bot attacks | High infrastructure cost |
| Hourly | Transaction anomalies | Flash sales, legitimate bursts |
| Daily | Spending patterns | Time zone issues |
| Weekly | Application fraud | Low sample size |
| Monthly | Bust-out patterns | Slow feedback loop |
Advanced Rule Structure
Start simple. Add complexity only when simple doesn't work.
Simple (start here):
IF transactions_per_card_1hr > 3
THEN block
Add exceptions for good customers:
IF transactions_per_card_1hr > 3
AND customer_tenure < 6_months
THEN block
Add multiple conditions:
IF transactions_per_card_1hr > 3
AND customer_tenure < 6_months
AND total_order_value > $500
THEN manual_review
Metrics to Watch While You Experiment
| Metric | What It Tells You | Red Flag |
|---|---|---|
| Block rate | % of traffic blocked by this rule | Over 1% is probably too aggressive |
| Block-to-fraud ratio | % of blocked transactions that were actual fraud | Under 30% means too many false positives |
| Appeal/complaint rate | Customers contacting support about blocks | Rising = rule is too tight |
| Fraud rate on passed transactions | Is fraud sneaking through elsewhere? | Rising = rule isn't catching what matters |
- Small samples: 3 days on 2K transactions isn't enough. Fraud is rare, so you need large samples to measure fraud rate changes.
- Seasonality: Fraud patterns shift. A rule that works in December may fail in March. Re-test quarterly.
- Risk shifting: Blocking one channel pushes fraud to another. Measure total losses, not just the channel you changed.
- Correlation ≠ causation: Just because fraudsters do X doesn't mean everyone who does X is a fraudster.
- Fraudster adaptation: If you tighten velocity rules, sophisticated fraudsters will slow down. Your rule may "work" but total fraud doesn't drop.
If a Single Rule is Dominating
If one rule is blocking more than 1% of traffic or driving more than 20% of all blocks, review it:
- Is the threshold too tight?
- Is there a legitimate use case you're catching?
- Can you add exceptions for good customers?
- Should you split it into multiple rules?
Implementation Tips
Counter Management
- Atomic updates: Increment counters transactionally
- TTL-based expiry: Auto-expire old counts (Redis, DynamoDB)
- Distributed counting: Handle scale appropriately
- Pre-computation: For complex aggregations
Evasion Resistance
Fraudsters adapt. Counter with:
- Multiple overlapping rules (can't evade all at once)
- Combined conditions (not just single thresholds)
- Behavioral baselines (anomaly from normal, not absolute)
- Network-level rules (device graphs, address clusters)
The Iteration Loop
Velocity rules are never "done." Run this loop monthly:
- Review performance: Which rules are firing? What's their false positive rate?
- Check escapes: What fraud got through that a rule could have caught?
- Adjust thresholds: Tighten where false positives are low, loosen where they're high
- Retire stale rules: If a rule hasn't fired in 60 days, consider removing it
Where This Breaks
Flash sales and drops: Your velocity rule says "3 transactions per card per hour." Your marketing just announced a limited sneaker drop. Your best customers are trying to buy fast. You block them. They tweet about it. Rule of thumb: have a flash sale exception flag that relaxes velocity rules for 2 hours around announced promotions.
Corporate cards: A company card might legitimately hit your site 20 times in a day. Different employees, same card. If you sell B2B or have corporate accounts, your velocity thresholds need to be 3-5x higher for commercial BINs.
Gift giving season: November-December, legitimate customers buy multiple items to multiple addresses. Your "1 shipping address per card" rule becomes a false positive machine.
VPN and shared IP traffic: College dorms, corporate offices, and VPN exit nodes concentrate thousands of users behind one IP. IP-based velocity rules will block your entire customer segment.
Mobile carrier NAT: Cellular carriers route many users through the same IP. Your IP velocity rule is blocking everyone on AT&T in that cell tower's range.
Test before you block. Run every rule in shadow mode for 2 weeks minimum. If you skip this step, you'll learn about false positives from angry customer emails instead of from your dashboard.
Next Steps
Just starting with velocity rules?
- Enable processor defaults - Start with built-in rules
- Run in shadow mode - Test before blocking
- Set up measurement - Track false positives
Tuning existing rules?
- Backtest changes - 2 weeks minimum
- Add customer exceptions - Protect good customers
- Review by fraud type - Match rules to attacks
Experiencing fraud despite rules?
- Check for edge cases - Flash sales, VPNs, corporate cards
- Consider ML augmentation - Rules + ML together
- Follow attack playbook - Emergency response
Related
- Rules vs. ML - When to use each approach
- Card Testing - The fraud type velocity rules catch best
- Account Takeover - Login velocity detection
- Device Fingerprinting - Device-based velocity dimensions
- Risk Scoring - Combining velocity with other signals
- Processor Rules Configuration - Setting up rules in your processor
- Fraud Metrics - Measuring detection effectiveness
- Manual Review - Review queue management
- Behavioral Analytics - Session-based detection
- Decline Codes - Understanding auth failures
- Fraud Prevention - Prevention strategy overview
- Experimentation - A/B testing rules