The Model
! Conjoint analysis model to decide how much weight
to give to the two product attributes of warranty
length and price;
SETS:
! The three possible warranty lengths;
WARRANTY /LONG, MEDIUM, SHORT/ : WWT;
! where WWT( i) = utility assigned to warranty i;
! The three possible price levels (high,
medium, low);
PRICE /HIGH, MEDIUM, LOW/ : PWT;
! where PWT( j) = utility assigned to price j;
! We have a customer preference ranking for each
combination;
WP( WARRANTY, PRICE) : RANK;
ENDSETS
DATA:
! Here is the customer preference rankings running
from a least preferred score of 1 to the most
preferred of 9. Note that long warranty and low
price are most preferred with a score of 9,
while short warranty and high price are least
preferred with a score of 1;
RANK = 7 8 9
3 4 6
1 2 5;
ENDDATA
SETS:
! The next set generates all unique pairs of product
configurations such that the second configuration
is preferred to the first;
WPWP( WP, WP) | RANK( &1, &2) #LT#
RANK( &3, &4): ERROR;
! The attribute ERROR computes the error of our
estimated preference from the preferences given us
by the customer;
ENDSETS
! For every pair of rankings, compute the amount by
which our computed ranking violates the true
ranking. Our computed ranking for the (i,j)
combination is given by the sum WWT( i) + PWT( j).
(NOTE: This makes the bold assumption that
utilities are additive!);
@FOR( WPWP( i, j, k, l): ERROR( i, j, k, l) >=
1 + ( WWT( i) + PWT( j)) -
( WWT( k) + PWT( l))
);
! The 1 is required on the righthand-side of the
above equation to force ERROR to be nonzero in the
case where our weighting scheme incorrectly
predicts that the combination (i,j) is equally
preferred to the (k,l) combination.
Since variables in LINGO have a default lower
bound of 0, ERROR will be driven to zero when we
correctly predict that (k,l) is preferred to
(i,j).
Next, we minimize the sum of all errors in order
to make our computed utilities as accurate as
possible;
MIN = @SUM( WPWP: ERROR);
Model: CONJNT