Markets: A Rigorous Course

6A.2 Earnings surprises and post-earnings-announcement drift

Core about 35 min

Motivation

If prices fully reflected earnings news on the announcement day, there would be nothing to do after it. Fifty years of evidence say that, at least historically and in many markets, prices continue to move in the direction of the surprise for weeks. This is post-earnings-announcement drift (PEAD), one of the most replicated anomalies in finance, and the cleanest example of underreaction.

Reading guide

The definitions, the evidence (with its Indian caveats) and the event-study primer below are for every reader. The proofs of Propositions 6A.2–6A.4 are advanced and can be skipped on a first reading; keep the statements.

Setup

Let EqE_q be EPS for fiscal quarter qq. Indian earnings are seasonal (festive-season quarters, monsoon-driven rural demand, March-quarter book closing), so the natural comparison is with the same quarter last year.

Definition 6A.1SUE, seasonal random walk with drift

Let dq=Eq−Eq−4d_q = E_q - E_{q-4} be the seasonal difference. Using the previous ww seasonal differences dq−w,…,dq−1d_{q-w}, \dots, d_{q-1} (studies use between 8 and 20 quarters; the code default is w=8w = 8), let δ^q\hat\delta_q be their mean and s^q\hat s_q their sample standard deviation. Then

SUEq=dq−δ^qs^q.(6A.1)\text{SUE}_q = \frac{d_q - \hat\delta_q}{\hat s_q}. \tag{6A.1}

The expectation model is Eq−1[Eq]=Eq−4+δ^q\mathbb E_{q-1}[E_q] = E_{q-4} + \hat\delta_q: last year's same-quarter EPS plus the usual year-on-year change. Two alternatives are common. The analyst surprise replaces Eq−4+δ^qE_{q-4} + \hat\delta_q with the consensus forecast and scales by price; in India, consensus coverage is thin outside the top 200 or so stocks and the published consensus mixes stale forecasts. The earnings announcement return (EAR) skips the accounting model altogether and uses the abnormal return over [−1,+1][-1, +1] as the measure of surprise. EAR captures revenue, margins and guidance, which EPS alone misses.

Worked example

A consumer company reports quarterly EPS (₹) of 8.0, 8.4, 9.1, 9.6 (FY24), 8.6, 9.5, 9.9, 10.6 (FY25) and 9.8, 10.2, 11.3, 12.4 (FY26). The seasonal differences from FY25 Q1 onward are 0.6, 1.1, 0.8, 1.0, 1.2, 0.7, 1.4, 1.8. For FY26 Q4 the seven previous differences have mean 0.971 and standard deviation 0.287, so SUE=(1.8−0.971)/0.287=2.89\text{SUE} = (1.8 - 0.971)/0.287 = 2.89: a large positive surprise. (Problem 6A.1 asks for FY26 Q3 as well; m06a_pead.sue does both.)

The evidence

  • Ball and Brown (1968) first showed that returns after the announcement continue in the direction of the earnings news.
  • Bernard and Thomas (1989) sorted US firms into SUE deciles each quarter over 1974–1985. The long-extreme-good, short-extreme-bad portfolio earned a positive abnormal return over the following 60 trading days in most quarters; secondary summaries of their Table 1 put the 60-day spread at about 4.2% and positive in 41 of 48 quarters1. They argued that the drift is a delayed response, not a risk premium, because it does not line up with any identifiable risk.
  • Bernard and Thomas (1990) found the mechanism: seasonal differences of quarterly earnings are positively autocorrelated at lags 1–3 and negatively at lag 4, and a disproportionate share of the drift arrives in the days around the next announcements, with signs matching those autocorrelations. Prices behave as if investors forecast with a seasonal random walk, ignoring the autocorrelation.
  • Later work explains persistence by limits to arbitrage and inattention. Mendenhall (2004) finds the drift larger where idiosyncratic risk makes arbitrage expensive. DellaVigna and Pollet (2009) find weaker immediate responses and stronger drift for Friday announcements. Hirshleifer, Lim and Teoh (2009) find the same on days with many competing announcements.
  • The US drift has weakened sharply. Martineau (2022, "Rest in peace post-earnings announcement drift") argues it has largely disappeared in recent US data, especially for larger stocks. Treat PEAD as a well-documented historical regularity whose current size must be measured, not assumed.

India The evidence is mixed and comes from small samples. An IIM Bangalore working paper (Agarwal and Sridharan, 2013) reports drift in NSE stocks over 120 days, together with pre-announcement movement. Gupta and Dhusia (2021, Trends in Economics and Management, 100 NSE firms, 2014–2018) conclude that prices are efficient with respect to earnings announcements in their sample. A dissertation on BSE 500 firms (FY2007–2012) finds drift after bad news but not after good news [all S: abstracts only]. There is no large, survivorship-free Indian PEAD study with SUE deciles comparable to Bernard–Thomas in the sources checked here. Replicating one is a good research exercise (Problem 6A.3 and m06a_pead.py).

Proposition 6A.2naive expectations produce predictable announcement returns

Suppose demeaned seasonal differences follow d~q+1=ϕ d~q+ηq+1\tilde d_{q+1} = \phi\,\tilde d_q + \eta_{q+1} with η\eta independent of the past, while the price at each announcement reacts as if investors expected d~q+1=0\tilde d_{q+1} = 0, moving by c d~q+1c\,\tilde d_{q+1} (an earnings response coefficient c>0c > 0, with d~\tilde d scaled by s^\hat s so that d~q=SUEq\tilde d_q = \text{SUE}_q). Then the expected return at the next announcement, conditional on today's surprise, is

E[ rq+1ann∣SUEq ]=c ϕ SUEq,(6A.2)\mathbb E[\,r_{q+1}^{ann} \mid \text{SUE}_q\,] = c\,\phi\,\text{SUE}_q, \tag{6A.2}

and, more generally, at the announcement kk quarters ahead it is c ρk SUEqc\,\rho_k\,\text{SUE}_q, where ρk\rho_k is the lag-kk autocorrelation of the true process.

Proof

At announcement q+1q+1 the market's surprise is the realised d~q+1\tilde d_{q+1} minus the naive expectation 0, so the price moves by c d~q+1c\,\tilde d_{q+1}. Conditional on information at qq, E[d~q+1∣d~q]=ϕ d~q\mathbb E[\tilde d_{q+1} \mid \tilde d_q] = \phi\,\tilde d_q because η\eta has mean zero. For lag kk with a general stationary process, the linear projection of d~q+k\tilde d_{q+k} on d~q\tilde d_q is ρk d~q\rho_k\,\tilde d_q (unit variance).∎

A rational investor who knew ϕ\phi would already have moved the price by cϕ SUEqc\phi\,\text{SUE}_q on day 0, leaving nothing predictable. The drift is the gap between the naive and the correct forecast. With cc = 1.5% per unit SUE and ϕ\phi = 0.35, the next announcement carries 0.53% per unit SUE, about ±0.92% for the extreme deciles (Problem 6A.2).

Proposition 6A.3extreme-group spread under normal surprises

If SUE∼N(0,1)\text{SUE} \sim N(0, 1) across firms and the post-event CAR(1,H)CAR(1, H) satisfies E[CAR∣SUE]=λ SUE\mathbb E[CAR \mid \text{SUE}] = \lambda\,\text{SUE}, then the top-minus-bottom group spread for nn equal-probability groups is

E[CAR∣top]−E[CAR∣bottom]=λ⋅2φ(z1−1/n)1/n,(6A.3)\mathbb E[CAR \mid \text{top}] - \mathbb E[CAR \mid \text{bottom}] = \lambda \cdot \frac{2\varphi(z_{1-1/n})}{1/n}, \tag{6A.3}

where φ\varphi is the standard normal density and z1−1/nz_{1-1/n} the (1−1/n)(1-1/n) quantile. For deciles the multiplier is 3.510; for quintiles 2.800.

Proof

For Z∼N(0,1)Z \sim N(0,1) and threshold cc, E[Z∣Z>c]=∫c∞zφ(z) dz/P(Z>c)=φ(c)/P(Z>c)\mathbb E[Z \mid Z > c] = \int_c^\infty z\varphi(z)\,dz / P(Z > c) = \varphi(c)/P(Z > c), because φ′(z)=−zφ(z)\varphi'(z) = -z\varphi(z). With c=z1−1/nc = z_{1-1/n}, P(Z>c)=1/nP(Z > c) = 1/n. By symmetry the bottom group has mean −φ(c) n-\varphi(c)\,n. Multiply the difference of conditional means by λ\lambda using the tower property.∎

So a decile spread of 4.2% corresponds to λ≈1.2%\lambda \approx 1.2\% of drift per unit of SUE. The synthetic panel in m06a_pead.py injects exactly this and checks that your estimator recovers it.

Measuring the reaction: an event-study primer#

Every statement about how prices react to results ("the stock fell 6% on the numbers", "PEAD is 4% over 60 days") is a comparison with what the stock would have done anyway. This primer gives the machinery used in the rest of the module. M12 · 12.1–12.3 later extends it (multi-event standardised tests, event-induced variance, geopolitical events) and refers back here.

Windows Index trading days by event time τ\tau, with τ=0\tau = 0 the first session in which the market could trade on the news (6A.1). The estimation window τ∈[T0+1,T1]\tau \in [T_0 + 1, T_1] has length L1L_1, for example [−250,−11][-250, -11] with L1=240L_1 = 240. The event window [T1+1,T2][T_1 + 1, T_2] has length L2L_2, for example [0,+1][0, +1] for a release plus its concall. The gap keeps pre-announcement leakage out of the benchmark.

Market model and abnormal returns For stock ii and a market proxy mm (the Nifty 50, or the sector index when the question is "beyond the sector"),

Riτ=αi+βiRmτ+εiτ,εiτ∼iidN(0,σi2) given market returns.R_{i\tau} = \alpha_i + \beta_i R_{m\tau} + \varepsilon_{i\tau}, \qquad \varepsilon_{i\tau} \overset{iid}{\sim} N(0, \sigma_i^2) \ \text{given market returns}.

Let XX be the L1×2L_1 \times 2 estimation-window matrix with rows (1,Rmτ)(1, R_{m\tau}) and RiR_i the vector of stock returns. OLS gives θ^i=(α^i,β^i)′=(X′X)−1X′Ri\hat\theta_i = (\hat\alpha_i, \hat\beta_i)' = (X'X)^{-1}X'R_i and σ^i2=∥Ri−Xθ^i∥2/(L1−2)\hat\sigma_i^2 = \lVert R_i - X\hat\theta_i\rVert^2/(L_1 - 2). In the event window, with regressor matrix X∗X^* and return vector Ri∗R_i^*,

ARi∗=Ri∗−X∗θ^i,CARi=γ′ARi∗,AR_i^* = R_i^* - X^*\hat\theta_i, \qquad CAR_i = \gamma' AR_i^*,

where γ\gamma is the L2L_2-vector of ones (or of ones on a sub-window). The market-adjusted return Riτ−RmτR_{i\tau} - R_{m\tau} is the special case α=0\alpha = 0, β=1\beta = 1 with nothing estimated.

Proposition 6A.4distribution and tt-test of a CAR

Suppose that under the null of no event effect the market model also holds in the event window. Then

CARi∼N ⁣(0, σi2vi),vi=L2+γ′X∗(X′X)−1X∗′γ,ti=CARiσ^ivi∼tL1−2.(6A.4)CAR_i \sim N\!\big(0,\ \sigma_i^2 v_i\big), \quad v_i = L_2 + \gamma' X^*(X'X)^{-1}X^{*\prime}\gamma, \qquad t_i = \frac{CAR_i}{\hat\sigma_i\sqrt{v_i}} \sim t_{L_1 - 2}. \tag{6A.4}

For a one-day window the variance factor is vi=1+1/L1+(Rmτ−Rˉm)2/∑s(Rms−Rˉm)2v_i = 1 + 1/L_1 + (R_{m\tau} - \bar R_m)^2/\sum_s (R_{ms} - \bar R_m)^2.

Proof

Under the null, Ri∗=X∗θi+εi∗R_i^* = X^*\theta_i + \varepsilon_i^* and θ^i−θi=(X′X)−1X′εi\hat\theta_i - \theta_i = (X'X)^{-1}X'\varepsilon_i, so ARi∗=εi∗−X∗(X′X)−1X′εiAR_i^* = \varepsilon_i^* - X^*(X'X)^{-1}X'\varepsilon_i: today's noise minus the estimation error of the benchmark. The two windows do not overlap, so εi∗\varepsilon_i^* and εi\varepsilon_i are independent normal vectors, and ARi∗AR_i^* is normal with mean zero and covariance σi2I+X∗(X′X)−1X′(σi2I)X(X′X)−1X∗′=σi2[I+X∗(X′X)−1X∗′]\sigma_i^2 I + X^*(X'X)^{-1}X'(\sigma_i^2 I)X(X'X)^{-1}X^{*\prime} = \sigma_i^2[I + X^*(X'X)^{-1}X^{*\prime}]. Pre- and post-multiplying by γ\gamma gives the variance of CARiCAR_i. For the studentisation, the residual vector is MεiM\varepsilon_i with M=I−X(X′X)−1X′M = I - X(X'X)^{-1}X' idempotent of rank L1−2L_1 - 2, so (L1−2)σ^i2/σi2∼χL1−22(L_1 - 2)\hat\sigma_i^2/\sigma_i^2 \sim \chi^2_{L_1-2}. Since MX=0MX = 0, MεiM\varepsilon_i is uncorrelated with, hence (jointly normal) independent of, (X′X)−1X′εi(X'X)^{-1}X'\varepsilon_i, and it is independent of εi∗\varepsilon_i^*. So CARi/(σivi)∼N(0,1)CAR_i/(\sigma_i\sqrt{v_i}) \sim N(0,1) is independent of σ^i2\hat\sigma_i^2, and the ratio is tL1−2t_{L_1-2} by definition. The one-day factor is the (τ,τ)(\tau,\tau) element of I+X∗(X′X)−1X∗′I + X^*(X'X)^{-1}X^{*\prime}, using the explicit inverse of the 2×22\times2 moment matrix.∎

The estimation-error term is small (1/L11/L_1) unless the market itself moved a lot on the event day, so the quick version t≈AR0/σ^it \approx AR_0/\hat\sigma_i is usually adequate for one stock (Solution 6A.18(c) uses it). With L1=240L_1 = 240 the 5% two-sided critical value of t238t_{238} is 1.970.

Many announcements For NN results events, average the CARs: CAR‾=N−1∑iCARi\overline{CAR} = N^{-1}\sum_i CAR_i. If the events were independent, Var⁡(CAR‾)=N−2∑iσi2vi\operatorname{Var}(\overline{CAR}) = N^{-2}\sum_i \sigma_i^2 v_i. The cross-sectional tt, CAR‾/(sCAR/N)\overline{CAR}/(s_{CAR}/\sqrt N) with sCARs_{CAR} the sample standard deviation of the CARiCAR_i, is robust to results days being more volatile than estimation days. Results seasons, however, cluster in calendar time: a sector reports within the same fortnight, so abnormal returns are correlated. With common variance σ2\sigma^2 and average pairwise correlation ρˉ\bar\rho,

Var⁡(1N∑iARi)=σ2N[1+(N−1)ρˉ],\operatorname{Var}\Big(\frac1N\sum_i AR_i\Big) = \frac{\sigma^2}{N}\big[1 + (N - 1)\bar\rho\big],

so a test that assumes independence overstates tt by the factor 1+(N−1)ρˉ\sqrt{1 + (N-1)\bar\rho}: with N=100N = 100 and ρˉ=0.05\bar\rho = 0.05 that is 2.4. The standard remedy is a calendar-time portfolio: each day, average the abnormal returns of all stocks inside their event windows, then test the mean of that daily series with its own time-series standard error.

Measuring drift properly Use market-model or characteristic-matched abnormal returns as above; τ=0\tau = 0 from exchange timestamps; SUE computed only from information available before the announcement; groups formed using breakpoints from the cross-section of that quarter; calendar-time portfolios for the standard error; and buy-and-hold rather than summed returns when moves are large (6A.13.4).

Practitioner notes

  • The tradable version is a long–short portfolio formed a day or two after announcements, held 60 trading days. In India the short leg exists only for F&O stocks (single-stock futures) or via SLB (securities lending and borrowing), both thin outside large caps. Long-only versions, overweighting positive-SUE stocks within a benchmark, are more practical.
  • Drift is larger in small, illiquid, lightly covered stocks, which are also where the costs of M05 are highest. A gross drift of 3–4% over a quarter can disappear in round-trip costs on a small cap.
  • The concall matters more than the EPS line in many Indian cases: guidance cuts after an EPS beat are common. EAR-based surprise measures capture this.

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.