The Price Sensitivity node is designed to take a set of Products in a Market and determine the sensitivity each Product has to a change in Price by each of the other Products.

Price Sensitivity is also known as the Price Elasticity of Demand. It measures the degree to which the Quantity for a Product changes as its Price changes. Quantity general decreases as the Price of the Product become more expensive. Products that are highly sensitive to Price will have their Quantities drop sharply after a small Price increase. Products that are insensitive to Price will experience only a modest decline in Quantity after large Price increases. Cross Elasticity measures the Quantity change in the first Product due to a Price change in the second Product.

This 'Price Sensitivity' node systematically raises and lowers the Price of each individual Product. Each Target Product is taken in turn such that the Price of only one Product is changed in any given scenario. The impact of the Price change on each of the other Impacted Product's Market Share and Profitability is then measured.

The Price Sensitivity node can also handle two special scenarios: (a) the Target Price is set to be 'Free' and (b) the Target Product is set to be 'Out of Stock'.

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

- Change Price Method
- The method by which the Price of the Target Product will be changed. The Price can be raised/lowered by a percentage (default). The Profit Margin can be raised/lowered by a percentage (Cost data is required). Or the Price can be raised/lowered by a fixed amount. If the Price is to be set to 'Free' then the Target Product's Price is set to zero. If the Product is set to be 'Out of Stock' then the Target Product's Price is set to be infinity.
- Change Factor
- The numeric degree by which the Price is changed. If Price is being raised/lowered by a percentage then the Change Factor is this percentage (%). If Price is being raised/lowered by a fixed amount then the Change Factor is this fixed amount.
- Save Randomizing Seed
- A Randomizing Seed can be saved to ensure Customer Distributions are always simulated in the same way. When Customers rank their preferred Products, a tiny random tie-breaker is added to all values in the Input WTP Matrix. Setting this Randomizing Seed ensures consistent results can be reproduced. The 'New' button will generate a new Randomized Seed. Disable the CheckBox to generate a new Randomizing Seed each time the node is run. Manually set a new Randomizing Seed if this node is copied to avoid adding bias to the overall model.

- 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.**Override Product Quantities with Product Array**the simulated output Quantity of each Product is overridden with the Quantity found 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.

**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:**Product**(string - required): 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.**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.**Cost**(double): The Product Cost is only required if the 'Price Change Method' is set to raise/lower the Profit Margin by a percentage. Otherwise the Cost column is not required.**Holding Cost**(double - optional): At the end of each period, except the last Liquidation Period, unsold Products with residual Inventory Capacity accumulate a Holding Cost that reduces the overall Profitability of the Product. Holding Cost can also be thought of the Opportunity Cost of not having the capital tied up in Inventory available for investment in other projects. Products that do not have a Capacity Constraint will not be penalized a Holding Cost. If this field is missing then a zero Holding Cost is assumed.**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.**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'.**Capacity**(integer): The Capacity Constraint for the Product. A Product's Capacity may be limited by manufacturing constraints or by inventory levels. If the Capacity level is provided then the Quantity sold for the Product cannot exceed the Capacity limitation. If Capacity is not provided, or Capacity is negative, then the Quantity sold for the Product is not limited. Capacity will be limited relative to the total number of Customers in the 'Market Size' Configuration Dialog.**Quantity**(integer): A reference Quantity sold for each Product in the actual (real-world) Market. If the Quantity is provided then an 'Quantity Error' will be returned as part of the results in the Output Product Array. The Quantity is required if the 'Market Size Option' is set to 'Set to total number of Customers in Product Array'. Change the 'Market Size Option' to 'Set to total number of Customers in WTP Matrix' to avoid specifying a Quantity in the 'Input Product Array'.**Transactions**(integer): A reference number of Transactions for each Product in the actual (real-world) Market. Transactions are only relevant if Customers purchase by Volume. That is, the 'Input WTP Matrix' must contain either a 'Volume' field or at least one '_VOL' field. Otherwise each Customer will purchase only a single Product, and the number of Transactions will equal the Quantity sold.**Include**(boolean): Set to FALSE to exclude a Product from the Price Sensitivity calculation only. This does NOT exclude a Product from the Market Simulation. All Products are included by default.

**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.**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.**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.**_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. Negative values will be replaced with a Demand Volume of zero '0'. If both of the 'Dynamic Volume' values ('Volume' and '_VOL') are missing then a default of '1' will be used.**_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'.**_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.**_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'.**_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 Product Array**: The 'Output Product Array' corresponds to the 'Input Product Array' but is updated to reflect the results from the Market Simulation. The Product Array will contain these columns:**Product**: The name of the Product corresponding to the Input Product Array.**Brand**: The name of the Product Brand or a missing value if the Brand has not been defined.**Store**: The name of the Product Store or a missing value if the Store has not been defined.**Location**: The name of the Product Location or a missing value if the Location has not been defined.**Family**: The name of the Product Family or a missing value if the Product Family has not been defined.**Category**: The name of the Product Category or a missing value if the Category has not been defined.**Platform**: The name of the Product Platform or a missing value if the Platform has not been defined.**Price**: The 'Static Price' of each Product from the 'Input Product Array'. The 'Dynamic Price' from the 'Input WTP Matrix' is*NOT*included in this output 'Price' field so as to allow multiple Market Simulation nodes to be chained together. Instead the 'Dynamic Price' is accounted for in the output 'Margin' field.**Cost**: The 'Static Cost' of each Product from the 'Input Product Array' or a missing value if the Cost has not been defined. The 'Dynamic Cost' from the 'Input WTP Matrix' is*NOT*included in this output 'Cost' field so as to allow multiple Market Simulation nodes to be chained together. Instead the 'Dynamic Cost' is accounted for in the output 'Margin' field.**Margin**: The average Profit Margin of each 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.**Volume**: The given 'Static Volume' of the Product relative to the Volume of other Products in the Market or '1' if the Volume has not been defined in the input.**Units**: The given Units of Measurement (UoM) associated with the Product's Volume.**Capacity**: The Capacity Constraint of each Product or a missing value if the Capacity has not been defined. When the 'Holding Cost' for the Product has been set, Capacity will be treated as Inventory and the Residual Capacity after Quantity sold will be returned.**Quantity**: The simulated number of Customers who selected each Product, including those who selected the 'No Sale' option.**Error**: The absolute value of the difference between the actual input 'Quantity' and the simulated output 'Quantity'. The Error can be weighed and summed by downstream nodes to determine the 'Total Error' has part of the Tuning Loop to tune the Market Model. Note that the Quantity Error for the 'No Sale' Product is not calculated unless the user explicitly includes the 'No Sale' Product in the Input Product Array and sets a target Quantity to be greater than zero.**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.**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.**COGS**: The*Cost of Goods Sold*(COGS) for the Product is calculated as the Product's 'Cost' and final 'Quantity'. COGS is only calculated if the Product's 'Cost' was provided in the 'Input Product Array'. Both the Static Costs and Dynamic Costs are included in the COGS.**COGH**: The*Cost of Goods Held*(COGH) for the Product is calculated from the Product's 'Holding Cost' and residual 'Capacity' (after selling 'Quantity'). COGH is only calculated if both the Product's 'Holding Cost' and 'Capacity' are provided in the 'Input Product Array'.**Revenue**: The Product's Revenue is calculated as the Product's 'Price' and final 'Quantity'.**Profit**: The Product's Profitability is only calculated if the Product's 'Cost' was provided in the 'Input Product Array'. Both Static and Dynamic Prices and Costs are included in the Profit. In addition, if both the Product's 'Holding Cost' and 'Capacity' were provided, then the COGH is also calculated and subtracted from the Profit.**Sensitivity**: The Price Sensitivity of the Product. This is calculated as the percentage change in Quantity divided by the percentage change in Price. The Quantity change is calculated as the Quantity at [Price * (1 - Change Factor)] minus the Quantity at [Price * (1 + Change Factor)] divided by the original Quantity. Sensitivity = [ (q2-q1)/q0 / (p2-p1)/p0 ]. To measure the percentage Quantity change given a 1% change in Price, the user will need to set the Change Factor = 0.5%. More detailed Price Elasticity and Cross Elasticity calculations can be made from the 'Output Price Sensitivity Array' table.

**Output 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. The Price Sensitivity Array contains these columns:**If Product**: The Target Product that is making a Price Change.**Change Method**: The method by which the Price, Profit Margin, or Cost of the Target Product was changed.**Change Factor**: The numeric degree by which the Price of the Target Product was changed.**Price Change From**: The original Static Price of the Target Product.**Price Change To**: The new Static Price of the Target Product after using the Change Price Method to change by the Change Factor.**Price Change**: The difference between the original Price and the new Price of the Target Product.**Price Change Percentage**: The percentage difference between the original Price and the new Price of the Target Product.**Cost Change From**: The original Static Cost of the Target Product.**Cost Change To**: The new Static Cost of the Target Product if it was changed by the Change Factor.**Cost Change**: The difference between the original Cost and the new Cost of the Target Product.**Cost Change Percentage**: The percentage difference between the original Cost and the new Cost of the Target Product.**Then Product**: The other Impacted Product that was impacted by the Target Product's Price Change.**Then Brand**: The Brand of the other Impacted Product.**Then Store**: The Store of the other Impacted Product.**Then Location**: The Location of the other Impacted Product.**Then Family**: The Family of the other Impacted Product.**Then Category**: The Category of the other Impacted Product.**Then Platform**: The Platform of the other Impacted Product.**Correlation**: The Correlation between the 'If Product' and the 'Then Product' when comparing their respective WTP Distributions.**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.**Margin Change To**: The new average Profit Margin of the Focus Product after its positioning was altered.**Quantity Change From**: The original Quantity of the Focus Product.**Quantity Change To**: The new Quantity of the Focus Product after its positioning was altered.**Quantity Change**: The difference between the original Quantity and the new Quantity of the Focus Product.**Quantity Change Percentage**: The percentage difference between the original Quantity and the new Quantity of the Focus Product.**Share Change From**: The original Market Share of the Focus Product.**Share Change To**: The new Market Share of the Focus Product after its positioning was altered.**Share Change**: The difference between the original Market Share and the new Market Share of the Focus Product.**Share Change Percentage**: The percentage difference between the original Market Share and the new Market Share of the Focus Product.**Revenue Change From**: The original Revenue of the Focus Product.**Revenue Change To**: The new Revenue of the Focus Product after its positioning was altered.**Revenue Change**: The difference between the original Revenue and the new Revenue of the Focus Product.**Revenue Change Percentage**: The percentage difference between the original Revenue and the new Revenue of the Focus Product.**Profit Change From**: The original Profit of the Focus Product.**Profit Change To**: The new Profit of the Focus Product after its positioning was altered.**Profit Change**: The difference between the original Profit and the new Profit of the Focus Product.**Profit Change Percentage**: The percentage difference between the original Profit and the new Profit of the Focus Product.

**Output Price Elasticity Matrix**: The 'Output Price Elasticity Matrix' is a symmetric matrix which maps both the 'Price Elasticity' and 'Cross Elasticity' for each Product in the Market. The 'Output Price Elasticity Matrix' contains these columns:**Scenario**: Whether the Elasticity is calculated relative to Quantity, Revenue, or Profit. By default, Elasticity is measured as the responsiveness of the*Quantity*demanded relative to a change in Price. But Elasticity can also be measured as the responsiveness of the*Revenue*or*Profit*to a change in Price.**If Product**: The Target Product that is making a Price Change. Each 'If Product' row is compared against each 'Then Product' column.**Price Elasticity**: Price Elasticity measures the responsiveness of the Quantity, Revenue, or Profit of a Product relative to a change in the Product's Price. Price Elasticity is calculated as the change in Quantity over the change in Price, where the change in Quantity and Price have been calculated by this node using both the negative and positive 'Change Factor' defined by the user. Price Elasticity values are almost always negative and are located along the diagonal of the 'Output Price Elasticity Matrix' where the 'If Product' matches the 'Then Product'.**Cross Elasticity**: Cross Elasticity measures the responsiveness of a Product's Quantity, Revenue, or Profit relative to a change in a*different*Product's Price. Cross Elasticity is calculated as the change in Column-Product's Quantity over the change in Row-Product's Price (that is, the 'If Product' Price). Cross Elasticity also calculated using both the negative and positive 'Change Factor' defined by the user. Cross Elasticity values are almost always positive and are located off the diagonal of the 'Output Price Elasticity Matrix'.

**Output Purchased Products List**: The 'Output WTP Matrix' made up of the Customer Distributions for each Product in the Market. The Output WTP Matrix is equivalent to the 'Input WTP Matrix' and has been provided as a convenience to further calculations by downstream nodes. The Output WTP Matrix will contain these additional columns:**Purchased**: The name of the Product Purchased by each Virtual Customer. If the Customer didn't Purchase any Product then this will be set to 'No Sale'. 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.

- Market Impacts Product
- Lists the impact all Products in the Market have on the Quantity of a selected Impacted Product.
- Target Impacts Market
- Lists the impact a selected Target Product will have on the Quantity of all other Products in the Market.

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.

To use this node in KNIME, install the extension Market Simulation nodes by Scientific Strategy for KNIME - Community Edition from the below update site following our NodePit Product and Node Installation Guide:

v5.2

A zipped version of the software site can be downloaded here.

Deploy, schedule, execute, and monitor your KNIME workflows locally, in the cloud
or on-premises – with our brand new **NodePit Runner**.

Do you have feedback, questions, comments about NodePit, want to support this platform, or want your own nodes or workflows listed here as well? Do you think, the search results could be improved or something is missing? Then please get in touch! Alternatively, you can send us an email to mail@nodepit.com, follow @NodePit on Twitter or botsin.space/@nodepit on Mastodon.

**Please note that this is only about NodePit. We do not provide general support for KNIME — please use the KNIME forums instead.**