Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Modelling RfQs in Dealer to Client Markets

Introduction

In Dealer-to-Client (D2C) markets where business is conducted via the Request-for-Quote (RfQ) protocol, the dealer occupies a unique position: she knows the identity of the counterparty she is quoting, the instrument being requested, and the history of previous interactions. This information richness distinguishes D2C platforms from anonymous order-driven markets and opens the door to a class of models that exploit client and product heterogeneity to improve pricing, risk management, and client coverage. The RfQ protocol is the dominant trading mechanism across a wide range of asset classes — corporate and government bonds, credit and interest rate derivatives, FX products, and structured instruments — wherever the dealer’s superior information about client demand and own inventory makes price discovery more efficient on a bilateral, relationship-driven basis.

This chapter develops a suite of models for the Request-for-Quote (RfQ) process on Multi-Dealer-to-Client (MD2C) platforms. Although the framework is general, fixed income is used as the primary running example throughout, reflecting both the breadth of the empirical literature on bond RfQ markets and the fact that bonds represent the largest segment of D2C RfQ volume globally. Readers working in FX, rates derivatives, or structured products will find that the probabilistic structure, the causal identification arguments, and the optimal pricing formulas translate directly to their markets by substituting the relevant instrument features. The chapter is organized as follows. We begin by constructing a probabilistic graphical model for the full RfQ process, identifying the observable and latent variables that govern RfQ outcomes. The following section develops generative models for RfQ activity: arrival models based on counting processes, attrition risk models that detect when clients have stopped engaging with the dealer, and anomaly detection models for clients exhibiting abnormal trading patterns. The next section presents the generative model for negotiation, which follows Fermanian et al. (2016) and Marín et al. (2025) in modelling the latent reservation spread and competitor quotes as parametric distributions, yielding an explicit hit probability formula. The chapter then turns to causal interventions: drawing on the framework of Causal inference, we apply the back-door criterion to the RfQ causal graph to obtain an identifiable hit probability, and use this as the foundation for two dealer decisions — optimal pricing and the axe matcher. Optimal pricing is covered in two regimes: a streaming price setting where only trades are observed (no miss information), and a full RfQ setting with observable hit/miss outcomes. The axe matcher formalizes client targeting as an average causal effect computation.

Probabilistic graphical model for RfQs

A model that captures the Request for Quote process discussed in the Market Microstructure chapter is the probabilistic graphical model proposed by Marín et al., 2025, which we reproduce in the following figure:

Probabilistic graphical model for the Request for Quote process

Figure 1:Probabilistic graphical model for the Request for Quote process

The model is composed of the following elements. Some of them are known pre-trade, others post-trade depending on the result of the RfQ, and some are just simply non-observable (latent) variables:

RfQ: a binary random variable indicating whether an RfQ is initiated. Each RfQ carries associated features, collectively represented by the variable RF in the model. These include, for example, the time tt of the request, the side ss (buy or sell) — where “buy” implies the dealer purchases from the client, and “sell” implies the dealer sells to the client — the volume vv, and the number of competing dealers nn chosen by the client (typically subject to platform-imposed limits). The trigger for an RfQ can stem from external client factors, such as a specific trading strategy, which fall outside the model’s scope. In some cases, it may also result from proactive engagement by the dealer’s sales force, captured in the variable call. Other factors that may shape the client’s decision to request a quote, and which are explicitly included in the model, include:

RfQ Status (RS): The final outcome of the RfQ can be categorized into three main cases:

The drivers of the RfQ status in this model include:

Revenue (R): The profitability of the trade. Dealers use several different revenue metrics depending on the context:

Generative models for the request for quote activity

Models for the arrival of RfQs

A dealer receives RfQs for different products from different clients every day or week. Each RfQ has a side, buy or sell, and a volume requested to be traded. A generative model that captures this distribution can be encoded by the following probability:

P(τRfQ(c, p, s, v)[t,t+dt]Ft)P(\tau_{\text{RfQ}(\text{c, p, s, v)}} \in [t, t+dt]|F_t)

where τRfQ(c, p, s, v)\tau_{\text{RfQ}(\text{c, p, s, v})} is a random variable that specifies the time at which a client c\text{c} requests a quote for product p\text{p} of side s\text{s} and volume v\text{v} (for the moment we assume volumes to be discrete), and we have also a filtration FtF_t that includes all relevant information up to t. Alternatively we can introduce NtRfQ(c, p, s, v)N_t^{\text{RfQ}(\text{c, p, s, v)}} as the number of such RfQs up to time t. These two formulations are in fact equivalent:

P(τRfQ(c, p, s, v)[t,t+dt]Ft)=P(\tau_{\text{RfQ}(\text{c, p, s, v})} \in [t, t+dt]|F_t) =
P(Nt+dtRfQ(c, p, s, v)NtRfQ(c, p, s, v)=1Ft)P(N_{t+dt}^{\text{RfQ}(\text{c, p, s, v})} - N_t^{\text{RfQ}(\text{c, p, s, v})} = 1|F_t)

From the Stochastic Calculus chapter we recognize this model as a counting process, whose probability distribution we can write as:

P(τRfQ(c, p, s, v)[t,t+dt]Ft)=λt(c,p,s,v)dtP(\tau_{\text{RfQ}(\text{c, p, s, v})} \in [t, t+dt]|F_t) = \lambda_t (c, p, s, v)dt

with the so-called intensity λt\lambda_t being a general function of time, RfQ variables and any relevant information contained in FtF_t, for instance, previous RfQs. This is an instance of a non-homogeneous Poisson process. If it also depends on previous times of arrivals of RfQs, i.e. it is a self-exciting process, we have a Hawkes process. Such counting processes are natural candidates to model the arrival of RfQs.

Alternatively, we can rewrite the model using the product rule of probability as:

P(τRfQ(c, p, s, v)[t,t+dt]Ft)=P(vs,c,p,RfQt,t+dt,Ft)P(sc,p,RfQt,t+dt,Ft)P(c,pRfQt,t+dt,Ft)P(RfQt,t+dtFt)P(\tau_{\text{RfQ}(\text{c, p, s, v})} \in [t, t+dt]|F_t) = P(v| s, c, p, \text{RfQ}_{t,t+dt}, F_t) \\ P(s|c, p, \text{RfQ}_{t,t+dt}, F_t) P(c, p| \text{RfQ}_{t,t+dt}, F_t) P(\text{RfQ}_{t,t+dt}|F_t)

where we have used the compact notation: RfQt,t+dt\text{RfQ}_{t,t+dt} instead of τRfQ[t,t+dt]\tau_{\text{RfQ}} \in [t, t+dt]. This way, we can explicitly model the statistics of each of the probabilities in the product. A typical hypothesis is to make the conditional probabilities independent of time and use simple distributions to model them. For instance, volumes are modelled in many cases as continuous distribution following a power law or a log-normal probability density, since volumes are positive and heavy tailed in their distribution:

P(V[v,v+dv]s,c,p,RfQ)=α1vmin(vvmin)αdvP(V \in [v, v+dv]| s, c, p, \text{RfQ}) = \frac{\alpha -1}{v_\text{min}}\left(\frac{v}{v_\text{min}}\right)^{-\alpha} dv

where vvminv \geq v_\text{min}, α>1\alpha > 1.

The side ss, being a binary variable, buy or sell, is typically modelled using a Bernoulli distribution. Finally, the probabilities that RfQs come from a specific client or product can be modelled using a categorical distribution, a generalization of Bernoulli distributions for more than two categories.

Attrition risk

The previous model considers that clients have a stable pattern of choosing the dealer for their requests for quotes. However, clients might at some point stop sending RfQs to the dealer, for instance when they perceive that prices are non competitive on average (i.e. they see low hit & miss ratios) or when dealers often don’t respond with their quotes.

A simple extension of the previous model for the arrival of RfQs introduces a latent binary random variable to characterize if clients are actively engaging with the dealer or not. Denoting this variable aa, with a=1a=1 meaning the client is active, the model is decomposed as:

P(τRfQ(c, p, s, v)[t,t+dt]Ft)=P(τRfQ(c, p, s, v)[t,t+dt]a=1,Ft)P(a=1Ft)P(\tau_{\text{RfQ}(\text{c, p, s, v)}} \in [t, t+dt]|F_t) = P(\tau_{\text{RfQ}(\text{c, p, s, v)}} \in [t, t+dt]|a = 1, F_t) P(a = 1|F_t)

where we have implicitly used the fact that P(τRfQ(c, p, s, v)[t,t+dt]a=0,Ft)=0P(\tau_{\text{RfQ}(\text{c, p, s, v)}} \in [t, t+dt]|a = 0, F_t) = 0, i.e. we don’t expect the arrival of RfQs for clients that are inactive. We are therefore interested in characterizing P(a=1Ft)P(a = 1|F_t) or most typically P(a=0Ft)=1P(a=1Ft)P(a = 0|F_t) = 1- P(a = 1|F_t), which is known in the marketing analytics literature as the attrition risk model.

Inferences of attrition risk can be done by analyzing the historical patterns of client trading activity. A simple albeit elegant model is that from Fader et al. (2010), where they consider daily (or any other time scale) client activity as a set of independent identically distributed Bernoulli random variables YtY_t with probability pp. In our RfQ setup, this means Yt=1Y_t = 1 if the client sends any RfQ, or Yt=0Y_t = 0 otherwise. Additionally, a client can become inactive at the beginning of the day with probability θ\theta. Given a pattern of historical daily activity DD of a client we can compute the probability that the client is active using Bayes’ theorem:

P(a=1D,p,θ)=P(Da=1,p,θ)P(a=1p,θ)P(Da=1,p,θ)P(a=1p,θ)+P(Da=0,p,θ)P(a=0p,θ)P(a = 1|D, p, \theta) = \frac{P(D|a=1, p, \theta)P(a = 1|p, \theta)}{P(D|a=1, p, \theta)P(a=1|p, \theta) + P(D|a=0, p, \theta)P(a=0|p, \theta)}

For example, for the pattern D=10100D = 10100, the likelihood in the denominator is calculated as the probability that the observed pattern is simply explained by the natural probabilities of requesting RfQs:

P(Da=1,p,θ)=p(1p)p(1p)2P(D|a=1, p, \theta) = p(1-p)p(1-p)^2

with the prior probability for the client being active corresponding to the scenario in which the client does not become inactive in all the observation periods:

P(a=1p,θ)=(1θ)5P(a = 1|p, \theta) = (1-\theta)^5

In contrast, the alternative hypothesis in which the client is already inactive is actually the result of two different paths, one in which the client becomes inactive at the last day, whereas in the second it does it in the previous day. Therefore:

P(Da=0,p,θ)P(a=0p,θ)=p(1p)p(1p)(1θ)4θ+p(1p)p(1θ)3θP(D|a=0, p, \theta) P(a=0|p, \theta)= p(1-p)p(1-p)(1-\theta)^4 \theta + p(1-p)p (1-\theta)^3 \theta

The model does not consider the possibility that clients which are inactive are activated again, which is definitely possible in reality, but not necessarily useful for a model that simply tries to detect clients that have recently stopped engaging with the dealer. Plugging these probabilities into Bayes’ theorem we get:

P(a=1D,p,θ)=p(1p)p(1p)2(1θ)5p(1p)p(1p)2(1θ)5+p(1p)p(1p)(1θ)4θ+p(1p)p(1θ)3θP(a = 1|D, p, \theta) = \frac{p(1-p)p(1-p)^2(1-\theta)^5}{p(1-p)p(1-p)^2(1-\theta)^5+ p(1-p)p(1-p)(1-\theta)^4 \theta + p(1-p)p (1-\theta)^3 \theta}
=(1p)2(1θ)2(1p)2(1θ)2+(1p)(1θ)θ+θ= \frac{(1-p)^2(1-\theta)^2}{(1-p)^2(1-\theta)^2+ (1-p)(1-\theta) \theta + \theta}

As pointed out by the authors, any other trading pattern with the same number of active days — denoted as xx (frequency in the marketing jargon), and the same number of days since the last RfQ — the recency rr, has the same likelihood. For instance, P(a=1D=10100,p,θ)=P(a=1D=01100,p,θ)P(a = 1|D = 10100, p, \theta) = P(a = 1| D = 01100, p, \theta). See the exercise at the end of the chapter. This is an interesting insight that naturally links the model with the traditional heuristics based on recency and frequency in the Marketing Analytics literature, see for example Grigsby, 2018. The general result for a pattern consisting of nn days of trading activity, frequency xx and recency rr, we have:

P(Da=1,p,θ)P(a=1p,θ)=px(1p)nx(1θ)nP(D|a=1, p, \theta)P(a = 1|p, \theta)= p^{x}(1-p)^{n-x} (1-\theta)^n
P(Da=0,p,θ)P(a=0p,θ)=i=1rpx(1p)nxi(1θ)niθP(D|a=0, p, \theta)P(a = 0|p, \theta) = \sum_{i=1}^{r} p^x(1-p)^{n-x-i}(1-\theta)^{n-i} \theta

Notice that the evidence in the denominator of Bayes’ theorem it is simply the complete likelihood of the data:

P(Dp,θ)=px(1p)nx(1θ)n+i=1rpx(1p)nxi(1θ)niθL(Dp,θ)P(D|p, \theta) = p^{x}(1-p)^{n-x} (1-\theta)^n + \sum_{i=1}^{r} p^x(1-p)^{n-x-i}(1-\theta)^{n-i} \theta \equiv L(D|p,\theta)

Therefore:

P(a=1D,p,θ)=px(1p)nx(1θ)nL(Dp,θ)P(a=1|D, p, \theta) = \frac{p^{x}(1-p)^{n-x} (1-\theta)^n}{L(D|p,\theta)}

The model in this form requires a separate estimation of parameters pp, θ\theta for each individual client. Alternatively, the model can be generalized to a segment of clients whose parameters follow a probability distribution but we cannot attach specific parameters to any of them. As it is natural to model distributions of probabilities, Fader et al propose the use of Beta distributions for pp and θ\theta:

f(pα,β)=pα1(1p)β1B(α,β)for 0p1,α,β>0f(p |\alpha, \beta) = \frac{p^{\alpha - 1}(1 - p)^{\beta - 1}}{B(\alpha, \beta)} \quad \text{for } 0 \leq p \leq 1, \, \alpha, \beta > 0
f(θγ,δ)=θγ1(1θ)δ1B(γ,δ)for 0θ1,  γ,δ>0f(\theta| \gamma, \delta) = \frac{\theta^{\gamma - 1}(1 - \theta)^{\delta - 1}}{B(\gamma, \delta)} \quad \text{for } 0 \leq \theta \leq 1,\; \gamma, \delta > 0

where the Beta function is by definition:

B(α,β)dppα1(1p)β1B(\alpha, \beta) \equiv \int dp p^{\alpha - 1} (1-p)^{\beta - 1}

This allows us to characterize the segment of clients with four parameters, α\alpha, β\beta, γ\gamma and δ\delta. Notice that this model does not capture the possibility of multiple segments within the population of clients. To capture that, a simple extension is to use a mixture of Betas, see next section for a simple application of such model in anomaly detection.

Continuing with the single segment model, the likelihood now requires to integrate over the distribution of pp and θ\theta:

P(Dα,β,γ,δ)=dpdθf(pα,β)f(θγ,δ)L(Dp,θ)P(D|\alpha, \beta, \gamma, \delta) = \int dp d\theta f(p| \alpha, \beta) f(\theta| \gamma, \delta) L(D|p, \theta)

where recall that in this model, the dataset DD can be reduced to nn, rr and xx. The calculation can be carried out analytically in terms of Beta functions, since it involves integrals of the form:

dpf(pα,β)pn(1p)m=B(α+n,β+m)B(α,β)\int dp f(p|\alpha, \beta) p^n (1-p)^m = \frac{B(\alpha + n, \beta + m)}{B(\alpha, \beta)}

The likelihood for a single client can be expressed in terms of Beta functions:

P(Dα,β,γ,δ)=B(α+x,β+nx)B(α,β)B(γ,δ+n)B(γ,δ)+i=1rB(α+x,β+nxi)B(α,β)B(γ+1,δ+ni)B(γ,δ)P(D|\alpha, \beta, \gamma, \delta) = \frac{B(\alpha + x, \beta + n - x)}{B(\alpha, \beta)} \frac{B(\gamma, \delta + n)}{B(\gamma, \delta)} + \sum_{i=1}^{r} \frac{B(\alpha + x, \beta + n - x- i)}{B(\alpha, \beta)} \frac{B(\gamma+1, \delta + n-i)}{B(\gamma, \delta)}

Applying accordingly Bayes theorem on P(a=1D,α,β,γ,δ)P(a = 1|D, \alpha, \beta, \gamma, \delta) we get:

P(a=1D,α,β,γ,δ)=B(α+x,β+nx)B(α,β)B(γ,δ+n)B(γ,δ)L1(Dα,β,γ,δ)P(a = 1|D, \alpha, \beta, \gamma, \delta) = \frac{B(\alpha + x, \beta + n - x)}{B(\alpha, \beta)} \frac{B(\gamma, \delta + n)}{B(\gamma, \delta)} L^{-1}(D|\alpha, \beta, \gamma, \delta)

where we have defined L(Dα,β,γ,δ)P(Dα,β,γ,δ)L(D|\alpha, \beta, \gamma, \delta) \equiv P(D|\alpha, \beta, \gamma, \delta)

For model parameters estimation, the authors suggests using maximum likelihood over the historical dataset. For the one segment model this implies a joint estimation of the parameters for the collective of clients in the dataset, since they share parameters. Alternatively, a Bayesian estimation approach would seek to estimate P(p,θD)P(p, \theta|D) for the single client model or P(α,β,γ,δDN)P(\alpha, \beta, \gamma, \delta|D_N) for the one segment model, where we have used DND_N to denote the full dataset of NN clients.

Simulation of attrition risk

Let us see how this model works in practice. We simulate a segment of 50 clients that send RfQs to a dealer according to the Poisson model discussed in the previous section. For simplicity, we only consider the situation in which the client wants to buy from the dealer. Each client is characterized by an intensity of RfQ arrival drawn from a Gaussian distribution with mean 1 (i.e. a client on average sends one RfQ per day) and standard deviation 0.05. In principle such choice of parameters makes it highly unlikely to generate negative intensities, but if that happens we simply force them to be positive. The clients’ reservation prices, i.e. the maximum prices they would accept in order to trade, also follows a Gaussian distribution, in this case with mean 100 (which could be considered the fair price of the financial product) and standard deviation of 10% around this mean. These reservation prices are not static, though: they fluctuate over time with some noise that models the potential impact of changing market conditions. We choose 20% of the mean for this parameter.

We model attrition in this setup by considering that clients will stop sending RfQs to the dealer if the average hit rate (percentage ot trades over RfQs sent) is below a given threshold over a window of time. We take 10% as the threshold for all clients (although we could also model a distribution over the segment) and suppose that clients evaluate the hit rate with the dealer over a 10 days window (again, this could be made client dependent but we choose not to in this simulation).

Finally, in order to produce a rich dynamics, we model the behavior of the dealer as follows: on the one hand, she has her own target hit ratio that tries to balance client satisfaction with he own profitability. We choose a 40% hit ratio target for all clients. To hit this target, the dealer try to infer the distribution of each of her clients’ reservation price using Bayesian methods, i.e. estimating the posterior distribution of the reservation price conditioned to the data, which consist of the time series of hits and misses of previous RfQs sent by clients and the prices quoted. Mathematically, let rnr_n the reservation price of client nn, then the dealer seeks to infer the density function f(rnD)f(r_n|D), where D={(ci,pi,hi)}D = \{(c_i, p_{i}, h_{i})\} is the dataset comprised of clients cic_i, the prices pi,np_{i,n} quoted to client nn, and the result of the negotiation hi,n=(1,0)h_{i,n} = (1,0) equal to one when the client accepts the price (hit) and zero otherwise (miss). The dealer updates the posterior dynamically after every negotiation, and uses this information to quote the next RfQ by choosing the price such that the probability of hit (which occurs when the price quoted is lower than the reservation price) is equal to the hit target of 40%:

P(rnpD)=pdrnf(rnD)=0.4P(r_n \geq p|D) = \int_p^\infty dr_n f(r_n|D) = 0.4

At the beginning of the simulation, we assume that the dealer has a prior estimation of the distribution of reservation prices given by a Gaussian distribution of mean 60 and standard deviation 10, which means the estimation is relatively off with respect to reality.

Let us simulate the model over 200 days. The following figure shows the mean of daily hit ratios that the dealer achieves with the clients that send RfQs that day (which are active by definition, although there could be active clients that a given day don’t send RfQs):

Evolution of daily averages of hit rates with clients that sent RfQs each day. The dealer start with an off estimation of the reservation prices, which explains why it takes some time for dealers to reach their target hit ratios.

Figure 2:Evolution of daily averages of hit rates with clients that sent RfQs each day. The dealer start with an off estimation of the reservation prices, which explains why it takes some time for dealers to reach their target hit ratios.

The effect of the prior estimation of reservation prices by the dealer is clearly reflected in the first part of the simulation, where hit ratios are far from the target set by the dealer. In particular, since the dealer has a low biased estimation of reservation prices, this translates into high hit rates at the beginning of the simulation. We see the effect of the Bayesian learning, though, as time goes on, since in the range of 25-50 days the hit rates have stabilized around the target, which remains noisy given the fluctuations in client reservation prices that we have introduced in the model. Precisely because of these fluctuations we find situations in which clients get average hit rates over their 10 days evaluation windows below their 10% target, which makes them stop sending RfQs to the dealer --becoming inactive, although they don’t inform the dealer of this situation. The following figure reflects this situation by plotting the evolution of the attrition rate, i.e. the cumulative percentage of clients who have become inactive since the beginning of the simulation:

Cumulative attrition rate over time, i.e. percentage of inactive clients over the total number of clients (50) at the beginning of the simulation.

Figure 3:Cumulative attrition rate over time, i.e. percentage of inactive clients over the total number of clients (50) at the beginning of the simulation.

Precisely because the dealer starts with a pessimistic estimation of the reservation price of the clients, which translates into a large hit rate, attrition rates don’t kick off until the dealer corrects her estimation of the reservation prices and reaches her target hit rates. At this point, fluctuations in the reservation price from clients trigger attrition rates, which steadily grow over the simulation. If the dealer does not do anything to address the attrition risk, eventually all clients will become inactive. That’s where the attrition risk model comes into play, as a tool used by the dealer to detect which clients might have become inactive and trigger corrective actions, for example using her salesforce to contact clients and try to engage them back.

We implement the model discussed in this section based on the work by Fader et al and fit it using maximum likelihood over the first 100 days of the simulation. Then we use it to evaluate the probability of being inactive for each client in the last 100 days, given their trading patterns. To check that the model is well calibrated, we plot the expected attrition rate from the model against the simulated one in the test set (last 100 days) in the following figure:

Expected attrition rate computed by the model against the actual attrition rate from the simulation in the test set (the last 100 days of the simulation). The good match is an indication of a good calibration.

Figure 4:Expected attrition rate computed by the model against the actual attrition rate from the simulation in the test set (the last 100 days of the simulation). The good match is an indication of a good calibration.

The figure shows a good agreement between model and simulation in the test set, implying that the model is reasonably well estimated. We further test the quality of the model by computing a confusion matrix that compares the prediction of the model: inactive if the probability of attrition is higher than 50%, active otherwise; against the hidden activity labels we have generated in the simulation, where clients become inactive when average hit rates are lower than 10% for the last 10 days. This is evaluated for each day and client in the test set (5000 evaluations, resulting from 50 clients over 100 days).

The results indicate that the model is able to discriminate well between active and inactive clients across all thresholds, as evidenced by a high AUC of 0.9884. At the specific threshold of 50%, overall accuracy is very high (98.48%) and precision is perfect (100%), meaning that every client flagged as “inactive” truly was inactive. However, recall is 88.03%, which implies that the model misses some truly inactive clients (76 false negatives vs. 559 true positives). In practice, this means the model is conservative in raising alerts: it waits for clear evidence of non-trading before flagging a client, avoiding false positives entirely but potentially reacting slightly late. Depending on the cost a dealer might incur in missing early signs of disengagement, it may be worth exploring a lower threshold to catch more potential churn cases earlier, even if that introduces some false positives.

Finally, let us check the behavior of the model for individual clients over the test set, with selected clients shown in the following figure:

Trading behavior and activity for selected clients, against the probability of being inactive (attrition risk) computed by the model.

Figure 5:Trading behavior and activity for selected clients, against the probability of being inactive (attrition risk) computed by the model.

The visualizations of Clients 3, 8, 9, and 30 illustrate how the model responds to different trading behaviors over time with its attrition probability signal.

Overall, the model shows consistent and interpretable behavior: it remains quiet when trading is stable, rises decisively when disengagement is clear, and adjusts adaptively when trading resumes after a gap.

Abnormal client behavior

In the attrition risk sector we introduced a model for the expected trading activity of a segment of clients, using a Beta distribution:

f(pα,β)=pα1(1p)β1B(α,β)for 0p1,α,β>0f(p |\alpha, \beta) = \frac{p^{\alpha - 1}(1 - p)^{\beta - 1}}{B(\alpha, \beta)} \quad \text{for } 0 \leq p \leq 1, \, \alpha, \beta > 0

This model can be easily adapted to work as an anomaly detector for clients that suddenly change their pattern of trading behavior with respect to their peers. The attrition risk model in that sense is a specific instance of anomaly detection, in which we are testing the normal client behavior hypothesis against one in which the client has completely stopped trading. A less restrictive hypothesis is that the client has switched her pattern of activity to a different regime with a higher probability for tail scenarios of activity, i.e. the client is either trading much more often or much less often than expected. We model such trading scenario by using a mixture of two beta distributions:

f(pα,β)=qgpαg1(1p)βg1B(αg,βg)+(1qg)pαb1(1p)βb1B(αb,βb)f(p |\alpha, \beta) = q_g \frac{p^{\alpha_g - 1}(1 - p)^{\beta_g - 1}}{B(\alpha_g, \beta_g)} + (1-q_g) \frac{p^{\alpha_b - 1}(1 - p)^{\beta_b - 1}}{B(\alpha_b, \beta_b)}

In order to ensure we capture tail anomalies in both sides, we force that both Beta distributions have the same mean: αgαg+βg=αbαb+αg\frac{\alpha_g}{\alpha_g + \beta_g} = \frac{\alpha_b}{\alpha_b+\alpha_g}. This is an instance of a Good and Bad Data Model for anomaly detection, see Silvia, 2006, which we also briefly introduced in the Bayesian Theory Chapter. In this generative model, a trading observation can originate from either the good distribution — representing the expected behavior of a client segment — or from the bad distribution, which is fitted to capture tail anomalies such as drops in activity, attrition, or bursts in trading activity. Anomaly detection involves inferring the segment (good or bad) based on recent observations DD over a window of size nn for a specific client. Following the attrition model, these observations are represented as a binary indicator series: a value of 1 if the client traded on a given day, and 0 otherwise. Using Bayes’ theorem:

p(goodD)=p(Dgood)qgp(Dgood)qg+p(Dbad)(1qg)p({\rm good}|D) = \frac{p(D|{\rm good}) q_g}{p(D|{\rm good}) q_g + p(D|{\rm bad}) (1-q_g)}

with:

p(Dgood)=dppαg1(1p)βg1B(αg,βg)px(1p)nx=B(αg+x,βg+nx)B(αg,βg)p(D|{\rm good}) = \int dp \frac{p^{\alpha_g - 1}(1 - p)^{\beta_g - 1}}{B(\alpha_g, \beta_g)} p^x (1-p)^{n-x} = \frac{B(\alpha_g + x, \beta_g + n - x)}{B(\alpha_g, \beta_g)}
p(Dbad)=dppαb1(1p)βb1B(αb,βb)px(1p)nx=B(αb+x,βb+nx)B(αb,βb)p(D|{\rm bad}) = \int dp \frac{p^{\alpha_b - 1}(1 - p)^{\beta_b - 1}}{B(\alpha_b, \beta_b)} p^x (1-p)^{n-x} = \frac{B(\alpha_b + x, \beta_b + n - x)}{B(\alpha_b, \beta_b)}

where again xx is the number of days that the client has traded in the window of size nn, which is a sufficient statistic for this problem. qgq_g is the prior probability that the client might behave normally, although in practical setups the full model is estimated over a training set using maximum likelihood, from which the parameters αg,βg,αb,βb,qg\alpha_g, \beta_g, \alpha_b, \beta_b, q_g are estimated. Another possibility is to restrict the estimation to the coefficients of the Beta distribution and input qgq_g from pure prior business knowledge. Of course, as usual, the model can be estimated using a full Bayesian approach.

Simulation of client abnormal behavior

We extend the simulation from the attrition risk sector adding an extra mechanism, namely clients who are quoted too generously by the dealer will boost their RfQ request rate until the dealer quotes a worse enough price. In our simulation, clients boost their activity when prices quoted are 35% cheaper than their reservation prices, and return to normality when the dealer quotes a price which are approximately 50% more expensive than their reservation rates. When they boost their activity, they increase their RfQs rates ten-fold. We simulate 50 clients over 200 days.

In the following pictures we see the resulting dynamics. The first 25 days show a different dynamics until the dealer learns enough about the distribution of reservation prices of clients. Since it has a very conservative estimation of the value of the financial asset, at the beginning we see a large number of clients receiving quotes below $35% of their reservation prices and therefore boosting their activity. After 25 days the rate of boosted clients stabilizes in a smaller proportion. The first plot shows the number of clients boosted compared to the number of active clients. The second one shows for each individual client the periods where they are boosting their quoting activity.

Number of clients who at a given time are boosting their rates of requesting RfQs ten-fold vs the number of client actives. Clients become boosted when they receive prices from the dealer that are 35% cheaper than their reservation prices, and revert back to normal when they receive quotes worse than 50% of their reservation price. As in the previous section, they become inactive if their hit rate with the dealer is below 10% over the last 10 days.

Figure 6:Number of clients who at a given time are boosting their rates of requesting RfQs ten-fold vs the number of client actives. Clients become boosted when they receive prices from the dealer that are 35% cheaper than their reservation prices, and revert back to normal when they receive quotes worse than 50% of their reservation price. As in the previous section, they become inactive if their hit rate with the dealer is below 10% over the last 10 days.

Boosted clients over the simulation period. Each row represents a different client from the 50 ones simulated. Given the initial prior from the dealer regarding the reservation prices, which is too conservative, at the beginning of the simulation there is higher proportion of clients boosted, stabilizing after 25 days approximately.

Figure 7:Boosted clients over the simulation period. Each row represents a different client from the 50 ones simulated. Given the initial prior from the dealer regarding the reservation prices, which is too conservative, at the beginning of the simulation there is higher proportion of clients boosted, stabilizing after 25 days approximately.

We estimate the model using the first 100 days of simulation, although we exclude the first 25 days to ensure the training data only uses a stable regime. The following plot shows the two estimated Beta density functions. Here, qg=89%q_g = 89\%, which supports our hypothesis that the bad data density captures anomalies. This is also seen in the plot: on the one hand, the good data density captures the normal trading behavior concentrated around a region of probability of requesting RfQs, which actually becomes essentially Gaussian, given the high values of αg\alpha_g and βg\beta_g; this is not the case for the bad data density, which takes a U-shape where most of the probability is concentrated around the extreme values. This reflects the two patterns of abnormal behavior present in our simulation, namely inactivity and boosted activity.

Probability densities for the good and bad components of the model. The good data density is highly concentrated around a range of trading probabilities, becoming essentially a Gaussian distribution. The bad data density, on the other hand, places most of its density in the extreme values of very high and very low trading activity. The probability q_g equals 89% when fitted to the data, reflecting that bad data captures anomalies.

Figure 8:Probability densities for the good and bad components of the model. The good data density is highly concentrated around a range of trading probabilities, becoming essentially a Gaussian distribution. The bad data density, on the other hand, places most of its density in the extreme values of very high and very low trading activity. The probability qgq_g equals 89% when fitted to the data, reflecting that bad data captures anomalies.

With the model estimated, we use a 10 days window of days to compute the probability of abnormal client behavior over the second half of the dataset. This means that we only compute results for the last 90 days, since 10 days are needed to gather sufficient data. Bear in mind that this is not necessary in a Bayesian paradigm, since we could perfectly get estimations for any window, including zero data --defaulting to the prior probability of the hypotheses qgq_g. We choose a 50% threshold on P(goodD)P({\rm good} |D) to trigger alerts. Over a dataset of 50 clients and 90 days tested, i.e. 4500 points, the model produced 3,811 true negatives (correctly identifying normal cases) and 545 true positives (correctly identifying abnormal cases). It made 75 false positives (normal cases incorrectly flagged as abnormal) and 69 false negatives (abnormal cases missed). Overall, this means the global abnormality rule (inactive OR boosted) shows high specificity (≈ 98% of normal cases correctly classified) and strong sensitivity (≈ 89% of abnormal cases detected), with a relatively small number of errors on both sides. Therefore, the approach seems reliable at detecting abnormal clients while only rarely misclassifying normal ones.

Selected clients that showcase the different types of client behavior and how the model reacts to them.

Figure 9:Selected clients that showcase the different types of client behavior and how the model reacts to them.

In the following figure we can see the predictions for specific clients showing different patterns of behavior:

In conclusion, despite its simplicity, the Good vs. Bad Data model performs well in identifying abnormal clients in the simulation, both those with unusually high trading activity and those with unusually low activity. For the latter, it performs on par with the attrition risk model presented earlier. Moreover, the framework could be extended into a multi-label classifier by comparing trading probabilities against the mean of the good-data cluster, issuing attrition risk alerts for unusually low activity and boosted activity alerts for the opposite case.

A Generative model for RfQs in negotiation

The preceding sections model the arrival of RfQs and the activity patterns of clients, but not the negotiation itself: given that an RfQ arrives, what determines whether the dealer wins the trade? The seminal work of Fermanian et al. (2016) introduced the first rigorous statistical framework for this question, fitting a parametric model to a large database of RfQ outcomes on Bloomberg Fixed Income Trading (Bloomberg FIT). Their framework models the two unobservable quantities that govern the outcome of each RfQ — the client’s reservation spread and the competitors’ quoted spreads — as parametric distributions whose parameters are estimated by maximum likelihood from observable outcomes. Marín et al. (2025) extend this framework by embedding it in the causal graphical model discussed in the previous section, which allows the dealer to separate the causal effect of her spread from confounding by pricing policies, and to formulate pricing and client-targeting decisions as causal interventions.

Deal mechanism and normalization

On a buy RfQ (client wants to buy; dealer answers an ask price), a trade occurs if and only if at least one dealer proposes a price below the client’s reservation price VV — the maximum she is willing to pay. When multiple dealers qualify, the client deals with the one quoting the lowest ask. For a reference dealer with quote YY and nn competing dealers with quotes W1,,WnW_1, \ldots, W_n:

This outcome taxonomy is what the reference dealer can observe post-trade, together with their own quote YY and, when covered, the cover price CC. Everything else — the client’s reservation price VV, the competitors’ quotes WkW_k, and the number of competitors who actually answered — is latent.

Since the platform publishes a composite best-bid-offer price (CBBT), all spreads are naturally normalized by this reference. Denoting the CBBT mid-price CBBT\text{CBBT} and the half bid-ask spread Δ\Delta as a liquidity proxy, the reduced quote for a buy RfQ is Y~=(YCBBT)/Δ\tilde{Y} = (Y - \text{CBBT})/\Delta, and all distributional assumptions are stated in these normalized units.

Distributional assumptions

Client reservation spread. The client’s reservation price VV, in reduced units, is modelled as Gaussian Fermanian et al., 2016:

V/ΔN(ν,τ2)V/\Delta \sim \mathcal{N}(\nu, \tau^2)

For buy RfQs the expected value satisfies ν>0\nu > 0 (the client believes the bond is underpriced relative to CBBT), while for sell RfQs ν<0\nu^* < 0. Empirically Fermanian et al., 2016, ν1.7\nu \approx 1.7 in the partial-participation model: on average, buy clients are willing to pay roughly 1.7 times the CBBT half-spread above the CBBT mid-price. Marín et al. (2025) extend the Gaussian conditional distribution to depend on bond features, client features, RfQ features, volatility, and the latent information asymmetry indicator:

δresΔ    σ,CF,BF,RF,IA    N ⁣(ares+bresσ+iciCFi+jdjBFj+kekRFk+f1IA=1,  σres2)\frac{\delta_{\text{res}}}{\Delta} \;\Big|\; \sigma, CF, BF, RF, IA \;\sim\; \mathcal{N}\!\left(a_{\text{res}} + b_{\text{res}}\sigma + \sum_i c_i CF_i + \sum_j d_j BF_j + \sum_k e_k RF_k + f\,\mathbb{1}_{IA=1},\; \sigma_{\text{res}}^2\right)

The Gaussian form has no strong distributional justification but yields tractable likelihoods and fits observed data well. The IAIA shift reflects that informed clients may be more motivated to execute, accepting a wider spread to trade quickly.

Competitor spreads: the Skew Exponential Power distribution. The empirical distribution of competitor reduced quotes is leptokurtic (fat-tailed), spiky near zero, and asymmetric. Fermanian et al. (2016) model it with the Skew Exponential Power (SEP) distribution, defined via the Exponential Power (EP, also called Subbotin) density:

fEP(x;μ,σ,α)=1cσexp ⁣(zαα),z=xμσ,c=21/α1Γ(1/α)f_{\text{EP}}(x;\, \mu, \sigma, \alpha) = \frac{1}{c\sigma} \exp\!\left(-\frac{|z|^\alpha}{\alpha}\right), \quad z = \frac{x-\mu}{\sigma}, \quad c = 2^{1/\alpha - 1}\Gamma(1/\alpha)

where α>0\alpha > 0 controls tail heaviness (α=2\alpha = 2 recovers the Gaussian; α<2\alpha < 2 gives heavier tails). The SEP introduces asymmetry via the Azzalini skewing mechanism:

fSEP(x;μ,σ,α,λ)=2Φ(w)fEP(x;μ,σ,α),w=sign(z)zα/2λ2/αf_{\text{SEP}}(x;\, \mu, \sigma, \alpha, \lambda) = 2\,\Phi(w)\, f_{\text{EP}}(x;\, \mu, \sigma, \alpha), \quad w = \text{sign}(z)\,|z|^{\alpha/2}\,\lambda\,\sqrt{2/\alpha}

where λR\lambda \in \mathbb{R} is the asymmetry parameter and Φ\Phi is the standard normal CDF. When λ=0\lambda = 0 the SEP reduces to the symmetric EP; when α=2\alpha = 2 to the skew-normal.

Each answering competitor’s reduced quote is drawn i.i.d. from SEP(μ,σ,α,λ)(\mu, \sigma, \alpha, \lambda) with:

In the extended conditional model Marín et al., 2025, the location parameter of the SEP depends on observables:

δdealerΔ    σ,CF,BF,RF    SEP ⁣(ad+bdσ+icd,iCFi+jdd,jBFj+ked,kRFk,  σd,αd,λd)\frac{\delta_{\text{dealer}}}{\Delta} \;\Big|\; \sigma, CF, BF, RF \;\sim\; \text{SEP}\!\left(a_d + b_d\sigma + \sum_i c_{d,i} CF_i + \sum_j d_{d,j} BF_j + \sum_k e_{d,k} RF_k,\; \sigma_d, \alpha_d, \lambda_d\right)

Partial participation

A key empirical finding of Fermanian et al. (2016) is that not all invited dealers answer: in their Bloomberg FIT dataset, only about 40% of requested competitors actually submit a quote (pquote0.4p_{\text{quote}} \approx 0.4). Ignoring this — the full-participation assumption — inflates the apparent heaviness of the dealer quote distribution tails and creates a spurious pattern where dealers appear to quote more conservatively as the number of competitors nn increases.

The partial-participation model Fermanian et al., 2016 treats the number of answering competitors n~\tilde{n} as a Binomial random variable:

n~Binomial(n,pquote)\tilde{n} \sim \text{Binomial}(n,\, p_{\text{quote}})

Each outcome likelihood is then a mixture over n~\tilde{n}:

Li=j=0n(nj)pquotej(1pquote)njLi(j)\mathcal{L}_i = \sum_{j=0}^{n} \binom{n}{j} p_{\text{quote}}^j (1 - p_{\text{quote}})^{n-j} \mathcal{L}_i(j)

where Li(j)\mathcal{L}_i(j) is the likelihood contribution for outcome ii given exactly jj answering competitors (derived below). The answering probability itself may depend on nn: larger competition fields attract lower participation from any individual dealer (pquote(n)p_{\text{quote}}(n) decreasing in nn). A remarkable empirical regularity Fermanian et al., 2016 is that the effective number of competitors — (n+1)pquote(n)(n+1)\,p_{\text{quote}}(n), counting also the reference dealer — is approximately 2 for all values of nn in the dataset. Clients appear to wait for roughly two responses before making their decision, regardless of how many dealers they invited.

Maximum likelihood estimation

All RfQ outcome likelihoods can be expressed analytically in terms of the CDF FF and PDF ff of the competitor spread distribution and the CDF GG and PDF gg of the reservation price distribution. For a buy RfQ with jj answering competitors Fermanian et al., 2016:

Done with cover price C>YC > Y:

Lcover(1)(j)=jf(C)(1F(C))j1(1G(Y))\mathcal{L}^{(1)}_{\text{cover}}(j) = j\, f(C)\,(1-F(C))^{j-1}\,(1-G(Y))

Done without cover:

Lno cover(1)(j)=(1F(Y))j(1G(Y))\mathcal{L}^{(1)}_{\text{no cover}}(j) = (1-F(Y))^j\,(1-G(Y))

Tied Traded Away:

L(2,tied)(j)=j(1F(Y))j1f(Y)(1G(Y))\mathcal{L}^{(2,\text{tied})}(j) = j\,(1-F(Y))^{j-1} f(Y)\,(1-G(Y))

Covered (reference dealer proposed second-best price):

L(2,cov)(j)=j(1F(Y))j1 ⁣[1(1F(Y))(1G(Y))Y(1F(w))g(w)dw]\mathcal{L}^{(2,\text{cov})}(j) = j(1-F(Y))^{j-1}\!\left[1-(1-F(Y))(1-G(Y)) - \int_{-\infty}^{Y}(1-F(w))\,g(w)\,dw\right]

Not Traded:

L(3)(j)=Y(1F(v))jg(v)dv\mathcal{L}^{(3)}(j) = \int_{-\infty}^{Y}(1-F(v))^j\,g(v)\,dv

All non-trivial likelihoods reduce to integrals of the form Y(1F(v))kg(v)dv\int_{-\infty}^{Y} (1-F(v))^k\,g(v)\,dv for k{0,,n}k \in \{0,\ldots,n\}. Since FF is the SEP CDF and GG is the Gaussian CDF, these integrals have no closed form but are efficiently computed by rescaling to (1,1)(-1,1) via a tanh transform and approximating with Chebyshev polynomials of the first kind — whose antiderivatives are available analytically. Model parameters are estimated by maximizing the full log-likelihood over all observed RfQs using Powell’s method (gradient-free optimization).

Hit probability

Combining all components, the full generative hit probability under the causal model Marín et al., 2025 is:

P(hitδ,RfQ,σ,RF,BF,CF)=(1P(PD=1BF,CF))a=01P(IA=aCF)δdδresfres(δresσ,RF,BF,CF,a)P(\text{hit} \mid \delta, \text{RfQ}, \sigma, RF, BF, CF) = (1 - P(PD=1 \mid BF,CF))\sum_{a=0}^{1} P(IA=a \mid CF) \int_{\delta}^{\infty} d\delta_{\text{res}}\, f_{\text{res}}(\delta_{\text{res}} \mid \sigma, RF, BF, CF, a)
×k=0n(nk)pquotek(1pquote)nki=1kdδdealer,ifdealer(δdealer,iσ,RF,BF,CF)  1δminiδdealer,i\times \sum_{k=0}^{n} \binom{n}{k} p_{\text{quote}}^k (1 - p_{\text{quote}})^{n-k} \int \cdots \int \prod_{i=1}^{k} d\delta_{\text{dealer},i}\, f_{\text{dealer}}(\delta_{\text{dealer},i} \mid \sigma, RF, BF, CF)\; \mathbb{1}_{\delta \leq \min_i \delta_{\text{dealer},i}}

where the price discovery probability P(PD=1BF,CF)P(PD=1 \mid BF,CF) is estimated via logistic regression (Classification and Logistic Regression), and P(IA=aCF)P(IA=a \mid CF) is the prior probability that the client has information asymmetry given their features. This expression is monotone decreasing in δ\delta by construction: the indicator 1δminiδdealer,i\mathbb{1}_{\delta \leq \min_i \delta_{\text{dealer},i}} and the integration region δresδ\delta_{\text{res}} \geq \delta both shrink as δ\delta increases, ensuring that quoting a higher spread can never increase the probability of winning. This economic constraint is satisfied by the generative model automatically, whereas purely discriminative models such as gradient-boosted trees (Tree Ensembles) can violate it.

Empirical findings

On the Bloomberg FIT dataset of European corporate bonds Fermanian et al., 2016, the partial-participation model yields the following key findings:

On European Government Bond data Marín et al., 2025, the generative model achieves an AUC-ROC of 0.742, matching a LightGBM classifier (0.743) while enforcing spread monotonicity — a critical requirement for reliable optimal pricing. Logistic regression achieves only 0.684.

Causal interventions

The generative model for the negotiation describes the observational distribution: what outcomes we expect given the historical pricing policies encoded in the training data. But a dealer using this model to set prices is not observing the world — she is intervening in it. Her decision to quote δ\delta is not determined by her bond and client characteristics in the same way historical prices were; it is a deliberate choice.

This distinction matters because historical data is confounded. The dealer’s past pricing policy depended on σ\sigma, BFBF, CFCF, and RFRF: bonds with higher volatility received wider spreads, and this correlation appears in the data independently of any causal effect of δ\delta on the hit probability. Regressing hit outcomes on δ\delta alone would mix the genuine effect of the spread with the selection effect of the pricing policy.

The framework of causal inference — introduced in Causal inference — resolves this by replacing the observational quantity P(hitδ)P(\text{hit} \mid \delta) with the interventional quantity P(hitdo(δ))P(\text{hit} \mid \text{do}(\delta)). The do-operator removes the arrow from all variables into δ\delta, representing a dealer who sets her spread by deliberate choice rather than by any policy function. The back-door criterion then identifies the set of variables that must be conditioned on for this interventional probability to equal an estimable observational conditional probability.

Back-door identification. In the causal DAG (see Figure 1), the confounding paths from δ\delta to hit\text{hit} run through σ\sigma (which affects both δ\delta and δdealer,δres\delta_{\text{dealer}},\, \delta_{\text{res}}), through BFBF and CFCF (which affect both δ\delta and client behavior), and through RFRF (RfQ features such as volume and number of competitors). The minimal conditioning set that blocks all back-door paths is Marín et al., 2025:

Ztmin={σ,RF,BF,CF}\mathcal{Z}_t^{\min} = \{\sigma, RF, BF, CF\}

giving the identification result:

P(hitdo(δ),RfQ,Zt)=P(hitδ,RfQ,σ,RF,BF,CF)P(\text{hit} \mid \text{do}(\delta), \text{RfQ}, \mathcal{Z}_t) = P(\text{hit} \mid \delta, \text{RfQ}, \sigma, RF, BF, CF)

The left-hand side is the causal quantity that the dealer wants to maximize; the right-hand side is a standard conditional probability that can be estimated from historical data. Concretely, this means that any model for the hit probability — the generative model of the previous section, a logistic regression, or a gradient-boosted tree — should be trained with features {δ,σ,RF,BF,CF}\{\delta, \sigma, RF, BF, CF\} as inputs. Models trained without the full conditioning set will produce biased estimates of the causal effect of δ\delta.

Optimal pricing

Case 1: streaming prices without hit/miss feedback

In some instruments — particularly in the rates and FX markets — dealers stream continuous executable prices to clients (e.g., via Bloomberg TSOX or similar platforms). A client can trade at the displayed price at any time, but the dealer does not receive a request in advance and does not observe whether the client considered the price and chose not to trade (a miss). The only observable feedback is a trade when one occurs.

This is the classical one-sided censored demand problem from dynamic pricing. The dealer can observe that a client traded at price δ\delta (demand d=v>0d = v > 0 if the client executes notional vv, zero otherwise), but misses are invisible — she does not know how many clients saw her price and decided against trading.

We model demand using an exponential demand curve, which is the canonical choice in the dynamic pricing literature and is consistent with clients having exponentially distributed reservation spreads:

D(δ)=QeαδD(\delta) = Q \, e^{-\alpha \delta}

where QQ is the baseline demand (trades per unit time at zero spread) and α>0\alpha > 0 is the price sensitivity. The revenue-maximizing spread solves ddδ[δD(δ)]=0\frac{d}{d\delta}[\delta D(\delta)] = 0, giving δ=1/α\delta^* = 1/\alpha. Estimating α\alpha from data is therefore the core task.

Bayesian demand estimation. Taking logarithms, the model becomes linear in the parameters:

logdt=logQαδt+εt,εtN(0,σε2)\log d_t = \log Q - \alpha \delta_t + \varepsilon_t, \quad \varepsilon_t \sim \mathcal{N}(0, \sigma_\varepsilon^2)

where dtd_t is the observed demand at quoted spread δt\delta_t. With a Gaussian prior on the weight vector w=(logQ,α)w = (\log Q,\, \alpha)^\top, this is a Bayesian Linear Regression problem (see Bayesian Linear Regression Model). The posterior is Gaussian with closed-form parameters:

wDn,σε2N(μn,Λn)w \mid \mathcal{D}_n,\, \sigma_\varepsilon^2 \sim \mathcal{N}(\mu_n, \Lambda_n)
μn=Λn(Λ01μ0+σε2Xnlogdn),Λn=(Λ01+σε2XnXn)1\mu_n = \Lambda_n \bigl(\Lambda_0^{-1} \mu_0 + \sigma_\varepsilon^{-2} X_n^\top \log d_n \bigr), \qquad \Lambda_n = \bigl(\Lambda_0^{-1} + \sigma_\varepsilon^{-2} X_n^\top X_n\bigr)^{-1}

where XnX_n is the design matrix with rows (1,δt)(1, \delta_t) and logdn\log d_n is the vector of log-demands. The posterior mean μn\mu_n is the optimal point estimate for the demand parameters, giving a current best guess δ^=1/μn,α\hat{\delta}^* = 1/\mu_{n,\alpha}.

Thompson Sampling for exploration. However, committing to δ^\hat{\delta}^* permanently is risky: if the demand estimate is wrong, the dealer never discovers it. The exploration–exploitation trade-off introduced in Bayesian Modelling (Thompson Sampling) provides a principled solution. At each pricing decision:

  1. Sample demand parameters from the posterior: wsN(μn,Λn)w_{\text{s}} \sim \mathcal{N}(\mu_n, \Lambda_n).

  2. Quote the revenue-maximizing spread under the sampled parameters: δs=1/ws,α\delta_{\text{s}}^* = 1/w_{\text{s},\alpha}.

  3. Observe demand dd at price δs\delta_{\text{s}}^* and update the posterior.

The sampled spread δs\delta_{\text{s}}^* will be close to δ^\hat{\delta}^* most of the time (exploitation), but will occasionally deviate when the sampler draws from the tail of the posterior (exploration). As the posterior concentrates around the true parameters, exploration decays automatically. Thompson Sampling achieves asymptotically optimal regret in this bandit setting.

Case 2: RfQ markets with observable hit/miss outcomes

In a full RfQ setting, the dealer observes both hits and misses, which provides direct information about the hit probability function f(δ)P(hitdo(δ),RfQ,Zt)f(\delta) \equiv P(\text{hit} \mid \text{do}(\delta), \text{RfQ}, \mathcal{Z}_t). Optimal pricing under this richer information set is analyzed in Marín et al. (2025).

Revenue maximization (instantaneous flow value). The dealer maximizes expected instantaneous revenue per RfQ:

δopt=argmaxδ  E[vδ1hitdo(δ),RfQ,Zt]=argmaxδ  vδf(δ)\delta_{\text{opt}} = \arg\max_\delta \; \mathbb{E}[v\delta\, \mathbb{1}_{\text{hit}} \mid \text{do}(\delta), \text{RfQ}, \mathcal{Z}_t] = \arg\max_\delta \; v\delta\, f(\delta)

The first-order condition ddδ[δf(δ)]=0\frac{d}{d\delta}[\delta f(\delta)] = 0 gives:

δopt=f(δopt)f(δopt)\boxed{\delta_{\text{opt}} = -\frac{f(\delta_{\text{opt}})}{f'(\delta_{\text{opt}})}}

This is the classical unit-elasticity condition: the optimal spread is where the elasticity of the hit probability with respect to the spread equals -1. For the exponential hit probability f(δ)=p0eαδf(\delta) = p_0 e^{-\alpha\delta}, this gives δopt=1/α\delta_{\text{opt}} = 1/\alpha, recovering the streaming-price result.

Utility maximization with transactional risk. A risk-averse dealer maximizes expected utility rather than expected revenue. With an exponential utility function U(x)=1eγxU(x) = 1 - e^{-\gamma x} and risk-aversion parameter γ>0\gamma > 0, the optimal spread satisfies:

δopt=1γvlog ⁣(1γvf(δopt)f(δopt))\boxed{\delta_{\text{opt}} = \frac{1}{\gamma v} \log\!\left(1 - \gamma v\, \frac{f(\delta_{\text{opt}})}{f'(\delta_{\text{opt}})}\right)}

As γ0\gamma \to 0, this recovers the revenue-maximizing formula. For γ>0\gamma > 0, the optimal spread is lower than the revenue-maximizing one: a risk-averse dealer sacrifices some per-trade profit to increase the probability of winning the trade, reducing the variance of her revenue stream.

Information asymmetry correction. When the client may have an informational advantage (as introduced in the probabilistic graphical model at the start of this chapter, and formalized in Causal inference), the dealer must account for the expected adverse price movement that follows trading with an informed client. Conditioning on the client’s information asymmetry indicator IAIA and using a short-term revenue horizon TtT-t, the optimal spread becomes Marín et al., 2025:

δoptIA=1γvlog ⁣[pIAeγ(q+sv)μ^(Tt)+H(δoptIA)(1pIA)pIAeγqμ^(Tt)+H(δoptIA)(1pIA)]\delta_{\text{opt}}^{IA} = \frac{1}{\gamma v} \log\!\left[\frac{p_{IA}\, e^{-\gamma(q + sv)\hat{\mu}(T-t)} + H(\delta_{\text{opt}}^{IA})(1 - p_{IA})}{p_{IA}\, e^{-\gamma q\hat{\mu}(T-t)} + H(\delta_{\text{opt}}^{IA})(1 - p_{IA})}\right]

where pIAP(IA=1CF)p_{IA} \equiv P(IA=1 \mid CF) is the prior probability that this client has information asymmetry (estimated from client features), qq is the current inventory, s{1,+1}s \in \{-1, +1\} is the trade side, μ^\hat{\mu} is the expected price drift conditioned on IA=1IA=1, and HH collects terms involving f(δ)/f(δ)f(\delta)/f'(\delta). As pIA1p_{IA} \to 1, the dealer must charge the full expected adverse drift — a result analogous to the Glosten-Milgrom adverse selection premium. As pIA0p_{IA} \to 0, the formula reduces to the utility-maximizing spread without information asymmetry.

The optimal spread formulas above optimize a single-RfQ objective. When the dealer manages a portfolio of RfQs and cares about inventory risk accumulated over time, the problem becomes a stochastic control problem that generalizes the Avellaneda-Stoikov framework. This multi-RfQ setting is covered in chapter Optimal Market Making, where the framework of Stochastic Optimal Control is applied to derive the full inventory-adjusted quoting policy.

Revenue potential. Beyond optimal pricing, the dealer may want to know whether a given RfQ is likely to be profitable. The revenue potential is the probability that an RfQ generates positive revenue:

P(R>0do(δ),RfQ,Zt)=P(hitdo(δ),Zt)P(R>0do(δ),hit,Zt)P(R > 0 \mid \text{do}(\delta), \text{RfQ}, \mathcal{Z}_t) = P(\text{hit} \mid \text{do}(\delta), \mathcal{Z}_t) \cdot P(R > 0 \mid \text{do}(\delta), \text{hit}, \mathcal{Z}_t)

The first factor is the hit probability model derived above. The second — the probability of a positive revenue conditional on winning — depends on whether the client had information asymmetry. Using Brownian motion for mid-price dynamics and integrating over IAIA Marín et al., 2025:

P(RT>0δ,hit,IA,σ,RF)=1Φ ⁣(δμ^1IA=1(Tt)σTt)(s=1)P(R_T > 0 \mid \delta, \text{hit}, IA, \sigma, RF) = 1 - \Phi\!\left(\frac{-\delta - \hat{\mu}\, \mathbb{1}_{IA=1}(T-t)}{\sigma\sqrt{T-t}}\right) \quad (s = 1)

where Φ\Phi is the standard normal CDF. When IA=0IA=0 and the spread is positive (δ>0\delta > 0), this probability is always above 1/21/2 and increases with the spread. When IA=1IA=1, the adverse drift μ^(Tt)\hat{\mu}(T-t) erodes the spread premium and can push revenue potential below 1/21/2 for small spreads on long holding periods.

Axe matcher

A dealer holding excess inventory in a bond — an axe position — has a natural incentive to trade it out. The question is: which clients should the dealer proactively contact (via the sales force or an automated call system) to maximize the probability of generating a profitable RfQ?

Formalizing this as a causal decision problem Marín et al., 2025, the dealer compares two interventions for each candidate client: calling (call=1\text{call}=1) versus not calling (call=0\text{call}=0). The value of a call is measured by its Average Causal Effect (ACE) on the hit probability:

ACE=P(hitdo(call=1),do(δ),axe=1,CF,BF,Zt)P(hitdo(call=0),do(δ),axe=1,CF,BF,Zt)ACE = P(\text{hit} \mid \text{do}(\text{call}=1), \text{do}(\delta), \text{axe}=1, CF, BF, \mathcal{Z}_t) - P(\text{hit} \mid \text{do}(\text{call}=0), \text{do}(\delta), \text{axe}=1, CF, BF, \mathcal{Z}_t)

Using the causal graph structure, this decomposes as Marín et al., 2025:

ACE=P(hitdo(δ),RfQ,axe=1,CF,BF,Zt)×ΔP(RfQ)ACE = P(\text{hit} \mid \text{do}(\delta), \text{RfQ}, \text{axe}=1, CF, BF, \mathcal{Z}_t) \times \Delta P(\text{RfQ})

where:

ΔP(RfQ)P(RfQdo(call=1),axe=1,CF,BF)P(RfQdo(call=0),axe=1,CF,BF)\Delta P(\text{RfQ}) \equiv P(\text{RfQ} \mid \text{do}(\text{call}=1), \text{axe}=1, CF, BF) - P(\text{RfQ} \mid \text{do}(\text{call}=0), \text{axe}=1, CF, BF)

is the uplift: the incremental probability of receiving an RfQ from this client as a result of the call. Since conditioning on axe blocks all spurious paths from call to RfQ in the causal graph, the do-operator can be dropped on the right-hand side:

P(RfQdo(call=c),axe=1,CF,BF)=P(RfQcall=c,axe=1,CF,BF)P(\text{RfQ} \mid \text{do}(\text{call}=c), \text{axe}=1, CF, BF) = P(\text{RfQ} \mid \text{call}=c, \text{axe}=1, CF, BF)

The uplift is therefore estimable from observational data on the historical rate of RfQ generation following commercial calls. Using Bayes’ theorem, the uplift model further factors into three interpretable components:

The ACE provides a single score for each candidate (client, instrument, spread) triple. The dealer ranks all candidates by their ACE and contacts the top-ranked clients, allocating salesforce effort to maximize the expected number of profitable RfQs from the axe.

Deploying AI agents for RfQ analytics

D2C markets, despite operating through regulated multi-dealer platforms, retain a significant informal layer: much of the commercial relationship between dealers and clients unfolds through messaging channels. Bloomberg chat is the dominant medium across professional fixed income, FX, and derivatives markets: clients and salespeople exchange inquiries, indicate interest in specific instruments, negotiate terms, and eventually initiate a quote request, all in unstructured natural language. The quantitative models developed throughout this chapter — hit probability estimation, optimal spread computation, attrition risk scoring, axe matching — are formulated in terms of structured inputs: a well-defined instrument identifier, a notional, a trade direction, and a competition level, regardless of asset class. Bridging the informal, conversational front-end of client interaction to the quantitative back-end of pricing analytics is a natural and practically important application of large language models (LLMs) and AI agents.

The core extraction task is straightforward to state: given a chat message or a short conversation thread, determine whether the client is requesting a quote, and if so, extract the fields required by the downstream pricing pipeline — instrument identifier (ISIN for bonds, currency pair and tenor for FX and rates, or equivalent for other asset classes), direction (buy or sell, pay or receive), notional, settlement date, and any special conditions. This is an instance of intent classification and named entity recognition (NER), tasks for which instruction-tuned LLMs are well suited. As discussed in Large Language Models, modern foundation models can perform zero-shot and few-shot structured extraction from free-form text, formatting the output directly as a JSON schema compatible with downstream systems, without the need for task-specific training data. Their flexibility is particularly valuable in this domain: market messages mix abbreviated tickers, asset-class conventions, Bloomberg-specific shorthand, and multilingual fragments in ways that defeat purpose-built NLP models trained on cleaner corpora.

Chat-to-RfQ extraction

Extracting structured RfQs from free-form text introduces two distinct failure modes. The first is a structural error: the extracted fields are syntactically malformed, missing a required identifier, or inconsistent — for example, a volume expressed in the wrong unit (thousands versus millions of face value). The second is a semantic error: the fields are well-formed but correspond to the wrong instrument, a stale request that the client has already withdrawn, or a side that contradicts the context of the conversation. Both failure modes can result in the dealer quoting the wrong instrument at an incorrect price, with potentially significant financial consequences.

To mitigate these risks, the extraction step must be followed by validation. A single LLM pass — even with a careful prompt — cannot reliably self-validate its own output for the full range of instrument identifiers and chat conventions encountered in practice. The appropriate architectural pattern, introduced in Agentic design patterns, is the actor-critic design: a first agent (the actor) produces a candidate structured RfQ from the chat text; a second agent (the critic) reviews the extraction against the original message, checks the identifier against an instrument reference database, and either approves the extraction or generates structured feedback that the actor uses to revise its output. This reflection loop continues until the critic is satisfied or a maximum number of iterations is reached, at which point the request is escalated to a human.

An actor-critic agentic pipeline

Once a validated structured RfQ is available, it is passed to the pricing tool — a callable that wraps the hit-probability model and optimal spread solver described in the preceding sections. Tools, as discussed in Tools and function calling, are functions made available to an agent that it can invoke to obtain information or trigger side effects beyond its own parametric knowledge. The pricing tool is deterministic given its inputs: it returns the optimal spread δ\delta^* computed from the current hit-probability model, current market volatility σ\sigma, and the instrument and client features associated with the extracted RfQ. The tool’s output is a proposed quote ready for transmission to the client.

The proposed quote is then evaluated by a second critic whose role is price plausibility validation. This critic assesses whether the quoted spread is consistent with current market conditions and with comparable recent trades. Two information sources support this evaluation. First, a knowledge base built on retrieval-augmented generation (Retrieval-augmented generation) provides the critic with relevant financial context: the instrument’s characteristics and typical spread range (rating, sector, and duration for bonds; tenor and delta for options; currency pair and forward points for FX); recent macro or central bank events affecting the relevant market; and any dealer-specific pricing guidelines encoded as structured documents. The knowledge base allows the critic to flag gross anomalies — for example, a quoted spread of 2 basis points on a high-yield bond, an implausibly tight bid on an illiquid swap, or a negative spread on a buy quote — that would indicate a bug in the pricing tool or a mis-identified instrument. Second, a historical RfQ database tool allows the critic to retrieve the most recent quotes on the same or comparable instruments (matched by asset class, relevant risk characteristics, and tenor), providing a market-data anchor for the plausibility check.

If the price is deemed implausible, the critic generates structured feedback — identifying whether the anomaly is more consistent with a wrong instrument, a wrong direction, or a miscalibrated pricing parameter — and the actor is re-invoked to revise the RfQ extraction given this additional context. This completes the agentic loop. The full pipeline is illustrated in the following figure.

The multi-agent topology (Multi-agent systems) allows each component to be independently versioned and tested. The two critics are stateless functions over their inputs and can be validated on labelled datasets independently of the actor. The pricing tool is already maintained as part of the quantitative analytics infrastructure. The actor alone requires frequent updating as chat conventions, bond universe, and LLM capabilities evolve.

Retrieval-augmented pricing context

The effectiveness of the second critic depends on the quality and currency of its knowledge base. A static system prompt containing generic fixed income knowledge is insufficient: the relevant context is bond-specific, time-varying (credit conditions change), and sometimes proprietary (internal pricing guidelines). A retrieval-augmented architecture (Retrieval-augmented generation) addresses this by maintaining a structured document store and retrieving, at query time, the most relevant passages for the bond and client context at hand.

The knowledge base is populated with several types of content. Instrument fundamentals — pulled from reference data systems — include the product-specific attributes relevant to pricing: for bonds, issuer, coupon type, maturity, duration, convexity, rating, and sector; for interest rate swaps, tenor, notional currency, fixed rate, and day-count convention; for FX products, currency pair, spot rate, and forward points; for options, underlying, expiry, strike, and the relevant vol surface. Market context includes recent research notes and data snapshots covering the relevant market segment — credit spread curves by rating and sector, implied vol surfaces, or FX forward curves — as well as summaries of macro events or central bank decisions likely to affect pricing in the near term. Pricing guidelines encode dealer-specific rules: minimum spreads by instrument class, client tier pricing adjustments, and any temporary overrides reflecting current risk appetite or inventory positions. These guidelines are not appropriate inputs to the hit-probability model itself — they do not reflect the causal drivers of client behavior — but they are valid constraints that the price critic should enforce.

The historical RfQ database serves a complementary role. Rather than providing conceptual context, it provides empirical market anchors: the most recent won and lost quotes on the same instrument, and the distribution of quotes on comparable instruments (matched by asset class, relevant risk bucket, and tenor) over the past several trading days. A price that deviates substantially from the recent distribution for comparable instruments is a strong signal of an error, either in the instrument identification or in the pricing tool inputs. This retrieval is implemented as a standard SQL query wrapped in a tool callable by the critic (Tools and function calling).

The knowledge base can also be extended dynamically. After each successfully completed and validated trade, the system appends the final quote, the outcome, and any critic feedback to a log that is periodically ingested into the knowledge base. This feedback loop allows the knowledge base to capture emerging conventions, new instrument types, and any systematic biases in the pricing tool that critics repeatedly flag — an application of the experience accumulation pattern discussed in Knowledge base agents.

Pre-trade controls and guardrails

The final gate before a quote is transmitted to the client is the pre-trade control layer. Unlike the critic, whose role is to detect plausibility failures through reasoning, the pre-trade controls are hard rule-based checks that enforce absolute limits regardless of the agent’s assessment. These include minimum and maximum spread floors and ceilings by instrument class, maximum notional thresholds, checks against sanction lists for counterparty identity, and consistency with the dealer’s current risk limits and inventory positions.

For dealers subject to MiFID II, these controls are not merely good practice but a regulatory requirement. RTS-6 of MiFID II — discussed in the context of algorithmic trading governance in Algorithmic Trading — mandates that firms engaged in algorithmic trading maintain pre-trade controls capable of preventing orders that breach predefined price, volume, or value thresholds from reaching the market. An automated chat-to-quote pipeline that can generate and transmit executable prices without human intervention qualifies as algorithmic trading under this definition, and the pre-trade control layer must be implemented accordingly: the controls must be documented, tested, independently reviewed, and capable of being invoked at a rate commensurate with the latency of the pipeline.

The pre-trade control layer can be implemented either as a standalone tool invoked by the agentic pipeline or as a validation gate embedded in the pricing tool itself. The latter has the advantage of ensuring that no quote can be generated by the pricing tool that would subsequently fail the control, avoiding a class of errors where the critic approves a price that is then rejected by the controls after the fact. In either case, a breach does not silently drop the quote: it triggers an alert to the responsible trader or salesperson, who can review the full agent trace — including the original chat message, the extracted RfQ, the pricing tool output, and the critic’s evaluation — and decide whether to transmit a manually overridden quote or to decline the request.

Exercises

  1. Prove the identity P(a=1D=10100,p,θ)=P(a=1D=01100,p,θ)P(a = 1|D = 10100, p, \theta) = P(a = 1| D = 01100, p, \theta) by explicitly working out the second term in the equality.

  2. Hit probability and causal adjustment. A logistic hit probability model is estimated as P(H=1δ,σ)=σ ⁣(2.00.3δ0.5σ)P(H=1 \mid \delta, \sigma) = \sigma\!\left(2.0 - 0.3\delta - 0.5\sigma\right) where σ()\sigma(\cdot) is the sigmoid function and σ\sigma on the right denotes market volatility (in percent). Assume volatility is marginally distributed as σmktUniform[0.5,2.0]\sigma_{\text{mkt}} \sim \text{Uniform}[0.5, 2.0]. (a) Estimate the causal (back-door adjusted) hit probability f(δ)=Eσmkt[P(H=1δ,σmkt)]f(\delta) = \mathbb{E}_{\sigma_{\text{mkt}}}[P(H=1 \mid \delta, \sigma_{\text{mkt}})] for δ{1,3,5,8}\delta \in \{1, 3, 5, 8\} bps using numerical integration. (b) Compute the optimal spread δ=argmaxδδf(δ)\delta^* = \arg\max_\delta \delta \cdot f(\delta) numerically. (c) How does the optimal spread change if the market becomes more volatile on average (i.e., σmktUniform[1.5,4.0]\sigma_{\text{mkt}} \sim \text{Uniform}[1.5, 4.0])?

  3. Revenue potential from a missed quote. A dealer quotes δ=7\delta' = 7 bps and misses. The client’s reservation spread is drawn as δresUniform[0,15]\delta_{\text{res}} \sim \text{Uniform}[0, 15]. (a) Compute P(H=0δ=7)P(H=0 \mid \delta'=7) under this model (assuming no competition). (b) Apply the abduction step to find the posterior P(δresH=0,δ=7)P(\delta_{\text{res}} \mid H=0, \delta'=7). (c) For the counterfactual spread δcf=4\delta^{\text{cf}} = 4 bps, compute P(Hδcf=1H=0,δ=7)P(H_{\delta^{\text{cf}}} = 1 \mid H=0, \delta'=7). (d) Given a notional of €500,000, compute the revenue potential of this missed trade. How does this quantity differ from the interventional expected revenue δcff(δcf)\delta^{\text{cf}} \cdot f(\delta^{\text{cf}})?

  4. Attrition risk. A dealer observes 1,000 RfQs in which she was the best-priced dealer. Of these, 800 resulted in trades, 120 timed out before the client responded, and 80 were cancelled by the client. (a) Estimate the attrition rate pattp_{\text{att}} and the conditional hit rate phit=P(H=1no attrition)p_{\text{hit}} = P(H=1 \mid \text{no attrition}). (b) Show that ignoring attrition inflates the estimated win probability by computing the naive win rate vs the attrition-corrected win rate. (c) If attrition probability increases linearly with response latency, argue why a dealer that targets a faster response time faces a different optimal spread than a slow dealer even if their hit-conditional pricing models are identical.

  5. Axe matching and routing. A dealer receives simultaneous RfQs for two bonds: Bond A (ISIN: XS001) — client wants to buy 5M, dealer has a short position of 4M; Bond B (ISIN: XS002) — client wants to sell 3M, dealer is flat. The dealer uses an axe-matching system that assigns a routing priority score s=αaxe_matchβδquoteds = \alpha \cdot \text{axe\_match} - \beta \cdot \delta_{\text{quoted}} where α=2\alpha = 2 and β=0.5\beta = 0.5, and axe_match=1\text{axe\_match} = 1 if the trade reduces inventory risk, 0 otherwise. (a) Compute the routing scores for both RfQs if δA=3\delta_A = 3 bps and δB=4\delta_B = 4 bps. (b) Which RfQ should the dealer prioritise and at what spread? (c) Explain why axe-matching is economically equivalent to adjusting the reservation spread for inventory risk.

References
  1. Fermanian, J.-D., Guéant, O., & Pu, J. (2016). The Behavior of Dealers and Clients on the European Corporate Bond Market: The Case of Multi-Dealer-to-Client Platforms. Market Microstructure and Liquidity, 02(03n04), 1750004.
  2. Marín, P., Ardanza-Trevijano, S., & Sabio, J. (2025). Causal Interventions in Bond Multi-Dealer-to-Client Platforms. https://arxiv.org/abs/2506.18147
  3. Fader, P. S., Hardie, B. G. S., & Shang, J. (2010). Customer-Base Analysis in a Discrete-Time Noncontractual Setting. Marketing Science, 29(6), 1086–1108.
  4. Grigsby, M. (2018). Marketing Analytics: A Practical Guide to Improving Consumer Insights Using Data Techniques (2nd ed.). Kogan Page Ltd.
  5. Silvia, D. S. (2006). Data Analysis: A Bayesian Tutorial (Second). Oxford Science Publications.