This node is currently not available in KNIME v5.3 — instead we’re showing this page for **KNIME v4.2**. You can use the version menu in the title bar to permanently switch your preferred version. This will also show the link to the update site.

The Tune Market node is designed to take raw Customer Distributions for Products found in the Market and quickly tune them to create a Willingness To Pay (WTP) Matrix. A WTP Matrix quantifies the maximum Price that each Customer would pay for each Product in the Market.

Tuning a Market involves adjusting the Differentiation offered by each Product being sold. Stores, Products, and Features all offer their own Differentiating qualities. Differentiation describes the shape of a Customer Distribution and is quantified by the 'Mean', 'SD' (Standard Deviation), and 'Correlation' of the distribution. The 'Mean' quantifies Vertical Differentiation, the 'SD' quantifies Strange Differentiation, and the 'Correlation' quantifies Horizontal Differentiation.

The tuning algorithm systematically alters the 'Mean' and 'SD' (Standard Deviation) tuning parameters of each Customer Distribution until the simulated Market matches actual Market conditions. The initial 'Mean' and 'SD' tuning parameters are set in the Input Product Array or the Input Customer Distribution Matrix. The incoming Product-level Customer Distributions in the 'Input Customer Distribution Matrix' can be Unit Distributions or partially-tuned Willingness To Pay (WTP) Distributions.

The Willingness To Pay (WTP) Matrix output of the Tune Market node can be fed directly into a Profit Engine node in order to optimize the Price of a target Product or generate a Product Demand Curve.

Additional information that can be used to improve the accuracy of tuning is Price Elasticity and Cross Elasticity measurements. Analyzing historical sales data can yield information about the Price Elasticity of individual Products, and about the Cross Elasticity between Products in the Market. Price Elasticity measures the relationship between the changing Price of Product A and the subsequent change in Quantity sold by the same Product A. Cross Elasticity measures the relationship between the changing Price of Product A and the subsequent change in Quantity sold by different Product B. The observed Price Elasticity and Cross Elasticity from the real-world Market can be added to the 'Input Price Elasticity' table to increase the accuracy of the tuned Market Simulation.

Price Elasticity can also include information about the 'Out of Stock' impact a Product can have on other Products. If one Product is Out of Stock then sales of the other Products should increase. The degree by which sales increase reflects the degree of Competitive Rivalry between the Products.

The tuning algorithm operates in two phases. During the first phase, just the Quantity values are taken into account. During the second phase, both the Quantity values and the Price Elasticity measurements are taken into account.

To speed tuning, several Tune Market nodes can be cascaded together with increasing numbers of Virtual Customers. In this way, the calculated tuning parameters become increasingly accurate at each step in the cascade. But to do this, the user should first go into the Market Size Options for all but the last Tune Market node in the cascade and 'Set Output Market Size' to 'Override Product Quantities with Product Array'. This ensures that next node will tune according to actual market conditions.

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

- Number of Tuning Adjustments
- The number of adjustments to the 'Mean' and 'SD' (Standard Deviation) tuning parameters of the incoming Customer Distributions. Only actual adjustments are counted towards the total - test adjustments are not counted unless they improve the simulated results.
- Starting Adjustment Percentage
- The percentage (%) by which the 'Mean' and 'SD' (Standard Deviation) of the incoming Distributions is adjusted. When no more adjustments to the tuning parameters improve the simulated results then this 'Adjustment Percentage' will halve and the tuning process will continue.
- Finishing Adjustment Percentage
- The final percentage (%) by which the 'Mean', 'Correlation', and 'SD' of the incoming Distributions is adjusted. The 'Adjustment Percentage' will halve until it drops below this final limit, at which point the tuning process will stop.
- Starting Mean and SD already set by Input WTP Matrix
- If checked (default), the starting Mean and SD for each Customer Distribution will be set by the Input WTP Matrix. Otherwise the Mean/SD columns from the Input Product Array will be used. Or, if there are no input Mean/SD columns, then the starting Mean and SD for each Customer Distribution will be proportional to the Product Price: the Starting Mean = 1.0X the Product Price, while the Starting SD = 0.5X the Product Price.
- Tuning Phases
- The Tuning Algorithm can operate in two phases. During the first phase, just the Quantity values are taken into account. During the second phase, both the Quantity values and the Price Elasticity measurements are taken into account. The 'Two Phases' method takes longer as the entire Tuning Algorithm needs to run twice. Select 'Two Phases' if it is important to minimize Quantity Error. Select 'One Phase' if it is more important to balance both Quantity Error and Price Elasticity Error against faster tuning.

- 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 the final output Market Size is scaled according to this scaling factor. 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 'Product Array' must have the following columns:**Product**(string): The name of the Product corresponding to a column of the same name in the 'Customer Distribution 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. If there is no 'No Sale' Product then it is assumed that all Customers in the Market purchase a Product.**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.**Cost**(double - optional): The 'Static Cost' of each Product required to calculate the 'Profit' in the 'Output Product Array'. The 'Static Cost' is the per-unit Cost for the Product that doesn't change regardless of how many Products are sold, and should be used by default. It can be contrasted with 'Dynamic Costs' which vary according to the Customers who Purchase the Product. This 'Static Cost' of the Product found in the 'Input Product Array' is added to the optional 'Dynamic Costs' found in the 'Input WTP Matrix'.**Capacity**(integer - optional): 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 - optional): The relative Quantity sold for each Product in the actual Market. The Quantity is treated as a percentage or a ratio. This Quantity from the actual Market will be compared against the Quantity from the simulated Market during the tuning process.**Mean**(double - optional): The starting Mean of the Product-level Customer Distribution. This Mean will be altered during the tuning process by the user-defined 'Adjustment Percentage'. If the Mean value is missing then the starting Mean will be set equal to the Product Price. The final tuned Mean will be sent to the output port.**SD**(double - optional): The starting Standard Deviation of the Product-level Customer Distribution. This 'SD' will be altered during the tuning process by the user-defined 'Adjustment Percentage'. If the Standard Deviation value is missing then starting Standard Deviation will be set to half of the Product Price. The final tuned 'SD' (Standard Deviation) will be sent to the output port.**Tune**:*(optional)*Contains special tuning instructions for the Product. The value of this 'Tune' field can be set to one of the following (not case-sensitive):**True**adjust both the 'Mean' and 'SD' (Standard Deviation) of this Product**False**don't adjust the 'Mean' or 'SD' (Standard Deviation) of this Product**Mean**only adjust the 'Mean' but don't adjust the 'SD' (Standard Deviation)**SD**only adjust the 'SD' (Standard Deviation) but don't adjust the Mean**Both**adjust both the 'Mean' and 'SD' (Standard Deviation) of this Product (same as 'True')**Neither**don't adjust the 'Mean' or 'SD' (Standard Deviation) of this Product (same as 'False')**Weight**(optional): A numeric value to weigh the importance of the Quantity Error of each Product during the tuning process. If a weight is not provided then a Tuning Importance weight of '1' will be used. A large weight can be placed upon Products having known historic sales Quantities, while a small weight can be placed upon Competitor Products when the Quantity sold is merely an estimate.

**Input Customer Distribution Matrix**(double): The starting set of Product-level Customer Distributions used to build the Output Willingness To Pay (WTP) Matrix. The incoming Customer Distributions can be either Unit Distributions or a partially-tuned WTP Matrix. Each row corresponds to a Virtual Customer and contains the customer's scaled Willingness To Pay (WTP). 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 Customer Distribution Matrix'. 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. Each row represents a different Virtual Customer, and each value represents the Customer's Willingness To Pay (WTP) for each Product.**_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.

**Input Price Elasticity**:*(optional)*Additional measurements that can be used to tune the Market Simulation. Price Elasticity measures the relationship between the changing Price of Product A and the subsequent change in Quantity sold by the same Product A. Cross Elasticity measures the relationship between the changing Price of Product A and the subsequent change in Quantity sold by different Product B. The 'Input Price Elasticity' must have the following columns:**If Product**(string): The name of the trigger 'If Product' that changes Price. The 'If Product' must correspond to a row in the Input Product Array, and to a column in the 'Input Customer Distribution Matrix'.**Price Change Percentage**(double): The percentage difference between the original Price and the new Price of the trigger 'If Product'. A percentage of 10% is entered as 0.10 decimal. If including the sales impact a Competitive Product has when it is 'Out of Stock' on other Products, set this 'Price Change Percentage' to a very high value such as 9999.99 decimal. This effectively sets the Competitive Product Price to infinity as would be the case if the Product was Out of Stock.**Then Product**(string): The name of the impacted 'Then Product' that was impacted by the Price Change of the trigger 'If Product'. For Price Elasticity, the name of the 'If Product' and the 'Then Product' would be the same.**Quantity Change Percentage**(double): The percentage difference between the original Quantity and the new Quantity of the impacted 'Then Product'. A percentage of 10% is entered as 0.10 decimal. Note that the number sign is very important. Price Elasticity typically has different signs, such that a decrease in Price would result in an increase in Quantity. But Cross Elasticity would have the same sign, such that a decrease in the Price of one Product would result in a decrease in sales by another Product.**Weight**(optional): A numeric value to weigh the Quantity Error between the inputed Price Elasticity measurement and the forecasted Price Elasticity from the Market Simulation being tuned. If a weight is not provided then a weight of '1' will be used. A large weight should be placed upon Price Elasticity measurements that closely fit the historic data. The weighted influence of the Price Elasticity measurement can be found in the 'Output Price Elasticity' table, and in the 'Output KPI Indicators' table.

**Output Product Array**: The output Product Array corresponds to the input Product Array but has updated values in the 'Mean' and 'SD' columns that reflect the tuned results. The 'Quantity' column will also be updated according to the Market Size options. In addition, the Product Array will contain these additional columns:**Product**: The name of the Product corresponding to the Input Product Array.**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 tuning 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 tuning 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.**Capacity**: The Capacity Constraint of each Product or a missing value if the Capacity has not been defined.**Quantity**: The simulated number of Customers who selected each Product, including those who selected the 'No Sale' option.**Quantity Error**: The absolute value of the difference between the actual input 'Quantity' and the simulated output 'Quantity'. Note that the Quantity Error for the 'No Sale' Product is not considered unless the user explicitly includes the 'No Sale' Product in the Input Product Array and sets a target Quantity to be greater than zero.**Share**: The simulated Market Share 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.**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.

**Output Willingness To Pay Matrix**: The tuned Willingness To Pay (WTP) Customer Distribution matrix for each Product column in the Market by each Virtual Customer row. The Output WTP Matrix quantifies the maximum Price that each Customer would pay for each Product in the Market. This WTP Matrix can be directly connected to a downstream 'Simulate Market' or 'Profit Engine' node.**Output KPI Indicators**: The Output KPI Indicators contain select information about the tuning process and the quality of the final results. The Output KPI Indicators will contain these columns:**Product**: The Product associated with the Key Performance Indicator (KPI). If the KPI refers to the overall results and not to a specific Product then this field will be left blank.**Indicator**: The name of each Key Performance Indicator (KPI), including:

●*Iteration Count*: the number of iterations used during the tuning process.

●*Final Adjustment*: the final percentage (%) by which the 'Mean', 'Correlation', and 'SD' (Standard Deviation) of the incoming Distributions were adjusted.

●*Market Size*: the total Expected Quantity of purchased Products.

●*Virtual Quantity Error*: the unscaled difference between the Expected Quantity and the Simulated Quantity purchased by the Virtual Customers.

●*Virtual Weighted Quantity Error*: the difference between the Expected Quantity and the Simulated Quantity purchased by the Virtual Customers weighed by the Tuning Importance of each Product.

●*Sum of Total Error*: the total sum of 'Sum of Input Actual-Weighted Quantity Error' and the 'Sum of Price Elasticity Quantity Error'.

●*Sum of Input Actual Quantity Error*: the sum of the Quantity Error between the Actual Quantity and the Simulated Quantity for all Products in the Market weighed by their Tuning Importance.

●*Sum of Price Elasticity Quantity Error*: the sum of the Price Elasticity Quantity Change Weighted Error. Price Elasticity Quantity Error values for individual Products can be found in the 'Output Price Elasticity' table. The importance of the Price Elasticity Quantity Errors can be adjusted by the Weight value in the input table.**Value**: The final value of each Key Performance Indicator (KPI).

These Output KPI Indicators are also output as Flow Variables:**TuneMarket.IterationCount**Number of Tuning Iterations: The final count of the adjustments made to the 'Mean' and the 'SD' (Standard Deviation) tuning parameters of the incoming Customer Distributions. Only adjustments that result in an improved 'Error' are counted.**TuneMarket.FinalAdjustment**Final Adjustment Percentage: the percentage adjustment being made to the 'Mean' and 'SD' of all the Product Customer Distributions in the Market.**TuneMarket.SumOfError**Sum of Error: the sum of all 'Error' values in the output Product Array.**TuneMarket.SumOfErrorSquared**Sum of Error Squared: the sum of all 'Error Squared' values in the output Product Array.

**Output Price Elasticity**: Compares the measured Input Price Elasticity against the forecasted Output Price Elasticity from the tuned Market Simulation model. The Output Price Elasticity contains these columns:**If Product**: The Trigger Product that is making a Price Change.**If Brand**: The Brand of the Trigger Product.**If Store**: The Store of the Trigger Product.**If Location**: The Location of the Trigger Product.**If Family**: The Family of the Trigger Product.**If Category**: The Category of the Trigger Product.**If Platform**: The Platform of the Trigger Product.**Change Method**: Set to 'Input Price Elasticity' to indicate that the Price Change was set by the input table.**Price Change From**: The original 'Static Price' of the Trigger Product.**Price Change To**: The new 'Static Price' of the Trigger Product from the Input Price Elasticity table.**Price Change**: The difference between the original Price and the new Price of the Trigger Product.**Price Change Percentage**: The percentage difference between the original Price and the new Price of the Trigger Product.**Then Product**: The other Impacted Product that was impacted by the Trigger 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.**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.**Quantity Change Error**: The difference between the measured Quantity Change from the Input Price Elasticity table and the forecasted output Quantity Change from the tuned Market Simulation.**Quantity Change Weighted Error**: The difference between the measured input Quantity Change the forecasted output Quantity Change multiplied by the input Weight. This Quantity Change Weighted Error is used by the tuning algorithm when finding the minimum error between real-world observations and the Market Simulation model.

- This node has no views

- CN-172 Tune Market Node v05KNIME Hub
- CS-124 Cola Market 2015 Product Tuning v05KNIME Hub
- CS-133 SUV Market 2013 Product Tuning v05KNIME Hub

- No links available

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:

v4.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.**