Market Structure Analysis - IIA, Nested Logit and Choice Maps (Concept Note)

Summary

Market structure analysis asks who competes with whom. The multinomial logit’s independence of irrelevant alternatives (IIA) forces proportional substitution, so deviations from IIA are the signal of structure. Tools: switching matrices and switching lift, nested logit (hierarchies by form, brand or tier), latent-class segments, and low-rank “choice map” factor models of brand utilities (Elrod’s Choice Map; the factor-analytic probit). Aggregation caveat: Allenby & Rossi (1991) argued that the logit with heterogeneity and a flexible demand specification does not necessarily suffer “aggregation bias”. Concept note, no raw source; the original Allenby & Rossi paper has no legal open copy, so substitute reading is Elrod & Keane (1995).

Overview

Data of interest (E84 margarine scanner panel: 516 households, 4,470 purchases of 10 products with all shelf prices; E85 cereal purchase-incidence data: household x brand 0/1 with activity and demographics). Questions: which brands are substitutes, which hierarchy (form, brand, tier) organises choice, and how to draw a map where distance reflects competition.

Main Content

IIA and its testable implication

In multinomial logit, does not depend on the other alternatives. Removing or repricing brand therefore redistributes its share to the others in proportion to their shares: diversion to equals . Observed diversion that exceeds this for similar brands is an IIA violation and evidence of structure.

Switching matrix and switching lift

Count transitions between consecutive purchases: . Switching lift compares the observed share of next purchases going to after with ‘s overall share. Under no state dependence and IIA, lift is 1; diagonal lift above 1 means loyalty or inertia; off-diagonal blocks above 1 mean substitutes.

Nested logit

Alternatives are partitioned into nests . for ; is the within-nest dissimilarity (correlation roughly ); recovers multinomial logit (IIA); smaller means closer substitutes within the nest. Competing hierarchies (nest by form, by brand, by tier) are compared on held-out purchases: the hierarchy with the best predictive log-score is the one consumers use (E84’s tests).

Choice maps from factor-structured utilities

with household loadings on brand attributes (Elrod’s Choice Map; the probit version in Elrod and Keane 1995 - Factor-Analytic Probit Model Specification). Distance between and in the map reflects closeness of competition. For purchase incidence (0/1) the Bernoulli-logit analogue is with household activity/volume control (E85). A naive map’s first axis is often volume (heavy buyers buy everything), so control for household purchase activity first - co-purchase lift is confounded by volume.

Aggregation and the Allenby-Rossi point (stated as in the literature, verify)

Allenby & Rossi (1991), “There is no aggregation bias: why macro logit models work” (Journal of Business & Economic Statistics 9(1)), argue that macro (aggregate) logit models are consistent with micro behaviour when heterogeneity is modelled through flexible functions of price and covariates; the vault does not hold the PDF, so treat the details as unverified recall.

Examples

Proportional diversion vs structured diversion

Setup. Four brands, equal 25% share; brands 0 and 1 are close substitutes (a one-factor probit with loadings and unique variance 1). Solution. Remove brand 0. IIA predicts each; the factor probit gives for brands 1, 2, 3 (simulated in the Elrod & Keane specification note). Interpretation. Brand 1 gains 39% vs 33%: diversion ratio is an IIA-violation fingerprint of market structure.

import numpy as np
# switching matrix and lift from a purchase sequence per household
def switching_lift(seqs, J):
    S = np.zeros((J, J))
    for s in seqs:
        for a, b in zip(s[:-1], s[1:]): S[a, b] += 1
    share = np.bincount(np.concatenate(seqs), minlength=J)/sum(len(s) for s in seqs)
    return (S/S.sum(1, keepdims=True))/share[None, :]
rng = np.random.default_rng(0)
seqs = [rng.choice(4, size=12, p=[.4, .3, .2, .1]) for _ in range(500)]
print(switching_lift(seqs, 4).round(2))                 # all about 1.0 under IIA with no state dependence

PyMC-style Bernoulli-logit factor sketch for E85 (untested): L = pm.Normal("L", 0, 1, shape=(J, M)), w = pm.Normal("w", 0, 1, shape=(H, M)), logit_p = beta[None, :] + gamma*activity[:, None] + w @ L.T; identify rotation by constraining L lower-triangular with positive diagonal (or centred-loading prior); use held-out wave log-score to choose .

Relevance to marketing measurement

Cross-elasticity structure drives promotion cannibalisation, price-war exposure and assortment decisions, and belongs in any MMM that models brand-level sales jointly. IIA-based predictions systematically over-state diversion to dissimilar brands. See the BLP-style continuous-heterogeneity approach in Random Coefficients Logit Model.

Connections

See Also

Elrod and Keane 1995 - Factor-Analytic Probit Market Structure - Overview