Hola,
Estoy usando el JMP estándar, no el Pro one ...
Y me gustaría construir el siguiente mejor modelo de categoría de producto. Por ejemplo, si un cliente ha comprado la Categoría de producto A, ¿cuál es el próximo producto que es más probable que compren? ¿Es factible en la versión JMP que estoy usando? Solo tengo 6 categorías de productos, por lo que no creo que como Market Basket Analysis
Su ayuda sería mucho más apreciada ya que es bastante urgente.
Muchas gracias
Gracias
¿Cómo se ven tus datos? ¿Tienes una "cesta" para cada cliente?
Creo que una posible solución simple podría ser comenzar con cada canasta como una fila de datos. Luego tendría columnas indicadoras para cada categoría de producto: 1 = comprendido; 0 = no comprado.
Luego, las correlaciones multivariadas (Analizar> Métodos multivariados> Multivariadas) de estas variables indicadoras le indicarán qué categorías de productos se compraron juntas.
No estoy seguro de cuál es la mejor manera, quizás la plataforma de contingencia, pero aquí hay una idea:
Supongo que no tiene suficientes datos sobre cada cliente para hacer una predicción personalizada, por lo que esta idea utiliza los datos para que todos los clientes hagan una conjetura. Construí una tabla de datos sintetizados con una secuencia de compras, como esta:
Datos de compra del cliente
Y hacer sugerencias como esta:
última compra: 1 sugiere próxima compra: 2
última compra: 2 sugiere próxima compra: 3
última compra: 3 sugiere próxima compra: 4
última compra: 4 sugiere la próxima compra: 5
última compra: 5 sugiere próxima compra: 6
última compra: 6 sugiere la próxima compra: 1
totalProds = 6;
maxPurchases = 10;
totalCustomers = 1000;
_p = 1; // customers buy the next product in the sequence 10% of the time and a random product 90% ...
nextprod = Function( {}, // this is a synthetic model, just to have some data to play with
If( Random Uniform() > .90, // this is a weak relationship
_p = _p + 1;
If( _p > totalProds, _p = 1 );//
, // else
_p = Random Integer( 1, totalProds )
);
Return( _p );
);
// customers have up to maxPurchases, represented as a list of product numbers (starting at 1)
customerHistory = Function( {},
{result = {}, i},
For( i = Random Uniform( 1, maxPurchases ), i > 0, i -= 1,
Insert Into( result, nextprod() )
);
Return( result ); // {4, 5, 5, 1, 2, 4, 4, 6}
);
// make a customer table with synthetic data
dt = New Table( "Untitled",
Add Rows( totalCustomers ),
New Column( "customer", Character, "Nominal", Formula( Right( Char( 1e9 + Row() ), 8 ) ) ),
New Column( "purchases", Expression, "Nominal", Formula( customerHistory() ) ),
);
dt << runformulas; // make the table formulas ready
dt:customer << deleteformula; // and remove the formulas
dt:purchases << deleteformula; // in case the table needs sorting, etc
// record every pair of purchaces in a matrix
pairs = J( totalProds, totalProds, 0 );
For( irow = 1, irow <= N Rows( dt ), irow += 1,
p = dt:purchases[irow]; // p is a list from the data table
While( N Items( p ) >= 2, // as long as p has at least 2 items
pairs[p[1], p[2]] += 1; // use the first two as indexes to the pairs matrix
Remove From( p, 1 ); // remove the first item from p
);
);
Show( pairs ); // display the matrix
// sumarize the results
For( i = 1, i <= totalProds, i += 1,
Write( "\!nlast purchase: ", i, " suggests next purchase: ", Loc Max( pairs[i, 0] ) )
);
La última línea podría necesitar una pequeña explicación: pares [i, 0] significa la fila i, todas las columnas. LocMax es una función que devuelve la ubicación del valor máximo. Dado que los números de producto se asignan a partir de 1, esa ubicación también es el número de producto que se compra con mayor frecuencia después de que se compre el producto i.