Profit Engine

Calculates the Product purchased by each Customer based upon their Willingness To Pay (WTP). The node can be used to:
  1. Determine the Product preference of each Customer, as well as whether the Customer purchased the Product, the Customer's first, second and last choice, and the Customer's maximum and minimum Consumer Surplus of all Products in the Market; and
  2. Generate a Demand Curve for a selected Product by testing a range of Price sample points

The Profit Engine calculates the Product purchased by each Customer based upon their Willingness To Pay (WTP). Each Customer Distribution column in the input WTP Matrix represents the Willingness To Pay (WTP) for a Product. The rows represent each of the Virtual Customers making purchase decisions based upon their individual Willingness To Pay (WTP) for the Products in the Market.

The Profit Engine does not require configuration if a Demand Curve is not being generated. It assumes that each Product found in the 'Input Product Array' refers to a column in the WTP Matrix.

If the user sets the Profit Engine to generate a Demand Curve then additional configuration settings must be selected. In particular, the selected Product must have a value for Cost in the Product Input Array.

Generating a Demand Curve will require repeatedly running the model within Profit Engine, hence the Profit Engine will take much longer to complete. If the user selects 20 one-sided Price Sample Points for the Demand Curve then the Profit Engine will iterate 2n + 1 = 41 times in order to generate both sides of the Demand Curve.

More Help: Examples and sample workflows can be found at the Scientific Strategy website:


Standard Options

Calculate Demand Curve
Check to calculate the Demand Curve for the selected Product by repeatedly running the Profit Engine over all Price sample points.

Demand Curve Options

Select Demand Curve Product
Select the Product for which a Demand Curve will be generated. The Product must have both a Price and Cost value in the 'Input Product Array'. The other Products in the Market need only have Price values.
Enter number of Demand Curve Sample Points
The number of Price Sample Points to test in order to generate one-side of the Demand Curve. Actual samples = 2n + 1.
Output Profit Optimization Results
Check to output the Optimized Price Flow Variable and other results from the Demand Curve. The final 'Output Product Array' will be based upon the Profit Optimized Price.
Chart Product Aggregation Depth
Select the depth of the Customer aggregation for each of the Product columns in the final results. The user can just aggregate the Customers who purchase each of the Products (default), or the Customer's First Product Choice, or all the way down to the Customer's Last Product Choice. The aggregation is displayed in the Profit Engine Market Share column chart. Product aggregation slows down the speed of the calculation but does not have any other impact on the results.

Input Ports

Input Product Array: The set of Products that define the Market. Each row corresponds to a Product that competes for customers in the Market. The 'Input Product Array' must have the following columns:
  1. Product (string): The name of the Product corresponding to a column of the same name in the 'WTP Matrix' input port. There can also be an additional row with a Product named 'No Sale' - this row is used to tune those Customers who are in the Market but have not yet purchased a Product.
  2. Price (double): The 'Static Price' of each Product in the Market. The Price of the 'No Sale' Product should be zero. Dynamic Prices found in the 'Input WTP Matrix' (that is, PAV and PAF columns) are NOT considered by the 'Profit Engine' node. Use the 'Simulate Market' node instead.
  3. Cost (double): The 'Static Cost' is only required for the Product that is selected for the Demand Curve. Other Products do not require a Cost value to be set within the 'Input Product Array'. If a Demand Curve is not being generated then the Cost column is not required. Dynamic Costs found in the 'Input WTP Matrix' (that is, CTS and CTM columns) are NOT considered by the 'Profit Engine' node. Use the 'Simulate Market' node instead.
  4. Capacity (ignored): Capacity Constraints for the Products are NOT considered by the 'Profit Engine' node. Use the 'Simulate Market' node instead.
Willingness To Pay Matrix (double): The Willingness To Pay (WTP) Customer Distribution matrix for each Product column in the Market by each Virtual Customer row. Dynamic Price columns (PAV, PAF) and Dynamic Cost columns (CTS, CTM) are IGNORED by the 'Profit Engine' node.

Output Ports

Output Product Array: The set of Products in the Market along with their selling Price, Cost, Quantity of Customers, Market Share, and Profitability. The Market Product Metrics also includes the FirstChoice, SecondChoice, and LastChoice as well as the InTopTwo, InTopThree, etc. aggregated counts for each Product depending upon the user selection for the 'Chart Product Aggregation Depth' setting. The 'Output Product Array' includes these additional columns:
  1. Share: The Market Share of each Product as a percentage not including the 'No Sale' Products.
  2. Profit: The Product's Profitability is only calculated if the Product's Cost was provided in the 'Input Product Array'.
Purchased Products Matrix: The input WTP Customer Distribution matrix plus additional columns containing information about the purchase decision each Virtual Customer row, including the Product the purchased, their Willingness To Pay for that Product, their Second Choice, etc. and their Last Choice.
Demand Curve Table: A small table for just the selected Demand Curve Product listing the Price, Quantity Sold, and Profit at each Sample Point. Additional metrics calculated from the Demand Curve are provided in the form of Flow Variables, including:
  1. Product.Price.Optimized The Price point along the Demand Curve at which Product Profitability is maximized.
  2. Product.Profit.Optimized The maximum Profit for the selected Product found along the Demand Curve scaled to the number of Virtual Available Customers.
  3. Product.Quantity.Optimized The Quantity of Virtual Available Customers who purchased the Product at the Product's Profit Optimized Price.
  4. Product.Price.Sensitivity The Price Sensitivity for the selected Product at the current Price. Price Sensitivity is a measure of how much Quantity will drop if Price is increased. A Price Sensitivity of 1.0 indicates that a 1% increase in Price will result in a 1% decrease in Quantity. A value >>1.0 indicates that the Product is very Price Sensitive. A value <<1.0 indicates that the Product is not Price Sensitive.
  5. Product.Profit.Sensitivity The Profit Sensitivity for the selected Product at the current Price. Profit Sensitivity is a measure of how much Profit will change if Price changes. A value >0.0 indicates that the Profitability will increase if Price is decreased (or decrease if Price is increased). A value <0.0 indicates that the Profitability will increase if Price is increased (or decrease if Price is decreased). A value of 0.0 indicates the Product is currently at the Profit Optimized Price.


Demand Curve
Displays the data from the Demand Curve Table as a 'Price vs Quantity' chart overlaid with a 'Profit vs Quantity' chart to show the user the Profit Maximizing Price.
Market Share
Displays the relative Market Share of each Product as a column chart. Also displays the aggregation of Customers according to the Product Aggregation Depth (see the option above). Product columns can be hilited causing these Virtual Available Customer's to be available for further analysis.




You want to see the source code for this node? Click the following button and we’ll use our super-powers to find it for you.