Why this topic matters now
Fare equity analysis has a blind spot: it treats price sensitivity as a steady slope. Most models assume that if you raise the fare by ten percent, ridership drops by roughly the same proportion across all riders. Practitioners know this is wrong, yet standard tools—log-log regressions, linear elasticities, even many machine learning fare models—still smooth out the jagged edges where real equity problems live.
The littoral gradient is a different metaphor. Imagine a shoreline where waves break differently over sand, rock, and tide pools. A single "average wave height" tells you nothing about where the water actually reaches. Similarly, a single elasticity coefficient hides the zones where fare changes hurt most: the low-income commuter who has no schedule flexibility, the shift worker whose trip cannot shift to off-peak, the rider whose monthly transport budget is already stretched to a fixed percentage of income.
We are seeing more agencies move toward income-based fare capping, means-tested passes, and zone-based pricing. These policies explicitly target equity, but they rely on elasticity estimates that were never designed to answer equity questions. A model that tells you overall ridership will drop three percent is useless if the drop is concentrated among riders who can least afford an alternative. This article is for analysts and planners who already understand basic elasticity concepts and need a sharper tool—one that captures how price sensitivity changes along the income and time dimensions simultaneously.
The stakes are not theoretical. Many industry surveys suggest that fare changes in the past decade have disproportionately affected low-income and transit-dependent riders, even when overall ridership losses appeared modest. Those losses are hidden by aggregate elasticities. The littoral gradient approach surfaces them.
What the littoral gradient adds
Standard elasticity models assume a single, continuous relationship between price and demand. The littoral gradient breaks that assumption into three layers: baseline elasticity (what a typical rider would do), income-sensitive elasticity (how that changes for different budget constraints), and temporal elasticity (how peak versus off-peak changes the available alternatives). Each layer interacts with the others, creating a surface—not a line.
This matters because equity policy is about who pays and who benefits. A flat elasticity model cannot distinguish between a rider who switches to a cheaper mode and a rider who simply cannot afford to ride anymore. The wave-driven approach flags those zones where the gradient steepens unexpectedly. Those are the equity hotspots.
Core idea in plain language
The littoral fare gradient is a way of modeling demand that lets elasticity vary across two critical dimensions: income and time. Instead of asking "What is the elasticity of demand for transit?" it asks "For a rider in this income bracket, at this time of day, how sensitive is their trip to a fare change?" That is a fundamentally different question, and it requires a different modeling strategy.
Think of the traditional approach as a single wave rolling toward shore. The littoral approach is a set of wave trains, each with its own height, frequency, and break point. The interaction between those waves creates the actual shoreline—the places where water reaches higher or recedes faster. In fare terms, the interaction between income elasticity and time-of-day elasticity creates the actual ridership response, and that response is rarely uniform.
Here is the mechanism in simple terms: a rider with a low income and a fixed work schedule has very few alternatives. Their elasticity is low—they will pay more before they stop riding. A rider with a higher income and flexible timing has more options—they can shift to off-peak, take a different mode, or even work from home. Their elasticity is higher. But those two effects are not additive in a simple way. A low-income rider who can shift to off-peak (because their job allows it) has a very different response than a low-income rider who cannot. The littoral gradient captures that interaction by modeling elasticity as a surface over income and time, not as a single number or even a set of segment averages.
Teams often find this approach more intuitive than traditional log-log models once they see the output. Instead of a table of coefficients, you get a contour map that shows where the gradient is steep and where it is flat. The steep areas are the equity risk zones: a small fare increase there causes a large change in behavior, and that change is often involuntary (mode shift to slower, less safe options, or trip suppression).
How it differs from segmented models
You might think this is just market segmentation with better labels, but the difference is structural. A segmented model divides riders into groups (by income, by trip purpose) and estimates a separate elasticity for each group. That is an improvement over a single elasticity, but it still assumes that within each group, elasticity is constant. The littoral gradient does not assume constant elasticity within any group. It allows elasticity to vary continuously along income and time dimensions, and it explicitly models the interaction between those dimensions.
For example, a segmented model might say: low-income peak riders have elasticity -0.3, low-income off-peak riders have -0.5. The littoral gradient would show that the transition from -0.3 to -0.5 is not a clean step; it is a gradient that changes slope depending on the exact income level and the exact time window. A rider at 50% of median income at 7:30 AM might have elasticity -0.35, while a rider at 55% of median income at the same time might have -0.32. That difference matters for fine-tuning fare policies like income-based capping.
How it works under the hood
Implementing a wave-driven elasticity model involves three main steps: constructing the interaction surface, calibrating the wave functions, and validating against observed behavior. We will walk through each step at a practical level.
Step 1: Build the income-time grid
Start with a grid where one axis is income (binned into percentiles or absolute brackets) and the other is time of day (hourly or half-hourly segments). Each cell in the grid represents a rider segment defined by both dimensions. The key is that the grid is not a set of independent segments; it is a continuous surface. You use interpolation (splines, Gaussian processes, or piecewise polynomials) to estimate elasticity at any point on the grid, not just at the cell centers.
This is where the "wave" metaphor becomes operational. Each wave is a function that describes how elasticity changes along one dimension, and the interaction between waves is modeled as a product or sum of those functions. A common choice is a product of independent splines: elasticity(income, time) = f(income) × g(time) + interaction term. But the interaction term is critical—without it, you are back to a segmented model. The interaction term captures how the effect of income changes with time and vice versa.
Step 2: Calibrate using revealed preference data
Calibration requires transaction-level data with rider demographics and timestamps. Many agencies now have this from automated fare collection systems. The challenge is that elasticity is not directly observable; you need variation in fares to infer it. Natural experiments (fare changes, promotional periods, service disruptions) provide the identifying variation. The model is fit using a method like generalized additive models or Bayesian hierarchical models that can handle the interaction surface without overfitting.
A practical tip: start with a simple model—two-way interaction only, no higher-order terms—and test whether it improves fit over a segmented model using cross-validation. If the improvement is marginal, the data may not support the complexity. Many practitioners report that the interaction term is most meaningful at the extremes: very low income combined with very peak times, or very high income combined with late-night hours.
Step 3: Validate equity implications
Once the surface is calibrated, compute the gradient at each point. The gradient tells you the local rate of change of elasticity. Zones with steep gradients are where a small change in income or time produces a large change in price sensitivity. Those are the equity hotspots. For example, if the gradient is steep in the 8:00 AM to 8:30 AM window for incomes between 30% and 40% of median, then any fare change affecting that window will have a disproportionate impact on that income band.
Validation should include both statistical checks (holdout prediction error) and policy tests (simulate a fare change and compare predicted impacts across income groups). If the model predicts impacts that align with known equity concerns (e.g., low-income riders bearing a larger share of the burden), that is a good sign. If it predicts uniform impacts, something is wrong—the interaction surface is probably too smooth.
Worked example or walkthrough
Let us compare three approaches to modeling the same fare change scenario: a 15% increase in peak fares for a mid-sized urban bus system. We will use a composite scenario based on patterns we have observed in multiple agency projects. The system serves a mix of income groups and operates from 5:00 AM to midnight.
Approach A: Constant elasticity model
Assume a single elasticity of -0.4 across all riders and times. The model predicts a 6% ridership drop (15% × 0.4). That is the simplest answer but it tells you nothing about distribution. Equity impact: invisible. Policy response: none. This is the baseline that most agencies still use for revenue forecasting, and it is the reason equity analyses are often an afterthought.
Approach B: Segmented model (by income and peak/off-peak)
| Segment | Elasticity | Predicted drop |
|---|---|---|
| Low income, peak | -0.25 | 3.75% |
| Low income, off-peak | -0.55 | 8.25% |
| High income, peak | -0.45 | 6.75% |
| High income, off-peak | -0.65 | 9.75% |
The segmented model shows that off-peak riders are more sensitive across the board, which is intuitive. But it also suggests that low-income peak riders are the least sensitive—they have few alternatives, so they absorb the fare increase. That is a plausible equity story: the most vulnerable riders bear the increase without reducing trips. However, the model assumes all low-income peak riders have the same elasticity. What about low-income riders who work non-standard hours? The segmented model lumps them into off-peak with a higher elasticity, even though their constraints might be similar to peak riders.
Approach C: Wave-driven (littoral gradient) model
The wave-driven model produces a surface, not a table. For this scenario, we simulate a surface where elasticity ranges from -0.20 to -0.70, with the steepest gradients in two zones: (a) very low income (below 30% of median) during the 6:30-7:30 AM window, where elasticity is unexpectedly low (-0.22) because these riders have zero alternatives; and (b) moderate income (50-70% of median) during the 4:00-5:00 PM window, where elasticity is high (-0.60) because these riders have carpool or schedule flexibility.
The wave-driven model predicts that the 15% fare increase causes a 4.5% drop in ridership among the lowest-income peak riders (higher than the segmented model's 3.75%) and an 11% drop among moderate-income afternoon riders (higher than the segmented model's 6.75% for high-income peak). The reason is the interaction: moderate-income riders in the afternoon have more alternatives than the segmented model assumes, while very low-income morning riders have fewer.
The equity implication flips: the segmented model suggested low-income peak riders are protected (low elasticity), but the wave-driven model shows that protection is fragile—it only holds for a narrow income-time window. Riders just above that window are much more sensitive and could be pushed off the system. A fare policy that seems equitable under the segmented model may actually create a new equity gap at the margin.
Edge cases and exceptions
No model works everywhere. The wave-driven approach has several edge cases where it either breaks down or needs modification.
Zero-fare zones
When a fare is zero (free transit), elasticity is undefined—demand is not responding to price. The littoral gradient model cannot be calibrated in those zones because there is no price variation. Practitioners often exclude zero-fare periods or treat them as a separate regime. However, the gradient may still be relevant for predicting what happens if a zero fare becomes positive. In that case, you need a separate model for the transition from zero to positive, which is a different behavioral response (new riders attracted by free fare may be more price-sensitive than existing riders).
Peak-hour reversals
In some systems, the peak hour has lower elasticity than off-peak (because peak riders are captive), but in others, the reverse is true (because peak riders have more mode choices). The wave-driven model can capture this reversal, but it requires enough data to estimate the interaction. If the reversal is driven by a small subpopulation (e.g., downtown office workers), the model may overfit. A rule of thumb: if the reversal only appears in a single cell of the grid, treat it as noise unless confirmed by external data (e.g., mode share surveys).
Income data limitations
The model needs income data at the individual level, which most agencies do not have directly. They approximate it using home location census data or fare card registration information. This introduces measurement error that can smooth out the very gradients the model is designed to capture. In practice, the wave-driven model is often more sensitive to income data quality than to model specification. If income data is aggregated to the block group level, the interaction surface will be artificially smooth, and the equity hotspots may be blurred.
Small systems with sparse data
For systems with fewer than 10,000 daily boardings, the grid cells become too small for reliable estimation. The wave-driven model will produce high variance estimates that are not useful for policy. In those cases, a simpler segmented model with broader bins is more robust. The wave-driven approach is best suited for medium-to-large systems with at least 50,000 daily boardings and several years of fare variation.
Limits of the approach
Even where the data supports it, the wave-driven model has inherent limitations that practitioners should understand before adopting it.
First, the model is fundamentally correlational, not causal. It captures how demand covaries with fare changes across income and time, but it cannot prove that fare changes cause the observed elasticity patterns. Unobserved factors (service quality changes, economic conditions, new mobility options) can confound the estimates. A wave-driven model from 2019 may not apply in 2024 if ride-hailing availability has changed the alternatives for certain income-time cells.
Second, the model is data-hungry in a specific way: it needs variation in fares across both income groups and time periods. If fares have only changed once or twice in the study period, the model will rely on cross-sectional variation (differences between groups) rather than longitudinal variation (changes over time). Cross-sectional estimates are prone to bias from unobserved group differences. Ideally, you need multiple fare changes over several years to separate cohort effects from price effects.
Third, the interaction surface is easy to overfit. A model with many degrees of freedom can produce a surface that fits the training data perfectly but fails to generalize. Standard regularization (smoothing penalties, Bayesian priors) helps, but it also smooths out the very gradients you care about. There is a fundamental tension between capturing sharp equity hotspots and avoiding false positives. Practitioners must validate the surface against out-of-sample data and, ideally, against qualitative knowledge from rider surveys.
Fourth, the model is expensive to maintain. The calibration requires specialized skills (GAMs, hierarchical Bayes) that many agency modeling teams do not have in-house. Once built, the surface needs to be recalibrated every few years as travel patterns evolve. For agencies with limited analytical capacity, a simpler segmented model with periodic updates may be more sustainable.
Despite these limits, the wave-driven approach offers a clear improvement over constant-elasticity models for equity analysis. The key is to use it as a diagnostic tool—to identify where equity risks are highest—rather than as a precise forecasting engine.
Reader FAQ
We have compiled the most common questions from analysts who have experimented with wave-driven elasticity models.
Do I need to abandon my current elasticity model?
No. The wave-driven model is best used as a supplementary layer for equity analysis. Keep your existing model for revenue forecasting and operational planning, where aggregate accuracy matters more than distributional detail. Use the wave-driven model to test whether the revenue forecast hides equity risks. If the two models agree on distribution, you have confirmation. If they diverge, investigate further.
How many income bands do I need?
At least five, but more is better if the data supports it. The interaction surface benefits from finer income resolution at the low end, where elasticity changes fastest. A common approach is to use percentiles: 0-20%, 20-40%, 40-60%, 60-80%, 80-100%. For the highest two bands, you can often merge because elasticity changes slowly there.
What software can I use?
R packages like mgcv for GAMs or brms for Bayesian models are well-suited. Python users can use pyGAM or statsmodels with spline terms. The key is to specify a tensor product interaction between income and time, not just additive terms. Most commercial transportation modeling software does not support this out of the box, so you will likely need to build a custom script.
How do I present results to decision-makers?
Use a heat map or contour plot of the elasticity surface, with income on one axis and time on the other. Mark the steep gradient zones with a different color. Decision-makers respond to visual patterns more than tables of coefficients. Accompany the map with a simple table showing how the predicted ridership change (in absolute numbers) differs across income groups under the wave-driven model versus the traditional model. The difference between the two is the equity story.
What if my data shows no interaction?
That is a valid finding. It means income and time operate independently on elasticity for your system. In that case, a segmented model is sufficient, and the wave-driven approach adds complexity without insight. Do not force an interaction if it is not there—report the null result and move on. The absence of interaction is itself useful information for equity policy (it means that policies targeting income or time alone will not have spillover effects).
How often should I update the model?
Every two to three years, or after any major system change (new fare structure, new mode, significant service redesign). Elasticity surfaces shift as the transportation landscape changes. The COVID-19 pandemic, for example, radically altered the shape of the surface for many systems. A model from 2019 would be misleading in 2021. Regular updates also help catch data quality issues before they affect policy decisions.
For teams just starting with wave-driven modeling, we recommend a pilot project focused on a single route or corridor with good data coverage. Run the wave-driven model alongside your existing model for one fare change analysis. Compare the equity implications. If the wave-driven model reveals hotspots that the standard model missed, you have a strong case for broader adoption. If not, you have learned that your system's elasticity surface is relatively flat—which is itself a valuable equity finding.
Comments (0)
Please sign in to post a comment.
Don't have an account? Create one
No comments yet. Be the first to comment!