Project 01 / Finance & Banking / Rule evaluation

Card Fraud and Disputes Performance Review

The true cost of getting detection wrong in both directions. 2.4 million card transactions, eight detection rules, twelve months.

Total cost of fraud
GBP 909k
12 months, all components
Reported to the board
GBP 135k
15% of the real cost
Net fraud loss
7.0 bps
vs ~6.9 bps published UK benchmark
Genuine transactions declined
99,807
32 genuine stopped per fraud caught
Recommended saving
GBP 118k
within a 20% fraud-loss tolerance
Five cost components. Only the first is reported today.

Five cost components. Only the first is reported today.

The finding in one paragraph

The fraud team reports gross fraud losses, which fell again this year. Those losses are GBP 135k. The full economic cost of the detection engine is GBP 909k, because the engine also declines 99,807 genuine transactions a year and pushes 222,754 alerts into a review queue. The single largest line is not fraud at all - it is the cost of reviewing alerts that are, in more than 99 cases out of 100, genuine customers trying to spend their own money.

Leave-one-out net contribution per rule.

Leave-one-out net contribution per rule.

The trade-off a fraud director actually has to sign.

The trade-off a fraud director actually has to sign.

The conclusion survives every version of the contested assumption.

The conclusion survives every version of the contested assumption.

Alert volume against precision. Bubble = unique catches.

Alert volume against precision. Bubble = unique catches.

Precision with 95% Wilson intervals. R04 fired 133 times: its interval runs from 2.1% to 9.5%, which is why it gets an interval and not a point estimate.

rule_idrule_namedefault_actionalert_volumetrue_positivesprecision_pctprecision_ci_low_pctprecision_ci_high_pctrecall_pctfalse_positives_per_catchunique_fraud_catches
R05HIGH_RISK_MCC_VALUEreview124702257.00.2060.1820.2335.33484.229.0
R06CNP_NEW_MERCHANTreview117346716.00.610.5670.65614.84162.9373.0
R03GEO_IMPOSSIBLE_3H_CPblock50658796.01.5711.4671.68316.562.6485.0
R08NOCTURNAL_BURSTreview447642045.04.5684.3794.76642.3820.9783.0
R02VELOCITY_5_IN_60MINblock268051190.04.4394.1994.69324.6621.5173.0
R01HIGH_VALUE_ECOMblock1166977.00.660.5280.8241.6150.50.0
R07ROUND_AMOUNT_CROSS_BORDERblock4830.00.00.00.7890.00.0
R04DORMANT_REACTIVATIONreview1336.04.5112.0849.4930.1221.21.0

The metric that decides retirement is not precision

It is unique catches - the fraud a rule finds that no other rule found. R01 HIGH_VALUE_ECOM has respectable-looking precision and 77 catches a year, and its unique catch count is zero. Every single fraud it stops is also caught by at least one other rule, so switching it off loses no detection at all and removes 11,669 alerts.

R07 ROUND_AMOUNT_CROSS_BORDER produced 483 alerts and no confirmed fraud at all in twelve months. The honest way to report that is not 'precision 0%' but 'the 95% upper bound on its precision is 0.79%'.

Why the causal design mattered more than the arithmetic

The obvious comparison - declined customers against never-declined customers - says a false decline increases spend by 536%. It does not. Customers get declined because they are active, and comparing them against inactive customers measures activity, not the decline.

The design that works compares customers declined this month against customers who will be declined three months from now, matched on segment and CRM spend band, over identical calendar weeks. That returns -8.1% (95% CI -13.4% to -2.7%).

A placebo test on an event 90 days earlier returns +11.3% rather than zero, so some upward bias remains. The reported answer is therefore a range, -8.1% to -19.4%, and the cost model uses the conservative end. The true injected value was -9.75%, inside the range.

False decline rate by segment and channel.

segmentchannelgenuine_txnsgenuine_declinedfalse_decline_rate_pctgenuine_value_declinedfraud_caughtfp_per_catch
Basiccard_present_chip4760620564.32274499.03166.3
Basiccontactless3814414943.9248472.09715.4
Basicecommerce5356610371.94432208.01109.4
Basicmanual_entry39581453.6614049.0197.6
Masscard_present_chip308737144204.672550423.0140103.0
Masscontactless22432592574.13334706.027733.4
Massecommerce33387983992.524534833.08629.7
Massmanual_entry2508110584.22125637.07713.7
Mass Affluentcard_present_chip275076137855.012917761.0120114.9
Mass Affluentcontactless17932781104.52323729.019042.7
Mass Affluentecommerce284990100743.536267300.041024.6
Mass Affluentmanual_entry2133110224.79159914.04721.7
Premiercard_present_chip180179101165.612471558.073138.6
Premiercontactless10464251964.97222966.011146.8
Premierecommerce17683081514.615341493.027929.2
Premiermanual_entry133727305.46128185.02233.2
Studentcard_present_chip4514019634.35277955.03556.1
Studentcontactless3688214273.8743453.06322.7
Studentecommerce511959141.79369929.01048.8
Studentmanual_entry38751644.2317565.01411.7

Disputes split by class. First-party misuse is a third of case volume and is not a detection failure - it needs a different intervention entirely.

dispute_classcasesavg_investigation_hourstotal_investigation_hoursavg_handling_costtotal_operational_costtotal_write_offtotal_cost
First-party misuse6511.26819.049.7440195.037292.077487.0
Third-party fraud15200.671015.030.8765163.093126.0158289.0
Annual saving
GBP 118k
net of the fraud given up
Review alerts removed
26,114
per year
Investigator hours freed
1,959
1.2 FTE
False declines removed
12,964
genuine customers
Extra fraud loss accepted
GBP 32.2k
the risk this change carries

Every recommendation carries the risk it creates. A tuning paper without a risk column does not get signed off.

rule_idrule_namecurrent_actionalerts_per_yearprecision_pctunique_catchesnet_contribution_gbprecommendationrationalerisk_of_this_change
R05HIGH_RISK_MCC_VALUEreview1247020.20629-198897RetireCosts GBP 198,897/yr more than it saves. 29 unique catches out of 124,702 alerts.Loses GBP 9,169/yr of fraud prevention. Residual risk sits with counterfeit coverage.
R06CNP_NEW_MERCHANTreview1173460.61373-102878RetireCosts GBP 102,878/yr more than it saves. 373 unique catches out of 117,346 alerts.Loses GBP 81,471/yr of fraud prevention. Residual risk sits with card_not_present coverage.
R08NOCTURNAL_BURSTreview447644.568783-41474RetireCosts GBP 41,474/yr more than it saves. 783 unique catches out of 44,764 alerts.Loses GBP 49,442/yr of fraud prevention. Residual risk sits with lost_stolen coverage.
R01HIGH_VALUE_ECOMblock116690.660-27977RetireCosts GBP 27,977/yr more than it saves. 0 unique catches out of 11,669 alerts.Loses GBP 22,344/yr of fraud prevention. Residual risk sits with card_not_present coverage.
R07ROUND_AMOUNT_CROSS_BORDERblock4830.00-166Keep under reviewNet contribution is close to zero; the decision is inside the uncertainty of the cost assumptions.Re-test after the next quarter of data.
R04DORMANT_REACTIVATIONreview1334.5111-113Keep under reviewNet contribution is close to zero; the decision is inside the uncertainty of the cost assumptions.Re-test after the next quarter of data.
R02VELOCITY_5_IN_60MINblock268054.43917322603Keep unchangedNet contribution GBP 22,603/yr.None from this change.
R03GEO_IMPOSSIBLE_3H_CPblock506581.57148555237Keep unchangedNet contribution GBP 55,237/yr.None from this change.

What this analysis cannot tell you

  • The rules were reconstructed from published fraud typologies, not read out of a production engine. A real engine has scores and sub-conditions this does not model.
  • Above-the-line testing only. Lowering a threshold requires re-scanning transactions that never alerted, which is done properly in Project 2.
  • The behavioural effect is measured over 60 days. Anything that shows up after that - attrition, reduced product take-up - is not captured and would make the false-decline cost larger, not smaller.
  • The analyst review outcome is modelled at a 78% catch rate and a 6% false-decline rate. Real dispositions would replace it.