The Bundle Generator node adds a new Bundled Product to both the 'Output Product Array' and the 'Output WTP Matrix'. The Willingness To Pay (WTP) each individual Customer has for the Bundle is a scaled-sum of the WTP the same Customer has for each of the selected Products within the Bundle.

Generating Product Bundles can help the user explore ways to increase the sales of an existing range of Products. The Bundle should increase the total Quantity sold without merely providing a discount to existing Customers as this *Cannibalization* may cause total Profitability to decrease.

How to scale individual Customer WTP values depends upon how much additional value the Bundle provides to Customers. In most cases, Customers will suffer from Diminishing Marginal Utility. That is, each additional Product added to the Bundle is less-and-less interesting to Customers. However, in some cases, Bundling together Products can increase the Marginal Value of each. For example, a Customer buying a Bundle of stereo equipment will be confident that each of the components will work together.

There are two ways the Bundle Generator node can scale WTP values:

- by applying a general 'Scale Scenario' rule to the simple sum of Product WTP values; and
- by applying Booster/Diminisher adjustment factors to individual Products within the Bundle depending upon their relative value to Customers, and other Attributes.

Applying a general 'Scale Scenario' rule is useful when the value of the Bundle will be some fraction of the sum of included Products. For example, Customers may, on average, value the Bundle 15% less than the individual Products. Note that firms may still be willing to sell this Bundle at a 15% discount to encourage Customers to buy additional Products that they wouldn't otherwise buy.

Applying additional Booster/Diminisher adjustment factors can be a useful way to fine-tune the scaling. For example, if a Bundle includes two Products from the same Category then the Customer may more heavily discount the value of the second Product as they'll already be able to consume the value of the first Product.

The Booster/Diminishers work differently than the 'Scale Scenario' rule. The Scale Scenario starts with an aggregated WTP sum and then scales it. The Booster/Diminishers work at a deeper level by looking at the individual WTP value of each Customer for each Product. For example, imagine a Product that you only need to buy once. If you came across a bundle with two of them, then the second Product is worthless to you. This situation would be better handled by a Booster/Diminisher. Setting the 'All Products Booster / Diminisher' to 0.0 would reduce each Customer's WTP for the Bundle down to the level of just the most valuable Product within the Bundle - eliminating the value of all other Products. Note that the 'Bundle Generator' node can apply both the Booster/Diminishers and the 'Scale Scenario' rule, but the Booster/Diminishers are applied first.

The act of Bundling, itself, already changes the nature of the Product Differentiation offered without any scaling. Bundling has the effect of *averaging* the value a Customer places upon a set of Products. For example, if a Customer has a relatively high WTP for the first Product but a low WTP for the second Product, then the Customer's aggregated WTP for the two Products will be closer to the overall market average. In terms of Product Differentiation, Bundling increases Vertical Differentiation (that is, the mean of the summed WTP) but reduces the relative Strange Differentiation (the standard deviation of the summed WTP) and reduces Horizontal Differentiation (the correlation difference to other Products).

Several Bundles can be generated simultaneously by specifying a list of Bundle Names along with included Product Names in the optional 'Input Bundle Products' table. Alternatively, several Bundle Generator nodes can be cascaded one after the other, with each generating just a single Bundle as specified by the 'Products to Include' column selector.

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

- Name of Product Bundle
- The name of the Bundle of Products to add to 'Output Product Array'. The Bundle's Brand, Store, Price, Cost, Quantity and other attributes can be set by including the Bundle Name in the 'Input Product Array'. Multiple Bundles can be created by attaching an optional 'Input Bundle Products' table to the node.
- Select Products to include in Bundle
- Select the set of Products from the 'Input WTP Matrix' to include in the Bundle. The WTP of each individual Product will be added to the value of the Bundle before the WTP sum is scaled. If the optional 'Input Bundle Products' table has been connected to the node then these Product selections will be ignored.
- Bundle Scale Scenario
- The method by which the Customer values in the Bundle's output WTP Distribution will be changed. The WTP of the Bundle is first set to the sum of the selected Product Distributions found in the 'Input WTP Matrix'. Each Customer value can then be raised/lowered by a fixed or variable amount, or can trend towards a value. The options include:
**No Change**: The individual Customer WTP value remains unchanged.**Set to Fixed Value**: Set the individual Customer WTP value to the Fixed Value.**Set to Variable Value**: Set the individual Customer WTP value to the value in the corresponding row of another Customer Distribution.**Add Fixed Value**: Add the Fixed Value to the existing individual Customer WTP value.**Add Variable Value**: Add the value in the corresponding row of another Customer Distribution to the current individual Customer WTP value .**Add both Fixed Value and Variable Value**: Add the Fixed Value then add the Variable Value to the current individual Customer WTP value .**Add Fixed Value Randomly by Fixed Rate**: Randomize the fraction of the Fixed Value added to each WTP according to the Fixed Rate (0.0 = No Randomization, 1.0 = Highest Randomization = add a double-fraction of the Fixed Value to some Customers and add a zero-fraction to other Customers).**Add Fixed Value by Variable Rate**: Scale the Fixed Value according to the Variable Rate then add it to the individual Customer WTP value. The higher the Variable Rate row, the more of the Fixed Value will be allocated to that Customer. All Variable Rate values should be positive (negative Rates will be ignored)..**Spread Fixed Value Evenly**: Spread out the Fixed Value evenly across all Customers by adding a proportional fraction of the Fixed Value to each WTP in the Customer Distribution.**Spread Fixed Value Evenly then Add Variable Value**: Spread out the Fixed Value evenly then add the Variable Value to each Customer's WTP.**Spread Fixed Value Randomly by Fixed Rate**: Randomize the fraction of the Fixed Value spread across each WTP according to the Fixed Rate (0.0 = No Randomization, 1.0 = Highest Randomization = add a double-fraction to some Customers and add a zero-fraction to other Customers).**Spread Fixed Value by Variable Rate**: Spread out the Fixed Value according to the Variable Rate. The higher the Variable Rate row, the more of the Fixed Value will be allocated to that Customer. All Variable Rate values should be positive (negative Rates will be ignored)..**Multiply by Fixed Rate then Add Fixed Value**: Multiply the individual Customer WTP value by the Fixed Rate then Add the Fixed Value.**Multiply by Fixed Rate then Add Variable Value**: Multiply the individual Customer WTP value by the Fixed Rate then Add the Variable Value from the same row in another Customer Distribution.**Multiply by Variable Rate then Add Fixed Value**: Multiply the individual Customer WTP value by the Variable Rate from the same row in another Customer Distribution then Add the Fixed Value.**Multiply by Variable Rate then Add Variable Value**: Multiply the individual Customer WTP value by the Variable Rate from the same row in another Customer Distribution then Add the Variable Value.**Shift towards Fixed Value at Fixed Rate**: Shift the individual Customer WTP value towards the Fixed Value at the Fixed Rate.**Shift towards Fixed Value at Variable Rate**: Shift the individual Customer WTP value towards the Fixed Value at the Variable Rate found in another Customer Distribution.**Shift towards Variable Value at Fixed Rate**: Shift the individual Customer WTP value towards the Variable Value found in another Customer Distribution at the Fixed Rate.**Shift towards Variable Value at Variable Rate**: Shift the individual Customer WTP value towards the Variable Value at the Variable Rate where both Variables are found in other Customer Distributions. - Fixed Value
- This Fixed Value can be used to set the Customer's WTP, added to the Customer's WTP, or spread across all Customers in the Bundle's output Customer Distribution. The Customer's WTP can also be shifted towards this Fixed Value by either a Fixed or Variable Rate.
- Fixed Rate
- This Fixed Rate can be multiplied to the Customer's existing WTP. Or the Customer's WTP can be shifted towards another value at this Fixed Rate. For example, a Fixed Rate of 0.2 will shift the Customer's WTP by 20% of the distance towards the final value. A Fixed Rate of -0.2 will shift the Customer's WTP by 20% of the distance away from the value, while shifting at a rate greater than 1.0 will trigger a warning. If Spreading the Fixed Value Randomly by the Fixed Rate, then this Fixed Rate needs to be set between 0.0 and 1.0. A 'Spread By Fixed Rate' = 0.0 provides no randomization, while a 'Spread By Fixed Rate' = 1.0 will randomly spread between 0% and 200% of the Fixed Value across all Customers.
- Variable Value Column
- The row value found in this Customer Distribution is used as a Variable Value. The Variable Value can be added to the Customer's WTP or can set the Customer's WTP, or the Customer's WTP can be shifted towards this Variable Value by either a Fixed Rate or Variable Rate.
- Variable Rate Column
- The row value found in this Customer Distribution is used as a Variable Rate. The Variable Rate can be multiplied to the Customer's WTP, or can be the rate at which the Customer's WTP is shifted towards either a Fixed Value or Variable Value.

- All Products Booster / Diminisher
- Boost or Diminish the WTP of all the Customers' secondary Products - that is, all of the ranked Products after each Customer's highest valued Product. Starting with the highest WTP Product for each Customer, the algorithm will go down the ranked list of Products and either Boost or Diminish the WTP value of each subsequent Product. If the Booster = 0.9 then the value of the Customer's second Product in the Bundle will be reduced by 10% (WTP x 0.9). The Booster/Diminisher is applied exponentially, so the value of the Customer's third Product will be reduced by 19% (WTP x 0.9 x 0.9), and the fourth Product by 27% (WTP x 0.9 x 0.9 x 0.9).
- Same Brand Booster / Diminisher
- Boost or Diminish the WTP of secondary Products in the Bundle having the same Brand. Booster = 1.0 means that the WTP of the Bundle will be unchanged and set by the Bundle Scale Scenario in the Configuration Dialog. Booster = 2.0 means that Products having the same Brand as the most valuable Product in the Bundle will double their own WTP contribution. Booster = 0.0 means that additional Products having the same Brand add no value to the Bundle. Booster = 0.8 is typical, and indicates that each subsequent Product having the same Brand adds only 80% of its WTP to the Bundle. Boosters less than 1.0 are used when Customers suffer from Diminishing Returns.
- Same Store Booster / Diminisher
- Boost or Diminish the WTP of secondary Products in the Bundle from the same Store. Booster = 0.80 will diminish the WTP of subsequent same-Store Products by 20%.
- Same Location Booster / Diminisher
- Boost or Diminish the WTP of secondary Products in the Bundle from the same Location. Booster = 0.80 will diminish the WTP of subsequent same-Location Products by 20%.
- Same Family Booster / Diminisher
- Boost or Diminish the WTP of secondary Products in the Bundle from the same Family. Booster = 0.80 will diminish the WTP of subsequent same-Family Products by 20%.
- Same Category Booster / Diminisher
- Boost or Diminish the WTP of secondary Products in the Bundle from the same Category. Booster = 0.80 will diminish the WTP of subsequent same-Category Products by 20%.
- Same Platform Booster / Diminisher
- Boost or Diminish the WTP of secondary Products in the Bundle from the same Platform. Booster = 0.80 will diminish the WTP of subsequent same-Platform Products by 20%.

- Set Price of Bundle
- The Price of the Bundle can be automatically calculated using all of the Prices found in the 'Input Product Array'. Initially the Prices of all the Products found in the Bundle are added together. Then the Price of the Product Bundle Name found in the 'Input Product Array' can scale this sum. This Product Bundle Price can either: (a) override the sum, (b) add or subtract from the sum, or (c) be treated as a percentage rate and multiplied to the sum. For example, if the Prices of the selected Products found in the Bundle are $10, $20, and $30 and the Bundle Name Price is 0.25, then the final Price of the Bundle can be set to (10 + 20 + 30) x 0.25 = $15.
- Then Multiply Price by Scaling Factor
- After the output Price has been determined from the list of options above the final output Price is scaled according to this scaling factor. If the scaling factor is 1.1 then the final output Price is increased by 10%.
- Set Cost of Bundle
- The Cost of the Bundle can be automatically calculated using all of the Costs found in the 'Input Product Array'. Like Price, the Costs of all the selected Products found in the Bundle are first added together then scaled by the Bundle Name Cost.
- Then Multiply Cost by Scaling Factor
- After the output Cost has been determined from the list of options above the final output Cost is scaled according to this scaling factor. If the scaling factor is 1.1 then the final output Cost is increased by 10%.

**Input Product Array**: The set of existing Products in the Market. Each row corresponds to a Product, with the name of each Product also existing in the 'Input WTP Matrix'. The 'Input Product Array' should have the following columns:**Product**(string): The name of the Product corresponding to a column of the same name in the 'Input WTP Matrix'. The 'No Sale' Product is ignored. Several Products can be selected to form a new Product Bundle. The Name of the new Bundle itself can also be included in the 'Input Product Array'. This will set the Attributes of the Bundle, including the Brand, Store, Location, and Category of the Bundled Product.**Price**(double): 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'. By default, the Price of the Product Bundle is set to the sum of the individual Product Prices. The final Bundle Price can be adjusted using the 'Set Price of Bundle' option in the Configuration Dialog. Products with missing Prices are deemed to be Out-of-Stock.**Cost**(double): The 'Static Cost' of each Product in the Market. 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. Like Price, the Cost of the Product Bundle is set to the sum of the individual Product Costs, then adjusted using the 'Set Cost of Bundle' option in the Configuration Dialog.**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. The Volume of the Bundled Product will be increased by summing the individual Volumes of the individual Products making up the Bundle.**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'.**Brand**(string - optional): The Brand of the individual Product. This is needed if the 'Booster/Diminisher' options are set to adjust the WTP of all same-Brand Products. If the Brand of the Bundle has not been specified in the 'Input Product Array' then it will be set to the first Product Brand found in the Bundle.**Category**(string - optional): The Category of the individual Product. This is needed if the 'Booster/Diminisher' options are set to adjust the WTP of all same-Category Products. If the Category of the Bundle has not been specified in the 'Input Product Array' then it will be set to the first Product Category found in the Bundle.**Quantity**(integer - optional): A reference Quantity sold for the Product in the actual (real-world) Market. As the Bundle's Quantity cannot exceed the total Quantity sold of any individual Product, the Bundle's Quantity is set to the smallest Quantity across all Products within the Bundle.**Transactions**(integer - optional): A reference number of Transactions for the Product in the actual (real-world) Market. As the Bundle's Transactions cannot exceed the total Transactions sold of any individual Product, the Bundle's Transactions is set to the smallest Transactions across all Products within the Bundle.**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 Bundle cannot exceed the smallest Capacity limitation across all of the Products within the Bundle. If Capacity is not provided, or Capacity is negative, then the Quantity sold for the Product is not limited.

**Input Bundle Products**(optional): If the user wishes to create more than one Bundle, then the names of the Bundles and the names of the selected Products within each should be specified here. The 'Input Bundle Products' table should have the following columns:**Bundle**(string): The name of each Bundle of Products to add to the 'Output Product Array' and the 'Output WTP Matrix'. If this optional Input Table is not connected then the node will generate just the one Bundle named in the Configuration Dialog. The Bundle's Product Attributes, including the Bundle's Brand, Store, Price, Cost, and Quantity, can be set by including the Bundle Name in the 'Input Product Array'.**Product**(string): The name of each Product found within the Bundle. The same Product Name is expected to be found in both the 'Input Product Array' and the 'Input WTP Matrix'. To include the same Product twice or more in a Bundle, include the name of the Product here several times in different rows.

**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. If the Bundled Products already have a column in the 'Input WTP Matrix' then it will be overridden. This 'Input WTP Matrix' can also contain two types of 'Dynamic Cost' Distributions that depend upon the Customers who Purchase the Product. These Dynamic Costs are simply added together when creating a Bundle. In addition, there are two types of Dynamic Prices: PAV and PAF. When bundling, the Price Adjustment Fixed (PAF) values are added together (like the Dynamic Costs). But the minimum Price Adjustment Variable (PAV) is selected so that the Customer will receive the greatest discount from the Bundle.**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. The Bundled VOL is set to the minimum VOL demanded across all of the Products and reflects the minimum threshold for the Bundle to meet the Customer's need. If a Customer has no desire for a particular Product (VOL=0) then the Customer will also not wish to purchase the Bundle.**_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' is based upon the 'Input Product Array'. If the Product Bundles were not already included in the 'Input Product Array' then they will be added to the 'Output Product Array'.**Output Willingness To Pay Matrix**: The original Willingness To Pay (WTP) Customer Distribution matrix for each Product, along with an additional column of WTP values for each new Bundle. The output WTP values in the new Bundle column are the scaled-sum of the selected Products included in each Bundle. The Output WTP Matrix can be directly connected to a downstream 'Simulate Market' or 'Profit Engine' node.

- This node has no views

- CN-133 Bundle Generator Node v05KNIME Hub
- CS-113 Cola Wars 1936 Twice As Much Simplified v05KNIME Hub
- MS-231 Package Bundling 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.7

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

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 chat on Gitter!

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