AI Subscriptions as Crossover Goods: Buyer Selection and Usage Scale in Bundle Demand

Crossover goods act as substitutes at low usage but become complements as consumption rises. Card-billing parameters indicate 75% of ChatGPT–Claude pair buyers already gain positive extra value through selection, while usage logs and capacity shocks identify the consumption crossover.

Working economists and software developers often pay $20 a month for ChatGPT and another $20 a month for Claude. We use one assistant to draft code or outline an argument. We open the second to check our logic, audit a script, or keep working when a five-hour message cap binds. In our daily work, the two subscriptions feel like complements.

Yet a comprehensive 2026 NBER working paper on generative AI demand appears to tell the opposite story.1 The authors link 114 billion card transactions to estimate an eleven-choice bundle model across four AI providers and six pairs. Across the whole consumer population, they find that the average interaction between ChatGPT and Claude is strongly negative. That average interaction sits at −4.10 utility units in the second quarter of 2024 and falls to −6.44 by early 2026. At the same time, their payment records (Figure 4a) show substantial dual purchasing. About 44% of paid Claude users in June 2024 and 28% in April 2026 also paid for ChatGPT in the same month.

Why do people pay $40 a month for two tools that look like substitutes on average? The paper points to strong brand appeal as one explanation. Consumers who value AI tools highly tend to like both brands, with an estimated 0.89 correlation between standalone preferences for ChatGPT and Claude. If we like both brands enough, we may buy both subscriptions even when their features overlap.

Two other mechanisms can also explain dual purchasing, and they lead to very different conclusions about the market.

  1. Selection among actual bundle buyers. What holds for the average consumer in the population need not hold for the people who actually buy the pair. If consumers differ widely in how much extra value they get from combining two tools, the people who pay $40 a month come from the upper tail of that distribution.
  2. Crossover goods (substitutes at light use, complements at heavy use). Two products can act as substitutes when we use them lightly, yet become complements as our total workload grows. We call this pattern a quantity-dependent substitution–complementarity reversal, or crossover goods for short. Unlike income-based non-homotheticity—which tracks how spending shifts with a household’s budget—crossover goods change their relationship with the scale of usage itself.

Monthly card statements record whether we paid $20, not the number of prompts we sent. Without a usage measure in the billing panel, the published demand model cannot observe whether bundle buyers are heavy users. All empirical findings in this article therefore come exclusively from the real-world NBER card-billing parameters in the first two sections below. In the later sections, we use a controlled numerical illustration (never treated as an empirical finding) with a known artificial formula to show how crossover goods work in theory and what real-world usage data researchers need to test them.

Conceptual map schematic showing three distinct mechanisms in subscription bundle demand: first, buyer selection in card-billing data where upper-tail pair tastes yield positive average bundle value among actual pair buyers; second, crossover goods across usage scale where light workloads substitute and heavy workloads complement through task splitting and cross-model checking; and third, primary capacity expansion shocks that raise second-provider adoption under cross-family verification but lower it under rate-limit overflow.
Three distinct mechanisms shape subscription bundle demand: buyer selection among upper-tail pair tastes in card-billing data, crossover goods that shift from substitutes at light usage to complements at heavy usage, and primary capacity expansions that separate cross-family verification from rate-limit overflow.

Substitutes on Average, Complements Among Buyers: Walking Through Selection

Let us start with what a second subscription adds for a buyer. In a discrete choice model of subscription bundles, a single AI tool gives each consumer three utility pieces.2 We get the tool’s population-average appeal (which already accounts for the $20 price), our personal taste for that brand, and a monthly choice shock:

Uijt = δjt + θij + νijt.

When we subscribe to two providers at once, we add their standalone utilities plus a bundle interaction term. That interaction combines the population-average penalty or bonus, Γct, with our personal bundle preference, γic, which has standard deviation σγ,c:

Uict = δjt + θij + δkt + θik + Γct + γic + νict,
γic ∼ N(0, σγ,c2).

When the net interaction Γct + γic is positive, the pair delivers more value than the sum of its standalone parts. When it is negative, overlap or switching friction makes the second tool less useful than it would be alone. Setting the outside option (buying neither) to zero, standard extreme-value monthly shocks turn these utilities into logit choice probabilities.

Here the published numbers in the paper’s Table 3 reveal a sharp contrast. For the Anthropic–OpenAI pair, the population-average interaction is negative (−4.10 in 2024Q2 and −6.44 in 2026Q1). Yet individual bundle tastes around that average have a standard deviation of 5.08 utility units, compared with just 0.043 for Anthropic–xAI.

If we judge the bundle by the average consumer, we see two overlapping chatbots and conclude they are substitutes. If we look at the people who actually pay for both, we see the upper tail of users who value the combination. Consumers with a large positive draw of γic are much more likely to pay $40 for the pair than consumers with a negative draw. Conditioning on bundle purchase therefore shifts the buyer average upward.

Does that selection shift carry the average buyer above zero? Notice that the paper’s baseline specification treats a consumer’s bundle taste γic as statistically independent of their standalone brand tastes θij. Any sign flip we find inside the published model comes purely from selection on γic among buyers of the pair, without assuming any link between usage volume and bundle value.

We can check this directly in a few lines of Python using the paper’s published preference parameters. We take each provider’s average appeal, the spread and correlation of standalone brand tastes (6.0 for OpenAI, 5.54 for Anthropic, and 0.889 correlation), and the 5.08 spread in pair tastes. Across the distribution of consumer tastes, we weight each person’s net bundle interaction by their probability of choosing the pair over a single tool or neither:

import numpy as np
from scipy.special import roots_legendre, roots_hermite, expit

sigma_O, sigma_A, rho, sigma_gamma = 6.0, 5.54, 0.889, 5.08  # printed in Table 3
# Grid of correlated standalone tastes for OpenAI and Anthropic.
x, w = roots_hermite(240)
x, w = x * np.sqrt(2), w / np.sqrt(np.pi)
common = np.sqrt((1 + rho) / 2) * x[:, None]
difference = np.sqrt((1 - rho) / 2) * x[None, :]
taste_O = sigma_O * (common + difference)
taste_A = sigma_A * (common - difference)
y, v = roots_legendre(12)
quarters = [('2024Q2', -16.0, -18.0, -4.10, (4.86, 89.8)),
            ('2026Q1', -12.1, -14.3, -6.44, (2.55, 74.8))]
for quarter, delta_O, delta_A, Gamma, target in quarters:
    # Grid of pair-taste draws, split where net bundle value crosses zero.
    edges = np.unique(np.r_[np.arange(-10, 10.01, .5), -Gamma / sigma_gamma])
    z = (edges[:-1, None] + edges[1:, None]) / 2 + np.diff(edges)[:, None] * y / 2
    density = np.exp(-z*z/2) / np.sqrt(2*np.pi)
    weights = (np.diff(edges)[:, None] * v / 2 * density).ravel()
    net = Gamma + sigma_gamma * z.ravel()
    O, A = delta_O + taste_O, delta_A + taste_A
    index = (O + A - np.logaddexp(0, np.logaddexp(O, A))).ravel()
    # Weight each net interaction by how likely consumers are to buy the pair.
    buyer_weight = (w[:, None] * w[None, :]).ravel() @ expit(index[:, None] + net)
    mass = buyer_weight * weights
    buyer_mean = mass @ net / mass.sum()
    positive_share = 100 * mass[net > 0].sum() / mass.sum()
    print(f'{quarter}: {buyer_mean:.2f} utils, {positive_share:.1f}% positive')
    assert (round(buyer_mean, 2), round(positive_share, 1)) == target

The calculation flips the sign in every quarter of the sample. If we average across the entire population, the random bundle taste γic averages to zero and we recover the negative population mean Γct. If we weight by who actually buys the ChatGPT–Claude bundle, the mean net interaction stays positive in all eight quarters, as Figure 1 shows.

Among Anthropic × OpenAI buyers the mean net interaction is positive in every printed quarter although the population mean is negative. 2024Q2 population interaction (negative) magnitude 4.100; 2024Q2 selected four-choice interaction 4.860; 2024Q2 selected eleven-choice interaction 4.905; 2024Q2 selected eleven-choice interaction MCSE 0.3079; 2024Q3 population interaction (negative) magnitude 4.550; 2024Q3 selected four-choice interaction 4.424; 2024Q3 selected eleven-choice interaction 4.681; 2024Q3 selected eleven-choice interaction MCSE 0.2883; 2024Q4 population interaction (negative) magnitude 4.990; 2024Q4 selected four-choice interaction 4.073; 2024Q4 selected eleven-choice interaction 4.288; 2024Q4 selected eleven-choice interaction MCSE 0.2693; 2025Q1 population interaction (negative) magnitude 5.280; 2025Q1 selected four-choice interaction 3.802; 2025Q1 selected eleven-choice interaction 3.991; 2025Q1 selected eleven-choice interaction MCSE 0.2518; 2025Q2 population interaction (negative) magnitude 5.580; 2025Q2 selected four-choice interaction 3.621; 2025Q2 selected eleven-choice interaction 3.832; 2025Q2 selected eleven-choice interaction MCSE 0.2344; 2025Q3 population interaction (negative) magnitude 5.810; 2025Q3 selected four-choice interaction 3.399; 2025Q3 selected eleven-choice interaction 3.618; 2025Q3 selected eleven-choice interaction MCSE 0.2144; 2025Q4 population interaction (negative) magnitude 6.140; 2025Q4 selected four-choice interaction 3.113; 2025Q4 selected eleven-choice interaction 3.339; 2025Q4 selected eleven-choice interaction MCSE 0.2023; 2026Q1 population interaction (negative) magnitude 6.440; 2026Q1 selected four-choice interaction 2.546; 2026Q1 selected eleven-choice interaction 2.767; 2026Q1 selected eleven-choice interaction MCSE 0.1603.
Among buyers who subscribe to both ChatGPT and Claude, the average net bundle interaction is positive in every quarter from 2024Q2 to 2026Q1 even though the population mean is negative. Error bars on the eleven-choice series show ±1.96 Monte Carlo standard errors (MCSE) of numerical integration at the printed parameters.

In the second quarter of 2024, the average ChatGPT–Claude pair buyer gains +4.86 utility units in the four-choice check. Roughly 89.8% of those buyers receive positive net value (+4.91 and 90.3% across all eleven market choices). By the first quarter of 2026, the population mean has fallen to −6.44, yet the average among actual pair buyers remains +2.55 in the four-choice check and +2.77 in the eleven-choice market. Roughly three-quarters of dual subscribers—74.8% with four choices and 75.6% with eleven—still gain positive extra value from the pair, as Figure 2 compares across all six provider pairs.

The share of buyers with a positive net interaction varies across provider pairs in 2026Q1. Anthropic × GoogleAI four-choice positive share 0.8720; Anthropic × GoogleAI eleven-choice positive share 0.9345; Anthropic × GoogleAI eleven-choice positive share MCSE 0.008566; Anthropic × OpenAI four-choice positive share 0.7479; Anthropic × OpenAI eleven-choice positive share 0.7563; Anthropic × OpenAI eleven-choice positive share MCSE 0.01608; OpenAI × xAI four-choice positive share 0.6229; OpenAI × xAI eleven-choice positive share 0.6721; OpenAI × xAI eleven-choice positive share MCSE 0.02620; GoogleAI × OpenAI four-choice positive share 0.4239; GoogleAI × OpenAI eleven-choice positive share 0.5356; GoogleAI × OpenAI eleven-choice positive share MCSE 0.03309; GoogleAI × xAI four-choice positive share 0.06692; GoogleAI × xAI eleven-choice positive share 0.01320; GoogleAI × xAI eleven-choice positive share MCSE 0.007043; Anthropic × xAI four-choice positive share 0.000; Anthropic × xAI eleven-choice positive share 0.000; Anthropic × xAI eleven-choice positive share MCSE 0.000.
In 2026Q1, the share of dual subscribers with a positive net bundle interaction ranges from 93.4% for Anthropic–GoogleAI and 75.6% for Anthropic–OpenAI down to 0.0% for Anthropic–xAI across the four-choice and eleven-choice models. Error bars show ±1.96 integration MCSE.

We can convert these utility numbers into monthly dollars by dividing by the paper’s price coefficient, α = 0.222. Before rounding, the four-choice buyer interactions equal $21.89 a month in 2024Q2 and $11.47 a month in 2026Q1—more than half the price of the second subscription. This conversion assumes that price sensitivity identified from xAI’s price changes carries over to OpenAI and Anthropic. As a benchmark, the 2026Q1 standalone appeal gap between OpenAI (−12.1) and Anthropic (−14.3) equals $9.91 a month, matching the paper’s reported $10 brand value gap.

Table 1 compares the ChatGPT–Claude pair over time and sets it alongside the other five provider pairs in early 2026. Here MCSE denotes the Monte Carlo standard error of numerical integration at the published point estimates, rather than sampling uncertainty from the underlying card panel.

Table 1. Selection among bundle buyers
Pair / quarterBuyer mean, 4 choicesPositive, 4 choicesBuyer mean, 11 choicesPositive, 11 choices
Anthropic × OpenAI / 2024Q2+4.8689.8%+4.91MCSE 0.3190.3%MCSE 1.6 pp
Anthropic × OpenAI / 2026Q1+2.5574.8%+2.77MCSE 0.1675.6%MCSE 1.6 pp
Anthropic × GoogleAI / 2026Q1+2.6787.2%+3.28MCSE 0.1193.4%MCSE 0.9 pp
OpenAI × xAI / 2026Q1+0.2262.3%+0.35MCSE 0.0467.2%MCSE 2.6 pp
GoogleAI × OpenAI / 2026Q1-0.2142.4%+0.09MCSE 0.0853.6%MCSE 3.3 pp
GoogleAI × xAI / 2026Q1-3.266.7%-3.10MCSE 0.351.3%MCSE 0.7 pp
Anthropic × xAI / 2026Q1-2.140.0%-2.14MCSE 0.000.0%MCSE 0.0 pp

Looking across all six pairs in Table 1 shows that selection does not automatically create positive bundle value everywhere. Three pairs—Anthropic–GoogleAI (87.2% and 93.4% positive), Anthropic–OpenAI (74.8% and 75.6%), and OpenAI–xAI (62.3% and 67.2%)—have clear majorities of pair buyers gaining positive net bundle value. GoogleAI–OpenAI sits near half: 42.4% with four choices and 53.6% with eleven, roughly one integration MCSE above 50%. At the bottom of the table, Anthropic–xAI gives the sharpest counterexample. Because its bundle taste spread is tiny (0.043), 0.0% of its dual subscribers get positive bundle value, and their buyer average stays at −2.14. Anyone paying for both Claude and xAI in this model does so purely because strong standalone brand tastes outweigh the overlap penalty.

Why the Population Average Fell—and What Price Elasticities Measure

If three-quarters of ChatGPT–Claude pair buyers still get positive net value in early 2026, why did the population-average interaction fall from −4.10 to −6.44? And what happens to Claude demand when OpenAI changes its price?

To answer both questions, we need to separate two concepts: how often people buy two products together, and how demand responds to a price change. In 2026Q1, the eleven-choice model implies that 36.0% of Claude subscribers also pay for ChatGPT, compared with 2.6% of consumers overall—about 13.8 times the unconditional rate. (In the paper’s descriptive April card figures, those shares are 28% and 2.4%.)

Price elasticity asks a different question. If OpenAI raises its $20 monthly price, does total Anthropic adoption (sA, which sums standalone Claude buyers and every bundle containing Claude) rise or fall? With Pa, Po, Pb, and Pn denoting the four choice probabilities (Anthropic alone, OpenAI alone, both, or neither), the aggregate price derivative D and cross-price elasticity ε are:

D = E[PbPn − PaPo],
ε = −αpOD / sA.

In the eleven-choice market, the derivative is E[Pb − P(A)P(O)]. Because ε carries a minus sign in front of αpOD, a negative ε means that a higher OpenAI price reduces Anthropic demand (complements), while a positive ε means it pushes users toward Anthropic (substitutes). Between 2024Q2 and 2026Q1, total Anthropic adoption sA rises from 0.001170 to 0.004798 in the four-choice check, and from 0.001041 to 0.004913 in the eleven-choice market.

Across the eight quarters, the aggregate cross-price elasticity flips from negative to positive. In 2024Q2, ε is −0.121 in the four-choice check and −0.145 in the eleven-choice market (with integration MCSE 0.0084; scaling the 5.08 spread by 0.9 moves the early eleven-choice figure to +0.029 with MCSE 0.0088, so the initial negative sign rests on a dispersion estimate reported without a standard error). It crosses zero in 2024Q3 at +0.00013 and +0.0635, and reaches +0.432 and +0.425 in 2026Q1 (with full-market MCSEs 0.0073 and 0.0181).

Did the price response flip toward substitution because the complementary buyer group shrank? We can check by splitting the derivative. In the four-choice formula above, each consumer’s price derivative, PbPn − PaPo, has the exact same sign as their personal net interaction Γ + γ. If we split the population at Γ + γ = 0, we can track the positive-value group and the nonpositive-value group separately across all eight quarters, as Figure 3 shows.

Positive and nonpositive net-interaction derivative contributions both grow in magnitude from 2024Q2 to 2026Q1. 2024Q2 positive net interaction contribution 0.0001107; 2024Q2 nonpositive net interaction contribution (negative) magnitude 0.00007881; 2024Q3 positive net interaction contribution 0.0001151; 2024Q3 nonpositive net interaction contribution (negative) magnitude 0.0001151; 2024Q4 positive net interaction contribution 0.0001162; 2024Q4 nonpositive net interaction contribution (negative) magnitude 0.0001493; 2025Q1 positive net interaction contribution 0.0001212; 2025Q1 nonpositive net interaction contribution (negative) magnitude 0.0001897; 2025Q2 positive net interaction contribution 0.0001227; 2025Q2 nonpositive net interaction contribution (negative) magnitude 0.0002098; 2025Q3 positive net interaction contribution 0.0001311; 2025Q3 nonpositive net interaction contribution (negative) magnitude 0.0002579; 2025Q4 positive net interaction contribution 0.0001321; 2025Q4 nonpositive net interaction contribution (negative) magnitude 0.0003193; 2026Q1 positive net interaction contribution 0.0001766; 2026Q1 nonpositive net interaction contribution (negative) magnitude 0.0006435.
Splitting the four-choice price derivative at zero net bundle value shows that the positive contribution from complementary buyers and the negative contribution from nonpositive-value consumers both grow in magnitude from 2024Q2 to 2026Q1.

Look at what Figure 3 shows. Between 2024Q2 and 2026Q1, the raw derivative contribution from consumers with positive net bundle value does not shrink—it grows by 59.5%, from 0.0001107 to 0.0001766. Meanwhile, the share of all consumers buying the ChatGPT–Claude bundle (Figure 4) nearly triples from 0.070% to 0.196%. The complementary buyer tail expands in absolute size.

The Anthropic × OpenAI bundle purchase share in the four-choice model rises from 2024Q2 to 2026Q1. 2024Q2 four-choice bundle share 0.0007000; 2024Q3 four-choice bundle share 0.0007702; 2024Q4 four-choice bundle share 0.0008417; 2025Q1 four-choice bundle share 0.0009301; 2025Q2 four-choice bundle share 0.001041; 2025Q3 four-choice bundle share 0.001202; 2025Q4 four-choice bundle share 0.001313; 2026Q1 four-choice bundle share 0.001960.
In the four-choice model, the share of all consumers purchasing the Anthropic–OpenAI bundle nearly triples between 2024Q2 (0.070%) and 2026Q1 (0.196%).

Why, then, does the overall cross-price elasticity flip to +0.432, as Figure 5 tracks? Standalone appeal rises steeply for both OpenAI (from −16.0 to −12.1) and Anthropic (from −18.0 to −14.3), drawing a wave of mainstream adopters into the market. The opposing derivative contribution from consumers with nonpositive bundle value grows 8.17 times in magnitude, from −0.0000788 to −0.0006435, and doubles by 2.02 times in the final quarter alone. Over the full sample, total Anthropic adoption grows 4.10 times. When we divide by sA, the positive group’s per-adopter pull on ε shrinks from −0.420 to −0.163, while the nonpositive group’s push rises from +0.299 to +0.596. If we look only at the headline elasticity, we miss that both groups expanded at different speeds.

Four-choice and eleven-choice cross-price elasticities shift from negative to positive between 2024Q2 and 2026Q1. 2024Q2 four-choice cross-price elasticity (negative) magnitude 0.1210; 2024Q2 eleven-choice cross-price elasticity (negative) magnitude 0.1449; 2024Q2 eleven-choice elasticity MCSE 0.008419; 2024Q3 four-choice cross-price elasticity 0.0001312; 2024Q3 eleven-choice cross-price elasticity 0.06348; 2024Q3 eleven-choice elasticity MCSE 0.007339; 2024Q4 four-choice cross-price elasticity 0.08794; 2024Q4 eleven-choice cross-price elasticity 0.1100; 2024Q4 eleven-choice elasticity MCSE 0.03330; 2025Q1 four-choice cross-price elasticity 0.1559; 2025Q1 eleven-choice cross-price elasticity 0.1516; 2025Q1 eleven-choice elasticity MCSE 0.03116; 2025Q2 four-choice cross-price elasticity 0.1941; 2025Q2 eleven-choice cross-price elasticity 0.2417; 2025Q2 eleven-choice elasticity MCSE 0.02717; 2025Q3 four-choice cross-price elasticity 0.2448; 2025Q3 eleven-choice cross-price elasticity 0.2813; 2025Q3 eleven-choice elasticity MCSE 0.02532; 2025Q4 four-choice cross-price elasticity 0.3185; 2025Q4 eleven-choice cross-price elasticity 0.3381; 2025Q4 eleven-choice elasticity MCSE 0.02407; 2026Q1 four-choice cross-price elasticity 0.4321; 2026Q1 eleven-choice cross-price elasticity 0.4245; 2026Q1 eleven-choice elasticity MCSE 0.01812.
Four-choice and eleven-choice cross-price elasticities of Anthropic demand with respect to OpenAI’s price shift from negative in 2024Q2 (−0.121 and −0.145) to positive in 2026Q1 (+0.432 and +0.425). Error bars show ±1.96 integration MCSE.

We can also isolate how much of the shift in ε comes from rising standalone appeal versus the drop in Γ. If we hold Γ at −4.10 and move only standalone appeals to their 2026Q1 levels, the four-choice ε flips from −0.121 to +0.043; changing only Γ to −6.44 takes ε to +0.304. The falling pair mean supplies 70% to 77% of the total change to +0.432, depending on which input moves first. Notice also that the paper reports Anthropic’s purchaser share tripling between January and April 2026 around the February release of Claude 4.6; because that window extends past 2026Q1, it motivates usage-level study without explaining the quarterly split by itself.

Two checks of the paper’s summary statistics keep our comparison transparent. First, the paper reports that holding preferences at start-of-sample values, the probability that Claude users also pay for ChatGPT falls 83% over the sample. When we hold standalone appeals and taste spreads at 2024Q2 values and move all pair means to 2026Q1 across 4,000,000 draws, conditional OpenAI-given-Anthropic adoption falls 47.1% (MCSE 0.63 percentage points), or 36.4% (MCSE 0.62 percentage points) when only the focal pair mean moves—35.9 and 46.6 points short of 83%. Second, the paper reports an average own-price elasticity of −4.6. At the printed parameters, averaging individual elasticities across all consumers gives −4.68, whereas averaging aggregate provider-quarter elasticities gives −2.85 and adoption-weighting gives −2.10 (pricing xAI at $16 through 2024Q4 and $30 after). Without knowing which baseline or weights the paper used, we attribute no error to the authors.

What Are Crossover Goods? Why Light Users Substitute and Heavy Users Combine

The decomposition above explains how mass-market entry can push the population average down while the complementary buyer tail grows. Now let us ask the substantive economic question: why do some users treat two subscriptions as redundant substitutes while others treat the same pair as complements?

For information tools, whether two products substitute for or complement each other often depends on how heavily we use them. We call products with this property crossover goods.

Four everyday examples show how crossover goods work across different markets.

  • Consumer AI subscriptions (ChatGPT and Claude). If we send five prompts a week to summarize an email or draft a memo, either assistant covers the job. Paying $20 for a second tool duplicates what we already have, so the two subscriptions act as substitutes. If we spend four hours a day writing code, building econometric pipelines, or refereeing drafts, two things change. Through consumer learning-by-using,3 we learn each model’s strengths and divide the work4—using one model to draft code and a second model family to audit it, avoiding the self-preference bias seen when language models judge their own output.5 Heavy daily sessions also hit five-hour usage caps. As our workload expands, the second subscription flips from a redundant substitute into a complement.
  • National newspapers (The New York Times and The Wall Street Journal). If we read national news for ten minutes over breakfast, one daily subscription substitutes for the other.2 If we analyze regulatory and financial news for two hours a day, reading both papers side by side reveals how different reporting desks frame the same event.
  • Cloud infrastructure (AWS and Google Cloud). If a small startup runs a single web app, maintaining two cloud environments adds unnecessary setup overhead. If an enterprise runs large data workloads, combining both clouds lets the team pair specialized hardware, benchmark pricing, and avoid single-vendor outages.
  • Statistical and programming tools (Python and Stata). If a student writes one empirical term paper, learning a second language slows them down. If a research team runs full-time empirical projects, they combine both—running canonical panel estimators in Stata while building data pipelines and custom simulations in Python.

Classical demand theory goes back to Auspitz, Lieben, Edgeworth, and Pareto. In that tradition, two goods are substitutes when consuming more of one lowers the marginal value of the other, and complements when consuming more of one raises the marginal value of the other. Standard utility functions force that sign to stay constant everywhere. Crossover goods allow that cross-marginal value to change sign as consumption scale rises: negative at light usage, crossing zero at a threshold workload, and positive at heavy usage.

This crossover depends on usage volume, not household income. Two economists with the same salary sit on opposite sides of the crossover if one uses AI casually for travel planning and the other uses it six hours a day to build and verify code.

What Happens When Demand Models Ignore Scale: Walking Through the Simulation

What happens if the market contains crossover goods, but we estimate a card-billing demand model that assumes bundle value is independent of usage intensity?

Card statements only show whether we paid $20 a month. A standard mixed-logit bundle model therefore allows standalone brand tastes (θiA and θiB) to correlate across brands, while forcing each consumer’s bundle interaction (γi,AB) to be independent of how much they value and use AI overall.

To see how that restriction distorts estimates, we build a controlled simulation with a planted truth. Since binary choice data have no explicit usage variable, we let a consumer’s average brand appetite, θ̄i = (θiA + θiB) / 2, stand in for their usage intensity. We then build the crossover directly into the planted bundle interaction:

γi,AB = Γ0 + κθ̄i + ui,
θ̄i = (θiA + θiB)/2,   ui ∼ N(0, σu2).

With a baseline penalty of Γ0 = −2.20 and a scale slope of κ = 1.10, expected bundle value crosses zero at θ̄i = 2.0. Light users below 2.0 face a negative expected interaction (substitutes), while heavy users above 2.0 enjoy a positive expected interaction (complements), with an independent residual ui allowing individual variation around that line. If we fix κ at zero, we sever the link between usage scale and bundle value and force the remaining parameters to explain the same choices.

We can verify the planted crossover in a short Python script. Setting standalone taste correlation to ρ = 0.50 and taste standard deviations to σθ = 2.5 across six periods of price variation, we integrate over the bottom half of users (light usage intensity) and the top decile of users (heavy usage intensity), first with σu = 0 and then with σu = 1.00:

import numpy as np
from scipy.special import roots_legendre, roots_hermite, ndtri, softmax

Gamma0, kappa, rho, sigma_theta, alpha = -2.20, 1.10, .50, 2.5, .222  # planted truth
DA = np.array([-4.65, -4.35, -4.50, -4.10, -4.30, -3.95])
DB = np.array([-4.45, -4.70, -4.20, -4.40, -4.00, -4.25])
price_B = np.array([20, 22, 18, 21, 17, 20])
x, wx = roots_legendre(80)
y, wy = roots_hermite(64)
z, wz = roots_hermite(24)
y, wy, z, wz = y*np.sqrt(2), wy/np.sqrt(np.pi), z*np.sqrt(2), wz/np.sqrt(np.pi)
for sigma_u, target in [(0., (.0136, -.3157)), (1., (.0129, -.2928))]:
    recovered = []
    # Integrate over the bottom half, then the top decile, of usage intensity.
    for lo, hi in [(-10., 0.), (ndtri(.9), 10.)]:
        q = (lo+hi)/2 + (hi-lo)*x/2
        wq = (hi-lo)*wx/2*np.exp(-q*q/2)/np.sqrt(2*np.pi)
        q, t, u = np.meshgrid(q, y, z, indexing='ij')
        weights = wq[:, None, None]*wy[None, :, None]*wz[None, None, :]
        bar = sigma_theta*np.sqrt((1+rho)/2)*q
        spread = sigma_theta*np.sqrt((1-rho)/2)*t
        A, B = DA + (bar+spread)[..., None], DB + (bar-spread)[..., None]
        # Bundle value rises with overall usage intensity through kappa.
        both = A+B+Gamma0+kappa*bar[..., None]+sigma_u*u[..., None]
        p = softmax(np.stack([np.zeros_like(A), A, B, both], axis=-1), axis=-1)
        sA, sB = p[..., 1]+p[..., 3], p[..., 2]+p[..., 3]
        derivative = (-alpha*price_B*(p[..., 3]-sA*sB)).mean(axis=-1)
        recovered.append(np.sum(weights*derivative) / np.sum(weights*sA.mean(axis=-1)))
    print(f'sigma_u={sigma_u:.0f}: low half {recovered[0]:+.4f}, '
          f'top decile {recovered[1]:+.4f}')
    assert recovered[0] > 0 > recovered[1]
    assert np.allclose(recovered, target, atol=.00005)

For light users in the bottom half, the positive cross-price elasticity (+0.0136 without residual noise, and +0.0129 with σu = 1.00) reflects substitution: a higher B price shifts light users toward A. For heavy users in the top decile, the negative cross-price elasticity (−0.3157 and −0.2928) reflects complementarity: a higher B price causes heavy users to drop the bundle, reducing demand for A as well.

Next, to see how a maximum-likelihood estimator behaves on this artificial specification, we draw 30 illustrative panels of 2,500 consumers over 6 periods from our planted formula (with σu = 1.00). This uncalibrated numerical exercise has 8% to 12% of artificial consumers adopting each provider and 4% to 5% buying both, compared with 0.196% in the four-choice card model; it provides no empirical evidence about real AI consumers. In Table 2, we compare two specifications evaluated at 81 quadrature nodes per dimension: an encompassing fit that leaves κ free, and a scale-blind fit that fixes κ = 0. Here MCSE is the standard deviation across the 30 draws divided by √30.

Table 2. Illustrative numerical fits to the planted formula (controlled numerical illustration, not empirical data)
QuantityPlanted truthEncompassing fit (κ free)Scale-blind fit (κ = 0)
Scale slope κ+1.1000+1.1130MCSE 0.02570.0000fixed
Taste correlation ρ+0.5000+0.5036MCSE 0.0075+0.5580MCSE 0.0070
Bundle intercept Γ₀-2.2000-2.3075MCSE 0.0819+0.6025MCSE 0.0453
Independent bundle SD σu+1.0000+0.9246MCSE 0.1286+1.9217MCSE 0.0626
Low-half cross-price ε+0.0129+0.0128MCSE 0.0007-0.1378MCSE 0.0111
Top-decile cross-price ε-0.2928-0.2790MCSE 0.0081-0.1355MCSE 0.0071
Overall cross-price ε-0.2112-0.2059MCSE 0.0035-0.2867MCSE 0.0040

In Table 2, we must read both specifications alongside the numerical and boundary limits shown in Figures 6 and 7. At the 81-node grid, the encompassing specification averages +1.1130 for the slope (near the planted +1.1000, with individual panels ranging from 0.80 to 1.44 and residual spread from 0.00 to 2.29), and gives light users (+0.0128) and heavy users (−0.2790) opposite signs.

When we fix κ at zero in this 81-node example, the restricted fit cannot attribute joint purchases among high-taste draws to the slope. Instead, it raises fitted brand correlation from 0.5000 to 0.5580 (0.565 when σu = 0) and fitted σu from 1.0000 to 1.9217. It also shifts the fitted bundle intercept from −2.2000 to +0.6025 (+0.7319 when σu = 0, and +1.1844 under a homogeneous specification that also fixes σu = 0). In this toy example, that positive constant moves the low-half cross-price elasticity from +0.0129 to −0.1378 (or −0.0877 without residual noise) and moves the overall elasticity from −0.2112 to −0.2867 (a 36% difference). Because the numerical stability check below fails and this toy design leaves real market shares uncalibrated, these shifts merely illustrate how omitted covariance can move fitted parameters in a toy setting, not a decisive or empirical result.

Reference fit paths in the scale-dependent bundle simulation show how fitted independent bundle dispersion varies across quadrature orders. Original reference Q13 encompassing best independent SD 1.119; Original reference Q81 encompassing best independent SD 0.5034; Original reference Q13 Eq (17) best independent SD 1.716; Original reference Q81 Eq (17) best independent SD 1.611; Amended reference Q13 encompassing best independent SD 0.0003644; Amended reference Q21 encompassing best independent SD 0.7368; Amended reference Q31 encompassing best independent SD 0.3878; Amended reference Q41 encompassing best independent SD 0.5134; Amended reference Q61 encompassing best independent SD 0.5094; Amended reference Q81 encompassing best independent SD 0.5106; Amended reference Q13 Eq (17) best independent SD 1.244; Amended reference Q21 Eq (17) best independent SD 1.198; Amended reference Q31 Eq (17) best independent SD 1.200; Amended reference Q41 Eq (17) best independent SD 1.199; Amended reference Q61 Eq (17) best independent SD 1.199; Amended reference Q81 Eq (17) best independent SD 1.199; Amended replication reference Q13 encompassing best independent SD 0.2588; Amended replication reference Q81 encompassing best independent SD 0.002753; Amended replication reference Q13 Eq (17) best independent SD 1.319; Amended replication reference Q81 Eq (17) best independent SD 1.254.
Across three reference panels (one without residual noise and two with σu = 1.0 from the lower end of Table 2’s 30-panel spread), fitted independent bundle dispersion shifts across integration orders Q13 to Q81 and optimizer starting points (dispersed, negative slope, and neutral) when estimating two bundle variance terms from binary choices alone.
Local profile log-likelihood losses across fixed independent bundle dispersion show flat near-zero curvature in the encompassing fit. Original reference Q13 encompassing profile endpoint SD 0.0 loss 1.563; Original reference Q13 encompassing profile endpoint SD 6.0 loss 63.13; Original reference Q13 Eq (17) profile endpoint SD 0.0 loss 11.81; Original reference Q13 Eq (17) profile endpoint SD 6.0 loss 69.12; Original reference Q81 encompassing profile endpoint SD 0.0 loss 0.03792; Original reference Q81 encompassing profile endpoint SD 6.0 loss 66.26; Original reference Q81 Eq (17) profile endpoint SD 0.0 loss 9.422; Original reference Q81 Eq (17) profile endpoint SD 6.0 loss 75.16; Amended reference Q13 encompassing profile endpoint SD 0.0 loss 0.000; Amended reference Q13 encompassing profile endpoint SD 6.0 loss 96.32; Amended reference Q13 Eq (17) profile endpoint SD 0.0 loss 5.566; Amended reference Q13 Eq (17) profile endpoint SD 6.0 loss 106.2; Amended reference Q81 encompassing profile endpoint SD 0.0 loss 0.07523; Amended reference Q81 encompassing profile endpoint SD 6.0 loss 93.41; Amended reference Q81 Eq (17) profile endpoint SD 0.0 loss 4.328; Amended reference Q81 Eq (17) profile endpoint SD 6.0 loss 110.6; Amended replication reference Q13 encompassing profile endpoint SD 0.0 loss 0.02370; Amended replication reference Q13 encompassing profile endpoint SD 6.0 loss 90.19; Amended replication reference Q13 Eq (17) profile endpoint SD 0.0 loss 7.261; Amended replication reference Q13 Eq (17) profile endpoint SD 6.0 loss 99.00; Amended replication reference Q81 encompassing profile endpoint SD 0.0 loss 0.000; Amended replication reference Q81 encompassing profile endpoint SD 6.0 loss 88.34; Amended replication reference Q81 Eq (17) profile endpoint SD 0.0 loss 4.149; Amended replication reference Q81 Eq (17) profile endpoint SD 6.0 loss 102.4.
Fixing residual variance (σu) across a grid from 0.0 to 6.0 reveals a shallow likelihood trough near the zero boundary when we estimate the scale slope freely, whereas fixing the slope at zero produces a steep interior minimum across Q13 and Q81 quadrature grids.

Figures 6 and 7 show why we must not treat the 30-panel fits or naive hypothesis tests as decisive evidence. The preset stability rule requires parameter estimates on three reference panels to stay within 0.01 across integration orders (Q13 to Q81) and optimizer starts. That 0.01 rule fails because the binary-choice likelihood surface trading off κ against σu is relatively flat. Across the 30 panels, estimates shift with the quadrature grid and starting values, producing 6 near-zero σu fits and 5 active boundary constraints. When variance parameters hit or approach the zero boundary, standard regularity conditions fail. Valid inference then requires boundary-corrected mixture distributions (such as χ̄2 or parametric bootstrap) rather than standard Wald or regular likelihood-ratio tables. Unadjusted 5% Wald calculations cross the nominal threshold in 30 of 30 panels, and regular likelihood-ratio calculations do so in the 25 interior panels (while 30 null panels with planted κ = 0 and σu = 1.50 average 0.0161 with MCSE 0.0313 and 0 nominal rejections). Even so, those unadjusted counts do not provide valid statistical evidence under boundary and quadrature instability. That fragility reinforces our methodological lesson: rather than trying to infer scale-dependent complementarity from binary card-billing choices alone, researchers need direct usage and capacity variation.

Cross-Family Verification vs. Rate-Limit Overflow: The Limits of Card Data

If binary card-billing data cannot observe usage scale, what empirical designs can test whether AI subscriptions are crossover goods—and separate workflow complementarity from hitting message caps?6,7

Two practical tests give us the variation that monthly billing statements lack.

First, we can link subscription billing to pre-period usage intensity. Measuring monthly token counts, active coding hours, or prompt volume before a price change lets us compare how different usage strata respond. If two subscriptions are crossover goods, a price increase at Provider B pushes light pre-period users to drop B and switch to Provider A (a positive cross-price elasticity, substitutes). Among heavy users, that fee hike triggers bundle cancellations and cuts demand for A as well, producing a negative response that signals complements.

Second, we can use rate-limit expansions to separate two very different reasons why heavy users buy both subscriptions. Under cross-family verification, generating more code or arguments with our primary model creates more output that we want to check with a second model family. Under rate-limit overflow, hitting a five-hour message cap on our primary tool pushes us to keep a second $20 subscription as backup capacity.

Without a change in message caps or a direct usage log, both stories can produce the exact same baseline subscription probabilities. We make that equivalence explicit in our simulation by writing h = max(θ̄, 0) for positive usage intensity and comparing how bundle value responds when the primary provider multiplies its message cap by c:

h = max(θ̄, 0),   f = Γ0 + κ min(θ̄, 0),
gA(c) = f + κh(1 + 0.25 log c),
gB(c) = f + κ max(h − log c, 0).

At baseline capacity (c = 1), the probability gap between verification (gA) and overflow (gB) is 0.0. When the primary provider expands its message cap while keeping the $20 price fixed, the two functions move in opposite directions, as Figure 8 shows.

  • Pure cross-family verification: Expanding primary capacity by 5x and 20x raises top-decile second-provider adoption by +0.1588 and +0.2763, because higher primary throughput generates more output to audit.
  • Pure rate-limit overflow: Multiplying the message cap by 5x and 20x lowers heavy-user backup subscriptions by −0.1374 and −0.2045, because the first tool now absorbs prompts that previously spilled over.
  • Equal-weight mixture: Averaging the two interaction functions before choice (using our illustrative 0.25 verification slope) yields small net changes of −0.0068 at 5x capacity and −0.0117 at 20x capacity.
Capacity responses in the scale-dependent bundle simulation show opposite adoption changes across verification and overflow scenarios. Pure verification adoption change at capacity 1.0x 0.000; Pure verification adoption change at capacity 5.0x 0.1588; Pure verification adoption change at capacity 20.0x 0.2763; Pure overflow adoption change at capacity 1.0x 0.000; Pure overflow adoption change at capacity 5.0x (negative) magnitude 0.1374; Pure overflow adoption change at capacity 20.0x (negative) magnitude 0.2045; Equal-weight mixture adoption change at capacity 1.0x 0.000; Equal-weight mixture adoption change at capacity 5.0x (negative) magnitude 0.006817; Equal-weight mixture adoption change at capacity 20.0x (negative) magnitude 0.01171.
In the scale-dependent simulation, 5x and 20x primary-provider capacity expansions move top-decile second-provider adoption upward under cross-family verification (+0.1588 and +0.2763), downward under rate-limit overflow (−0.1374 and −0.2045), and stay nearly flat under an equal-weight mixture (−0.0068 and −0.0117).

If we treat every small dip after a cap increase as pure overflow, we miss how verification can offset rate-limit relief. A nearly flat aggregate response can hide strong cross-family verification balancing out backup-capacity drops. Pairing cap expansions with session-level usage logs—such as whether prompts go to both models within the same coding session or only after a rate-limit warning—lets us separate the two mechanisms cleanly.

What to Check Next

  1. Check the buyer tail alongside the population mean. If we report only the population mean (Γ = −6.44), we miss the people who actually buy the bundle. With a 5.08 spread in pair tastes, selection into buying the ChatGPT–Claude pair flips the buyer mean to +2.55 in the four-choice check and +2.77 in the eleven-choice market, with roughly 75% of pair buyers gaining positive net value.
  2. Split the price response before diagnosing bundle decay. If we track positive and nonpositive net-interaction consumers separately, we see that the positive contribution grew 59.5% from 2024Q2 to 2026Q1, while an 8.17-fold expansion in the nonpositive group and a 4.10-fold rise in Anthropic adoption tipped the aggregate cross-price elasticity from −0.121 to +0.432.
  3. Test for crossover goods with usage strata and capacity shifters. In our numerical illustration, fixing the scale slope at zero shifts the fitted brand correlation, bundle intercept, and light-user elasticity sign. Linking billing panels to pre-period usage quantiles and rate-cap changes lets us test the usage crossover directly without relying on binary choices alone.

References

  1. Egan, Mark L., Dominic Russel, Claire Shi and Vincent Yao. Competition in Generative AI: Evidence from Consumer Demand. 2026. NBER Working Paper No. 35953. Table 3 of this study supplies the published preference parameters.
  2. Gentzkow, Matthew. Valuing New Goods in a Model with Complementarity: Online Newspapers. 2007. American Economic Review 97(3), 713-744.
  3. Rosenberg, Nathan. Learning by using, in Inside the Black Box: Technology and Economics. Cambridge University Press; original book 1982; indexed chapter record 1983, pp. 120-140.
  4. Becker, Gary S. and Kevin M. Murphy. The Division of Labor, Coordination Costs, and Knowledge. 1992. The Quarterly Journal of Economics 107(4), 1137-1160.
  5. Panickssery, Arjun, Samuel R. Bowman and Shi Feng. LLM Evaluators Recognize and Favor Their Own Generations. 2024. Advances in Neural Information Processing Systems 37, 68772-68802.
  6. Hendel, Igal. Estimating Multiple-Discrete Choice Models: An Application to Computerization Returns. 1999. Review of Economic Studies 66(2), 423-446.
  7. Dubé, Jean-Pierre. Multiple Discreteness and Product Differentiation: Demand for Carbonated Soft Drinks. 2004. Marketing Science 23(1), 66-81.

Replication and Data

All calculations, simulation outputs, and figure scripts for this article live in the companion replication repository. The repository includes the transcribed Table 3 parameter inputs, standalone Python scripts that reproduce the selection integrals, eight-quarter derivative decompositions, and 30-panel scale-dependent demand simulations using NumPy and SciPy, and the figure generation pipeline.