Pricing
Introduction
The revenue predicted by our model is influenced by several factors. Some factors are multiplicative to baseline (like temperature, inflation, etc.) while others are additive (primarily investments).
Pricing is one of the factors that has a multiplicative impact on both the baseline as well as roicurves.
The intent behind modelling pricing as a multiplicative effect is to capture the phenomenon of price elasticity by having it also be multiplicative on volume and satisfy a few basic properties (as illustrated below).
Math
For starters let us introduce a few variables. \(R, V, P \in \mathbb R^+\) these are revenue, volume, and price respectively. They will usually be written with either a subscript \(b\) for the baseline before applying pricing or \(p\) for after applying pricing. The way to think about this is that the baseline and previous layers applied in such a way that there is implicitly (or explicitly) a value for these variables beforehand (for the pricing signal specifically the normalizing factor we use so that a price of 1 means no impact is the baseline price). We also know the relationship \(PV = R\) as an economic prior. Now let us derive the form of the impact on revenue.
We assume a scaling impact on volume, so we start with
where \(m\) is that scaling factor calculated off of the pricing signal \(\frac{P_p}{P_b}\) (see below for the exact calculation of \(m\)). Now let us rewrite those volumes in terms of their respective revenues.
Now we solve to get \(R_p\) in terms of \(R_b\) giving us
This is a multiplicative impact as we desired. Now remember we normalize our pricing signals so \(P_b = 1\) so \(\frac{P_p}{P_b}\) is our pricing signal.
Now for conditions on \(m\left(\frac{P_p}{P_b}\right)\). To simplify writing these I'll define a variable \(x = \frac{P_p}{P_b}\). For all below we assume \(x \ge 0\).
With infinitely high price revenue becomes 0.
With a price of 0 revenue becomes 0.
At baseline price there is no impact on volume.
The multiplier on volume always decreases as you increase the price.
The rate the multiplier decrease goes down as you increase price.
And finally the multiplier is always positive.
The definition of \(m(x)\)
Pricing Parameters
The Pricing Layer learns the following two parameters hierarchically: * Offset Embedding * Exponent Embedding
The Offset Embedding is transformed to ensure the values lie between 0 and 1, aka Offset. Similarly, Exponent Embedding is transformed to ensure the values are larger than 1, aka Exponent.
Offset
It controls the position where the price elasticity curve intersects the y-axis. Lower the value, higher the y intercept
Exponent
It controls the slope of the price elasticity curve. Lower the value, slower the saturation.
The calculations
We take the \(price\) which is the mean normalized price data for each granularity as input.
We learn the \(offset\) and the \(exponent\) for each granularity.
Then the following equation is used to determine the a multiplicative relationship between \(price\) and \(V_b\):
Then, given our derivation from the math section, the relationship of price on baseline revenue (\(R_b\)) is described by:
Hence, given a price, we update our revenue according to the equation:
NOTE:
1. A granularity refers tostate, brand
combination, unless specified otherwise.
2. The normalization multiplier is to neglect the impact of price on baseline when it equals the average price of that granularity. It is calculated as follows:
3. Prices are always positive, so are the impacts! Model learns by how much do we scale the baseline up.
Revenue Curve (Impact Curve) Visualization
Here's how the impacts typically vary with price:
Properties
- The curve passes through (0, 0) indicating that the if there is no price then the corresponding revenue predicted by the model should be 0.
- The curve asymptotes to 0 with an increase in price indicating that if we keep on increasing our price, the volume sold will be so low that it can drastically affect our revenue and make it 0.
- The curve passes through (1, 1) indicating that if the price is the same as the average price then the baseline should be unaffected.
- if exponent = 1 + offset, then max(impact) = 1 and that maximum occurs when the price = average price
- if exponent > 1 + offset, then max(impact) > 1 and that maximum occurs when the price > average price
- if exponent < 1 + offset, then max(impact) > 1 and that maximum occurs when the price < average price