Delivered-To: tjphuhs@gmail.com
Received: by 2002:adf:f0d2:0:b0:441:282b:bd with SMTP id x18csp206637wro;
        Mon, 27 Apr 2026 20:14:18 -0700 (PDT)
X-Received: by 2002:a05:622a:4a08:b0:50d:7c18:c66e with SMTP id d75a77b69052e-5100e10e323mr18789131cf.13.1777346057840;
        Mon, 27 Apr 2026 20:14:17 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1777346057; cv=none;
        d=google.com; s=arc-20240605;
        b=jh0SuS+D1K7PYq1gYK3UpzqSJcRIuWhI91wKagPmKQIdqm9mttxCEmZ5rxwjZWGMKS
         GygvurpK2uvGucRghiROuGcpA1VqtoVkcfr/rwOMrDOyELN0gZnOjzj5MwhTtjF8HmhL
         10AbtgFJi5aZVMkYf33+31pjGt5DoShNHH0iIzGbOUcLHwOlCjrphWBb+wY1/yG/RQ+f
         8riJ8kV67E4691rY56A9A6rpUa/5g5P/WrlZ92CvYLTin9JSSK8nWeo73+j6V4qtygmU
         pjR7/08cC+e18beQWl3n10eYzq9zrHKlbv8OXPk7U7r74UKyuXfOzJHWtLGZsTEevIcS
         NNmg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605;
        h=list-unsubscribe-post:list-unsubscribe:list-post:list-id
         :list-archive:list-url:list-owner:reply-to:in-reply-to:references
         :sender:feedback-id:date:message-id:to:from:subject:mime-version
         :dkim-signature:dkim-signature;
        bh=HbE9xFTDH/3YSKDxhZOczAlBx+MXKfQ6/V7LhAOF6Dg=;
        fh=9zP21OW67FFZD2VV42mGudo540Qp4aalMWxJB5kMYug=;
        b=UiiXf/jWbIyTZV0KqoewAubP2Yh86gbL48B38Spa/8fI+xxB+bUnh3l5EiYy3PKyZx
         BEVRzOiaE0YVc6/vNpbH+Wk3Cg9ySsh4T+EtIYRUW46YXyfudHLW/5cQYdFFEXGnv7PY
         9Xpnk7uvTsGRrKZ/P5go6IhiLibKPPX25onlz2J/1gLLuF9yNgk1nt+62WTYFOH2FvHM
         nFgvL78lS24qpVRDHVaK1dGSYgxOxlBz5qrdhzvIKjBaX54wWbRANywWT+dDzKV06JQy
         +ahbWyxh2VMBv/ja6W8VOpxhNf85q3AoBrnS15uksU/1THGvWon+agKmgJGRjggLYrrq
         f+ag==;
        dara=google.com
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=pass header.i=@mg-d0.substack.com header.s=mailo header.b=L4YOcZdD;
       dkim=pass header.i=@mailgun.org header.s=mg header.b=sjvyjmPt;
       spf=pass (google.com: domain of bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com designates 159.112.244.10 as permitted sender) smtp.mailfrom="bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com";
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=substack.com
Return-Path: <bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com>
Received: from v510.v5375b7fa.use4.send.mailgun.net (v510.v5375b7fa.use4.send.mailgun.net. [159.112.244.10])
        by mx.google.com with UTF8SMTPS id 6a1803df08f44-8b3e27ea760si15134846d6.106.2026.04.27.20.14.17
        for <tjphuhs@gmail.com>
        (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
        Mon, 27 Apr 2026 20:14:17 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com designates 159.112.244.10 as permitted sender) client-ip=159.112.244.10;
Authentication-Results: mx.google.com;
       dkim=pass header.i=@mg-d0.substack.com header.s=mailo header.b=L4YOcZdD;
       dkim=pass header.i=@mailgun.org header.s=mg header.b=sjvyjmPt;
       spf=pass (google.com: domain of bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com designates 159.112.244.10 as permitted sender) smtp.mailfrom="bounce+91e48a.63af5d-tjphuhs=gmail.com@mg-d0.substack.com";
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=substack.com
DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg-d0.substack.com; q=dns/txt; s=mailo; t=1777346057; x=1777353257;
 h=List-Unsubscribe-Post: List-Unsubscribe: List-Post: List-Id: List-Archive: List-Owner: Reply-To: In-Reply-To: References: Sender: Sender: Date: Message-Id: To: To: From: From: Subject: Subject: Content-Type: Mime-Version: X-Feedback-Id;
 bh=HbE9xFTDH/3YSKDxhZOczAlBx+MXKfQ6/V7LhAOF6Dg=;
 b=L4YOcZdD1TVKJkw7HRm/u4zO+JHAMOHg36IVb10Bj1zatNCTkxsQG+x6b5I7udGBHdjf0qmM3QB79xLuTRA6TrOziKC8StI9CRLsDByx1hoVoYEHUtq/2GLgzZBZhhds6qTEGiDRk0ICfjOaUK/CuE9VR1IGtwJ/n71MkwajHNU=
DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mailgun.org; q=dns/txt; s=mg; t=1777346057; x=1777353257;
 h=List-Unsubscribe-Post: List-Unsubscribe: List-Post: List-Id: List-Archive: List-Owner: Reply-To: In-Reply-To: References: Sender: Sender: Date: Message-Id: To: To: From: From: Subject: Subject: Content-Type: Mime-Version: X-Feedback-Id;
 bh=HbE9xFTDH/3YSKDxhZOczAlBx+MXKfQ6/V7LhAOF6Dg=;
 b=sjvyjmPtkHWu1gVZbQUQycLR2wEIE9ADVtS514k+YR2KoMZiRc/cwsRjrvYREHvujeyHRh1Zai+c5DycMFtGIvXa7R4x35hZ2x773LbQ48JmVzZ5yfIyWJq78asJ4AHQqfM2QNdXZgm/NPV5ABqC/4T3iaAEbPHLEISqji+tgMs=
X-Mailgun-Sid: WyJkZWU4NyIsInRqcGh1aHNAZ21haWwuY29tIiwiNjNhZjVkIl0=
X-Feedback-Id: postmaster@mg-d0.substack.com:post:6148c7d8a45790427cda307f:mailgun
Received: by a3334162d2733f0ec11d75e03c0e78beef8e01bd93d72258d278704852f405a9 with HTTP
 id 69f0260974ad0581dfaca416; Tue, 28 Apr 2026 03:14:17 GMT
X-Mailgun-Sending-Ip: 159.112.244.10
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="5393614305e6dfe7109844a10f8e1d429fd36b341dd731a558ce77a4c817"
Subject: How Stripe Detects Fraudulent Transactions Within 100 ms
From: ByteByteGo <bytebytego@substack.com>
To: tjphuhs@gmail.com
X-Mailgun-Tag: post
X-Mailgun-Track-Clicks: false
Message-Id: <20260428030353.3.77ee61a8005ad4eb@mg-d0.substack.com>
Date: Tue, 28 Apr 2026 03:03:53 +0000
Feedback-Id: post-195387505:cat-post:pub-817132:substack
Sender: ByteByteGo <bytebytego@substack.com>
References: <post-195387505@substack.com>
In-Reply-To: <post-195387505@substack.com>
Reply-To: ByteByteGo
 <reply+38btyp&4iwoe6&&b371678cbcaabe75f5defeacaf4221992b5a31391056361de48f204e64ca2e1c@mg1.substack.com>
List-Owner: <mailto:bytebytego@substack.com>
List-Url: <https://blog.bytebytego.com/>
List-Archive: <https://blog.bytebytego.com/archive>
List-Id: <bytebytego.substack.com>
List-Post: <https://blog.bytebytego.com/p/how-stripe-detects-fraudulent-transactions>
List-Unsubscribe: <https://blog.bytebytego.com/action/disable_email/disable?token=eyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NTM4NzUwNSwiaWF0IjoxNzc3MzQ2MDU3LCJleHAiOjE4MDg4ODIwNTcsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJkaXNhYmxlX2VtYWlsIn0._AdIHELwnoyy4hc338qNxSfZB15niv_iTw9DGeBO_3k&all_sections=true>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
X-Mailgun-Variables: {"category": "post", "email_generated_at": "1777346057355", "is_freemail":
 "true", "post_audience": "everyone", "post_id": "195387505", "post_type":
 "newsletter", "pub_community_enabled": "true", "publication_id": "817132",
 "subdomain": "bytebytego", "user_id": "273622398"}

--5393614305e6dfe7109844a10f8e1d429fd36b341dd731a558ce77a4c817
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

View this post on the web at https://blog.bytebytego.com/p/how-stripe-detec=
ts-fraudulent-transactions

New Year, New Metrics: Evaluating AI Search in the Agentic Era (Sponsored) =
[ https://substack.com/redirect/345b315a-2bc2-426d-a535-3161bf528f93?j=3Dey=
J1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs ]
Most teams pick a search provider by running a few test queries and hoping =
for the best =E2=80=93 a recipe for hallucinations and unpredictable failur=
es. This technical guide [ https://substack.com/redirect/345b315a-2bc2-426d=
-a535-3161bf528f93?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768B=
WtuZifRB-Zs ] from You.com [ https://substack.com/redirect/345b315a-2bc2-42=
6d-a535-3161bf528f93?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p76=
8BWtuZifRB-Zs ] gives you access to an exact framework to evaluate AI searc=
h and retrieval.
What you=E2=80=99ll get:
A four-phase framework for evaluating AI search
How to build a golden set of queries that predicts real-world performance
Metrics and code for measuring accuracy
Go from =E2=80=9Clooks good=E2=80=9D to proven quality.
Every time you buy something online from a Stripe-powered business, a machi=
ne learning model evaluates over 1,000 signals about your transaction and d=
ecides in under 100 milliseconds whether to let it through.
Across billions of legitimate payments, it reaches the correct verdict 99.9=
% of the time. The system that delivers those numbers, however, looks entir=
ely different from what Stripe originally built.
The architecture has been overhauled multiple times, and one of the most im=
portant upgrades required removing a component the team knew was actively i=
mproving accuracy, because keeping it was holding back everything else the =
team wanted to do.
For reference, online payment fraud occurs in roughly 1 out of every 1,000 =
transactions. That rarity makes fraud detection a difficult machine learnin=
g problem because the system has to surface a small number of fraudulent pa=
yments from a massive volume of legitimate ones, and it has to do this quic=
kly and cheaply on every single transaction.
In this article, we will look at how Stripe=E2=80=99s Radar does this effec=
tively and the architectural decisions the team took while building it.
Disclaimer: This post is based on publicly shared details from the Stripe E=
ngineering Team. Please comment if you notice any inaccuracies.
Why Stripe Removed the Component That Was Making Radar Better
Stripe began with relatively simple ML models like logistic regression (a s=
tatistical method that predicts the probability of an outcome based on inpu=
t variables). Over time, as the Stripe network grew and ML technology advan=
ced, they moved to more complex architectures. Each jump produced an equiva=
lent leap in model performance.
The architecture preceding the current one was called Wide & Deep. It combi=
ned two models into an ensemble.
The =E2=80=9Cwide=E2=80=9D component was XGBoost, a gradient-boosted decisi=
on tree that works by combining many small decision trees into one powerful=
 predictor. XGBoost excelled at memorization, meaning it was strong at reco=
gnizing specific patterns and feature correlations it had encountered in tr=
aining data.
The =E2=80=9Cdeep=E2=80=9D component was a deep neural network (DNN) that e=
xcelled at generalization, meaning it could learn abstract concepts like =
=E2=80=9Cunusual payment velocity on a card=E2=80=9D and apply them to enti=
rely new situations it had never seen before.
Together, the two components worked well. But XGBoost was creating operatio=
nal bottlenecks. It was hard to parallelize, which meant retraining the com=
bined model was slow. It was incompatible with advanced ML techniques Strip=
e wanted to adopt, like transfer learning that involves using knowledge gai=
ned from one task to improve performance on a different but related task, a=
nd embeddings. And it was also limiting how quickly the many engineers work=
ing on Radar each day could experiment with new ideas.
Simply dropping XGBoost would have caused a 1.5% drop in recall, meaning 1.=
5% more fraud would go undetected. That was an unacceptably large regressio=
n in performance. The value XGBoost provided was real and measurable, so it=
 had to be replicated within a new architecture rather than just discarded.
Stripe=E2=80=99s solution drew inspiration from a research architecture cal=
led ResNeXt.
The core idea, sometimes called =E2=80=9CNetwork-in-Neuron,=E2=80=9D splits=
 computation into multiple distinct branches, where each branch functions a=
s a small neural network on its own. The outputs from all branches are summ=
ed to produce a final result. This multi-branch approach enriches feature r=
epresentation along a new dimension, and it achieves this more effectively =
than the brute-force approach of simply making a DNN wider or deeper, which=
 risks overfitting (the model memorizing random noise rather than learning =
real patterns).
The resulting architecture, internally called Shield NeXt, reduced training=
 time by over 85%, bringing it to under two hours. Experiments that previou=
sly required overnight jobs could now run multiple times in a single workin=
g day. Stripe is now exploring techniques that this architectural shift mad=
e possible, including multi-task learning, where a single model is trained =
to handle several related objectives simultaneously.
[Live on May 6] Stop babysitting your agents (Sponsored) [ https://substack=
=2Ecom/redirect/a95b6182-9924-4322-9ec=
e-ce3923bfe123?j=3DeyJ1IjoiNGl3b2U2In0.=
sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs ]
Agents can generate code. Getting it right for your system, team convention=
s, and past decisions is the hard part. You end up babysitting the agent an=
d watch the token costs climb.
More MCPs, rules, and bigger context windows give agents access to informat=
ion, but not understanding. The teams pulling ahead have a context engine t=
o give agents only what they need for the task at hand.
Join us live (FREE) on May 6 [ https://substack.com/redirect/a95b6182-9924-=
4322-9ece-ce3923bfe123?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p=
768BWtuZifRB-Zs ] to see:
Where teams get stuck on the AI maturity curve and why common fixes fall sh=
ort
How a context engine solves for quality, efficiency, and cost
Live demo: the same coding task with and without a context engine
The Stripe Platform=E2=80=99s Data Advantage
The model architecture matters, but Radar=E2=80=99s biggest competitive adv=
antage comes from the data flowing through the Stripe network. Stripe has e=
ngineered specific mechanisms to convert that scale into model performance.
90% of cards used on the Stripe network have been seen more than once acros=
s different merchants. A single business has visibility into only its own t=
ransactions. Radar, by contrast, sees patterns across millions of businesse=
s and thousands of partner banks around the world.
There is also a structural advantage in how Radar gets its training labels,=
 the data that tells the model which past transactions were actually fraudu=
lent. Since Radar is built directly into Stripe=E2=80=99s payment flow, it =
receives these labels automatically when cardholders dispute charges. Most =
third-party fraud solutions require businesses to build separate data pipel=
ines for sending payment labels back to the fraud provider, or to label pay=
ments manually, which is time-consuming and error-prone. Radar sidesteps al=
l of this by ingesting ground truth data straight from the payment flow and=
 card networks.
Stripe uses hundreds of features in its model, and most of them are aggrega=
tes computed across the entire network. As the network grows, each feature =
becomes more informative because the training data better represents the fe=
ature=E2=80=99s real-world distribution.
A =E2=80=9Cfeature=E2=80=9D in this context is a single signal the model us=
es to evaluate a transaction. Some are intuitive. For example, does the car=
dholder=E2=80=99s name match the provided email address? How many different=
 cards have been associated with this IP address? A high count might indica=
te someone testing stolen cards. Other features are more surprising. The di=
fference between the device=E2=80=99s local time and UTC, or the count of c=
ountries where a card has been successfully authorized, both turn out to be=
 meaningful fraud signals.
Finding new features is part forensics and part experimentation. Stripe=E2=
=80=99s team reviews past fraud attacks in detail, building investigation r=
eports that try to reconstruct how fraudsters operate. They look for patter=
ns in throwaway email addresses used to set up multiple accounts quickly. T=
hey monitor dark web activity weekly. From this research, they build a prio=
ritized list of candidate features, implement each one rapidly, and prototy=
pe them to measure model impact.
Sometimes the most promising ideas yield little. For example, Stripe once b=
uilt a feature capturing whether a business was currently under a distribut=
ed fraud attack. It barely moved the model performance because the model wa=
s already learning that pattern implicitly.
One of the more powerful techniques Stripe uses is embeddings, which are le=
arned numerical representations for categorical data. Things like merchant =
identity, issuing bank, user country, and day of the week have many possibl=
e values, and defining useful numerical representations for them is challen=
ging.
Stripe trains its model to learn an embedding for each value, essentially a=
 set of coordinates that position it relative to others based on transactio=
n patterns. Uber and Lyft, for example, would end up with similar embedding=
 coordinates because their transaction patterns resemble each other, while =
Slack would be positioned very differently.
Embeddings enable geographic transfer of fraud knowledge. If Stripe identif=
ies a new fraud pattern in Brazil, the embeddings allow the system to recog=
nize that same pattern in the US automatically, without retraining. The mod=
el essentially learns which merchants and regions behave similarly, then ap=
plies fraud knowledge across the entire network.
Stripe also found that scaling up training data continued to yield signific=
ant gains. A 10x increase in training transaction data still produced meani=
ngful model improvements, and the team was working on a 100x version. This =
kind of scaling was only feasible because the DNN-only architecture could t=
rain fast enough to handle much larger datasets practically.
The Tradeoff Every Fraud System Has to Make
Having a great model and great data still leaves a fundamental question una=
nswered.
How much fraud should you actually block?
Every fraud detection system faces an inherent tension between two types of=
 errors:
A false negative is when fraud slips through undetected, costing the busine=
ss the product, a chargeback fee, and potential reputational damage with ca=
rd networks.
A false positive is when a legitimate customer gets blocked, and the busine=
ss loses the sale, along with potentially the customer forever. A survey fo=
und that 33% of consumers said they would stop shopping at a business after=
 a single false decline.
These two errors exist on a curve.
Precision measures the fraction of blocked transactions that are actually f=
raudulent. Recall measures the fraction of all actual fraud that gets caugh=
t. As you raise the blocking threshold, requiring a higher fraud probabilit=
y before blocking a payment, precision goes up because you become more sele=
ctive about what you block. But recall goes down because more marginal frau=
d slips through. Lowering the threshold pushes things in the opposite direc=
tion.
Stripe frames this as two distinct problems:
The data science problem is about making the model better by adding predict=
ive features, training on more data, and refining the architecture. A bette=
r model shifts the entire precision-recall curve upward, meaning that at an=
y given threshold, you get better outcomes on both dimensions.
The business problem is about choosing where on that curve to operate, and =
the right answer depends entirely on the economics of each merchant.
For example, consider two businesses.
A food delivery company with thin margins might earn $2 in profit per order=
=2E Once you account for product cost a=
nd chargeback fees, a single fraudulen=
t transaction can wipe out the profit from nearly 19 legitimate ones. For t=
his business, aggressive blocking makes sense because the cost of missed fr=
aud is devastating. On the other hand, a SaaS company with high margins fac=
es the opposite calculation. The lifetime revenue lost by blocking a legiti=
mate subscriber who would have paid $200 per month for years far outweighs =
the cost of an occasional fraudulent charge.
This is why Stripe built Radar to be configurable.
Merchants can adjust their risk threshold, and Radar for Fraud Teams lets t=
hem compose custom rules and set up manual review queues.
Stripe evaluates custom rules with the same precision-recall framework it u=
ses for the model itself. When a merchant creates a rule, Stripe shows hist=
orical statistics on matching transactions that were actually disputed, ref=
unded, or accepted, so the merchant can evaluate the impact before the rule=
 goes live. Stripe also uses additional evaluation tools like ROC curves an=
d AUC (area under the curve) scores to assess overall model quality, but th=
e precision-recall framing captures the core tension most directly.
Manual review adds yet another lever.
Sending borderline transactions to human reviewers instead of blocking them=
 outright improves precision with minimal impact on recall. Also, sending b=
orderline transactions to review instead of allowing them through improves =
recall with minimal impact on precision. The cost is human effort, but it g=
ives merchants a way to reshape their own precision-recall curve using busi=
ness knowledge the model cannot access on its own.
Making a Black Box Explain Itself
All machine learning models are opaque to some degree, and deep neural netw=
orks are especially more opaque. Stripe accepted this when they chose DNNs =
over simpler, more interpretable techniques. The predictions are better, bu=
t explaining why a specific transaction received a given score is harder.
Stripe=E2=80=99s response was to build layers of interpretability around th=
e model.
In 2020, they launched risk insights, a feature that shows merchants which =
factors contributed to a transaction being declined. The interface displays=
 the top fraud signals, like an address being associated with a previous ea=
rly fraud warning or an unusually high number of names linked to a card. It=
 includes a location map showing distances between the billing address, shi=
pping address, and IP address. It shows customer metadata like email, cardh=
older name, and the authorization rate for transactions associated with tha=
t email.
See the diagram below:
Stripe also uses Elasticsearch, a search engine optimized for fast lookups =
across large datasets, to surface related transactions and help merchants p=
ut a specific decline in a broader context.
Internally, the team built a table view displaying the exact features contr=
ibuting most to a transaction=E2=80=99s fraud score, which engineers use to=
 debug support cases. Stripe is working on sharing more of these internal t=
ools with merchants, closing the gap between what engineers can see and wha=
t users can see.
Explainability serves a practical purpose beyond building trust. When merch=
ants understand why Radar scored a transaction the way it did, they can imp=
rove the data they send to Stripe for more accurate decisions. They can cre=
ate custom rules that incorporate knowledge only they have about their own =
business. The explanation layer transforms Radar from a black box into some=
thing merchants can actively collaborate with.
Getting the Model Into Production
Building a better model is half the challenge. Deploying it safely at Strip=
e=E2=80=99s scale is the other half, and it involves two hard engineering p=
roblems.
The first is real-time feature computation. Every feature the model uses du=
ring training must also be computable in production, because Radar needs to=
 score every incoming payment as part of the Stripe API flow. For a feature=
 like =E2=80=9Cthe two most frequent IP addresses previously used with this=
 card,=E2=80=9D Stripe maintains an up-to-date state on every card ever see=
n on the network, and fetching or updating that state has to be fast. Strip=
e=E2=80=99s ML infrastructure team built systems that let engineers define =
features declaratively, with current values made available automatically in=
 production at low latency.
The second is ensuring that model improvements hold across the entire user =
base, all the way down to individual merchants. A model that performs bette=
r on aggregate metrics might still cause a spike in block rate for smaller =
businesses, which would be disruptive for those merchants and their custome=
rs. Before releasing any model, Stripe measures the change it would cause t=
o the false positive rate, block rate, and authorization rate on both an ag=
gregate and per-merchant basis. If a model would cause undesirable shifts f=
or certain users, they adjust it for those segments before release. They al=
so compare score distributions between old and new models, aiming to keep t=
he proportion of transactions above each merchant=E2=80=99s blocking thresh=
old stable.
Fraud patterns shift constantly, which means even a well-performing model d=
egrades over time, a phenomenon called model drift. Stripe found that retra=
ining the same model on more recent data, with identical features and archi=
tecture, improves recall by up to half a percentage point per month. That i=
s a big gain from simply keeping the data fresh. By investing in automated =
training, tuning, and evaluation tooling, Stripe tripled their model releas=
e cadence. They continuously update performance dashboards after training b=
ut before release, so engineers can spot stale model candidates and proacti=
vely retrain them.
The fraud landscape itself keeps evolving. Patterns have shifted from prima=
rily stolen credit card fraud to a growing mix of traditional card fraud an=
d high-velocity card testing attacks, where automated scripts try large num=
bers of stolen card numbers against a merchant=E2=80=99s checkout flow. Str=
ipe=E2=80=99s deployment infrastructure is built to support this kind of ra=
pid adaptation.
Stripe also faces a subtle measurement challenge in production. Transaction=
s that the model blocks have unknown true outcomes because the payment was =
never completed. Computing a full production precision-recall curve require=
s counterfactual analysis, meaning statistical methods that estimate what w=
ould have happened to payments Radar blocked. Stripe has developed propriet=
ary techniques for this over the years.
Conclusion
Radar is a very different product from what it was at launch.
The models, the data pipelines, the explainability tools, and the way Strip=
e communicates fraud decisions to merchants have all been rebuilt. Fraud pa=
tterns have changed considerably in that time as well.
However, the core goal of the Radar team remains the same.
They are still working to create an environment where businesses and custom=
ers can transact with confidence, still optimizing that brief moment custom=
ers barely register, the instant between clicking =E2=80=9Cpurchase=E2=80=
=9D and seeing the transaction confirmed. Every architectural choice, every=
 feature, every deployment safeguard exists to make that 100-millisecond wi=
ndow as accurate, fair, and trustworthy as possible.
References:
How we built it: Stripe Radar [ https://substack.com/redirect/6bd09269-ee41=
-472f-beb6-9294025800f9?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3=
p768BWtuZifRB-Zs ]
A primer on machine learning for fraud detection [ https://substack.com/red=
irect/6bd09269-ee41-472f-beb6-9294025800f9?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ=
85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs ]

Unsubscribe https://substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGV=
ieXRlZ28uY29tL2FjdGlvbi9kaXNhYmxlX2VtYWlsP3Rva2VuPWV5SjFjMlZ5WDJsa0lqb3lOek=
0yTWpJek9UZ3NJbkJ2YzNSZmFXUWlPakU1TlRNNE56VXdOU3dpYVdGMElqb3hOemMzTXpRMk1EV=
TNMQ0psZUhBaU9qRTRNRGc0T0RJd05UY3NJbWx6Y3lJNkluQjFZaTA0TVRjeE16SWlMQ0p6ZFdJ=
aU9pSmthWE5oWW14bFgyVnRZV2xzSW4wLl9BZElIRUx3bm95eTRoYzMzOHFOeFNmWkIxNW5pdl9=
pVHc5REdlQk9fM2siLCJwIjoxOTUzODc1MDUsInMiOjgxNzEzMiwiZiI6dHJ1ZSwidSI6MjczNj=
IyMzk4LCJpYXQiOjE3NzczNDYwNTcsImV4cCI6MjA5MjkyMjA1NywiaXNzIjoicHViLTAiLCJzd=
WIiOiJsaW5rLXJlZGlyZWN0In0.4pB4XR74oI4GZgGKY_ob-IB56k4tHZ8u0OSW2emIgLI?
--5393614305e6dfe7109844a10f8e1d429fd36b341dd731a558ce77a4c817
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html lang=3D"en" dir=3D"ltr" style=3D"scrollbar-width: thin;scrollbar-colo=
r: rgb(219,219,219)rgb(255,255,255);"><head><meta charset=3D"utf-8"><title>=
How Stripe Detects Fraudulent Transactions Within 100 ms</title><style>
@media (max-width: 1024px) {
  .typography .pullquote-align-left,
  .typography.editor .pullquote-align-left,
  .typography .pullquote-align-right,
  .typography.editor .pullquote-align-right,
  .typography .pullquote-align-wide,
  .typography.editor .pullquote-align-wide,
  .typography .pullquote-align-center,
  .typography.editor .pullquote-align-center {
    float: none;
    margin: 0 auto;
    width: 100%;
    max-width: 100%;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .typography .markup table.image-wrapper img,
  .typography.editor .markup table.image-wrapper img,
  .typography .markup table.kindle-wrapper img,
  .typography.editor .markup table.kindle-wrapper img {
    max-width: 550px;
  }
}
@media (min-width: 1024px) {
  .typography:not(:has(#toc)) .captioned-image-container figure:has(> a.ima=
ge2-offset-left),
  .typography.editor:not(:has(#toc)) .captioned-image-container figure:has(=
> a.image2-offset-left) {
    margin-left: var(--image-offset-margin);
  }
  .typography:not(:has(#toc)) .captioned-image-container figure:has(> a.ima=
ge2-offset-right),
  .typography.editor:not(:has(#toc)) .captioned-image-container figure:has(=
> a.image2-offset-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (min-width: 1300px) {
  .typography .captioned-image-container figure:has(> a.image2-offset-left)=
,
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-left) {
    margin-left: var(--image-offset-margin);
  }
  .typography .captioned-image-container figure:has(> a.image2-offset-right=
),
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (max-width: 1024px) {
  .typography,
  .typography.editor {
    /* Disable offset on mobile/tablet */
  }
  .typography .captioned-image-container figure:has(> a.image2-align-left),
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-left),
  .typography .captioned-image-container figure:has(> a.image2-align-right)=
,
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-right) {
    float: none;
    margin: 1em auto;
    max-width: 100%;
    width: auto;
    padding: 0;
  }
  .typography .captioned-image-container figure:has(> a.image2-align-left.t=
hefp),
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-left.thefp),
  .typography .captioned-image-container figure:has(> a.image2-align-right.=
thefp),
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-right.thefp) {
    margin: 1em auto;
  }
  .typography .captioned-image-container figure:has(> a.image2-offset-left)=
,
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-left),
  .typography .captioned-image-container figure:has(> a.image2-offset-right=
),
  .typography.editor .captioned-image-container figure:has(> a.image2-offse=
t-right) {
    margin: 1em auto;
  }
  .typography .captioned-image-container figure:has(> a.image2-align-left) =
=2Eimage2-inset,
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-left) .image2-inset,
  .typography .captioned-image-container figure:has(> a.image2-align-right)=
 .image2-inset,
  .typography.editor .captioned-image-container figure:has(> a.image2-align=
-right) .image2-inset {
    display: block;
    justify-content: initial;
  }
}
@media (max-width: 768px) {
  .typography .markup div.sponsorship-campaign-embed,
  .typography.editor .markup div.sponsorship-campaign-embed {
    margin-top: 24px;
    margin-bottom: 24px;
  }
  .typography .markup div.sponsorship-campaign-embed:first-child,
  .typography.editor .markup div.sponsorship-campaign-embed:first-child {
    margin-top: 0px;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.youtube-overlay,
  .typography.editor .markup div.youtube-overlay,
  .typography .markup div.vimeo-overlay,
  .typography.editor .markup div.vimeo-overlay {
    display: none !important;
  }
}
@media screen and (max-width: 370px) {
  .typography .markup div.tiktok-wrap,
  .typography.editor .markup div.tiktok-wrap {
    width: calc(95vw - 32px);
    height: calc((95vw - 32px - 2px) / 0.485714);
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.embedded-publication-wrap .embedded-publication.s=
how-subscribe,
  .typography.editor .markup div.embedded-publication-wrap .embedded-public=
ation.show-subscribe {
    padding: 24px;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.subscription-widget-wrap .subscription-widget.sho=
w-subscribe,
  .typography.editor .markup div.subscription-widget-wrap .subscription-wid=
get.show-subscribe,
  .typography .markup div.subscription-widget-wrap-editor .subscription-wid=
get.show-subscribe,
  .typography.editor .markup div.subscription-widget-wrap-editor .subscript=
ion-widget.show-subscribe,
  .typography .markup div.captioned-button-wrap .subscription-widget.show-s=
ubscribe,
  .typography.editor .markup div.captioned-button-wrap .subscription-widget=
=2Eshow-subscribe {
    padding: 0px 24px;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup div.subscription-widget-wrap .subscription-widget.sho=
w-subscribe .subscription-widget-subscribe .button,
  .typography.editor .markup div.subscription-widget-wrap .subscription-wid=
get.show-subscribe .subscription-widget-subscribe .button,
  .typography .markup div.subscription-widget-wrap-editor .subscription-wid=
get.show-subscribe .subscription-widget-subscribe .button,
  .typography.editor .markup div.subscription-widget-wrap-editor .subscript=
ion-widget.show-subscribe .subscription-widget-subscribe .button,
  .typography .markup div.captioned-button-wrap .subscription-widget.show-s=
ubscribe .subscription-widget-subscribe .button,
  .typography.editor .markup div.captioned-button-wrap .subscription-widget=
=2Eshow-subscribe .subscription-widget-subscribe .button {
    padding: 10px 12px;
    min-width: 110px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed,
  .typography.editor .markup .twitter-embed,
  .typography .markup .tweet,
  .typography.editor .markup .tweet {
    padding: 12px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed .tweet-text,
  .typography.editor .markup .twitter-embed .tweet-text,
  .typography .markup .tweet .tweet-text,
  .typography.editor .markup .tweet .tweet-text {
    font-size: 14px;
    line-height: 20px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed .tweet-photos-container.two,
  .typography.editor .markup .twitter-embed .tweet-photos-container.two,
  .typography .markup .tweet .tweet-photos-container.two,
  .typography.editor .markup .tweet .tweet-photos-container.two,
  .typography .markup .twitter-embed .tweet-photos-container.three,
  .typography.editor .markup .twitter-embed .tweet-photos-container.three,
  .typography .markup .tweet .tweet-photos-container.three,
  .typography.editor .markup .tweet .tweet-photos-container.three,
  .typography .markup .twitter-embed .tweet-photos-container.four,
  .typography.editor .markup .twitter-embed .tweet-photos-container.four,
  .typography .markup .tweet .tweet-photos-container.four,
  .typography.editor .markup .tweet .tweet-photos-container.four {
    height: 200px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed a.expanded-link .expanded-link-img,
  .typography.editor .markup .twitter-embed a.expanded-link .expanded-link-=
img,
  .typography .markup .tweet a.expanded-link .expanded-link-img,
  .typography.editor .markup .tweet a.expanded-link .expanded-link-img {
    max-height: 180px;
  }
}
@media (max-width: 650px) {
  .typography .markup .twitter-embed a.expanded-link .expanded-link-descrip=
tion,
  .typography.editor .markup .twitter-embed a.expanded-link .expanded-link-=
description,
  .typography .markup .tweet a.expanded-link .expanded-link-description,
  .typography.editor .markup .tweet a.expanded-link .expanded-link-descript=
ion {
    display: none;
  }
}
@media screen and (max-width: 650px) {
  .typography .markup .apple-podcast-container,
  .typography.editor .markup .apple-podcast-container {
    width: unset;
  }
}
@media (max-width: 420px) {
  .typography .markup .install-substack-app-embed img.install-substack-app-=
embed-img,
  .typography.editor .markup .install-substack-app-embed img.install-substa=
ck-app-embed-img {
    margin: 0 auto 16px auto;
  }
}
@media (max-width: 420px) {
  .typography .markup .install-substack-app-embed .install-substack-app-emb=
ed-text,
  .typography.editor .markup .install-substack-app-embed .install-substack-=
app-embed-text {
    margin: 0 0 12px 0;
    max-width: 100%;
    width: auto;
    text-align: center;
  }
}
@media (max-width: 420px) {
  .typography .markup .install-substack-app-embed .install-substack-app-emb=
ed-link,
  .typography.editor .markup .install-substack-app-embed .install-substack-=
app-embed-link {
    display: flex;
    justify-content: center;
  }
}
@media screen and (min-width: 481px) {
  .share-button-container {
    height: 38px;
  }
}
@media screen and (min-width: 481px) {
  .share-button-container a.comment {
    height: 38px;
    line-height: 38px;
    padding-right: 10px;
  }
}
@media screen and (max-width: 480px) {
  .share-button-container .separator {
    display: block;
    margin: 0;
    height: 8px;
    border-left: none;
  }
}
@media screen and (max-width: 480px) {
  .share-button-container a.share.first img {
    padding-left: 0;
  }
}
@media screen and (min-width: 481px) {
  .share-button-container a.mobile {
    display: none !important;
  }
}
@media screen and (min-width: 541px) {
  .settings-add-pub-modal-wrapper .container .add-recommending-pub-modal-co=
ntainer {
    padding: 36px;
    height: 680px;
  }
}
@media screen and (min-width: 541px) {
  .settings-add-pub-modal-wrapper .container .add-recommending-pub-modal-co=
ntainer .footer {
    position: absolute;
    bottom: 36px;
    margin: 0px;
  }
}
@media screen and (max-width: 650px) {
  .header-anchor-parent {
    display: none;
  }
}
@media screen and (max-width: 768px) {
  .post {
    padding: 16px 0 0 0;
  }
}
@media screen and (max-width: 650px) {
  .post .post-header .post-label {
    margin-top: 8px;
  }
}
@media screen and (max-width: 650px) {
  .post .post-header .meta-author-wrap.alternative-meta .meta-right-column =
=2Epost-meta {
    margin-top: 6px;
  }
}
@media screen and (max-width: 650px) {
  .post .footer-facepile-container {
    height: 64px;
    padding: 0 16px;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    width: 100%;
  }
}
@media screen and (max-width: 650px) {
  .post .post-footer.use-separators {
    justify-content: center;
  }
}
@media screen and (max-width: 650px) {
  .post .post-footer.next-prev {
    height: 64px;
    justify-content: space-between;
    box-sizing: border-box;
  }
}
@media screen and (max-width: 650px) {
  .post-contributor-footer .post-contributor-bio-table {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-table-row {
    display: flex;
    flex-direction: row;
  }
  .post-contributor-footer .post-contributor-bio-userhead-cell,
  .post-contributor-footer .post-contributor-bio-body-cell {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-body-cell {
    flex-grow: 1;
  }
  .post-contributor-footer .post-contributor-bio-body-table {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-body-table-row {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-copy-cell,
  .post-contributor-footer .post-contributor-bio-controls-cell {
    display: block;
  }
  .post-contributor-footer .post-contributor-bio-copy-cell {
    margin: 0 0 16px 0;
  }
  .post-contributor-footer .post-contributor-bio-controls-cell {
    width: auto;
  }
  .post-contributor-footer .post-contributor-bio-controls {
    margin: auto;
  }
  .post-contributor-footer .post-contributor-bio-controls .button.primary {
    width: 100%;
  }
  .post-contributor-footer .post-contributor-bio-text {
    font-size: 14px;
  }
}
@media screen and (min-width: 768px) {
  .post-silhouette {
    padding: 32px 0;
  }
}
@media screen and (max-width: 650px) {
  .post-silhouette .post-silhouette-title {
    margin-top: 10.44225025px;
    height: 120px;
  }
}
@media screen and (max-width: 650px) {
  .post-silhouette .post-silhouette-meta {
    width: 75%;
  }
}
@media screen and (max-width: 650px) {
  .post-silhouette .post-silhouette-meta.with-byline-image {
    margin: 20px 0;
  }
}
@media screen and (max-width: 650px) {
  .use-theme-bg .post-meta.alternative-meta .post-meta-item,
  .post-meta.alternative-meta .post-meta-item {
    padding-right: 16px;
  }
}
@media screen and (max-width: 370px) {
  .use-theme-bg .post-meta.alternative-meta .post-meta-item,
  .post-meta.alternative-meta .post-meta-item {
    font-size: 14px;
  }
}
@media screen and (max-width: 650px) {
  .use-theme-bg .post-meta.alternative-meta .post-meta-item.guest-author-pu=
blication,
  .post-meta.alternative-meta .post-meta-item.guest-author-publication {
    display: none;
  }
}
@media screen and (max-width: 370px) {
  .post-meta .post-meta-item .post-meta-button {
    height: 36px !important;
    /* important to override in-line height style on emails */
  }
  .post-meta .post-meta-item .post-meta-button .meta-button-label {
    display: none;
  }
  .post-meta .post-meta-item .post-meta-button > svg {
    margin-right: 0;
  }
}
@media screen and (max-width: 370px) {
  .post-meta .post-meta-item {
    font-size: 12px;
  }
}
@media screen and (max-width: 650px) {
  .post .floating-subscribe-button {
    bottom: 20px;
    right: 20px;
  }
}
@media (max-width: 1024px) {
  body .pullquote-align-left,
  body .pullquote-align-right,
  body .pullquote-align-wide,
  body .pullquote-align-center {
    float: none;
    margin: 0 auto;
    width: 100%;
    max-width: 100%;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  body .markup table.image-wrapper img,
  body .markup table.kindle-wrapper img {
    max-width: 550px;
  }
}
@media (min-width: 1024px) {
  body:not(:has(#toc)) .captioned-image-container figure:has(> a.image2-off=
set-left) {
    margin-left: var(--image-offset-margin);
  }
  body:not(:has(#toc)) .captioned-image-container figure:has(> a.image2-off=
set-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (min-width: 1300px) {
  body .captioned-image-container figure:has(> a.image2-offset-left) {
    margin-left: var(--image-offset-margin);
  }
  body .captioned-image-container figure:has(> a.image2-offset-right) {
    margin-right: var(--image-offset-margin);
  }
}
@media (max-width: 1024px) {
  body {
    /* Disable offset on mobile/tablet */
  }
  body .captioned-image-container figure:has(> a.image2-align-left),
  body .captioned-image-container figure:has(> a.image2-align-right) {
    float: none;
    margin: 1em auto;
    max-width: 100%;
    width: auto;
    padding: 0;
  }
  body .captioned-image-container figure:has(> a.image2-align-left.thefp),
  body .captioned-image-container figure:has(> a.image2-align-right.thefp) =
{
    margin: 1em auto;
  }
  body .captioned-image-container figure:has(> a.image2-offset-left),
  body .captioned-image-container figure:has(> a.image2-offset-right) {
    margin: 1em auto;
  }
  body .captioned-image-container figure:has(> a.image2-align-left) .image2=
-inset,
  body .captioned-image-container figure:has(> a.image2-align-right) .image=
2-inset {
    display: block;
    justify-content: initial;
  }
}
@media (max-width: 768px) {
  body .markup div.sponsorship-campaign-embed {
    margin-top: 24px;
    margin-bottom: 24px;
  }
  body .markup div.sponsorship-campaign-embed:first-child {
    margin-top: 0px;
  }
}
@media screen and (max-width: 650px) {
  body .markup div.youtube-overlay,
  body .markup div.vimeo-overlay {
    display: none !important;
  }
}
@media screen and (max-width: 370px) {
  body .markup div.tiktok-wrap {
    width: calc(95vw - 32px);
    height: calc((95vw - 32px - 2px) / 0.485714);
  }
}
@media screen and (max-width: 650px) {
  body .markup div.embedded-publication-wrap .embedded-publication.show-sub=
scribe {
    padding: 24px;
  }
}
@media screen and (max-width: 650px) {
  body .markup div.subscription-widget-wrap .subscription-widget.show-subsc=
ribe,
  body .markup div.subscription-widget-wrap-editor .subscription-widget.sho=
w-subscribe,
  body .markup div.captioned-button-wrap .subscription-widget.show-subscrib=
e {
    padding: 0px 24px;
  }
}
@media screen and (max-width: 650px) {
  body .markup div.subscription-widget-wrap .subscription-widget.show-subsc=
ribe .subscription-widget-subscribe .button,
  body .markup div.subscription-widget-wrap-editor .subscription-widget.sho=
w-subscribe .subscription-widget-subscribe .button,
  body .markup div.captioned-button-wrap .subscription-widget.show-subscrib=
e .subscription-widget-subscribe .button {
    padding: 10px 12px;
    min-width: 110px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed,
  body .markup .tweet {
    padding: 12px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed .tweet-text,
  body .markup .tweet .tweet-text {
    font-size: 14px;
    line-height: 20px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed .tweet-photos-container.two,
  body .markup .tweet .tweet-photos-container.two,
  body .markup .twitter-embed .tweet-photos-container.three,
  body .markup .tweet .tweet-photos-container.three,
  body .markup .twitter-embed .tweet-photos-container.four,
  body .markup .tweet .tweet-photos-container.four {
    height: 200px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed a.expanded-link .expanded-link-img,
  body .markup .tweet a.expanded-link .expanded-link-img {
    max-height: 180px;
  }
}
@media (max-width: 650px) {
  body .markup .twitter-embed a.expanded-link .expanded-link-description,
  body .markup .tweet a.expanded-link .expanded-link-description {
    display: none;
  }
}
@media screen and (max-width: 650px) {
  body .markup .apple-podcast-container {
    width: unset;
  }
}
@media (max-width: 420px) {
  body .markup .install-substack-app-embed img.install-substack-app-embed-i=
mg {
    margin: 0 auto 16px auto;
  }
}
@media (max-width: 420px) {
  body .markup .install-substack-app-embed .install-substack-app-embed-text=
 {
    margin: 0 0 12px 0;
    max-width: 100%;
    width: auto;
    text-align: center;
  }
}
@media (max-width: 420px) {
  body .markup .install-substack-app-embed .install-substack-app-embed-link=
 {
    display: flex;
    justify-content: center;
  }
}
@media screen and (min-width: 500px) {
  body .header a.logo {
    width: 42px;
    height: 42px;
    border-radius: 12px;
  }
}
@media screen and (max-width: 420px) {
  body .subscription-receipt table:first-of-type .subscription-amount .subs=
cription-discount {
    width: 72px !important;
  }
}
@media screen and (min-width: 481px) {
  body .share-button-container {
    height: auto;
  }
}
@media screen and (max-width: 480px) {
  body .share-button-container .separator {
    display: block !important;
    margin: 0 !important;
    height: 8px !important;
    border-left: none !important;
  }
}
@media screen and (max-width: 650px) {
  .digest .item .post-meta-item.audience {
    display: none;
  }
}
@media screen and (min-width: 500px) {
  .digest-publication .logo img {
    width: 42px;
    height: 42px;
    border-radius: 8px;
  }
}
@media screen and (max-width: 650px) {
  .comments-page .container .comment-list .collapsed-reply {
    margin-left: calc(10 + 32px - 24px);
  }
}
@media screen and (max-width: 650px) {
  .comment > .comment-list {
    padding-left: 24px;
  }
}
@media screen and (max-width: 650px) {
  .finish-magic-login-modal .modal-content .container {
    padding: 24px 0;
  }
}
@media (max-width: 650px) {
  .reader2-text-b3 {
    line-height: 24px;
  }
}
@media screen and (max-width: 650px) {
  .reader2-text-h4 {
    line-height: 24px;
  }
}
@media screen and (min-width: 541px) {
  .user-profile-modal {
    padding-left: 12px;
    padding-right: 12px;
  }
}
@media screen and (max-width: 650px) {
  .subscribe-widget form.form .sideBySideWrap button.rightButton {
    padding: 10px 12px;
  }
}
@media screen and (min-width: 541px) {
  .pub-icon:hover .logo-hover,
  .feed-item-icon:hover .logo-hover {
    display: block;
  }
}
@media screen and (max-width: 650px) {
  .post-ufi.single-full-width-button .post-ufi-button-wrapper {
    width: 100%;
    padding: 16px;
  }
  .post-ufi.single-full-width-button .post-ufi-button-wrapper:empty {
    display: none;
  }
  .post-ufi.single-full-width-button .post-ufi-button {
    width: 100%;
    justify-content: center;
  }
}
@media screen and (max-width: 768px) {
  .file-embed-wrapper {
    padding: 0;
  }
}
@media screen and (max-width: 768px) {
  .file-embed-wrapper-editor {
    padding: 0;
  }
}
@media screen and (max-width: 768px) {
  .file-embed-wrapper-editor:active {
    padding: 0;
  }
}
@media only screen and (max-width: 650px) {
  .file-embed-button.wide,
  .file-embed-error-button.wide {
    display: none;
  }
}
@media only screen and (min-width: 630px) {
  .file-embed-button.narrow,
  .file-embed-error-button.narrow {
    display: none;
  }
}
@media screen and (min-width: 541px) {
  .audio-player-wrapper .audio-player {
    min-width: 500px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper .audio-player .audio-player-progress {
    border-left-width: 16px;
    border-right-width: 16px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper .audio-player .audio-player-progress .audio-player-=
progress-bar .audio-player-progress-bar-popup {
    top: -54px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-progress {
    border-left-width: 16px;
    border-right-width: 16px;
  }
}
@media screen and (max-width: 650px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-progress .audio-p=
layer-progress-bar .audio-player-progress-bar-popup {
    top: -54px;
  }
}
@media (min-width: 250px) {
  .audio-player-wrapper-fancy .audio-player {
    padding: 32px;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group {
    display: flex;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:last-of-type=
 {
    display: block;
  }
}
@media (min-width: 300px) {
  .audio-player-wrapper-fancy .audio-player .btn-group {
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-typ=
e {
    display: block;
  }
}
@media (min-width: 350px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-substack-logo {
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .audio-player-title {
    margin-top: 16px;
  }
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 15%;
    width: 15%;
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-typ=
e {
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .audio-player-substack-logo {
    display: block;
  }
}
@media (min-width: 350px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 25%;
    width: 25%;
    display: block;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group {
    display: flex;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button:first-of-typ=
e {
    display: block;
  }
}
@media (min-width: 400px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 40%;
    width: 40%;
  }
}
@media (max-width: 400px) {
  .audio-player-wrapper-fancy .audio-player .btn-group {
    margin-top: 12px;
  }
  .audio-player-wrapper-fancy .audio-player .btn-group .button {
    font-size: 13px;
    padding: 6px 12px;
    height: auto;
    margin-top: 10px;
  }
}
@media (min-width: 600px) {
  .audio-player-wrapper-fancy .audio-player .audio-player-hero-image-contai=
ner {
    padding-top: 55%;
    width: 55%;
  }
}
@media (max-width: 650px) {
  .poll-editor-modal {
    min-width: calc(100% - 20px);
  }
}
@media (max-width: 750px) {
  .poll-embed .poll-anchor-target .poll-anchor-copy-button {
    left: 8px;
    top: 45px;
  }
}
@media not all and (min-resolution: 0.001dpcm) {
  @supports (-webkit-appearance: none) {
    p a:not(.primary.button),
    .post p:not(.button-wrapper) a:not(.primary.button),
    .footnote a.footnote-anchor:not(.primary.button),
    .thread-head .markup p:not(.button-wrapper) a:not(.primary.button) {
      color: #7756e3;
      text-decoration: none;
    }
    p a:not(.primary.button):hover,
    .post p:not(.button-wrapper) a:not(.primary.button):hover,
    .footnote a.footnote-anchor:not(.primary.button):hover,
    .thread-head .markup p:not(.button-wrapper) a:not(.primary.button):hove=
r {
      text-decoration: underline;
    }
  }
}</style></head><body class=3D"email-body" style=3D"font-kerning: auto;--im=
age-offset-margin: -120px;"><img src=3D"https://eotrx.substackcdn.com/o/939=
5307c77bcc6dc/p.gif?token=3DeyJtIjoiPDIwMjYwNDI4MDMwMzUzLjMuNzdlZTYxYTgwMDV=
hZDRlYkBtZy1kMC5zdWJzdGFjay5jb20-IiwidSI6MjczNjIyMzk4LCJyIjoidGpwaHVoc0BnbW=
FpbC5jb20iLCJkIjoibWctZDAuc3Vic3RhY2suY29tIiwicCI6MTk1Mzg3NTA1LCJ0IjoibmV3c=
2xldHRlciIsImEiOiJldmVyeW9uZSIsInMiOjgxNzEzMiwiYyI6InBvc3QiLCJmIjp0cnVlLCJw=
b3NpdGlvbiI6InRvcCIsImlhdCI6MTc3NzM0NjA1NywiZXhwIjoxNzc5OTM4MDU3LCJpc3MiOiJ=
wdWItMCIsInN1YiI6ImVvIn0.5wDBQE8mioC1KaqhVvj1Xtv_RnqpGXtYSys9LOa5oqc" alt=
=3D"" width=3D"1" height=3D"1" border=3D"0" style=3D"height:1px !important;=
width:1px !important;border-width:0 !important;margin-top:0 !important;marg=
in-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;p=
adding-top:0 !important;padding-bottom:0 !important;padding-right:0 !import=
ant;padding-left:0 !important;"/><div class=3D"preview" style=3D"display:no=
ne;font-size:1px;color:#333333;line-height:1px;max-height:0px;max-width:0px=
;opacity:0;overflow:hidden;">In this article, we will look at how Stripe&#8=
217;s Radar does this effectively and the architectural decisions the team =
took while building it.</div><div class=3D"preview" style=3D"display:none;f=
ont-size:1px;color:#333333;line-height:1px;max-height:0px;max-width:0px;opa=
city:0;overflow:hidden;">&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; =
&#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp;=
 &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#84=
7; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &=
#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; =
&#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847=
; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#=
173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &=
#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847;=
 &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#1=
73;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#=
8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; =
&nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#17=
3;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8=
199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &=
nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173=
;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#81=
99; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &n=
bsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;=
&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#819=
9; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nb=
sp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&=
#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199=
; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbs=
p; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#=
847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199;=
 &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp=
; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#8=
47; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; =
&#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp;=
 &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#84=
7; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &=
#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; =
&#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847=
; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#=
173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &=
#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847;=
 &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#1=
73;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#=
8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; =
&nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#17=
3;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8=
199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &=
nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173=
;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#81=
99; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &n=
bsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;=
&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#819=
9; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nb=
sp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&=
#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199=
; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbs=
p; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#=
847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199;=
 &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp=
; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#8=
47; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; =
&#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp;=
 &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#84=
7; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &=
#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; =
&#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847=
; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#=
173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &=
#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847;=
 &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#1=
73;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#=
8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; =
&nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#17=
3;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8=
199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &=
nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173=
;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#81=
99; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &n=
bsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;&#847; &nbsp; &#8199; &#173;=
</div><table class=3D"email-body-container" role=3D"presentation" width=3D"=
100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td></td>=
<td class=3D"content" width=3D"550"></td><td></td></tr><tr><td></td><td cla=
ss=3D"content" width=3D"550" align=3D"left"><div style=3D"font-size: 16px;l=
ine-height: 26px;max-width: 550px;width: 100%;margin: 0 auto;overflow-wrap:=
 break-word;"><table role=3D"presentation" width=3D"100%" border=3D"0" cell=
spacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"right" style=3D"hei=
ght:20px;"><table role=3D"presentation" width=3D"auto" border=3D"0" cellspa=
cing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-align:middle;=
"><span class=3D"pencraft pc-reset reset-IxiVJZ tw-font-body tw-text-ssm tw=
-text-substack-secondary" style=3D"font-family: SF Pro Text, -apple-system,=
 system-ui, BlinkMacSystemFont, Inter, Segoe UI, Roboto, Helvetica, Arial, =
sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;font-size: 1=
3px;color: unset;list-style: none;text-decoration: unset;margin: 0;"><div c=
lass=3D"pencraft pc-reset align-right-VJbKw5 size-12-mmZ61m reset-IxiVJZ" s=
tyle=3D"list-style: none;color: unset;text-align: right;font-size: 12px;lin=
e-height: 16px;text-decoration: unset;margin: 0;"><span class=3D"pencraft p=
c-reset reset-IxiVJZ" translated=3D"" style=3D"list-style: none;color: unse=
t;text-decoration: unset;margin: 0;">Forwarded this email? <a class=3D"penc=
raft pc-reset decoration-underline-ClTkYc reset-IxiVJZ" href=3D"https://sub=
stack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGVieXRlZ28uY29tL3N1YnNjcm=
liZT91dG1fc291cmNlPWVtYWlsJnV0bV9jYW1wYWlnbj1lbWFpbC1zdWJzY3JpYmUmcj00aXdvZ=
TYmbmV4dD1odHRwcyUzQSUyRiUyRmJsb2cuYnl0ZWJ5dGVnby5jb20lMkZwJTJGaG93LXN0cmlw=
ZS1kZXRlY3RzLWZyYXVkdWxlbnQtdHJhbnNhY3Rpb25zIiwicCI6MTk1Mzg3NTA1LCJzIjo4MTc=
xMzIsImYiOnRydWUsInUiOjI3MzYyMjM5OCwiaWF0IjoxNzc3MzQ2MDU3LCJleHAiOjIwOTI5Mj=
IwNTcsImlzcyI6InB1Yi0wIiwic3ViIjoibGluay1yZWRpcmVjdCJ9.Hgt48V8b8AAfyRi6K-0J=
VucdoJzGerTb2UIJOo9U4dM?" style=3D"list-style: none;color: unset;text-decor=
ation: unset;margin: 0;-webkit-text-decoration-line: underline;text-decorat=
ion-line: underline;">Subscribe here</a> for more</span></div></span></td><=
/tr></tbody></table></td></tr></tbody></table><div class=3D"post typography=
" dir=3D"auto" style=3D"--image-offset-margin: -120px;padding: 32px 0 0 0;f=
ont-size: 16px;line-height: 26px;"><div class=3D"post-header" role=3D"regio=
n" aria-label=3D"Post header" style=3D"font-size: 16px;line-height: 26px;">=
<h1 class=3D"post-title published title-X77sOw" dir=3D"auto" style=3D"direc=
tion: auto;text-align: start;unicode-bidi: isolate;color: rgb(54,55,55);fon=
t-family: 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,B=
linkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color=
 Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-s=
moothing: antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appearan=
ce: optimizelegibility;-moz-appearance: optimizelegibility;appearance: opti=
mizelegibility;margin: 0;line-height: 36px;font-size: 32px;"><a href=3D"htt=
ps://substack.com/app-link/post?publication_id=3D817132&post_id=3D195387505=
&utm_source=3Dpost-email-title&utm_campaign=3Demail-post-title&isFreemail=
=3Dtrue&r=3D4iwoe6&token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NTM4=
NzUwNSwiaWF0IjoxNzc3MzQ2MDU3LCJleHAiOjE3Nzk5MzgwNTcsImlzcyI6InB1Yi04MTcxMzI=
iLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.ZMZrkrQFN7BD_HmBbETpEtCiPIwXiwdr_DQiZWYeCR=
Q" style=3D"color: rgb(54,55,55);text-decoration: none;">How Stripe Detects=
 Fraudulent Transactions Within 100 ms</a></h1><table class=3D"post-meta" r=
ole=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadd=
ing=3D"0" style=3D"margin: 1em 0;height: 20px;align-items: center;"><tbody>=
<tr><td><table role=3D"presentation" width=3D"auto" border=3D"0" cellspacin=
g=3D"0" cellpadding=3D"0"><tbody><tr><td><table role=3D"presentation" width=
=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td s=
tyle=3D"vertical-align:middle;"><div class=3D"pencraft pc-reset color-prima=
ry-zABazT line-height-20-t4M0El font-meta-MWBumP size-11-NuY2Zx weight-medi=
um-fw81nC transform-uppercase-yKDgcq reset-IxiVJZ meta-EgzBVA custom-css-em=
ail-post-author" style=3D"list-style: none;font-size: 11px;line-height: 20p=
x;text-decoration: unset;color: rgb(54,55,55);margin: 0;font-family: 'SF Co=
mpact',-apple-system,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',=
Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Seg=
oe UI Symbol';font-weight: 500;text-transform: uppercase;letter-spacing: .2=
px;"><a class=3D"pencraft pc-reset color-primary-zABazT line-height-20-t4M0=
El font-meta-MWBumP size-11-NuY2Zx weight-medium-fw81nC transform-uppercase=
-yKDgcq reset-IxiVJZ meta-EgzBVA" style=3D"list-style: none;color: rgb(54,5=
5,55);margin: 0;font-size: 11px;line-height: 20px;font-family: 'SF Compact'=
,-apple-system,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto=
,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI =
Symbol';font-weight: 500;text-transform: uppercase;letter-spacing: .2px;tex=
t-decoration: none" href=3D"https://substack.com/@bytebytego399569">ByteByt=
eGo</a></div></td></tr></tbody></table></td></tr><tr><td><table role=3D"pre=
sentation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0">=
<tbody><tr><td style=3D"vertical-align:middle;"><div class=3D"pencraft pc-r=
eset color-secondary-ls1g8s line-height-20-t4M0El font-meta-MWBumP size-11-=
NuY2Zx weight-medium-fw81nC transform-uppercase-yKDgcq reset-IxiVJZ meta-Eg=
zBVA" style=3D"list-style: none;font-size: 11px;line-height: 20px;text-deco=
ration: unset;color: rgb(119,119,119);margin: 0;font-family: 'SF Compact',-=
apple-system,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,H=
elvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Sy=
mbol';font-weight: 500;text-transform: uppercase;letter-spacing: .2px;"><ti=
me datetime=3D"2026-04-28T03:03:50.897Z">Apr 28</time></div></td></tr></tbo=
dy></table></td></tr></tbody></table></td><td align=3D"right"><table role=
=3D"presentation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0"><tbody><tr><td style=3D"vertical-align:middle;"><a href=3D"https://s=
ubstack.com/@bytebytego399569"><img class=3D"custom-css-email-avatar avatar=
-QIQ5yR" src=3D"https://substackcdn.com/image/fetch/$s_!U1Ej!,f_auto,q_auto=
:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.c=
om%2Fpublic%2Fimages%2Fc9941c68-e5b7-4b93-be75-df7cc4ffef02_504x540.png" st=
yle=3D"box-sizing: border-box;max-width: 550px;border: none;vertical-align:=
 middle;width: 40px;height: 40px;min-width: 40px;min-height: 40px;object-fi=
t: cover;margin: 0px;display: inline;border-radius: 50%" width=3D"40" heigh=
t=3D"40"></a></td></tr></tbody></table></td></tr></tbody></table><table cla=
ss=3D"email-ufi-2-top" role=3D"presentation" width=3D"100%" border=3D"0" ce=
llspacing=3D"0" cellpadding=3D"0" style=3D"border-top: 1px solid rgb(0,0,0,=
=2E1);border-bottom: 1px solid rgb(0,0,=
0,.1);min-width: 100%;"><tbody><tr hei=
ght=3D"16"><td height=3D"16" style=3D"font-size:0px;line-height:0;">&nbsp;<=
/td></tr><tr><td><table role=3D"presentation" width=3D"100%" border=3D"0" c=
ellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td><table role=3D"presentati=
on" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody>=
<tr><td style=3D"vertical-align:middle;"><table role=3D"presentation" width=
=3D"38" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td ali=
gn=3D"center"><a class=3D"email-icon-button" href=3D"https://substack.com/a=
pp-link/post?publication_id=3D817132&post_id=3D195387505&utm_source=3Dsubst=
ack&isFreemail=3Dtrue&submitLike=3Dtrue&token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTg=
sInBvc3RfaWQiOjE5NTM4NzUwNSwicmVhY3Rpb24iOiLinaQiLCJpYXQiOjE3NzczNDYwNTcsIm=
V4cCI6MTc3OTkzODA1NywiaXNzIjoicHViLTgxNzEzMiIsInN1YiI6InJlYWN0aW9uIn0.qokgj=
mwGMPfUZuSn-LrnOOrKpTeas8wDjrYj_n3EinQ&utm_medium=3Demail&utm_campaign=3Dem=
ail-reaction&r=3D4iwoe6" style=3D"font-family: system-ui,-apple-system,Blin=
kMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Em=
oji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: =
500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: u=
ppercase;font-size: 12px;line-height: 1;padding: 9px 0;text-decoration: non=
e;color: rgb(119,119,119);min-width: 38px;box-sizing: border-box;width: 38p=
x"><img class=3D"icon" src=3D"https://substackcdn.com/image/fetch/$s_!PeVs!=
,w_36,c_scale,f_png,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack=
=2Ecom%2Ficon%2FLucideHeart%3Fv%3D4%26h=
eight%3D36%26fill%3Dnone%26stroke%3D%2=
523808080%26strokeWidth%3D2" width=3D"18" height=3D"18" style=3D"border: no=
ne;vertical-align: middle;max-width: 18px" alt=3D""></a></td></tr></tbody><=
/table></td><td width=3D"8" style=3D"min-width:8px;"></td><td style=3D"vert=
ical-align:middle;"><table role=3D"presentation" width=3D"38" border=3D"0" =
cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a clas=
s=3D"email-icon-button" href=3D"https://substack.com/app-link/post?publicat=
ion_id=3D817132&post_id=3D195387505&utm_source=3Dsubstack&utm_medium=3Demai=
l&isFreemail=3Dtrue&comments=3Dtrue&token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInB=
vc3RfaWQiOjE5NTM4NzUwNSwiaWF0IjoxNzc3MzQ2MDU3LCJleHAiOjE3Nzk5MzgwNTcsImlzcy=
I6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.ZMZrkrQFN7BD_HmBbETpEtCiP=
IwXiwdr_DQiZWYeCRQ&r=3D4iwoe6&utm_campaign=3Demail-half-magic-comments&acti=
on=3Dpost-comment&utm_source=3Dsubstack&utm_medium=3Demail" style=3D"font-f=
amily: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helveti=
ca,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';=
display: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);bord=
er-radius: 9999px;text-transform: uppercase;font-size: 12px;line-height: 1;=
padding: 9px 0;text-decoration: none;color: rgb(119,119,119);min-width: 38p=
x;box-sizing: border-box;width: 38px"><img class=3D"icon" src=3D"https://su=
bstackcdn.com/image/fetch/$s_!x1tS!,w_36,c_scale,f_png,q_auto:good,fl_progr=
essive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideComments%3Fv%3D4%26h=
eight%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D=
"18" height=3D"18" style=3D"border: none;vertical-align: middle;max-width: =
18px" alt=3D""></a></td></tr></tbody></table></td><td width=3D"8" style=3D"=
min-width:8px;"></td><td style=3D"vertical-align:middle;"><table role=3D"pr=
esentation" width=3D"38" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><=
tbody><tr><td align=3D"center"><a class=3D"email-icon-button" href=3D"https=
://substack.com/app-link/post?publication_id=3D817132&post_id=3D195387505&u=
tm_source=3Dsubstack&utm_medium=3Demail&utm_content=3Dshare&utm_campaign=3D=
email-share&action=3Dshare&triggerShare=3Dtrue&isFreemail=3Dtrue&r=3D4iwoe6=
&token=3DeyJ1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NTM4NzUwNSwiaWF0IjoxNz=
c3MzQ2MDU3LCJleHAiOjE3Nzk5MzgwNTcsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0L=
XJlYWN0aW9uIn0.ZMZrkrQFN7BD_HmBbETpEtCiPIwXiwdr_DQiZWYeCRQ" style=3D"font-f=
amily: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helveti=
ca,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';=
display: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);bord=
er-radius: 9999px;text-transform: uppercase;font-size: 12px;line-height: 1;=
padding: 9px 0;text-decoration: none;color: rgb(119,119,119);min-width: 38p=
x;box-sizing: border-box;width: 38px"><img class=3D"icon" src=3D"https://su=
bstackcdn.com/image/fetch/$s_!_L14!,w_36,c_scale,f_png,q_auto:good,fl_progr=
essive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideShare2%3Fv%3D4%26hei=
ght%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"1=
8" height=3D"18" style=3D"border: none;vertical-align: middle;max-width: 18=
px" alt=3D""></a></td></tr></tbody></table></td><td width=3D"8" style=3D"mi=
n-width:8px;"></td><td style=3D"vertical-align:middle;"><table role=3D"pres=
entation" width=3D"38" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tb=
ody><tr><td align=3D"center"><a class=3D"email-icon-button" href=3D"https:/=
/substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9vcGVuLnN1YnN0YWNrLmNvbS9wdWIvYn=
l0ZWJ5dGVnby9wL2hvdy1zdHJpcGUtZGV0ZWN0cy1mcmF1ZHVsZW50LXRyYW5zYWN0aW9ucz91d=
G1fc291cmNlPXN1YnN0YWNrJnV0bV9tZWRpdW09ZW1haWwmdXRtX2NhbXBhaWduPWVtYWlsLXJl=
c3RhY2stY29tbWVudCZhY3Rpb249cmVzdGFjay1jb21tZW50JnI9NGl3b2U2JnRva2VuPWV5SjF=
jMlZ5WDJsa0lqb3lOek0yTWpJek9UZ3NJbkJ2YzNSZmFXUWlPakU1TlRNNE56VXdOU3dpYVdGME=
lqb3hOemMzTXpRMk1EVTNMQ0psZUhBaU9qRTNOems1TXpnd05UY3NJbWx6Y3lJNkluQjFZaTA0T=
VRjeE16SWlMQ0p6ZFdJaU9pSndiM04wTFhKbFlXTjBhVzl1SW4wLlpNWnJrclFGTjdCRF9IbUJi=
RVRwRXRDaVBJd1hpd2RyX0RRaVpXWWVDUlEiLCJwIjoxOTUzODc1MDUsInMiOjgxNzEzMiwiZiI=
6dHJ1ZSwidSI6MjczNjIyMzk4LCJpYXQiOjE3NzczNDYwNTcsImV4cCI6MjA5MjkyMjA1NywiaX=
NzIjoicHViLTAiLCJzdWIiOiJsaW5rLXJlZGlyZWN0In0.PH3QkJmCfsDcYmlxSbnKsdHL0hvnJ=
JdeGB-hGJ2F2CM?&utm_source=3Dsubstack&utm_medium=3Demail" style=3D"font-fam=
ily: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica=
,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';di=
splay: inline-block;font-weight: 500;border: 1px solid rgb(0,0,0,.1);border=
-radius: 9999px;text-transform: uppercase;font-size: 12px;line-height: 1;pa=
dding: 9px 0;text-decoration: none;color: rgb(119,119,119);min-width: 38px;=
box-sizing: border-box;width: 38px"><img class=3D"icon" src=3D"https://subs=
tackcdn.com/image/fetch/$s_!ubXF!,w_36,c_scale,f_png,q_auto:good,fl_progres=
sive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2Fnotes__NoteRestackIcon%3Fv%3=
D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2%26s=
trokeLinecap%3Dround%26strokeLinejoin%3Dround" width=3D"18" height=3D"18" a=
lt=3D"" style=3D"max-width: 550px;border: none !important;vertical-align: m=
iddle;"></a></td></tr></tbody></table></td></tr></tbody></table></td><td al=
ign=3D"right"><table role=3D"presentation" width=3D"auto" border=3D"0" cell=
spacing=3D"0" cellpadding=3D"0"><tbody><tr><td style=3D"vertical-align:midd=
le;"><table role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=
=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"center"><a class=3D"email-=
button-outline" href=3D"https://open.substack.com/pub/bytebytego/p/how-stri=
pe-detects-fraudulent-transactions?utm_source=3Demail&redirect=3Dapp-store&=
utm_campaign=3Demail-read-in-app" style=3D"font-family: system-ui,-apple-sy=
stem,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple=
 Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;font=
-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-tra=
nsform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 14px;text-=
decoration: none;color: rgb(119,119,119);"><div class=3D"email-button-space=
r" style=3D"font-size: 16px;line-height: 26px;display: inline-block;vertica=
l-align: middle;max-width: 0;min-height: 18px;"></div><span class=3D"email-=
button-text" style=3D"vertical-align: middle;margin-right: 4px">READ IN APP=
</span><img class=3D"icon text-icon" src=3D"https://substackcdn.com/image/f=
etch/$s_!ET-_!,w_36,c_scale,f_png,q_auto:good,fl_progressive:steep/https%3A=
%2F%2Fsubstack.com%2Ficon%2FLucideArrowUpRight%3Fv%3D4%26height%3D36%26fill=
%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" height=3D"18=
" style=3D"min-width: 18px;min-height: 18px;border: none;vertical-align: mi=
ddle;margin-right: 0;margin-left: 0;max-width: 18px" alt=3D""></a></td></tr=
></tbody></table></td></tr></tbody></table></td></tr></tbody></table></td><=
/tr><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px;line-height:=
0;">&nbsp;</td></tr></tbody></table></div></div><div class=3D"post typograp=
hy" dir=3D"auto" style=3D"--image-offset-margin: -120px;padding: 32px 0 0 0=
;font-size: 16px;line-height: 26px;"><div class=3D"body markup" dir=3D"auto=
" style=3D"text-align: initial;font-size: 16px;line-height: 26px;width: 100=
%;word-break: break-word;margin-bottom: 16px;"><h2 class=3D"header-anchor-p=
ost" style=3D"position: relative;font-family: 'SF Pro Display',-apple-syste=
m-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Hel=
vetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symb=
ol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smo=
othing: antialiased;-webkit-appearance: optimizelegibility;-moz-appearance:=
 optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.625em 0;=
color: rgb(54,55,55);line-height: 1.16em;font-size: 1.625em;margin-top: 0;"=
><strong><a href=3D"https://substack.com/redirect/345b315a-2bc2-426d-a535-3=
161bf528f93?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifR=
B-Zs" style=3D"color: rgb(54,55,55);text-decoration: underline;">New Year, =
New Metrics: Evaluating AI Search in the Agentic Era (Sponsored)</a></stron=
g></h2><div class=3D"captioned-image-container-static" style=3D"font-size: =
16px;line-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;mar=
gin: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" ce=
llspacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic"=
 style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align=
: center;"></td><td class=3D"content" align=3D"left" width=3D"1456" style=
=3D"text-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D"=
https://substack.com/redirect/345b315a-2bc2-426d-a535-3161bf528f93?j=3DeyJ1=
IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"posit=
ion: relative;flex-direction: column;align-items: center;padding: 0;width: =
auto;height: auto;border: none;text-decoration: none;display: block;margin:=
 0;"><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https:/=
/substack-post-media.s3.amazonaws.com/public/images/3e07ebdc-da60-480c-874b=
-162a215a186b_1600x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;full=
screen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;w=
idth&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1432342,&quo=
t;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&q=
uot;image/png&quot;,&quot;href&quot;:&quot;https://go.bytebytego.com/You_04=
2826&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;i=
nternalRedirect&quot;:&quot;https://blog.bytebytego.com/i/183299050?img=3Dh=
ttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e07e=
bdc-da60-480c-874b-162a215a186b_1600x840.png&quot;,&quot;isProcessing&quot;=
:false,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" title=3D"=
" width=3D"550" height=3D"288.5989010989011" src=3D"https://substackcdn.com=
/image/fetch/$s_!8ZPR!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:ste=
ep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3=
e07ebdc-da60-480c-874b-162a215a186b_1600x840.png" style=3D"border: none !im=
portant;vertical-align: middle;display: block;-ms-interpolation-mode: bicub=
ic;height: auto;margin-bottom: 0;width: auto !important;max-width: 100% !im=
portant;margin: 0 auto;"></a></td><td style=3D"text-align: center;"></td></=
tr></tbody></table></figure></div><p style=3D"margin: 0 0 20px 0;color: rgb=
(54,55,55);line-height: 26px;font-size: 16px;"><span>Most teams pick a sear=
ch provider by running a few test queries and hoping for the best &#8211; a=
 recipe for hallucinations and unpredictable failures. </span><a href=3D"ht=
tps://substack.com/redirect/345b315a-2bc2-426d-a535-3161bf528f93?j=3DeyJ1Ij=
oiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"color: =
#7756e3;text-decoration: none;">This technical guide</a><span> from </span>=
<a href=3D"https://substack.com/redirect/345b315a-2bc2-426d-a535-3161bf528f=
93?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" sty=
le=3D"color: #7756e3;text-decoration: none;">You.com</a><span> gives you ac=
cess to an exact framework to evaluate AI search and retrieval.</span></p><=
p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-s=
ize: 16px;"><strong>What you&#8217;ll get:</strong></p><ul style=3D"margin-=
top: 0;padding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: b=
ullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0=
;box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;">A fou=
r-phase framework for evaluating AI search</p></li><li style=3D"margin: 8px=
 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);lin=
e-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;fo=
nt-size: 16px;margin: 0;">How to build a golden set of queries that predict=
s real-world performance</p></li><li style=3D"margin: 8px 0 0 32px;mso-spec=
ial-format: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;mar=
gin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px;marg=
in: 0;">Metrics and code for measuring accuracy</p></li></ul><p style=3D"ma=
rgin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;">G=
o from &#8220;looks good&#8221; to proven quality.</p><p class=3D"button-wr=
apper" data-attrs=3D"{&quot;url&quot;:&quot;https://go.bytebytego.com/You_0=
42826&quot;,&quot;text&quot;:&quot;Learn how to run an eval&quot;,&quot;act=
ion&quot;:null,&quot;class&quot;:null}" data-component-name=3D"ButtonCreate=
Button" style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;=
font-size: 16px;text-align: center;cursor: pointer;border-radius: 4px;"><a =
class=3D"button primary" href=3D"https://substack.com/redirect/345b315a-2bc=
2-426d-a535-3161bf528f93?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy=
3p768BWtuZifRB-Zs" style=3D"font-family: system-ui,-apple-system,BlinkMacSy=
stemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','=
Segoe UI Emoji','Segoe UI Symbol';display: inline-block;box-sizing: border-=
box;cursor: pointer;border: none;border-radius: 8px;font-size: 14px;line-he=
ight: 20px;font-weight: 600;text-align: center;margin: 0;opacity: 1;outline=
: none;white-space: nowrap;color: #ffffff !important;text-decoration: none =
!important;background-color: #7756e3;padding: 12px 20px;height: auto;"><spa=
n style=3D"color: #ffffff;text-decoration: none;">Learn how to run an eval<=
/span></a></p><div style=3D"font-size: 16px;line-height: 26px;"><hr style=
=3D"margin: 32px 0;padding: 0;height: 1px;background: rgb(0,0,0,.1);border:=
 none;"></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-heig=
ht: 26px;font-size: 16px;text-align: justify">Every time you buy something =
online from a Stripe-powered business, a machine learning model evaluates o=
ver 1,000 signals about your transaction and decides in under 100 milliseco=
nds whether to let it through.</p><p style=3D"margin: 0 0 20px 0;color: rgb=
(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Across bi=
llions of legitimate payments, it reaches the correct verdict 99.9% of the =
time. The system that delivers those numbers, however, looks entirely diffe=
rent from what Stripe originally built.</p><p style=3D"margin: 0 0 20px 0;c=
olor: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">=
The architecture has been overhauled multiple times, and one of the most im=
portant upgrades required removing a component the team knew was actively i=
mproving accuracy, because keeping it was holding back everything else the =
team wanted to do.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);l=
ine-height: 26px;font-size: 16px;text-align: justify">For reference, online=
 payment fraud occurs in roughly 1 out of every 1,000 transactions. That ra=
rity makes fraud detection a difficult machine learning problem because the=
 system has to surface a small number of fraudulent payments from a massive=
 volume of legitimate ones, and it has to do this quickly and cheaply on ev=
ery single transaction.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,=
55);line-height: 26px;font-size: 16px;text-align: justify">In this article,=
 we will look at how Stripe&#8217;s Radar does this effectively and the arc=
hitectural decisions the team took while building it.</p><p style=3D"margin=
: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-al=
ign: justify"><em>Disclaimer: This post is based on publicly shared details=
 from the Stripe Engineering Team. Please comment if you notice any inaccur=
acies.</em></p><h2 class=3D"header-anchor-post" style=3D"position: relative=
;font-family: 'SF Pro Display',-apple-system-headline,system-ui,-apple-syst=
em,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple C=
olor Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-fo=
nt-smoothing: antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appe=
arance: optimizelegibility;-moz-appearance: optimizelegibility;appearance: =
optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height=
: 1.16em;font-size: 1.625em;text-align: justify">Why Stripe Removed the Com=
ponent That Was Making Radar Better</h2><p style=3D"margin: 0 0 20px 0;colo=
r: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Str=
ipe began with relatively simple ML models like logistic regression (a stat=
istical method that predicts the probability of an outcome based on input v=
ariables). Over time, as the Stripe network grew and ML technology advanced=
, they moved to more complex architectures. Each jump produced an equivalen=
t leap in model performance.</p><div class=3D"captioned-image-container-sta=
tic" style=3D"font-size: 16px;line-height: 26px;margin: 32px auto;"><figure=
 style=3D"width: 100%;margin: 0 auto;"><table class=3D"image-wrapper" width=
=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" data-component-n=
ame=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><t=
r><td style=3D"text-align: center;"></td><td class=3D"content" align=3D"lef=
t" width=3D"1456" style=3D"text-align: center;"><a class=3D"image-link" tar=
get=3D"_blank" href=3D"https://substack.com/redirect/25ce3a2d-235b-4ece-8dd=
0-199020dd863e?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZ=
ifRB-Zs" style=3D"position: relative;flex-direction: column;align-items: ce=
nter;padding: 0;width: auto;height: auto;border: none;text-decoration: none=
;display: block;margin: 0;"><img class=3D"wide-image" data-attrs=3D"{&quot;=
src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/=
4019e3ea-61ad-420f-b90c-647df317c351_2908x2008.png&quot;,&quot;srcNoWaterma=
rk&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;=
height&quot;:1005,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot=
;bytes&quot;:180074,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&=
quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:=
true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://=
blog.bytebytego.com/i/195387505?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.=
amazonaws.com%2Fpublic%2Fimages%2F4019e3ea-61ad-420f-b90c-647df317c351_2908=
x2008.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot=
;offset&quot;:false}" alt=3D"" width=3D"550" height=3D"379.635989010989" sr=
c=3D"https://substackcdn.com/image/fetch/$s_!1CyU!,w_1100,c_limit,f_auto,q_=
auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazona=
ws.com%2Fpublic%2Fimages%2F4019e3ea-61ad-420f-b90c-647df317c351_2908x2008.p=
ng" style=3D"border: none !important;vertical-align: middle;display: block;=
-ms-interpolation-mode: bicubic;height: auto;margin-bottom: 0;width: auto !=
important;max-width: 100% !important;margin: 0 auto;"></a></td><td style=3D=
"text-align: center;"></td></tr></tbody></table></figure></div><p style=3D"=
margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;t=
ext-align: justify">The architecture preceding the current one was called W=
ide &amp; Deep. It combined two models into an ensemble.</p><ul style=3D"ma=
rgin-top: 0;padding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-form=
at: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bott=
om: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;te=
xt-align: justify">The &#8220;wide&#8221; component was XGBoost, a gradient=
-boosted decision tree that works by combining many small decision trees in=
to one powerful predictor. XGBoost excelled at memorization, meaning it was=
 strong at recognizing specific patterns and feature correlations it had en=
countered in training data.</p></li><li style=3D"margin: 8px 0 0 32px;mso-s=
pecial-format: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;=
margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px;m=
argin: 0;text-align: justify">The &#8220;deep&#8221; component was a deep n=
eural network (DNN) that excelled at generalization, meaning it could learn=
 abstract concepts like &#8220;unusual payment velocity on a card&#8221; an=
d apply them to entirely new situations it had never seen before.</p></li><=
/ul><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;f=
ont-size: 16px;text-align: justify">Together, the two components worked wel=
l. But XGBoost was creating operational bottlenecks. It was hard to paralle=
lize, which meant retraining the combined model was slow. It was incompatib=
le with advanced ML techniques Stripe wanted to adopt, like transfer learni=
ng that involves using knowledge gained from one task to improve performanc=
e on a different but related task, and embeddings. And it was also limiting=
 how quickly the many engineers working on Radar each day could experiment =
with new ideas.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line=
-height: 26px;font-size: 16px;text-align: justify">Simply dropping XGBoost =
would have caused a 1.5% drop in recall, meaning 1.5% more fraud would go u=
ndetected. That was an unacceptably large regression in performance. The va=
lue XGBoost provided was real and measurable, so it had to be replicated wi=
thin a new architecture rather than just discarded.</p><p style=3D"margin: =
0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-alig=
n: justify">Stripe&#8217;s solution drew inspiration from a research archit=
ecture called ResNeXt.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,5=
5);line-height: 26px;font-size: 16px;text-align: justify">The core idea, so=
metimes called &#8220;Network-in-Neuron,&#8221; splits computation into mul=
tiple distinct branches, where each branch functions as a small neural netw=
ork on its own. The outputs from all branches are summed to produce a final=
 result. This multi-branch approach enriches feature representation along a=
 new dimension, and it achieves this more effectively than the brute-force =
approach of simply making a DNN wider or deeper, which risks overfitting (t=
he model memorizing random noise rather than learning real patterns).</p><p=
 style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-si=
ze: 16px;text-align: justify">The resulting architecture, internally called=
 Shield NeXt, reduced training time by over 85%, bringing it to under two h=
ours. Experiments that previously required overnight jobs could now run mul=
tiple times in a single working day. Stripe is now exploring techniques tha=
t this architectural shift made possible, including multi-task learning, wh=
ere a single model is trained to handle several related objectives simultan=
eously.</p><div style=3D"font-size: 16px;line-height: 26px;"><hr style=3D"m=
argin: 32px 0;padding: 0;height: 1px;background: rgb(0,0,0,.1);border: none=
;"></div><h2 class=3D"header-anchor-post" style=3D"position: relative;font-=
family: 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,Bli=
nkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color E=
moji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-smo=
othing: antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appearance=
: optimizelegibility;-moz-appearance: optimizelegibility;appearance: optimi=
zelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1.16=
em;font-size: 1.625em;"><a href=3D"https://substack.com/redirect/a95b6182-9=
924-4322-9ece-ce3923bfe123?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXG=
My3p768BWtuZifRB-Zs" style=3D"color: rgb(54,55,55);text-decoration: underli=
ne;">[Live on May 6] Stop babysitting your agents (Sponsored)</a></h2><div =
class=3D"captioned-image-container-static" style=3D"font-size: 16px;line-he=
ight: 26px;margin: 32px auto;"><figure style=3D"width: 100%;margin: 0 auto;=
"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" cellspacing=3D=
"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" style=3D"ms=
o-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: center;"><=
/td><td class=3D"content" align=3D"left" width=3D"1456" style=3D"text-align=
: center;"><a class=3D"image-link" target=3D"_blank" href=3D"https://substa=
ck.com/redirect/a95b6182-9924-4322-9ece-ce3923bfe123?j=3DeyJ1IjoiNGl3b2U2In=
0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position: relative;=
flex-direction: column;align-items: center;padding: 0;width: auto;height: a=
uto;border: none;text-decoration: none;display: block;margin: 0;"><img clas=
s=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://substack-post=
-media.s3.amazonaws.com/public/images/73c88ab0-64d7-4b4d-afd2-97ae9d9fda7a_=
2048x1152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:=
null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:14=
56,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null=
,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https:=
//go.bytebytego.com/Unblocked_042826&quot;,&quot;belowTheFold&quot;:true,&q=
uot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessi=
ng&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" w=
idth=3D"550" height=3D"309.375" src=3D"https://substackcdn.com/image/fetch/=
$s_!-MDG!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2=
F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c88ab0-64d7-=
4b4d-afd2-97ae9d9fda7a_2048x1152.png" style=3D"border: none !important;vert=
ical-align: middle;display: block;-ms-interpolation-mode: bicubic;height: a=
uto;margin-bottom: 0;width: auto !important;max-width: 100% !important;marg=
in: 0 auto;"></a></td><td style=3D"text-align: center;"></td></tr></tbody><=
/table></figure></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);l=
ine-height: 26px;font-size: 16px;">Agents can generate code. Getting it rig=
ht for your system, team conventions, and past decisions is the hard part. =
You end up babysitting the agent and watch the token costs climb.</p><p sty=
le=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: =
16px;">More MCPs, rules, and bigger context windows give agents access to i=
nformation, but not understanding. The teams pulling ahead have a context e=
ngine to give agents only what they need for the task at hand.</p><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;"><a href=3D"https://substack.com/redirect/a95b6182-9924-4322-9ece-ce392=
3bfe123?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs=
" style=3D"color: #7756e3;text-decoration: none;">Join us live (FREE) on Ma=
y 6</a><span> to see:</span></p><ul style=3D"margin-top: 0;padding: 0;"><li=
 style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"col=
or: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box=
;padding-left: 4px;font-size: 16px;margin: 0;">Where teams get stuck on the=
 AI maturity curve and why common fixes fall short</p></li><li style=3D"mar=
gin: 8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55=
,55);line-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-left=
: 4px;font-size: 16px;margin: 0;">How a context engine solves for quality, =
efficiency, and cost</p></li><li style=3D"margin: 8px 0 0 32px;mso-special-=
format: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-=
bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px;margin: =
0;">Live demo: the same coding task with and without a context engine</p></=
li></ul><p class=3D"button-wrapper" data-attrs=3D"{&quot;url&quot;:&quot;ht=
tps://go.bytebytego.com/Unblocked_042826&quot;,&quot;text&quot;:&quot;Regis=
ter now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-compone=
nt-name=3D"ButtonCreateButton" style=3D"margin: 0 0 20px 0;color: rgb(54,55=
,55);line-height: 26px;font-size: 16px;text-align: center;cursor: pointer;b=
order-radius: 4px;"><a class=3D"button primary" href=3D"https://substack.co=
m/redirect/a95b6182-9924-4322-9ece-ce3923bfe123?j=3DeyJ1IjoiNGl3b2U2In0.sVD=
xRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"font-family: system-ui,-=
apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-seri=
f,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-bl=
ock;box-sizing: border-box;cursor: pointer;border: none;border-radius: 8px;=
font-size: 14px;line-height: 20px;font-weight: 600;text-align: center;margi=
n: 0;opacity: 1;outline: none;white-space: nowrap;color: #ffffff !important=
;text-decoration: none !important;background-color: #7756e3;padding: 12px 2=
0px;height: auto;"><span style=3D"color: #ffffff;text-decoration: none;">Re=
gister now</span></a></p><div style=3D"font-size: 16px;line-height: 26px;">=
<hr style=3D"margin: 32px 0;padding: 0;height: 1px;background: rgb(0,0,0,.1=
);border: none;"></div><h2 class=3D"header-anchor-post" style=3D"position: =
relative;font-family: 'SF Pro Display',-apple-system-headline,system-ui,-ap=
ple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,=
'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-w=
ebkit-font-smoothing: antialiased;-moz-osx-font-smoothing: antialiased;-web=
kit-appearance: optimizelegibility;-moz-appearance: optimizelegibility;appe=
arance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55);lin=
e-height: 1.16em;font-size: 1.625em;text-align: justify">The Stripe Platfor=
m&#8217;s Data Advantage</h2><p style=3D"margin: 0 0 20px 0;color: rgb(54,5=
5,55);line-height: 26px;font-size: 16px;text-align: justify">The model arch=
itecture matters, but Radar&#8217;s biggest competitive advantage comes fro=
m the data flowing through the Stripe network. Stripe has engineered specif=
ic mechanisms to convert that scale into model performance.</p><p style=3D"=
margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;t=
ext-align: justify">90% of cards used on the Stripe network have been seen =
more than once across different merchants. A single business has visibility=
 into only its own transactions. Radar, by contrast, sees patterns across m=
illions of businesses and thousands of partner banks around the world.</p><=
p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-s=
ize: 16px;text-align: justify">There is also a structural advantage in how =
Radar gets its training labels, the data that tells the model which past tr=
ansactions were actually fraudulent. Since Radar is built directly into Str=
ipe&#8217;s payment flow, it receives these labels automatically when cardh=
olders dispute charges. Most third-party fraud solutions require businesses=
 to build separate data pipelines for sending payment labels back to the fr=
aud provider, or to label payments manually, which is time-consuming and er=
ror-prone. Radar sidesteps all of this by ingesting ground truth data strai=
ght from the payment flow and card networks.</p><p style=3D"margin: 0 0 20p=
x 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: just=
ify">Stripe uses hundreds of features in its model, and most of them are ag=
gregates computed across the entire network. As the network grows, each fea=
ture becomes more informative because the training data better represents t=
he feature&#8217;s real-world distribution.</p><p style=3D"margin: 0 0 20px=
 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justi=
fy">A &#8220;feature&#8221; in this context is a single signal the model us=
es to evaluate a transaction. Some are intuitive. For example, does the car=
dholder&#8217;s name match the provided email address? How many different c=
ards have been associated with this IP address? A high count might indicate=
 someone testing stolen cards. Other features are more surprising. The diff=
erence between the device&#8217;s local time and UTC, or the count of count=
ries where a card has been successfully authorized, both turn out to be mea=
ningful fraud signals.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,5=
5);line-height: 26px;font-size: 16px;text-align: justify">Finding new featu=
res is part forensics and part experimentation. Stripe&#8217;s team reviews=
 past fraud attacks in detail, building investigation reports that try to r=
econstruct how fraudsters operate. They look for patterns in throwaway emai=
l addresses used to set up multiple accounts quickly. They monitor dark web=
 activity weekly. From this research, they build a prioritized list of cand=
idate features, implement each one rapidly, and prototype them to measure m=
odel impact.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-he=
ight: 26px;font-size: 16px;text-align: justify">Sometimes the most promisin=
g ideas yield little. For example, Stripe once built a feature capturing wh=
ether a business was currently under a distributed fraud attack. It barely =
moved the model performance because the model was already learning that pat=
tern implicitly.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);lin=
e-height: 26px;font-size: 16px;text-align: justify">One of the more powerfu=
l techniques Stripe uses is embeddings, which are learned numerical represe=
ntations for categorical data. Things like merchant identity, issuing bank,=
 user country, and day of the week have many possible values, and defining =
useful numerical representations for them is challenging.</p><p style=3D"ma=
rgin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;tex=
t-align: justify">Stripe trains its model to learn an embedding for each va=
lue, essentially a set of coordinates that position it relative to others b=
ased on transaction patterns. Uber and Lyft, for example, would end up with=
 similar embedding coordinates because their transaction patterns resemble =
each other, while Slack would be positioned very differently.</p><div class=
=3D"captioned-image-container-static" style=3D"font-size: 16px;line-height:=
 26px;margin: 32px auto;"><figure style=3D"width: 100%;margin: 0 auto;"><ta=
ble class=3D"image-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" c=
ellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic" style=3D"mso-pad=
ding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: center;"></td><=
td class=3D"content" align=3D"left" width=3D"1456" style=3D"text-align: cen=
ter;"><a class=3D"image-link" target=3D"_blank" href=3D"https://substack.co=
m/redirect/d24776ef-72ba-4d54-80ea-1890c1596dd2?j=3DeyJ1IjoiNGl3b2U2In0.sVD=
xRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position: relative;flex-=
direction: column;align-items: center;padding: 0;width: auto;height: auto;b=
order: none;text-decoration: none;display: block;margin: 0;"><img class=3D"=
wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https://substack-post-medi=
a.s3.amazonaws.com/public/images/8555673b-391d-4760-a9ac-2f0a9a24c7b0_2472x=
2008.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,=
&quot;imageSize&quot;:null,&quot;height&quot;:1183,&quot;width&quot;:1456,&=
quot;resizeWidth&quot;:null,&quot;bytes&quot;:214989,&quot;alt&quot;:null,&=
quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quo=
t;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;inte=
rnalRedirect&quot;:&quot;https://blog.bytebytego.com/i/195387505?img=3Dhttp=
s%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8555673b=
-391d-4760-a9ac-2f0a9a24c7b0_2472x2008.png&quot;,&quot;isProcessing&quot;:f=
alse,&quot;align&quot;:null,&quot;offset&quot;:false}" alt=3D"" width=3D"55=
0" height=3D"446.875" src=3D"https://substackcdn.com/image/fetch/$s_!AAQg!,=
w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubsta=
ck-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8555673b-391d-4760-a9ac-=
2f0a9a24c7b0_2472x2008.png" style=3D"border: none !important;vertical-align=
: middle;display: block;-ms-interpolation-mode: bicubic;height: auto;margin=
-bottom: 0;width: auto !important;max-width: 100% !important;margin: 0 auto=
;"></a></td><td style=3D"text-align: center;"></td></tr></tbody></table></f=
igure></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height=
: 26px;font-size: 16px;text-align: justify">Embeddings enable geographic tr=
ansfer of fraud knowledge. If Stripe identifies a new fraud pattern in Braz=
il, the embeddings allow the system to recognize that same pattern in the U=
S automatically, without retraining. The model essentially learns which mer=
chants and regions behave similarly, then applies fraud knowledge across th=
e entire network.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);li=
ne-height: 26px;font-size: 16px;text-align: justify">Stripe also found that=
 scaling up training data continued to yield significant gains. A 10x incre=
ase in training transaction data still produced meaningful model improvemen=
ts, and the team was working on a 100x version. This kind of scaling was on=
ly feasible because the DNN-only architecture could train fast enough to ha=
ndle much larger datasets practically.</p><div class=3D"captioned-image-con=
tainer-static" style=3D"font-size: 16px;line-height: 26px;margin: 32px auto=
;"><figure style=3D"width: 100%;margin: 0 auto;"><table class=3D"image-wrap=
per" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" data-c=
omponent-name=3D"Image2ToDOMStatic" style=3D"mso-padding-alt: 1em 0 1.6em;"=
><tbody><tr><td style=3D"text-align: center;"></td><td class=3D"content" al=
ign=3D"left" width=3D"1456" style=3D"text-align: center;"><a class=3D"image=
-link" target=3D"_blank" href=3D"https://substack.com/redirect/8cea66ed-e5c=
a-4d8f-ba30-c8f9dcf72cc0?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy=
3p768BWtuZifRB-Zs" style=3D"position: relative;flex-direction: column;align=
-items: center;padding: 0;width: auto;height: auto;border: none;text-decora=
tion: none;display: block;margin: 0;"><img class=3D"wide-image" data-attrs=
=3D"{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/pub=
lic/images/b58d069f-b20f-4fd4-bee8-c8317d62cabf_3008x1792.png&quot;,&quot;s=
rcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:=
null,&quot;height&quot;:867,&quot;width&quot;:1456,&quot;resizeWidth&quot;:=
null,&quot;bytes&quot;:134459,&quot;alt&quot;:null,&quot;title&quot;:null,&=
quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheF=
old&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quo=
t;https://blog.bytebytego.com/i/195387505?img=3Dhttps%3A%2F%2Fsubstack-post=
-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58d069f-b20f-4fd4-bee8-c8317d6=
2cabf_3008x1792.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:=
null,&quot;offset&quot;:false}" alt=3D"" width=3D"550" height=3D"327.506868=
13186815" src=3D"https://substackcdn.com/image/fetch/$s_!RFHf!,w_1100,c_lim=
it,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-medi=
a.s3.amazonaws.com%2Fpublic%2Fimages%2Fb58d069f-b20f-4fd4-bee8-c8317d62cabf=
_3008x1792.png" style=3D"border: none !important;vertical-align: middle;dis=
play: block;-ms-interpolation-mode: bicubic;height: auto;margin-bottom: 0;w=
idth: auto !important;max-width: 100% !important;margin: 0 auto;"></a></td>=
<td style=3D"text-align: center;"></td></tr></tbody></table><figcaption cla=
ss=3D"image-caption" style=3D"box-sizing: content-box;color: rgb(119,119,11=
9);font-size: 14px;line-height: 20px;font-weight: 400;letter-spacing: -.15p=
x;margin-top: 8px;width: 70%;padding-left: 15%;padding-right: 15%;text-alig=
n: center;"><strong>Source: </strong><a href=3D"https://substack.com/redire=
ct/514d06d6-15fa-4015-85d5-429fcb8ee37c?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v=
8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"text-decoration: underline;">Str=
ipe Engineering Blog</a></figcaption></figure></div><h2 class=3D"header-anc=
hor-post" style=3D"position: relative;font-family: 'SF Pro Display',-apple-=
system-headline,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Robot=
o,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI=
 Symbol';font-weight: bold;-webkit-font-smoothing: antialiased;-moz-osx-fon=
t-smoothing: antialiased;-webkit-appearance: optimizelegibility;-moz-appear=
ance: optimizelegibility;appearance: optimizelegibility;margin: 1em 0 0.625=
em 0;color: rgb(54,55,55);line-height: 1.16em;font-size: 1.625em;text-align=
: justify">The Tradeoff Every Fraud System Has to Make</h2><p style=3D"marg=
in: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-=
align: justify">Having a great model and great data still leaves a fundamen=
tal question unanswered.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55=
,55);line-height: 26px;font-size: 16px;text-align: justify">How much fraud =
should you actually block?</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,=
55,55);line-height: 26px;font-size: 16px;text-align: justify">Every fraud d=
etection system faces an inherent tension between two types of errors:</p><=
ul style=3D"margin-top: 0;padding: 0;"><li style=3D"margin: 8px 0 0 32px;ms=
o-special-format: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26=
px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 16p=
x;margin: 0;text-align: justify">A false negative is when fraud slips throu=
gh undetected, costing the business the product, a chargeback fee, and pote=
ntial reputational damage with card networks.</p></li><li style=3D"margin: =
8px 0 0 32px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);=
line-height: 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px=
;font-size: 16px;margin: 0;text-align: justify">A false positive is when a =
legitimate customer gets blocked, and the business loses the sale, along wi=
th potentially the customer forever. A survey found that 33% of consumers s=
aid they would stop shopping at a business after a single false decline.</p=
></li></ul><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height:=
 26px;font-size: 16px;text-align: justify">These two errors exist on a curv=
e.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px=
;font-size: 16px;text-align: justify">Precision measures the fraction of bl=
ocked transactions that are actually fraudulent. Recall measures the fracti=
on of all actual fraud that gets caught. As you raise the blocking threshol=
d, requiring a higher fraud probability before blocking a payment, precisio=
n goes up because you become more selective about what you block. But recal=
l goes down because more marginal fraud slips through. Lowering the thresho=
ld pushes things in the opposite direction.</p><p style=3D"margin: 0 0 20px=
 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justi=
fy">Stripe frames this as two distinct problems:</p><ul style=3D"margin-top=
: 0;padding: 0;"><li style=3D"margin: 8px 0 0 32px;mso-special-format: bull=
et;"><p style=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;bo=
x-sizing: border-box;padding-left: 4px;font-size: 16px;margin: 0;text-align=
: justify">The data science problem is about making the model better by add=
ing predictive features, training on more data, and refining the architectu=
re. A better model shifts the entire precision-recall curve upward, meaning=
 that at any given threshold, you get better outcomes on both dimensions.</=
p></li><li style=3D"margin: 8px 0 0 32px;mso-special-format: bullet;"><p st=
yle=3D"color: rgb(54,55,55);line-height: 26px;margin-bottom: 0;box-sizing: =
border-box;padding-left: 4px;font-size: 16px;margin: 0;text-align: justify"=
>The business problem is about choosing where on that curve to operate, and=
 the right answer depends entirely on the economics of each merchant.</p></=
li></ul><div class=3D"captioned-image-container-static" style=3D"font-size:=
 16px;line-height: 26px;margin: 32px auto;"><figure style=3D"width: 100%;ma=
rgin: 0 auto;"><table class=3D"image-wrapper" width=3D"100%" border=3D"0" c=
ellspacing=3D"0" cellpadding=3D"0" data-component-name=3D"Image2ToDOMStatic=
" style=3D"mso-padding-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-alig=
n: center;"></td><td class=3D"content" align=3D"left" width=3D"1456" style=
=3D"text-align: center;"><a class=3D"image-link" target=3D"_blank" href=3D"=
https://substack.com/redirect/e9e8bc25-1d7d-4b74-b1de-318cf6b241d0?j=3DeyJ1=
IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"posit=
ion: relative;flex-direction: column;align-items: center;padding: 0;width: =
auto;height: auto;border: none;text-decoration: none;display: block;margin:=
 0;"><img class=3D"wide-image" data-attrs=3D"{&quot;src&quot;:&quot;https:/=
/substack-post-media.s3.amazonaws.com/public/images/0366cd10-a815-4733-afe5=
-a9c82f521256_2910x1744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;ful=
lscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;=
width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192803,&quo=
t;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&qu=
ot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot=
;:false,&quot;internalRedirect&quot;:&quot;https://blog.bytebytego.com/i/19=
5387505?img=3Dhttps%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2=
Fimages%2F0366cd10-a815-4733-afe5-a9c82f521256_2910x1744.png&quot;,&quot;is=
Processing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" al=
t=3D"" width=3D"550" height=3D"329.77335164835165" src=3D"https://substackc=
dn.com/image/fetch/$s_!kCyk!,w_1100,c_limit,f_auto,q_auto:good,fl_progressi=
ve:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimag=
es%2F0366cd10-a815-4733-afe5-a9c82f521256_2910x1744.png" style=3D"border: n=
one !important;vertical-align: middle;display: block;-ms-interpolation-mode=
: bicubic;height: auto;margin-bottom: 0;width: auto !important;max-width: 1=
00% !important;margin: 0 auto;"></a></td><td style=3D"text-align: center;">=
</td></tr></tbody></table></figure></div><p style=3D"margin: 0 0 20px 0;col=
or: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">Fo=
r example, consider two businesses.</p><p style=3D"margin: 0 0 20px 0;color=
: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">A fo=
od delivery company with thin margins might earn $2 in profit per order. On=
ce you account for product cost and chargeback fees, a single fraudulent tr=
ansaction can wipe out the profit from nearly 19 legitimate ones. For this =
business, aggressive blocking makes sense because the cost of missed fraud =
is devastating. On the other hand, a SaaS company with high margins faces t=
he opposite calculation. The lifetime revenue lost by blocking a legitimate=
 subscriber who would have paid $200 per month for years far outweighs the =
cost of an occasional fraudulent charge.</p><p style=3D"margin: 0 0 20px 0;=
color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify"=
>This is why Stripe built Radar to be configurable.</p><p style=3D"margin: =
0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-alig=
n: justify">Merchants can adjust their risk threshold, and Radar for Fraud =
Teams lets them compose custom rules and set up manual review queues.</p><p=
 style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-si=
ze: 16px;text-align: justify">Stripe evaluates custom rules with the same p=
recision-recall framework it uses for the model itself. When a merchant cre=
ates a rule, Stripe shows historical statistics on matching transactions th=
at were actually disputed, refunded, or accepted, so the merchant can evalu=
ate the impact before the rule goes live. Stripe also uses additional evalu=
ation tools like ROC curves and AUC (area under the curve) scores to assess=
 overall model quality, but the precision-recall framing captures the core =
tension most directly.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,5=
5);line-height: 26px;font-size: 16px;text-align: justify">Manual review add=
s yet another lever.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55)=
;line-height: 26px;font-size: 16px;text-align: justify">Sending borderline =
transactions to human reviewers instead of blocking them outright improves =
precision with minimal impact on recall. Also, sending borderline transacti=
ons to review instead of allowing them through improves recall with minimal=
 impact on precision. The cost is human effort, but it gives merchants a wa=
y to reshape their own precision-recall curve using business knowledge the =
model cannot access on its own.</p><h2 class=3D"header-anchor-post" style=
=3D"position: relative;font-family: 'SF Pro Display',-apple-system-headline=
,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Ari=
al,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-w=
eight: bold;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: an=
tialiased;-webkit-appearance: optimizelegibility;-moz-appearance: optimizel=
egibility;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb=
(54,55,55);line-height: 1.16em;font-size: 1.625em;text-align: justify">Maki=
ng a Black Box Explain Itself</h2><p style=3D"margin: 0 0 20px 0;color: rgb=
(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">All machi=
ne learning models are opaque to some degree, and deep neural networks are =
especially more opaque. Stripe accepted this when they chose DNNs over simp=
ler, more interpretable techniques. The predictions are better, but explain=
ing why a specific transaction received a given score is harder.</p><p styl=
e=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 1=
6px;text-align: justify">Stripe&#8217;s response was to build layers of int=
erpretability around the model.</p><p style=3D"margin: 0 0 20px 0;color: rg=
b(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">In 2020,=
 they launched risk insights, a feature that shows merchants which factors =
contributed to a transaction being declined. The interface displays the top=
 fraud signals, like an address being associated with a previous early frau=
d warning or an unusually high number of names linked to a card. It include=
s a location map showing distances between the billing address, shipping ad=
dress, and IP address. It shows customer metadata like email, cardholder na=
me, and the authorization rate for transactions associated with that email.=
</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;f=
ont-size: 16px;text-align: justify">See the diagram below:</p><div class=3D=
"captioned-image-container-static" style=3D"font-size: 16px;line-height: 26=
px;margin: 32px auto;"><figure style=3D"width: 100%;margin: 0 auto;"><table=
 class=3D"image-wrapper" width=3D"100%" border=3D"0" cellspacing=3D"0" cell=
padding=3D"0" data-component-name=3D"Image2ToDOMStatic" style=3D"mso-paddin=
g-alt: 1em 0 1.6em;"><tbody><tr><td style=3D"text-align: center;"></td><td =
class=3D"content" align=3D"left" width=3D"1456" style=3D"text-align: center=
;"><a class=3D"image-link" target=3D"_blank" href=3D"https://substack.com/r=
edirect/8db8ba24-e2af-4260-baae-fcef471fcf27?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRt=
mZ85v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"position: relative;flex-dir=
ection: column;align-items: center;padding: 0;width: auto;height: auto;bord=
er: none;text-decoration: none;display: block;margin: 0;"><img class=3D"wid=
e-image" data-attrs=3D"{&quot;src&quot;:&quot;https://substack-post-media.s=
3.amazonaws.com/public/images/9cdc97c8-b698-410e-85a0-4cf873ceb44a_1620x759=
=2Epng&quot;,&quot;srcNoWatermark&quot;=
:null,&quot;fullscreen&quot;:null,&quo=
t;imageSize&quot;:null,&quot;height&quot;:682,&quot;width&quot;:1456,&quot;=
resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;ti=
tle&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFo=
ld&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,=
&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:fa=
lse}" alt=3D"" width=3D"550" height=3D"257.6236263736264" src=3D"https://su=
bstackcdn.com/image/fetch/$s_!o3Ns!,w_1100,c_limit,f_auto,q_auto:good,fl_pr=
ogressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic=
%2Fimages%2F9cdc97c8-b698-410e-85a0-4cf873ceb44a_1620x759.png" style=3D"bor=
der: none !important;vertical-align: middle;display: block;-ms-interpolatio=
n-mode: bicubic;height: auto;margin-bottom: 0;width: auto !important;max-wi=
dth: 100% !important;margin: 0 auto;"></a></td><td style=3D"text-align: cen=
ter;"></td></tr></tbody></table><figcaption class=3D"image-caption" style=
=3D"box-sizing: content-box;color: rgb(119,119,119);font-size: 14px;line-he=
ight: 20px;font-weight: 400;letter-spacing: -.15px;margin-top: 8px;width: 7=
0%;padding-left: 15%;padding-right: 15%;text-align: center;"><strong>Source=
: </strong><a href=3D"https://substack.com/redirect/514d06d6-15fa-4015-85d5=
-429fcb8ee37c?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfdamY0krRXGMy3p768BWtuZi=
fRB-Zs" style=3D"text-decoration: underline;">Stripe Engineering Blog</a></=
figcaption></figure></div><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,5=
5);line-height: 26px;font-size: 16px;text-align: justify">Stripe also uses =
Elasticsearch, a search engine optimized for fast lookups across large data=
sets, to surface related transactions and help merchants put a specific dec=
line in a broader context.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,=
55,55);line-height: 26px;font-size: 16px;text-align: justify">Internally, t=
he team built a table view displaying the exact features contributing most =
to a transaction&#8217;s fraud score, which engineers use to debug support =
cases. Stripe is working on sharing more of these internal tools with merch=
ants, closing the gap between what engineers can see and what users can see=
=2E</p><p style=3D"margin: 0 0 20px 0;co=
lor: rgb(54,55,55);line-height: 26px;=
font-size: 16px;text-align: justify">Explainability serves a practical purp=
ose beyond building trust. When merchants understand why Radar scored a tra=
nsaction the way it did, they can improve the data they send to Stripe for =
more accurate decisions. They can create custom rules that incorporate know=
ledge only they have about their own business. The explanation layer transf=
orms Radar from a black box into something merchants can actively collabora=
te with.</p><h2 class=3D"header-anchor-post" style=3D"position: relative;fo=
nt-family: 'SF Pro Display',-apple-system-headline,system-ui,-apple-system,=
BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Colo=
r Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: bold;-webkit-font-=
smoothing: antialiased;-moz-osx-font-smoothing: antialiased;-webkit-appeara=
nce: optimizelegibility;-moz-appearance: optimizelegibility;appearance: opt=
imizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,55);line-height: 1=
=2E16em;font-size: 1.625em;text-align:=20=
justify">Getting the Model Into Produc=
tion</h2><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 2=
6px;font-size: 16px;text-align: justify">Building a better model is half th=
e challenge. Deploying it safely at Stripe&#8217;s scale is the other half,=
 and it involves two hard engineering problems.</p><p style=3D"margin: 0 0 =
20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: j=
ustify">The first is real-time feature computation. Every feature the model=
 uses during training must also be computable in production, because Radar =
needs to score every incoming payment as part of the Stripe API flow. For a=
 feature like &#8220;the two most frequent IP addresses previously used wit=
h this card,&#8221; Stripe maintains an up-to-date state on every card ever=
 seen on the network, and fetching or updating that state has to be fast. S=
tripe&#8217;s ML infrastructure team built systems that let engineers defin=
e features declaratively, with current values made available automatically =
in production at low latency.</p><p style=3D"margin: 0 0 20px 0;color: rgb(=
54,55,55);line-height: 26px;font-size: 16px;text-align: justify">The second=
 is ensuring that model improvements hold across the entire user base, all =
the way down to individual merchants. A model that performs better on aggre=
gate metrics might still cause a spike in block rate for smaller businesses=
, which would be disruptive for those merchants and their customers. Before=
 releasing any model, Stripe measures the change it would cause to the fals=
e positive rate, block rate, and authorization rate on both an aggregate an=
d per-merchant basis. If a model would cause undesirable shifts for certain=
 users, they adjust it for those segments before release. They also compare=
 score distributions between old and new models, aiming to keep the proport=
ion of transactions above each merchant&#8217;s blocking threshold stable.<=
/p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;fo=
nt-size: 16px;text-align: justify">Fraud patterns shift constantly, which m=
eans even a well-performing model degrades over time, a phenomenon called m=
odel drift. Stripe found that retraining the same model on more recent data=
, with identical features and architecture, improves recall by up to half a=
 percentage point per month. That is a big gain from simply keeping the dat=
a fresh. By investing in automated training, tuning, and evaluation tooling=
, Stripe tripled their model release cadence. They continuously update perf=
ormance dashboards after training but before release, so engineers can spot=
 stale model candidates and proactively retrain them.</p><p style=3D"margin=
: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-al=
ign: justify">The fraud landscape itself keeps evolving. Patterns have shif=
ted from primarily stolen credit card fraud to a growing mix of traditional=
 card fraud and high-velocity card testing attacks, where automated scripts=
 try large numbers of stolen card numbers against a merchant&#8217;s checko=
ut flow. Stripe&#8217;s deployment infrastructure is built to support this =
kind of rapid adaptation.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,5=
5,55);line-height: 26px;font-size: 16px;text-align: justify">Stripe also fa=
ces a subtle measurement challenge in production. Transactions that the mod=
el blocks have unknown true outcomes because the payment was never complete=
d. Computing a full production precision-recall curve requires counterfactu=
al analysis, meaning statistical methods that estimate what would have happ=
ened to payments Radar blocked. Stripe has developed proprietary techniques=
 for this over the years.</p><h2 class=3D"header-anchor-post" style=3D"posi=
tion: relative;font-family: 'SF Pro Display',-apple-system-headline,system-=
ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-=
serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-weight: b=
old;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: antialiase=
d;-webkit-appearance: optimizelegibility;-moz-appearance: optimizelegibilit=
y;appearance: optimizelegibility;margin: 1em 0 0.625em 0;color: rgb(54,55,5=
5);line-height: 1.16em;font-size: 1.625em;text-align: justify">Conclusion</=
h2><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;fo=
nt-size: 16px;text-align: justify">Radar is a very different product from w=
hat it was at launch.</p><p style=3D"margin: 0 0 20px 0;color: rgb(54,55,55=
);line-height: 26px;font-size: 16px;text-align: justify">The models, the da=
ta pipelines, the explainability tools, and the way Stripe communicates fra=
ud decisions to merchants have all been rebuilt. Fraud patterns have change=
d considerably in that time as well.</p><p style=3D"margin: 0 0 20px 0;colo=
r: rgb(54,55,55);line-height: 26px;font-size: 16px;text-align: justify">How=
ever, the core goal of the Radar team remains the same.</p><p style=3D"marg=
in: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16px;text-=
align: justify">They are still working to create an environment where busin=
esses and customers can transact with confidence, still optimizing that bri=
ef moment customers barely register, the instant between clicking &#8220;pu=
rchase&#8221; and seeing the transaction confirmed. Every architectural cho=
ice, every feature, every deployment safeguard exists to make that 100-mill=
isecond window as accurate, fair, and trustworthy as possible.</p><p style=
=3D"margin: 0 0 20px 0;color: rgb(54,55,55);line-height: 26px;font-size: 16=
px;text-align: justify"><strong>References:</strong></p><ul style=3D"margin=
-top: 0;padding: 0;margin-bottom: 0;"><li style=3D"margin: 8px 0 0 32px;mso=
-special-format: bullet;"><p style=3D"color: rgb(54,55,55);line-height: 26p=
x;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size: 16px=
;margin: 0;text-align: justify"><a href=3D"https://substack.com/redirect/6b=
d09269-ee41-472f-beb6-9294025800f9?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85v8kfda=
mY0krRXGMy3p768BWtuZifRB-Zs" style=3D"color: #7756e3;text-decoration: none;=
">How we built it: Stripe Radar</a></p></li><li style=3D"margin: 8px 0 0 32=
px;mso-special-format: bullet;"><p style=3D"color: rgb(54,55,55);line-heigh=
t: 26px;margin-bottom: 0;box-sizing: border-box;padding-left: 4px;font-size=
: 16px;margin: 0;text-align: justify"><a href=3D"https://substack.com/redir=
ect/6bd09269-ee41-472f-beb6-9294025800f9?j=3DeyJ1IjoiNGl3b2U2In0.sVDxRtmZ85=
v8kfdamY0krRXGMy3p768BWtuZifRB-Zs" style=3D"color: #7756e3;text-decoration:=
 none;">A primer on machine learning for fraud detection</a></p></li></ul><=
/div></div><div class=3D"postscript-placeholder" style=3D"margin: 32px 0 0;=
width: 100%;box-sizing: border-box;font-size: 16px;line-height: 26px;"></di=
v><table class=3D"email-ufi-2-bottom" role=3D"presentation" width=3D"100%" =
border=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"border-top: 1px s=
olid rgb(0,0,0,.1);border-bottom: 1px solid rgb(0,0,0,.1);min-width: 100%;"=
><tbody><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px;line-hei=
ght:0;">&nbsp;</td></tr><tr><td><table class=3D"email-ufi-2-row" role=3D"pr=
esentation" width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"=
 style=3D"border-bottom: 1px solid rgb(0,0,0,.1);"><tbody><tr><td width=3D"=
95%"><table class=3D"email-button-outline-wrapper-full-width" role=3D"prese=
ntation" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" st=
yle=3D"width: 95%;margin: 0 auto;"><tbody><tr><td align=3D"center"><a class=
=3D"email-button-outline full-width" href=3D"https://substack.com/app-link/=
post?publication_id=3D817132&post_id=3D195387505&utm_source=3Dsubstack&utm_=
medium=3Demail&utm_content=3Dshare&utm_campaign=3Demail-share&action=3Dshar=
e&triggerShare=3Dtrue&isFreemail=3Dtrue&r=3D4iwoe6&token=3DeyJ1c2VyX2lkIjoy=
NzM2MjIzOTgsInBvc3RfaWQiOjE5NTM4NzUwNSwiaWF0IjoxNzc3MzQ2MDU3LCJleHAiOjE3Nzk=
5MzgwNTcsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.ZMZrkrQFN7=
BD_HmBbETpEtCiPIwXiwdr_DQiZWYeCRQ" style=3D"font-family: system-ui,-apple-s=
ystem,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Appl=
e Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;fon=
t-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-tr=
ansform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 14px;text=
-decoration: none;color: rgb(119,119,119);width: 100%;padding-left: 0;paddi=
ng-right: 0;"><img class=3D"icon" src=3D"https://substackcdn.com/image/fetc=
h/$s_!rmYa!,w_36,c_scale,f_png,q_auto:good,fl_progressive:steep/https%3A%2F=
%2Fsubstack.com%2Ficon%2FLucideShare%3Fv%3D4%26height%3D36%26fill%3Dnone%26=
stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" height=3D"18" style=3D=
"margin-right: 8px;min-width: 18px;min-height: 18px;border: none;vertical-a=
lign: middle;max-width: 18px" alt=3D""><span class=3D"email-button-text" st=
yle=3D"vertical-align: middle;">Share</span></a></td></tr></tbody></table><=
/td></tr><tr height=3D"16"><td height=3D"16" style=3D"font-size:0px;line-he=
ight:0;">&nbsp;</td></tr></tbody></table></td></tr><tr height=3D"16"><td he=
ight=3D"16" style=3D"font-size:0px;line-height:0;">&nbsp;</td></tr><tr><td>=
<table role=3D"presentation" width=3D"100%" border=3D"0" cellspacing=3D"0" =
cellpadding=3D"0"><tbody><tr><td><table role=3D"presentation" width=3D"auto=
" border=3D"0" cellspacing=3D"0" cellpadding=3D"0" style=3D"margin:0 auto;"=
><tbody><tr><td style=3D"vertical-align:middle;"><table role=3D"presentatio=
n" width=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><=
tr><td align=3D"center"><a class=3D"email-button-outline" href=3D"https://s=
ubstack.com/app-link/post?publication_id=3D817132&post_id=3D195387505&utm_s=
ource=3Dsubstack&isFreemail=3Dtrue&submitLike=3Dtrue&token=3DeyJ1c2VyX2lkIj=
oyNzM2MjIzOTgsInBvc3RfaWQiOjE5NTM4NzUwNSwicmVhY3Rpb24iOiLinaQiLCJpYXQiOjE3N=
zczNDYwNTcsImV4cCI6MTc3OTkzODA1NywiaXNzIjoicHViLTgxNzEzMiIsInN1YiI6InJlYWN0=
aW9uIn0.qokgjmwGMPfUZuSn-LrnOOrKpTeas8wDjrYj_n3EinQ&utm_medium=3Demail&utm_=
campaign=3Demail-reaction&r=3D4iwoe6" style=3D"font-family: system-ui,-appl=
e-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'A=
pple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;=
font-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text=
-transform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 14px;t=
ext-decoration: none;color: rgb(119,119,119);"><img class=3D"icon" src=3D"h=
ttps://substackcdn.com/image/fetch/$s_!PeVs!,w_36,c_scale,f_png,q_auto:good=
,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2FLucideHeart%3Fv%3=
D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" wi=
dth=3D"18" height=3D"18" style=3D"margin-right: 8px;min-width: 18px;min-hei=
ght: 18px;border: none;vertical-align: middle;max-width: 18px" alt=3D""><sp=
an class=3D"email-button-text" style=3D"vertical-align: middle;">Like</span=
></a></td></tr></tbody></table></td><td width=3D"8" style=3D"min-width:8px;=
"></td><td style=3D"vertical-align:middle;"><table role=3D"presentation" wi=
dth=3D"auto" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><t=
d align=3D"center"><a class=3D"email-button-outline" href=3D"https://substa=
ck.com/app-link/post?publication_id=3D817132&post_id=3D195387505&utm_source=
=3Dsubstack&utm_medium=3Demail&isFreemail=3Dtrue&comments=3Dtrue&token=3Dey=
J1c2VyX2lkIjoyNzM2MjIzOTgsInBvc3RfaWQiOjE5NTM4NzUwNSwiaWF0IjoxNzc3MzQ2MDU3L=
CJleHAiOjE3Nzk5MzgwNTcsImlzcyI6InB1Yi04MTcxMzIiLCJzdWIiOiJwb3N0LXJlYWN0aW9u=
In0.ZMZrkrQFN7BD_HmBbETpEtCiPIwXiwdr_DQiZWYeCRQ&r=3D4iwoe6&utm_campaign=3De=
mail-half-magic-comments&action=3Dpost-comment&utm_source=3Dsubstack&utm_me=
dium=3Demail" style=3D"font-family: system-ui,-apple-system,BlinkMacSystemF=
ont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe=
 UI Emoji','Segoe UI Symbol';display: inline-block;font-weight: 500;border:=
 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-transform: uppercase;fo=
nt-size: 12px;line-height: 12px;padding: 9px 14px;text-decoration: none;col=
or: rgb(119,119,119);"><img class=3D"icon" src=3D"https://substackcdn.com/i=
mage/fetch/$s_!x1tS!,w_36,c_scale,f_png,q_auto:good,fl_progressive:steep/ht=
tps%3A%2F%2Fsubstack.com%2Ficon%2FLucideComments%3Fv%3D4%26height%3D36%26fi=
ll%3Dnone%26stroke%3D%2523808080%26strokeWidth%3D2" width=3D"18" height=3D"=
18" style=3D"margin-right: 8px;min-width: 18px;min-height: 18px;border: non=
e;vertical-align: middle;max-width: 18px" alt=3D""><span class=3D"email-but=
ton-text" style=3D"vertical-align: middle;">Comment</span></a></td></tr></t=
body></table></td><td width=3D"8" style=3D"min-width:8px;"></td><td style=
=3D"vertical-align:middle;"><table role=3D"presentation" width=3D"auto" bor=
der=3D"0" cellspacing=3D"0" cellpadding=3D"0"><tbody><tr><td align=3D"cente=
r"><a class=3D"email-button-outline" href=3D"https://substack.com/redirect/=
2/eyJlIjoiaHR0cHM6Ly9vcGVuLnN1YnN0YWNrLmNvbS9wdWIvYnl0ZWJ5dGVnby9wL2hvdy1zd=
HJpcGUtZGV0ZWN0cy1mcmF1ZHVsZW50LXRyYW5zYWN0aW9ucz91dG1fc291cmNlPXN1YnN0YWNr=
JnV0bV9tZWRpdW09ZW1haWwmdXRtX2NhbXBhaWduPWVtYWlsLXJlc3RhY2stY29tbWVudCZhY3R=
pb249cmVzdGFjay1jb21tZW50JnI9NGl3b2U2JnRva2VuPWV5SjFjMlZ5WDJsa0lqb3lOek0yTW=
pJek9UZ3NJbkJ2YzNSZmFXUWlPakU1TlRNNE56VXdOU3dpYVdGMElqb3hOemMzTXpRMk1EVTNMQ=
0psZUhBaU9qRTNOems1TXpnd05UY3NJbWx6Y3lJNkluQjFZaTA0TVRjeE16SWlMQ0p6ZFdJaU9p=
SndiM04wTFhKbFlXTjBhVzl1SW4wLlpNWnJrclFGTjdCRF9IbUJiRVRwRXRDaVBJd1hpd2RyX0R=
RaVpXWWVDUlEiLCJwIjoxOTUzODc1MDUsInMiOjgxNzEzMiwiZiI6dHJ1ZSwidSI6MjczNjIyMz=
k4LCJpYXQiOjE3NzczNDYwNTcsImV4cCI6MjA5MjkyMjA1NywiaXNzIjoicHViLTAiLCJzdWIiO=
iJsaW5rLXJlZGlyZWN0In0.PH3QkJmCfsDcYmlxSbnKsdHL0hvnJJdeGB-hGJ2F2CM?&utm_sou=
rce=3Dsubstack&utm_medium=3Demail" style=3D"font-family: system-ui,-apple-s=
ystem,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Appl=
e Color Emoji','Segoe UI Emoji','Segoe UI Symbol';display: inline-block;fon=
t-weight: 500;border: 1px solid rgb(0,0,0,.1);border-radius: 9999px;text-tr=
ansform: uppercase;font-size: 12px;line-height: 12px;padding: 9px 14px;text=
-decoration: none;color: rgb(119,119,119);"><img class=3D"icon" src=3D"http=
s://substackcdn.com/image/fetch/$s_!ubXF!,w_36,c_scale,f_png,q_auto:good,fl=
_progressive:steep/https%3A%2F%2Fsubstack.com%2Ficon%2Fnotes__NoteRestackIc=
on%3Fv%3D4%26height%3D36%26fill%3Dnone%26stroke%3D%2523808080%26strokeWidth=
%3D2%26strokeLinecap%3Dround%26strokeLinejoin%3Dround" width=3D"18" height=
=3D"18" alt=3D"" style=3D"margin-right: 8px;min-width: 18px;min-height: 18p=
x;max-width: 550px;border: none !important;vertical-align: middle;"><span c=
lass=3D"email-button-text" style=3D"vertical-align: middle;">Restack</span>=
</a></td></tr></tbody></table></td></tr></tbody></table></td><td align=3D"r=
ight"><table role=3D"presentation" width=3D"auto" border=3D"0" cellspacing=
=3D"0" cellpadding=3D"0"><tbody><tr></tr></tbody></table></td></tr></tbody>=
</table></td></tr><tr height=3D"16"><td height=3D"16" style=3D"font-size:0p=
x;line-height:0;">&nbsp;</td></tr></tbody></table><div class=3D"footer foot=
er-ZM59BM" style=3D"color: rgb(119,119,119);text-align: center;font-size: 1=
6px;line-height: 26px;padding: 24px0;"><div style=3D"font-size: 16px;line-h=
eight: 26px;padding-bottom: 24px"><p class=3D"pencraft pc-reset color-secon=
dary-ls1g8s size-12-mmZ61m reset-IxiVJZ small meta-B2bqa5" style=3D"list-st=
yle: none;font-family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI=
',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','S=
egoe UI Symbol';padding-bottom: 0;font-size: 12px;line-height: 16px;margin:=
 0;color: rgb(119,119,119);text-decoration: unset;">&#169; 2026 <span>ByteB=
yteGo</span><br>548 Market Street PMB 72296, San Francisco, CA 94104 <br><a=
 href=3D"https://substack.com/redirect/2/eyJlIjoiaHR0cHM6Ly9ibG9nLmJ5dGVieX=
RlZ28uY29tL2FjdGlvbi9kaXNhYmxlX2VtYWlsP3Rva2VuPWV5SjFjMlZ5WDJsa0lqb3lOek0yT=
WpJek9UZ3NJbkJ2YzNSZmFXUWlPakU1TlRNNE56VXdOU3dpYVdGMElqb3hOemMzTXpRMk1EVTNM=
Q0psZUhBaU9qRTRNRGc0T0RJd05UY3NJbWx6Y3lJNkluQjFZaTA0TVRjeE16SWlMQ0p6ZFdJaU9=
pSmthWE5oWW14bFgyVnRZV2xzSW4wLl9BZElIRUx3bm95eTRoYzMzOHFOeFNmWkIxNW5pdl9pVH=
c5REdlQk9fM2siLCJwIjoxOTUzODc1MDUsInMiOjgxNzEzMiwiZiI6dHJ1ZSwidSI6MjczNjIyM=
zk4LCJpYXQiOjE3NzczNDYwNTcsImV4cCI6MjA5MjkyMjA1NywiaXNzIjoicHViLTAiLCJzdWIi=
OiJsaW5rLXJlZGlyZWN0In0.4pB4XR74oI4GZgGKY_ob-IB56k4tHZ8u0OSW2emIgLI?" style=
=3D"color: #7756e3;text-decoration: none;"><span style=3D"color: rgb(119,11=
9,119);text-decoration: underline;">Unsubscribe</span></a></p></div><p clas=
s=3D"footerSection-EHR0jG small powered-by-substack" style=3D"padding: 0 24=
px;font-size: 12px;line-height: 20px;margin: 0;color: rgb(119,119,119);font=
-family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helve=
tica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol=
';padding-bottom: 0;margin-top: 0;"><a href=3D"https://substack.com/redirec=
t/2/eyJlIjoiaHR0cHM6Ly9zdWJzdGFjay5jb20vc2lnbnVwP3V0bV9zb3VyY2U9c3Vic3RhY2s=
mdXRtX21lZGl1bT1lbWFpbCZ1dG1fY29udGVudD1mb290ZXImdXRtX2NhbXBhaWduPWF1dG9maW=
xsZWQtZm9vdGVyJmZyZWVTaWdudXBFbWFpbD10anBodWhzQGdtYWlsLmNvbSZyPTRpd29lNiIsI=
nAiOjE5NTM4NzUwNSwicyI6ODE3MTMyLCJmIjp0cnVlLCJ1IjoyNzM2MjIzOTgsImlhdCI6MTc3=
NzM0NjA1NywiZXhwIjoyMDkyOTIyMDU3LCJpc3MiOiJwdWItMCIsInN1YiI6ImxpbmstcmVkaXJ=
lY3QifQ.sHH9bGR6yqzpnXJKrqDlwSr-CSkLPs5nHV_hVbK8Gic?" style=3D"color: #7756=
e3;text-decoration: none;display: inline-block;margin: 0 4px;"><img src=3D"=
https://substackcdn.com/image/fetch/$s_!LkrL!,w_270,c_limit,f_auto,q_auto:g=
ood,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish=
-button%402x.png" srcset=3D"https://substackcdn.com/image/fetch/$s_!wgfj!,w=
_135,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack=
=2Ecom%2Fimg%2Femail%2Fpublish-button.p=
ng, https://substackcdn.com/image/fetc=
h/$s_!LkrL!,w_270,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%=
2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish-button%402x.png 2x, https://subst=
ackcdn.com/image/fetch/$s_!KjtY!,w_405,c_limit,f_auto,q_auto:good,fl_progre=
ssive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Femail%2Fpublish-button%403x.=
png 3x" width=3D"135" alt=3D"Start writing" height=3D"40" style=3D"max-widt=
h: 550px;border: none !important;vertical-align: middle;"></a></p></div></d=
iv></td><td></td></tr></tbody></table><img src=3D"https://eotrx.substackcdn=
=2Ecom/o/c5960b32152a03ff/p.gif?token=3D=
eyJtIjoiPDIwMjYwNDI4MDMwMzUzLjMuNzdlZ=
TYxYTgwMDVhZDRlYkBtZy1kMC5zdWJzdGFjay5jb20-IiwidSI6MjczNjIyMzk4LCJyIjoidGpw=
aHVoc0BnbWFpbC5jb20iLCJkIjoibWctZDAuc3Vic3RhY2suY29tIiwicCI6MTk1Mzg3NTA1LCJ=
0IjoibmV3c2xldHRlciIsImEiOiJldmVyeW9uZSIsInMiOjgxNzEzMiwiYyI6InBvc3QiLCJmIj=
p0cnVlLCJwb3NpdGlvbiI6ImJvdHRvbSIsImlhdCI6MTc3NzM0NjA1NywiZXhwIjoxNzc5OTM4M=
DU3LCJpc3MiOiJwdWItMCIsInN1YiI6ImVvIn0.l-A_YJZEDiqVOcNz-kCOQjrHDIQ11nqRG-0y=
B5T-Fpg" alt=3D"" width=3D"1" height=3D"1" border=3D"0" style=3D"height:1px=
 !important;width:1px !important;border-width:0 !important;margin-top:0 !im=
portant;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 =
!important;padding-top:0 !important;padding-bottom:0 !important;padding-rig=
ht:0 !important;padding-left:0 !important;"/><img width=3D"1" height=3D"1" =
alt=3D"" src=3D"https://email.mg-d0.substack.com/o/eJxMkE1uwyAQRk8TdrUwmB8v=
OIs1wMShtcGCIZVvXznJoovZvJGenr4AhGuppztKIxadlnBXkaEbjTFy0lwZhjukbVkxYwXCuAD=
9-0ql2MNNGrQ3MWCc7t4atEEawWc0swKBUbDkBBeaT8JyyaWSgxyMQdQjWM4VxAn9beL7-hX50L=
pvBOFnCGVnqS33iq8ER7Uju0IX6DFhDujwifUs-YNTdOOspDWKqzeh80CX8bdtSISVHd0voex7z=
4nOBTP4DeNH3P2WAlAq-RLZ0YxSsOro-3j0R7tNfL0qXlWt-1h2SNn5k_C6tTB6j9gb1ksgjNRC=
yNmypxN_AQAA__8xuHfI"></body></html>

--5393614305e6dfe7109844a10f8e1d429fd36b341dd731a558ce77a4c817--
