0 ×

Demand Curve

Market Simulation nodes by Scientific Strategy for KNIME - Community Edition version 4.3.1.v202102181051 by Decision Ready, LLC

The Demand Curve node takes an Input Product Array and Willingness To Pay (WTP) Matrix and calculates the Demand Curve for the set of Products selected by the user.

For each Product in the Demand Curve Product Set, the Demand Curve node will also calculate the Profit Maximizing Price. In many situations, altering a Product's Price will result in a lot of 'Cannibalization' - that is, customers selecting a different Product to the detriment of the Store or Brand owner who is responsible for both. Hence in addition to the Demand Curve node calculating the Profit Maximizing Price with respect to the Product itself, the Demand Curve node will also calculate the Profit Maximizing Price with respect to the Product's same Brand, to the Product's same Store, and to the Product's same Location, as well as to Family, Category, and Platform.

By default, the Demand Curve for each Product will stretch from the Product's Cost (low-point), to the Product's current Price (mid-point), to the Product's Price plus Cost (high-point). The user may select to override this default behavior by setting a fixed percentage Gap Width. In this case the Demand Curve's low-point and high-point will be determined by the Gap Width and the number of Sample Points.

More Help: Examples and sample workflows can be found at the Scientific Strategy website: www.scientificstrategy.com.

Options

Standard Options

Focus Product
The user-selected Product that defines the 'Demand Curve Product Set'. A Demand Curve will be generated for each Product in the set.
Demand Curve Product Set
The set of Products for which a Demand Curve will be generated. The 'Demand Curve Product Set' may or may not include the Focus Product, other Products with the same Brand, Store, Location, Family, Category or Platform as the Focus Product, and Products that are top Competitive Rivals with the Focus Product. The degree of Competitive Rivalry is determined by the sensitivity the Focus Product has to a change in Price by the other Products in the Market.
Number of Additional Products
The number of additional Products to include in the 'Demand Curve Product Set'. The user may specify the 'Demand Curve Product Set' include a 'Top Number of Rival Products' (that is, the most competitive Products) or the 'First Number of Listed Products' (that is, the Products listed first in the 'Input Product Array') or the 'Top Quantity Products' (reducing the set to include just the Products with the highest Quantity). In these cases, the actual number of Products to include in the 'Demand Curve Product Set' is determined by this option. Not all 'Demand Curve Product Set' selections require the 'Number of Additional Products' option.
Number of Demand Curve Sample Points
The number of Price Sample Points to test in order to generate one-side of the Demand Curve. By default, the left-hand-side of the Demand Curve will stretch from the Product's Cost (low-point) to the Product's current Price (mid-point). The right-hand-side of the Demand Curve will then stretch from the Product's current Price (mid-point) to the Product's Price plus Cost (high-point). Hence the actual number of Demand Curve samples = 2n + 1.
Override Price-Cost Gap Width with Fixed Price Percentage
The user may override the default generation of the Gap Width between the Sample Points along the Demand Curve. By default, Gap Width is calculated by dividing the distance between the Product's Price and the Product's Cost by the 'Number of Demand Curve Sample Points'. Instead, by checking this option, the user can define a custom Gap Width equal to a Fixed Percentage of the Product's Price (Cost is not required). A 5% Gap Width with 20 Sample Points will stretch the left-hand-side of the Demand Curve from the Product's current Price down to a Price of $0 (free).
Gap Width Fixed Percentage of Price
The Gap Width between the Sample Points along the Demand Curve as a percentage of the current Price located at the mid-point of the Curve. This value will be ignored unless the user selects to override the automatic generation of the Gap Width.

Market Size Options

Set Output Market Size
The output Market Size used to scale the Quantity sold, Revenue, and Profitability for each Product in the Market. The options include:
Set to total number of Customers in WTP Matrix (default) the output Market Size is determined by the number of Customers in the Input WTP Matrix.
Set to total number of Customers in Product Array the output Market Size is determined by the total number of Customers listed in the Input Product Array.
Fixed number of Customers (including 'No Sale') the output Market Size is set by the user in the 'Set Fixed Number of Customers' option below. The 'Set Fixed Number of Customers' Market Size includes 'No Sale' customers who didn't purchase any of the Products listed in the Input Product Array.
Fixed number of Customers (excluding 'No Sale') the output Market Size is set by the user in the 'Set Fixed Number of Customers' option below. The 'Set Fixed Number of Customers' Market Size does not include 'No Sale' customers - only customers who made an actual purchase.
Set Fixed Number of Customers
The output Market Size when the user selects the 'Fixed number of Customers' option from the list above.
Then Multiply Market Size by Scaling Factor
After the output Market Size has been determined from the list of options above, and the simulation has been run, the final output Market Size is re-scaled according to this scaling factor. Note that everything in the Market will grow / shrink at the same rate, including 'Capacity' and the number of 'No Sale' Products. If the scaling factor is 1.1 then the final output Market Size is increased by 10%. The final Market Size will be rounded to the nearest integer.

Maximize Options

Find Curve Maximum
The user can select to find the 'Is Max' maximization point within the 'Output Demand Curve' to find the maximum Profit, Revenue, or Quantity Sold.

Input Ports

Icon
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 track those Customers who are in the Market but have not yet purchased a Product. If the Product column is not found then the Row Identification (RowID) column will be used in place of the Product column.
  2. Price (double - required): The 'Static Price' of each Product in the Market. This 'Static Price' can be adjusted by the personalized 'Dynamic Price' found in the 'Input WTP Matrix'. Personalized Price = Static Price x PAV + PAF. For example, some Customers may be entitled to the percentage Discount found in the 'Price Adjustment Variable' (PAV) column, or some Customers may need to pay the personalized delivery charges found in the 'Price Adjustment Fixed' (PAF) column. The Static Price of the 'No Sale' Product, if included, should be zero. Products with missing Prices are deemed to be Out-of-Stock.
  3. Cost (double): The Product Cost is required for all Products in the 'Demand Curve Product Set' as well as all Products from the same Brands and same Stores as those in the Product Set. If the user sets the 'Gap Width Fixed Percentage' option in the dialog box then the Demand Curve will be built around just the Price.
  4. Description (string): The description of the Product or the full name of the Product if the Product field contains an identification number.
  5. Brand (string): The name of the Product Brand. This is required to calculate the aggregated Profit Maximizing Price with respect to all Products of the same Brand as those in the 'Demand Curve Product Set'.
  6. Store (string): The name of the Product Store. This is required to calculate the aggregated Profit Maximizing Price with respect to all Products of the same Store as those in the 'Demand Curve Product Set'.
  7. Location (string): The name of the Product Location. This is required to calculate the aggregated Profit Maximizing Price with respect to all Products of the same Location as those in the 'Demand Curve Product Set'.
  8. Family (string): The name of the Product Family. This is required to calculate the aggregated Profit Maximizing Price with respect to all Products of the same Family as those in the 'Demand Curve Product Set'.
  9. Category (string): The name of the Product Category. This is required to calculate the aggregated Profit Maximizing Price with respect to all Products of the same Category as those in the 'Demand Curve Product Set'.
  10. Platform (string): The name of the Product Platform. This is required to calculate the aggregated Profit Maximizing Price with respect to all Products of the same Platform as those in the 'Demand Curve Product Set'.
  11. Volume (double - optional): The 'Static Volume' of the Product relative to the Volume of other Products in the Market. For example, if a Product were a twin-pack then its Volume would be '2' while the Volume of the original Product would be '1' (default). Other scales could also be used, so that one Product might be 250 (ml) while another 500 (ml). But care with the scale should be taken as the Units are disregarded and the default of '1' will always be used if a Volume is missing. This 'Static Volume' field in the 'Input Product Array' is only important if an accompanying 'Dynamic Volume' field (or _VOL field) is found in the 'Input WTP Matrix'. Otherwise this field is ignored as Virtual Customers do not distinguish Products by the different Volume they require.
  12. Units (string - ignored): The Units of Measurement (UoM) associated with the Product's Volume. For example, the Units could be set to 'ml' when the Products are liquids or beverages. But note that this Units field is ignored and only provided as a convenience. No conversion is provided between different Units. The model will not understand, for instance, that 1 'Litre' contains twice as much Product as 500 'mL'.
  13. Capacity: The Capacity Constraint of each Product or a missing value if the Capacity has not been defined.
  14. Include (optional): A 'true' or 'false' string value indicating whether the Product might be included in the 'Demand Curve Product Set'. It still depends upon the user selection in the Configuration Dialog to include these Products.
Icon
Input 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. The total number of Virtual Available Customers is equal to the number of rows in the WTP Matrix. In addition to each of the Product's WTP Customer Distributions, this 'Input WTP Matrix' can also contain two types of 'Dynamic Price' and two types of 'Dynamic Cost' Distributions that depend upon the Customers who Purchase the Product. These personalized 'Dynamic Prices' and 'Dynamic Costs' adjust the 'Static Price' and 'Static Cost' found in the 'Input Product Array' to calculate the Product's Margin.
  1. Product01, Product02, etc (double): Each of the Products listed in the 'Input Product Array' should have a corresponding column in this 'Input WTP Matrix'. Each row represents a different Virtual Customer, and each value represents the Customer's Willingness To Pay (WTP) for each Product.
  2. Volume (double - optional): The personalized 'Dynamic Volume' of Product demanded by each Virtual Customer. For example, if the 'Input Product Array' contains a list of beverages of Volume 250ml, 330ml, 500ml, 750ml, and 1000ml then a Virtual Customer with a demanded Volume of '1000' could purchase a Quantity of either 4, 3, 2, 1, or 1 of the Products (respectively). If Customers are buying by Volume then they must purchase in whole number integers. For instance, if a Product had a Volume of 250ml but a Customer demanded 300ml then the Customer would only be able to buy 1 of that Product. Note that the excess Volume of 50ml received by the Customer is deemed to be of no value! The Price, WTP, and Consumer Surplus are all re-scaled by the relative Quantity demanded. When Customers buy in Volume then the Output Transactions field will differ from the Output Quantity field - otherwise these two values ought to be the same. Note that the 'Input Product Array' need not also contain a 'Volume' field. If the Product Volume is missing then the Product is presumed to be sold in Volumes of 1 Unit.
  3. _VOL (double - optional): The per-Product 'Dynamic Volume' (VOL) demanded by each Virtual Customer. This per-Product 'VOL' value will override the general 'Volume'. For example, a Virtual Customer buying laundry detergent might generally demand a 'Volume' of 2 (Litres) but might only demand a '_VOL' of 1 (Litre) for the concentrated detergent Product. If both of the 'Dynamic Volume' values ('Volume' and '_VOL') are missing then a default of '1' will be used.
  4. _PAV (double - optional): The Price Adjustment Variable (PAV) is the percentage adjustment to the Price (typically a Discount) a particular Customer would receive when they Purchase the Product. For example, if the Customer is entitled to a 10% Discount then the 'PAV' would be set to 0.90. The 'Price Adjustment Variable' column is identified by the Product's Name followed by a trailing 'PAV'. The 'PAV' designator can be upper-case or lower-case and may-or-may-not be separated by a space, underscore, or other single character. For example, 'Product_01_PAV' or 'Product 02 PAV' or 'Product03pav'.
  5. _PAF (double - optional): The Price Adjustment Fixed (PAF) is the fixed adjustment to the Product's Price. For example, if Customers pay different amounts for Shipping the Product then this could be modeled using the 'PAF' column. If the WTP Matrix contains both 'PAV' and 'PAF' columns, then the Price is first multiplied by the variable 'PAV' before adding the fixed 'PAF'. The 'Price Adjustment Fixed' column is also identified by the Product's Name followed by a trailing 'PAF' in a manner similar to the 'PAV' designator.
  6. _CTS (double - optional): The Cost To Serve (CTS) is the additional Cost that must be incurred when a Product is sold to a particular Customer. This is a Dynamic Cost as some Customers are cheaper to serve than others, and is only incurred if the Customer actually Purchases the Product. The 'Cost To Serve' column is identified by the Product's Name followed by a trailing 'CTS'. The 'CTS' designator can be upper-case or lower-case and may-or-may-not be separated by a space, underscore, or other single character. For example, 'Product_01_CTS' or 'Product 02 CTS' or 'Product03cts'.
  7. _CTM (double - optional): The Cost To Make (CTM) depends not upon the individual Customer but upon the number of Customers who Purchase the Product. This 'Cost To Make' can be used to simulate the Law of Diminishing Returns. Starting from the first row in the column, each 'Cost To Make' row represents the incremental Cost of manufacturing each additional Product. If the Product is sold ten-times, then the total Dynamic Cost is the sum of the first 10 CTM rows. The 'Cost To Make' column is also identified by the Product's Name followed by a trailing 'CTM' in a manner similar to the 'CTS' designator.

Output Ports

Icon
Demand Curve: The output Demand Curve table contains the data points to plot each Product's Demand Curve with respect to its own Profitability, to the Profitability of its same Brand, to the Profitability of its same Store, and to the Profitability of its same Location. The Demand Curve table will contain these columns:
  1. Product: The name of the Target Product from the 'Demand Curve Product Set'.
  2. Brand: The name of the Product Brand or a missing value if the Brand has not been defined.
  3. Store: The name of the Product Store or a missing value if the Store has not been defined.
  4. Location: The name of the Product Location or a missing value if the Location has not been defined.
  5. Family: The name of the Product Family or a missing value if the Family has not been defined.
  6. Category: The name of the Product Category or a missing value if the Category has not been defined.
  7. Platform: The name of the Product Platform or a missing value if the Platform has not been defined.
  8. Scenario: Whether the Quantity, Revenue, and Profit is calculated with respect to the 'Target Product' itself, to the 'Same Brand', to the 'Same Store', to the 'Same Location', to the 'Same Family', to the 'Same Category', to the 'Same Platform', or to the 'Entire Market'.
  9. Step: The Step Number along the sweep of the Demand Curve from the low-point to the mid-point to the high-point.
  10. Price: The Static Price variable as it sweeps across the Demand Curve.
  11. Cost: The Static Cost of each Product from both the 'Input Product Array' and the 'Input WTP Matrix' or a missing value if the Cost has not been defined. Average Cost = Static Cost + Average Cost To Serve (CTS) + Average Cost To Make (CTM). The Dynamic Cost will modify the 'Margin' field and depends upon the Customers who Purchase the Product and is averaged across the total Quantity Sold.
  12. Margin: The 'Average Profit Margin' of each Product including the Dynamic Prices and the Dynamic Costs, where: Average Profit Margin = Average Price - Average Cost.
  13. Quantity: The simulated number of Virtual Available Customers who selected each Product, or 'Same Brand' Product, or 'Same Store' Product, or 'Same Location' Product, or 'Same Family' Product, or 'Same Category' Product, or 'Same Platform', or 'Entire Market' Product depending upon the Scenario.
  14. Transactions: The simulated number of Transactions for each Product. By default, each Customer will purchase only a single Product, and the number of Transactions will equal the Quantity sold. Transactions and Quantity will only vary if Customers are purchasing by Volume. That is, the 'Input WTP Matrix' must contain either a 'Volume' field or at least one '_VOL' field so that Virtual Customers demand different Product Quantity.
  15. Share: The simulated Market Share as a percentage (%) of each Product based upon the 'Quantity' column but not including those customers who selected the 'No Sale' option.
  16. Revenue: The total Revenue generated from the simulated number of Virtual Available Customers who selected the Target Product. Revenue may be aggregated across the 'Same Brand', or 'Same Store', or 'Same Location', or 'Same Family', or 'Same Category', or 'Same Platform', or 'Entire Market' depending upon the Scenario.
  17. Profit: The total Profit generated from the simulated number of Virtual Available Customers who selected the Target Product. Profit may be aggregated across the 'Same Brand', or 'Same Store', or 'Same Location', or 'Same Family', or 'Same Category', or 'Same Platform', or 'Entire Market' depending upon the Scenario. Both Static and Dynamic Prices and Costs are included in the Profit.
  18. Is Max: A boolean flag used to indicate whether the Price variable in the row for the Target Product generates the maximum Profit. The total Profit may be maximized across all Products from the 'Same Brand', or from the 'Same Store', or from the 'Same Location', or from 'Same Family', or from 'Same Category', or from 'Same Platform', or from 'Entire Market' depending upon the Scenario. If Cost has not been provided in the Input Product Array then this 'Is Max' field will indicate the Revenue Maximizing Price.
Icon
Output KPI Indicators: The Output KPI Indicators contain Price Elasticity of Demand metrics from the Demand Curve results. Price Elasticity is calculated by comparing the percentage change in Demand due to a percentage change in Static Price. The samples are taken one-step-above and one-step-below around the current Static Price. The formula for Price Elasticity is: [ (Quantity[+1] - Quantity[-1]) / Quantity[0] ] / [ (Price[+1] - Price[-1]) / Price[0] ]. The Output KPI Indicators will contain these columns:
  1. Focus Product: The reference Product or 'If Product' that is experimenting with the Price Change in order to measure Price Elasticity.
  2. Product: The impacted Product or 'Then Product' whose demand for sales is impacted by the Price Change. When considering the impact to the same Brand, Store, Family, Location, Category, Platform, or overall Market then this field will contain such name.
  3. Indicator: The name of each Key Performance Indicator (KPI), including:
    Price Elasticity of Quantity: the Price Elasticity of Quantity due to a change in Static Price around the Current Price. Typically the Price Elasticity of Quantity is negative, indicating that an increase in Price will cause a decrease in Quantity sold. For example, if Price were to increase by 5% causing Quantity sold to decrease by 5% then the Price Elasticity = −5% / 5% = −1.0.
    Price Elasticity of Share: the Price Elasticity of Share due to a change in Static Price around the Current Price. Typically the Price Elasticity of Share is also negative.
    Price Elasticity of Revenue: the Price Elasticity of Revenue due to a change in Static Price around the Current Price. Typically the Price Elasticity of Revenue is also negative.
    Price Elasticity of Profit: the Price Elasticity of Profit due to a change in Static Price around the Current Price. Unlike the cases above, the Price Elasticity of Profit may be either positive or negative. A positive Price Elasticity of Profit would indicate that the Profitability of the Product would increase if the Price of the Product were increased, and that the Profit Maximizing Price is above the current Price. A negative Price Elasticity of Profit would indicate that the Profit Maximizing Price is below the current Price.
    By Product: Looks at the impact on Quantity, Share, Revenue, and Profit of the Product when the Price of that same Product is changed.
    By Brand: Looks at the overall impact on Quantity, Share, Revenue, and Profit for the same Brand when the Price of the Product is changed.
    By Store: Looks at the overall impact on the same Store when the Price of the Product is changed.
    By Market: Looks at the impact on the overall Market when the Price of the Product is changed. This metric indicates how many Customers will leave the Market if the Price of the Product were to be increased.
  4. Value: The final value of each Key Performance Indicator (KPI).
Icon
Price Sensitivity Array: Lists the degree by which a change in Price of each Target Product will impact of each of the other Impacted Product in the Market if the Profit Maximizing Price is used. The Price Sensitivity Array contains these columns:
  1. Product: The name of the Target Product from the 'Demand Curve Product Set' or the aggregated Brand, Store, Location, Family, Category, or Platform associated with the Target Product.
  2. If Product: The Target Product that is making a Price Change.
  3. Change Method: The method by which the Price, Profit Margin, or Cost of the Target Product was changed. The 'Change Method' will either be: After Purchases the name of the Product selected by each Virtual Customer row at the Profit Maximizing Price with respect to the 'Target Product' itself, After Max Brand the name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Brand', After Max Store, or After Max Location.
  4. Change Factor: The numeric degree by which the Price of the Target Product was changed.
  5. Price Change From: The original Static Price of the Target Product.
  6. Price Change To: The Profit Maximizing Static Price.
  7. Cost Change From: The original Static Cost of the Target Product.
  8. Cost Change To: The new Static Cost of the Target Product if setting the Profit Maximizing Price.
  9. Then Product: The other Impacted Product that was impacted by the Target Product's Price Change.
  10. Margin Change From: The original average Profit Margin of the Focus Product, where: Profit Margin = Personalized Price - Static Cost - Average Dynamic Cost. The Personalized Price is the 'Static Price' adjusted by the two types of 'Dynamic Price'. The 'Dynamic Cost' depends upon the Customers who Purchase the Product and is averaged across the total Quantity Sold.
  11. Margin Change To: The new average Profit Margin of the Focus Product at the Profit Maximizing Price.
  12. Quantity Change From: The original Quantity of the Focus Product.
  13. Quantity Change To: The new Quantity of the Focus Product at the Profit Maximizing Price.
  14. Quantity Change: The difference between the original Quantity and the new Quantity of the Focus Product.
  15. Quantity Change Percentage: The percentage difference between the original Quantity and the new Quantity of the Focus Product.
  16. Share Change From: The original Market Share of the Focus Product.
  17. Share Change To: The new Market Share of the Focus Product at the Profit Maximizing Price.
  18. Share Change: The difference between the original Market Share and the new Market Share of the Focus Product.
  19. Share Change Percentage: The percentage difference between the original Market Share and the new Market Share of the Focus Product.
  20. Revenue Change From: The original Revenue of the Focus Product.
  21. Revenue Change To: The new Revenue of the Focus Product at the Profit Maximizing Price.
  22. Revenue Change: The difference between the original Revenue and the new Revenue of the Focus Product.
  23. Revenue Change Percentage: The percentage difference between the original Revenue and the new Revenue of the Focus Product.
  24. Profit Change From: The original Profit of the Focus Product.
  25. Profit Change To: The new Profit of the Focus Product at the Profit Maximizing Price.
  26. Profit Change: The difference between the original Profit and the new Profit of the Focus Product.
  27. Profit Change Percentage: The percentage difference between the original Profit and the new Profit of the Focus Product.
Icon
Purchased Products List: A comparison between the original list of Products purchased by each Virtual Customer and the Products they purchased at the Profit Maximization point. The user can use the views to hilite the Customers of interest who switched their purchase decision. These Customers who switched as a result of the Price Sensitivity change can then be further analyzed. The Purchased Products List will contain these columns:
  1. Target Product: The name of the Target Product from the 'Demand Curve Product Set'.
  2. Before Purchases: The name of the Product selected by each Virtual Customer row at the current Price before the Demand Curves were generated.
  3. After Purchases: The name of the Product selected by each Virtual Customer row at the Profit Maximizing Price with respect to the 'Target Product' itself.
  4. After Max Brand: The name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Brand'.
  5. After Max Store: The name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Store'.
  6. After Max Location: The name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Location'.
  7. After Max Family: The name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Family'.
  8. After Max Category: The name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Category'.
  9. After Max Platform: The name of the Product selected by each Virtual Customer row at the aggregated Profit Maximizing Price with respect to the 'Same Platform'.

Best Friends (Incoming)

Best Friends (Outgoing)

Workflows

Installation

To use this node in KNIME, install Market Simulation nodes by Scientific Strategy for KNIME - Community Edition from the following update site:

KNIME 4.3

You don't know what to do with this link? Read our NodePit Product and Node Installation Guide that explains you in detail how to install nodes to your KNIME Analytics Platform.

Wait a sec! You want to explore and install nodes even faster? We highly recommend our NodePit for KNIME extension for your KNIME Analytics Platform. Browse NodePit from within KNIME, install nodes with just one click and share your workflows with NodePit Space.

Developers

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.