Incorporating Cannibalization into Pricing Optimization Using Choice Data: An Application to the Pricing of Mobile Broadband Services

Price differentiation may not be as effective in increasing profitability due to imperfect segmentation, arbitrage, and, cannibalization. Cannibalization takes place when a customer with higher willingness-to-pay buys a lower-priced product. This research proposes an approach to incorporating cannibalization into pricing optimization using choice data. From choice data, individual-level utilities are estimated using hierarchical Bayes, and individual choice is predicted using randomized first choice simulation. Individual choices are then aggregated to obtain the demand function. The novelty of this research is in the way cannibalization is incorporated into the pricing optimization. Instead of integrating cannibalization into the demand function or representing it as a separate component in the optimization formulation, in this research, cannibalizing products are incorporated into the simulation scenario as competing products, based on which the demand functions used in the optimization are derived. This approach is more direct and realistic than those in previous research. The approach was implemented in a case study of mobile broadband services in Indonesian price-sensitive market. The result shows that two-fare-class price differentiation incorporated with product differentiation increases the total contribution of about 60% compared to the single-fare-class policy. Furthermore, it is also shown from our case study that starting from a three-fare-class policy, through iterations, our approach suggests that policy with two-fare-class results in a not significantly different total contribution.


Introduction
Despite its central position among revenue management tactics, in certain conditions, price differentiation may not be as effective in increasing profitability. This may be due to imperfect segmentation, arbitrage, and, cannibalization (Philips [1]). Imperfect segmentation happens when the demand model cannot explain how customers make choices, while arbitrage occurs when price difference creates an opportunity for an arbitrageur to buy the product at a lower price and sell it at a higher price to customers with greater willingness-to-pay. Cannibalization takes place when a customer with higher willingness-to-pay buys lower price product. In general, arbitrage may be prevented by product attribute differentiation or non-attribute barriers, which is relatively easier to do. On the other hand, resolving the problem of imperfect segmentation and cannibalization required improvement in the way demand is modeled and estimated, which could be very challenging depending on the complexity of the product and market. 1  As an old adagium in management says "you cannot manage what you cannot measure", measuring or estimating cannibalization is the key to resolving it. Lomax [2] proposed three alternative ways for measuring cannibalization, i.e. gains loss analysis, crosspurchase tables, and deviations from the expected share movements, all can be estimated from sales data. Those measures, while showing the magnitude of cannibalization, do not indicate the way to resolve it. What we need is a measure which relates cannibalization to controllable variables that account for it. Specifically, we need a demand model defined as a function of product attributes (including price) and other relevant variables (i.e. market segmentation variables). Cannibalization effect in a certain pricing scenario can be estimated once the demand function for the corresponding scenario is known.
Many researches in the past worked on developing demand functions which are capable of measuring cannibalization effect. Carpenter and Hanssens [3] developed an air travel passenger demand model in which the share of a fare-class is represented as a function of prices of all fare-classes using an exponential function. The fare-class share then goes into the price optimization problem, based on which the cannibalization effect can be estimated accordingly. Meredith and Maki [4] estimating cannibalization using demand model expressed as the natural exponential of a linear function of prices of competing products and difference between those prices. Srinivasan et al. [5] developed a model to forecast demand (i.e. Autoregressive Integrated Moving Average or ARIMA) which incorporates canniballization. In this model, cannibalization is expressed as a function of product attributes and estimated from historical data. Albuquerque and Bronnenberg [6] developed a demand model capable of estimating cannibalization using aggregate logit. The model is parameterized using aggregate data (penetration and purchase data). Heerde et al. [7] proposed a demand model which incorporates cannibalization using time-varying vector error correction method. The model considers five sources of demand: (i) primary demand, (ii) cannibalization within the category, (iii) canniballization between categories, (iv) brand switching within the category, and (v) brand switching between categories. Pacras et al. [8] developed a demand model for retail chain expansion which considers canniballization between stores. In this model, demand is represented as a function of chain's goodwill (expressed as a function of current goodwill and advertising), occasions (e.g. holidays), store-level time-varying characteristics (e.g. price, satisfaction score), and store store's fixed effect (e.g. free-standing units (FSUs) versus mall, proximity to highways). The choice probability is estimated using logistic distribution. Haynes et al. [9] employed nested logit in a demand model, out of which elasticities can be calculated and used to estimate the cannibalization effect. The demand is a function of product attributes (including price) and share of a group where the product belongs. Ngwe [10] investigated cannibalization between regular and outlet stores using nested logit demand model, which is expressed as a function of product quality, product newness, price, type of outlet, time of purchase, and type of product. Guo and Chen [11] developed a demand model for a multi-generation product which considers cannibalization. In this research, demand is represented as the adoption rate, which increases linearly with the number of existing adopters. The model is expressed as a continuous-time differential equation. The model seeks to investigate the effect of a price discount on the demand of the multigeneration product. In Reimers and Xie [12], the effects of coupons on revenue cannibalization are investigated, where the number of cannibalization is assumed to be proportional to the differrence between regular price and coupon price and to the inverse of coupon cost or disutility.
In all those researches, demand (or choice probability) is defined as a function of price, product attributes, and/or other segmentation-related variables. For product in a competitive setting, it is plausible to explicitly include variables that represent competitors as in Carpenter and Hanssens [13], Meredith and Maki [4], and Pacras et al. [8]. To parameterize the model, all the above research use revealed preference data, both in aggregate and disaggregate terms. The advantage of using revealed preference data is its validity since it comes from actual or observed behavior. However, since revealed preference method evaluates current condition, it cannot be used directly to analyze situations that do not yet exist, which is a desirable property in a application such as pricing, marketing, and product development. On the other hand, while relatively more biased, stated preference data could be used to analyze hypothetical situations which could be very useful in such applications.
Basically, demand is the aggregation of customer's choices. In economic demand theory, random utility model (RUM) is considered the best approach to modeling choices [5]. Under this model, a decisionmaker is assumed to be a utility-maximizer over several discrete alternatives, each of which has random utility (McFadden [14]). Some of the above research adopt this approach, such as Albuquerque and Bronnenberg [6], Pacras et al. [8], Haynes et al. [9], and Ngwe [10]. Modeling demand this way ensures its validity. However, when it comes to the optimization problem as in pricing, it results in a mathematically complex formulation which is difficult to solve analytically.
This research proposes an approach to incorporating cannibalization into pricing optimization problem using stated-preference data, specifically choice data. Compared to other types of stated preference data (i.e. ranking, rating), choice data has an advantage of better mimicking customer decision making a process in the market. Using choice data, individuallevel utilities are estimated using hierarchical Bayes (Allenby et al. [15], which can identify the heterogeneity of respondents (Allenby and Ginter [16]). This method assumes multivariate normal utility values whose parameters are estimated iteratively using a method involving the Metropolis-Hastings algorithm. Having had individual level utility values, the choice from each respondent is simulated using randomized first choice method (RFC) [17]. RFC is based on RUM where two random components representing product variability and attribute variability are added. Individual choices are then aggregated to obtain a share of preference. The demand function is obtained by calibrating the share of preference with actual sales data. Cannibalization is incorporated into the demand function by including the cannibalizing products in the simulation scenario, based on which the demand function is derived. Using this demand function, optimal pricing is determined accordingly. Most of the time, the optimal prices are different with price levels in the choice data. Iterations are needed to resolve this.
As in the previous research, attributes (including price) of all products in the market (both cannibalizing and competitor products) are considered. In this research, they are incorporated into the competitive scenarios based on which the simulation is run to obtain the demand function. The novelty of this research is in the way cannibalization is incorporated into the process of deriving demand function. Instead of integrating cannibalization into the demand function or representing it as a separate component in the formulation of an optimization problem, cannibalizing products are incorporated into the simulation scenario as competing products. Intuitively, this approach is more direct and realistic than those in the previous research.
We implement the approach in a case study of pricing optimization for mobile broadband services. It is not uncommon that a mobile broadband service provider offers more than one product for a market. Typical segmentation in this industry usually divides the market into clusters representing those that are price-sensitive, value-seeker, and premium. Some service providers have even more niched products. The segmentation is relatively unfenced such that those who are premium customers may end up buying products devoted to the price-sensitive market. Pricing optimization for mobile broadband service can be considered as an uncapacitated problem. The 4G, 4.5G, and 5G technology have made service providers can increase capacity significantly while keeping capital expenditure flat or even lower. This paper is organized into four sections. This first section discusses the previous research and the novelty of this research, while the second one describes the methods. The third section elaborates the proposed approach into a case study and discusses the results, and the last part concludes.

Methods
This section discusses in an elaborate yet concise way, three topics that are fundamental to our problem, i.e. estimating individual utilities, market simulation and the demand function, and pricing optimization with cannibalization. Figure 1 depicts the sequential process of how choice data are used for estimating demand function and eventually, the pricing optimization.
In the first step, individual-level utilities are estimated from choice data using hierarchical Bayes me-thod. In the next three steps, demand function is derived using the sequential processes of estimating individual choices, estimating share-of-preferences, and obtaining explicit and continuous demand function using interpolation. In the last step, the demand function goes into pricing optimization.

Estimating Utilities from Choice Data
Under RUM, a decision-maker will choose an alternative with the highest total utility. Once we know a decision maker's utility system, we can predict her preference towards any particular choice situation. Of course, in this case, the choice situations are limited to those that can be represented using the attributes and levels based on which the utility values are estimated. In our research, utilities are estimated from choice data. In this regard, choice data are responses to sets of balanced and orthogonal randomly generated choice tasks, each of which consists of a fixed number of stimuli. Each choice task may contain a "none" option. The questionnaires are designed and generated such that there are no two respondents receive identical sets of choice task. One or two fixed choice tasks are usually added in each set to test the internal validity of the utility model.
A common way to estimate utilities from choice data is using maximization of some likelihood function. This results in the parameters of the distribution of utility values in the aggregate term. Using aggregate utility values is like using mean and variance to represent the population. This approach can be extended to one with a number of clusters where clusters are represented with different means and variances. Another method involves estimating utility values for each individual. Having utility values for each individual is always better than just the average value of the population. This disaggregate approach usually assumes that utility values for each individual follow a multivariate normal probability distribution. The estimation is conducted through an iterative calculation using Markov chain Monte Carlo (MCMC) method. Hierarchical Bayes (HB) is considered the best method that falls into this category (Train [18]).
In HB there are two levels of estimation, i.e. estimation of individual utilities at the upper level, and, at the lower level, estimation of the probability that an individual chooses a particular alternative [19]. The vector representing utility values of individual , follow a multivariate normal distribution, ( ), where is the vector of the means and is the covariance matrix. In HB, (aggregation of for all individuals), , and are estimated using the following algorithm: Step 0 Set . Set initial value for , , and Step . and : as , , and , respectively, and go to Step 1.

Market Simulation and the Demand Function
Up to this point, we already have vector which represents utilities of all attribute levels for individual . Using this information, we can predict how individual would choose in a particular choice situation. The attributes and levels are predetermined during the study design and kept fixed during the estimation and market simulation.
Given the utility value of each attribute level of each decision-maker, a number of methods can be used to predict how she would choose in a particular choice situation. They are the first choice, logit model, dan randomized first choice. Randomized first choice or RFC is considered the best method for predicting how an individual makes choices given her utility values for all attribute levels [20]. This is because it is immune from the independence-of-irrelevantalternatives problem, and more realistic since it incorporates randomness in modeling how people choose.

Let
be the binary vector of attribute level of product , and be the utility of product for individual . According to RFC.
where is a vector representing product variability, while is a scalar representing individual variability, both follow Gumbel probability distribution. and are determined such that the simulator can accommodate differential impact, differential substitution, and differential enhancement [10]. Having simulated based on the above equation, individual will choose product in a particular choice scenario if . If these choices are aggregated for all respondents, we can estimate the choice proportion of each product in the chosen scenario. Let be the share-of-preference, i.e. the proportion of respondents that choose product in a choice scenario represented as set . We refer as the concepts other than our concept of interest. This means that the simulation scenario is the union of and our concept of interest ( ), expressed as * +. For simplicity, we define as a function that converts information about utilities of each individual and attribute levels of product to proportion of respondents that choose product in choice scenario , as described above. If (aggregation of for all ) is the matrix representing utilities of all respondents, then we have Suppose there are levels of price ( ) based on which is defined, and let 0 ( ) ( ) ( ) 1 where ( ) be a vector that represents the elements of that corresponds to where ( ) represents vector of elements that correspond to price levels other than . If we run the simulation for each price levels, we will have data points From these share of preference data points, we can get demand data points by multiplying the share of preferences with a quantity representing the achievable market size, . If we make it more general by removing the index and letting demand at the price of , ( ) ( ) for , then we will have demand data points ( ( )) ( ( )) ( ( )). In pricing optimization, we use the inverse demand curve to represent demand function because the price is the decision variable. If the choice data and the estimation process are good, and our product of interest is a normal product, we will come up with a plot of demand data points that looks like one in Figure 2.
To make these data points ready for use in the pricing optimization, we need to convert them into an explicit demand function. This involves interpolating and/or fitting the data points to a particular function. Under deterministic assumption we can do this in two ways: (1) fitting the data points to one assumed demand function, and (2) interpolating between two consecutive data points using splines of a certain function. For the first approach, readers may refer to Huang et al. [21] for alternative demand functions that can be used in the fitting. This approach results in a realistic demand function but may not fit with all data points. The second approach will produce a function with the perfect fit, but the function may be to complex for optimization. One of the functions for the splines that will produce a realistic and perfect fit demand function is cubic [22].

Pricing Optimization
Basically, pricing optimization seeks to determine price levels that maximize total contribution, subject to constraints such as capacity or other restrictions. The basic formulation of uncapacitated singlesegment pricing optimization is as follows [1].
where is price, ( ) is demand as a function of price, and is the incremental cost. The complexity of this problem depends on the nature of the demand function. For two-segment pricing, the formulation becomes [23].
where and are prices for higher-WTP and lower-WTP segment, respectively, while is the WTP boundary between the two segments. The incremental costs are expressed as and to allow for product differentiation. To be effective, price differentiation is often delivered along with product differentiation. The formulation in equation 5 assumes that demand from those segments is independent. This means that consumers are perfectly segregated based on their WTP and those having higher WTP could not access the product sold at a lower price. This optimization problem uses one demand function which can be derived using RFC simulation (as described in the previous section) under a particular scenario. In this case, the scenario is scenario * + in which corresponds to our concept of interest with the demand function of ( ). This single demand function is then divided into two sections, one covers the higher price region ( region), and the other covers the lower region ( region).
In reality, this independent demand assumption often does not hold. Although sellers may use some restrictions to impose price differentiation tactic (based on ages, time, place, etc.), in many circumstances, consumers with higher WTP still can get access to the lower-priced product (cannibalization). When this happens, demand for a lower-price product will increase while that for higher-price will decrease. The magnitude of the change depends on the disparity between the two prices. Hence, we cannot assume that those two segments are independent because, based on the method we use to derive the demand function, demand from consumers with higher-WTP depends on the product price for a lower-WTP segment, and vice versa. This means that, instead of one, now we have two demand functions, ( ) for higher-WTP consumers and ( ) for lower-WTP consumers. The corresponding choice scenario is now * +, where and correspond to the concept for higher-WTP and lower-WTP consumers, respectively. The formulation of the optimization problem now becomes.
In addition to the nonnegativity constraint, we need to add those representing the interdependence between demands. Suppose we want to determine optimal prices in a two-segment problem and start with initial prices ( ) ( ) * +. In this situation, ( ) is derived using RFC simulation under a scenario in which the price for a lower-WTP segment is ( ) . Referring to the function defined in the previous subsection, this can be expressed as where ( ( ) ) refers to a lower-price concept that is offered at the price of ( ) . For simplicity, we will solve the problem for one segment at a time. We start by solving for the higher-WTP segment. Suppose we find an optimal price of ̂ , then the current solution becomes ( ̂ ( ) ). Now, we want to solve for the lower-WTP segment with the corresponding demand function that can be expressed as where ( ̂ ) refers to a higher-price concept that is offered at the price of ̂ . Suppose we get an optimal price of of ̂ , then the current solution is ( ̂ ̂ ).
Here comes the complication. Our optimal price for a higher-WTP segment ( ̂ ) is obtained from an optimization where the corresponding demand function, ( ), comes from a scenario which assumes that the price for a lower-WTP segment is ( ) . Now, the price for the lower-WTP segment is ̂ , which means that ̂ may be no longer optimal. Hence, we need to repeat the cycle and find the optimal price for higher-WTP segment under a scenario where the price for a lower-WTP segment is ̂ . Subsequently, we may need to revise the optimal price for the lower-WTP segment, and so on. Another complication is that it is quite possible that ̂ and ̂ in any cycle do not correspond to any of the element in * +, which means that we do not have the information about their utility values. In this paper, we resolve this by rounding the value of ̂ and ̂ in any cycle to the closest value in set * +, and repeat the cycle until the solution does not change.
This approach can be generalized to pricing with fare-classes in which , where are prices for fare-class .. The number of fare-class should not exceed the number of levels set for the price attributes of the choice data. Given the set of price levels of the choice data, * +, the approach works as follows: Step 0 Set initial solution (price levels) of each fare-class Step 1 Set 1. Based on , solve for fare-class to get the current optimal price for fare-class , ̂ . If ̂ , set ̂ as the current solution for fareclass and revise accordingly. Otherwise, set ̂ to ̂ , the element of that is closest to ̂ , and revise accordingly to get .

If
, go to Step 2. Otherwise, set . Revise the demand function for fare-class , ( ), based on . Go to 1.
Step 2 If the solution does not change, stop. Otherwise, go to Step 1.

Results and Discussions
Our case study is pricing optimization for mobile broadband services in the price-sensitive market in Indonesia. The dataset that we use in this research is from Susanta [24], which contain data from 231 respondents. The data was collected through an online survey using a choice-based conjoint (CBC) questionnaire that is designed using attributes and levels as in Table 1.  Rp130,000 4 Rp250,000 5 Rp450,000 Each respondent is given 13 random choice tasks, each of which consists of three concepts and one "none" option. A concept represents a mobile broadband monthly plan with a fixed price. The "none" option makes the questionnaire more realistic since in real-world people may decide not to choose among the available options. Questionnaire for each respondent is unique and randomly generated such that it is balanced and orthogonal. Two fixed choice tasks (same for all respondents) are added for validation purpose.
The raw data is in a format, as shown in Figure 3. For each choice task, respondents choose the plan that they prefer the most. Otherwise, they should choose the "none" option. Each respondent must respond to 15 choice tasks presented in a similar format repeatedly. This may cause boredom which may affect the quality of data. The utility values were calculated from the choice data using HB estimation method using Sawtooth Software CBC/HB version 5.5.6. Table 2 shows the result of HB estimation of sample respondent.
Utility values as in Table 2 are zero-centered, and a higher value represents a preferred level. The fitness value of this respondent is 0.6517, which means that predicting choice for this respondent using utility values in Table 2 is 0.652/0.250 = 2.608 times better than a random guess. The denominator of 0.250 comes from the fact that there are four alternatives in each choice task, three concepts and one "none" option. The overall fitness of the estimation for all respondents is 0.659. This is a moderate value but relatively good considering the sample size of only 231. A typical CBC study usually suggests a minimum sample of 300. We also check the internal validity of the utility model by comparing actual choices with those predicted by the utility values and found a mean absolute error of 6.53%.
For our pricing optimization problem, we pick the Flash Optima plan, which is a prepaid service from Telkomsel with 2GB quota and 7.2Mbps maximum speed, at a monthly price of Rp90.000. We consider a scenario where this plan competes with other prepaid plans as in Table 3. Simulation with randomized first choice using Sawtooth Software SMRT 4.23 produced result in Table 4. We add two price levels in addition to the existing five. These two additional levels are one representing demand when the price falls to 0, and one representing the satiating price (price at which demand falls down to 0).
The maximum achievable market size is assumed to be 50 million. The result indicates a normal product where lower price generates higher demand which corresponds to a downward-sloping demand function.
Since RFC assumes a probabilistic decision making, the share-of-preference estimates come with the corresponding standard error values. The standard errors are relatively small and still consistent with the downward-sloping demand function.
Applying monotonic cubic spline interpolation on the demand data points from the second and fifth column of Table 4, we obtain the spline functions as shown in Table 5.
The use of cubic splines for demand function brings another complication. If the demand functions in Table 5 goes into the optimization problem as in equation 4, we will have an optimization problem with quartic (4 th degree) polynomial objective function. Solving this kind of problem requires an assessment of its convexity. According to Ahmadi et al. [1] determining the convexity of a quartic polynomial optimization problem is NP-hard. Hence, using an analytical solution would not be feasible.
In reality, the price is always in multiple of Rp1,000, i.e. {1,000, 2,000, …, 600,000}. Considering the size of the solution space, we use enumeration to find the solution to our pricing optimization problem. In doing so, we make four optimization scenarios: 1. Pricing optimization for one fare-class 2. Pricing optimization for two fare-classes without product differentiation 3. Pricing optimization for two fare-classes with product differentiation 4. Pricing optimization for three fare-classes with product differentiation The incremental cost is assumed to be Rp25,000 for one fare-class and two fare-classes without product differentiation, Rp35,000 and Rp25,000 for two fareclass with product differentiation, and Rp45,000, Rp35000, and Rp25,000 for three-class optimization. Product differentiation is limited to be based on one attribute, i.e. FUP quota. The first scenario is used as a comparison to determine if the price differentiation is justified. The demand function for scenario 1 is in Table5, while for other scenarios are derived using the same approach. There are two, two, and three demand functions in scenario 2, scenario 3, and scenario 4, respectively.  Table 6.
In iteration 1, we solve for the fare-class 1, assuming that the price for fare-class 2 is Rp90,000. We found that the optimal price for fare-class 1 is Rp136,000.
In iteration 2, we solve for fare-class 2. Since the optimal price for fare-class 1 (Rp 136,000) is not the element of the price levels defined for the choice data, the demand function in this iteration is derived by assuming that the price for fare-class 1 is Rp 130,000 (level closest to Rp 136,000). This results in optimal price of Rp89,000 with significant increase in total contribution from Rp 784,771,751,150 to Rp 1,027,559,351,020. This significant difference is due to different price levels used for estimating demand and calculating total contributions for fare-class 1.
Demand is estimated based on ̂ 3 (which results in greater demand than using the optimal price of Rp 136,000), while total contribution is calculated using ̂ = Rp 136,000. Using similar reasoning, we can infer that the total contribution of Rp779,602,526,435 in iteration 3 is less than it should, and the total contribution of Rp 1,027, 559,351,020 in iteration 4 is greater than it should. We can also observe that the solution stays at [Rp 136,000, Rp 89,000]. Then, we can infer that under optimal pricing of [Rp 136,000, Rp89,000] the total contribution is between Rp 779,602,526,435 and Rp 1,027,559,351,020. From the pricing optimization with one fare-class, we have a total contribution of Rp 952,410,781,139. Hence, we cannot conclude that price differentiation without product differentiation with two fare-classes is better than single-fare policy, or vice versa. Solving scenario 2 under independent demand assumption using equation 5 results in optimal prices of ̂ Rp406,000 and ̂ Rp 103,000 with total contribution of Rp 1,629,189,562, 533. Hence, compared to the result under interdependent demand, cannibalization dilutes total contribution by at least 37%.
In the third scenario, Flash Optima is offered at two different options, i.e. with 5GB quota offered initially at Rp 130,000 and 2GB quota initially offered at Rp 90,000. The result of the pricing optimization is shown in Table 7.
This optimization results in optimal prices of [Rp 124,000, Rp 89,000] which produces total contribution of Rp 1,518,372,036,157. Considering that this figure is based on the demand function which assumes = Rp 130,000 and = Rp90,000, we can infer that the true value of total contribution is greater than Rp 1,518,372,036,157. Compared to the result from the first scenario, price differentiation with product differentiation results in an almost 60% increase in total contribution.
In general, more fare-classes will result in greater total contribution in the absence of cannibalization. In the last scenario, we investigate if adding one more fare-class will increase the total contribution. We set three fare-classes, i.e. 8GB initially offered at Rp130,000, 5GB initially offered at Rp 90,000, and 2GB initially offered at Rp 50,000. The iterations of the pricing optimization for scenario 3 are shown in Table 8. After seven iterations, it was found that the optimal pricing policy for this scenario is [Rp145,000, Tabel 7. Iterations of pricing optimization for scenario 3

( )
Rp 99,000, Rp 89,999]. From iteration 3 it can be inferred that the price for fare-class 3 is too low. Starting in iteration 3, the price level for fare-class 2 and 3 in the RFC simulation, based on which the demand functions are derived, are the same, i.e. Rp90,000. From iteration 3 to 7 it can be inferred that the total contribution under optimal pricing is less than Rp1.565.141.602.715. From scenario 3 we know that total contribution for two fare-classes with product differentiation is greater than Rp 1,518,372, 036,157. Hence, we cannot conclude that three fareclasses is better than two. In reality, managing three fare-classes is more difficult than two. Hence, in this case study, it is recommended to implement price differentiation with product differentiation with two fare-classes.

Conclusions
We develop an approach to incorporate cannibalization into pricing optimization using choice data. From choice data, individual utilities are estimated using hierarchical Bayes. Based on these utility values, individual choice in a particular choice situation is estimated using randomized first choice simulation. Using this mechanism, demand function under any competitive scenario can be estimated. Cannibalization is modeled by incorporating the cannibalizing products into the scenario based on which the demand function is derived. Determining optimal prices for cannibalizing products involves optimization to maximize the total contribution of multiple fare-classes with intertwined demand functions. The fixed price levels defined for the choice data adds more complication to the problem. We propose an iterative procedure to solve the problem and implement it in the pricing of mobile broadband services in Indonesia. For our case study, it is shown that a two-fare-class price differentiation with product differentiation is better than a single-price policy and three fare-class policy. The two-fare-class policy results in about 60% increase in total contribution compared to the single-price policy.
While proved to be effective, some issues regarding our proposed approach still need to be addressed, e.g. resolving the problem caused by the fixed price levels, and coping with problems with many fareclasses like those in the airline industry. In the future, research should be directed toward those areas.