“Optimización de la Canasta Básica en plazaVea: Un Enfoque Conjoint”

Objetivo:
Identificar qué atributos de una canasta básica (precio, marca, productos incluidos y promoción) son más valorados por los consumidores, para diseñar estrategias de marketing efectivas.

Contexto:
Plaza Vea quiere lanzar una nueva línea de canastas básicas y necesita entender las preferencias de sus clientes.

  1. Diseño del Estudio

Atributos y Niveles

Vamos a evaluar 4 atributos con 3 niveles cada uno :

Atributo Niveles
Precio S/50, S/70, S/90
Marca “Marca Propia”, “Nestlé”, “Gloria”
Productos “Básicos (arroz, azúcar, aceite)”, “Básicos + Lácteos”, “Básicos + Enlatados”
Promoción “Sin promoción”, “10% de descuento”, “Producto gratis”

Perfiles a Evaluar

  1. Crear perfiles
# Instalar paquete si es necesario
# install.packages("conjoint")

library(conjoint)

# Definir atributos y niveles
atributos <- list(
  precio = c("50", "70", "90"),
  marca = c("Marca_Propia", "Nestle", "Gloria"),
  productos = c("Basicos", "Lacteos", "Enlatados"),
  promocion = c("Sin_Promo", "10_Descuento", "Producto_Gratis")
)

# Crear diseño factorial fraccionado
perfiles <- expand.grid(atributos)
design <- caFactorialDesign(data = perfiles, type = "fractional", cards = 18)
print(design)
##    precio        marca productos       promocion
## 2      70 Marca_Propia   Basicos       Sin_Promo
## 6      90       Nestle   Basicos       Sin_Promo
## 15     90       Nestle   Lacteos       Sin_Promo
## 16     50       Gloria   Lacteos       Sin_Promo
## 19     50 Marca_Propia Enlatados       Sin_Promo
## 26     70       Gloria Enlatados       Sin_Promo
## 28     50 Marca_Propia   Basicos    10_Descuento
## 36     90       Gloria   Basicos    10_Descuento
## 39     90 Marca_Propia   Lacteos    10_Descuento
## 44     70       Gloria   Lacteos    10_Descuento
## 49     50       Nestle Enlatados    10_Descuento
## 50     70       Nestle Enlatados    10_Descuento
## 59     70       Nestle   Basicos Producto_Gratis
## 61     50       Gloria   Basicos Producto_Gratis
## 65     70 Marca_Propia   Lacteos Producto_Gratis
## 67     50       Nestle   Lacteos Producto_Gratis
## 75     90 Marca_Propia Enlatados Producto_Gratis
## 81     90       Gloria Enlatados Producto_Gratis

  1. Análisis Conjoint

Cargar la base de encuestados realizados para este experimento

preferencias=read.csv("preferencias_plazaVea.csv")
head(preferencias)
##              X Perfil_1 Perfil_2 Perfil_3 Perfil_4 Perfil_5 Perfil_6 Perfil_7
## 1 Encuestado_1       17       15       14        7        8       10        4
## 2 Encuestado_2       15       17       16        4       14       12        5
## 3 Encuestado_3       16        8       15        5       13       10       14
## 4 Encuestado_4       18       17       14        4       12        6        8
## 5 Encuestado_5       18       17       16       13       14       11        5
## 6 Encuestado_6       14       18       17       11       12       13        5
##   Perfil_8 Perfil_9 Perfil_10 Perfil_11 Perfil_12 Perfil_13 Perfil_14 Perfil_15
## 1        9       16         3         2         1        13        18         6
## 2       13        8        11         1         2         3         7         6
## 3        9       17         4         2         1        11         7        18
## 4       13        5         3         1         2         9        10        16
## 5       15       10         6         1         4         9         8         7
## 6        8        6         1         4         2        10         7        16
##   Perfil_16 Perfil_17 Perfil_18
## 1         5        12        11
## 2         9        18        10
## 3         3         6        12
## 4         7        15        11
## 5         3        12         2
## 6         3        15         9

Calcular Utilidades Parciales

# Nombres de niveles para interpretación
niveles <- data.frame(
  precio = c("50", "70", "90"),
  marca = c("Marca_Propia", "Nestle", "Gloria"),
  productos = c("Basicos", "Lacteos", "Enlatados"),
  promocion = c("Sin_Promo", "10_Descuento", "Producto_Gratis")
)

# Ajustar modelo conjoint
resultados <- Conjoint(y = preferencias[,-1], x = design, z = niveles , y.type ="rank")
## 
## Call:
## lm(formula = frml)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10,7000  -2,1056  -0,1111   2,1139   8,8500 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           9,50000    0,14474  65,636  < 2e-16 ***
## factor(x$precio)1     3,07222    0,20469  15,009  < 2e-16 ***
## factor(x$precio)2     0,02222    0,20469   0,109    0,914    
## factor(x$marca)1     -1,78333    0,20469  -8,712  < 2e-16 ***
## factor(x$marca)2      1,32778    0,20469   6,487 2,01e-10 ***
## factor(x$productos)1 -1,48889    0,20469  -7,274 1,26e-12 ***
## factor(x$productos)2 -0,01111    0,20469  -0,054    0,957    
## factor(x$promocion)1 -3,13889    0,20469 -15,335  < 2e-16 ***
## factor(x$promocion)2  2,97778    0,20469  14,548  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 ' ' 1
## 
## Residual standard error: 3,363 on 531 degrees of freedom
## Multiple R-squared:  0,5867, Adjusted R-squared:  0,5805 
## F-statistic: 94,23 on 8 and 531 DF,  p-value: < 2,2e-16
## [1] "Part worths (utilities) of levels (model parameters for whole sample):"
##             levnms    utls
## 1        intercept     9,5
## 2               50  3,0722
## 3               70  0,0222
## 4               90 -3,0944
## 5     Marca_Propia -1,7833
## 6           Nestle  1,3278
## 7           Gloria  0,4556
## 8          Basicos -1,4889
## 9          Lacteos -0,0111
## 10       Enlatados     1,5
## 11       Sin_Promo -3,1389
## 12    10_Descuento  2,9778
## 13 Producto_Gratis  0,1611
## [1] "Average importance of factors (attributes):"
## [1] 32,04 18,92 17,61 31,43
## [1] Sum of average importance:  100
## [1] "Chart of average factors importance"
resultados
##      [,1]
## [1,]  0.7
## [2,]  1.9
## [3,]  3.1
## [4,]  4.3

Análisis y Conclusiones del Modelo Conjoint para plazaVea

1. Interpretación de los Resultados Clave

A. Utilidades Parciales (Coefficients)

Los coeficientes muestran cómo cada nivel de atributo afecta la preferencia (valor base = intercepto 9.5):

Atributo/Nivel Estimación Interpretación
Precio1 (S/50) +3.07*** El precio más bajo aumenta significativamente la preferencia
Precio2 (S/70) +0.02 No tiene impacto vs. referencia (S/90)
Marca1 (Marca Propia) -1.78*** La marca propia reduce la preferencia vs. referencia
Marca2 (Nestlé) +1.33*** Nestlé es significativamente preferida
Productos1 (Básicos) -1.49*** La opción básica es menos preferida
Productos2 (+Lácteos) -0.01 Similar a la referencia (+Enlatados)
Promoción1 (Sin promo) -3.14*** Ausencia de promoción reduce fuertemente preferencia
Promoción2 (10% dto) +2.98*** El descuento del 10% es muy valorado

***p < 0.001 (altamente significativo)

B. Importancia Relativa de Atributos

Atributo Importancia (%) Interpretación
Precio 32.04 Atributo más influyente
Promoción 31.43 Casi igual de importante que el precio
Marca 18.92 Impacto moderado
Productos 17.61 Menos influyente

2. Conclusiones Estratégicas

Hallazgos Principales

  1. El precio es el factor decisivo:

    • Los consumidores prefieren claramente la opción de S/50 (utilidad +3.07).

    • El precio de S/70 no difiere estadísticamente de S/90 (p=0.914).

  2. Las promociones son cruciales:

    • El 10% de descuento genera casi tanta utilidad (+2.98) como el precio bajo.

    • No ofrecer promoción reduce drásticamente la preferencia (-3.14).

  3. Preferencia por marcas reconocidas:

    • Nestlé es significativamente mejor valorada que la marca propia.

    • La marca Gloria (referencia) se sitúa en el medio.

  4. Composición del producto:

    • Los consumidores prefieren claramente canastas con enlatados (referencia).

    • La opción solo con básicos es la menos atractiva.

Recomendaciones para Plaza Vea

  1. Estrategia de precios:

    • Priorizar la opción de S/50 como producto estrella.

    • Reconsiderar el precio de S/70 (no aporta valor vs. S/90).

  2. Promociones:

    • Implementar frecuentemente descuentos del 10%.

    • Evitar periodos sin promociones.

  3. Mix de productos:

    • Incluir enlatados en las canastas básicas.

    • Reducir el espacio a canastas solo con productos básicos.

  4. Marcas:

    • Aumentar presencia de Nestlé en las canastas.

    • Replantear estrategia para la marca propia.

3. Calidad del Modelo

4. Limitaciones

  1. Variables no consideradas:

    • El 41.33% de la variabilidad no está explicada (podrían faltar atributos como presentación o tamaño).
  2. Contexto del estudio:

    • Los resultados reflejan preferencias declaradas (no necesariamente comportamiento real).

5. Próximos Pasos Recomendados

  1. Pruebas de implementación:

    • Lanzar pilotos con canastas a S/50 con 10% de descuento y Nestlé.
  2. Nuevos estudios:

    • Investigar por qué la marca propia tiene baja preferencia.

    • Evaluar combinaciones con otros productos (ej: lácteos + enlatados).

# Perfil óptimo según el modelo:
perfil_optimo <- data.frame(
  precio = "50",
  marca = "Nestle",
  productos = "Enlatados",
  promocion = "10_Descuento"
)

Algunas visualizaciones complementarias

1.Gráfico de Importancia Relativa (Interactivo)

library(plotly)
## Cargando paquete requerido: ggplot2
## 
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Crear dataframe con la importancia
importancia_df <- data.frame(
  Atributo = c("Precio", "Promoción", "Marca", "Productos"),
  Importancia = c(32.04, 31.43, 18.92, 17.61)
)

# Gráfico interactivo de barras
plot_ly(importancia_df, 
        x = ~Atributo, 
        y = ~Importancia, 
        type = 'bar',
        color = ~Atributo,
        colors = c("#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A"),
        text = ~paste("Importancia:", round(Importancia, 1), "%"),
        hoverinfo = 'text') %>%
  layout(title = "IMPORTANCIA RELATIVA DE ATRIBUTOS<br><sup>Análisis Conjoint Plaza Vea</sup>",
         yaxis = list(title = "% Importancia"),
         xaxis = list(title = ""))

2. Heatmap de Utilidades Parciales (Interactivo)

# Preparar datos de utilidades
utilidades <- data.frame(
  Nivel = c("Precio50", "Precio70", "Precio90", 
            "Marca_Propia", "Nestlé", "Gloria",
            "Básicos", "Lácteos", "Enlatados",
            "Sin_Promo", "10%_Dto", "Prod_Gratis"),
  Utilidad = c(3.07, 0.02, 0, -1.78, 1.33, 0, -1.49, -0.01, 0, -3.14, 2.98, 0),
  Atributo = rep(c("Precio", "Marca", "Productos", "Promoción"), each = 3)
)

# Heatmap interactivo
plot_ly(utilidades,
        x = ~Atributo,
        y = ~Nivel,
        z = ~Utilidad,
        type = "heatmap",
        colorscale = "RdYlGn",
        hoverinfo = "text",
        text = ~paste("Atributo:", Atributo,
                      "<br>Nivel:", Nivel,
                      "<br>Utilidad:", round(Utilidad, 2))) %>%
  layout(title = "UTILIDADES PARCIALES POR NIVEL<br><sup>Valores más altos = mayor preferencia</sup>",
         xaxis = list(title = ""),
         yaxis = list(title = ""))

3.Simulación de productos para plazaVea

Plaza Vea planea lanzar una nueva línea de canastas navideñas y necesita evaluar cómo competirán 5 posibles configuraciones de producto (1 propuesta propia y 4 de competidores) en el mercado. Basados en un estudio previo de Conjoint con 30 consumidores, se deben simular las preferencias.

Objetivo:
Determinar la participación estimada de mercado para cada producto usando la función ShowAllSimulations() y recomendar la mejor estrategia.

Datos disponibles:

  • 18 perfiles evaluados originalmente (atributos: precio, marca, productos, promoción)

  • Preferencias de 30 encuestados (rankings del 1 al 9)

  • 5 productos a simular (tabla abajo)

# LIBRERÍAS
library(conjoint)

# PRODUCTOS A SIMULAR
simulacion <- data.frame(
  producto = c("PlazaVea_Nav", "SuperSaver", "MercadoFeliz", "AhorroTotal", "PremiumFest"),
  precio = c("50", "70", "50", "90", "70"),
  marca = c("Nestle", "Gloria", "Marca_Propia", "Nestle", "Gloria"),
  productos = c("Enlatados", "Lacteos", "Basicos", "Enlatados", "Enlatados"),
  promocion = c("10_Descuento", "Sin_Promo", "10_Descuento", "Producto_Gratis", "10_Descuento")
)
simulacion
##       producto precio        marca productos       promocion
## 1 PlazaVea_Nav     50       Nestle Enlatados    10_Descuento
## 2   SuperSaver     70       Gloria   Lacteos       Sin_Promo
## 3 MercadoFeliz     50 Marca_Propia   Basicos    10_Descuento
## 4  AhorroTotal     90       Nestle Enlatados Producto_Gratis
## 5  PremiumFest     70       Gloria Enlatados    10_Descuento

Corrida de la simulación

#  SIMULACIÓN CON ShowAllSimulations()
resultados <- ShowAllSimulations(
  sym = simulacion[, -1],  # Excluir columna de nombres
  y = preferencias[,-1],
  x = design
)
##   TotalUtility MaxUtility BTLmodel LogitModel
## 1         9,12       3,33    17,36       4,37
## 2         9,60       3,33    18,59       4,33
## 3         9,73      10,00    18,72       9,80
## 4         9,17       6,67    17,69       5,70
## 5        14,41      76,67    27,65      75,80
# 5. RESULTADOS (DATAFRAME + GRÁFICO)
participacion <- data.frame(
  Producto = simulacion$producto,
  TotalUtility = resultados[, 1],
  MaxUtility = resultados[, 2],
  BTL = resultados[, 3],
  Logit = resultados[, 4]
)

# Gráfico de participación (Modelo Logit)
barplot(participacion$Logit,
        names.arg = participacion$Producto,
        col = c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd"),
        main = "Participación de Mercado Estimada (Modelo Logit)",
        ylab = "% Participación",
        ylim = c(0, 40))

Resultados de la Simulación

Producto TotalUtility MaxUtility (%) BTL (%) Logit (%)
PlazaVea_Nav 9.12 3.33 17.36 4.37
SuperSaver 9.60 3.33 18.59 4.33
MercadoFeliz 9.73 10.00 18.72 9.80
AhorroTotal 9.17 6.67 17.69 5.70
PremiumFest 14.41 76.67 27.65 75.80

Hallazgos Clave

1. Dominio absoluto de PremiumFest

  • 75.8% de participación de mercado (modelo Logit)

  • 76.67% de los encuestados lo eligen como primera opción (MaxUtility)

  • Combinación ganadora:

    • Precio medio (S/70)

    • Marca Gloria

    • Productos enlatados

    • 10% de descuento

2. Problemas con la propuesta de PlazaVea (PlazaVea_Nav)

  • Solo 4.37% de participación (Logit)

  • A pesar de tener:

    • Precio más bajo (S/50)

    • Marca Nestlé

    • 10% de descuento

  • Posible causa: Marca Nestlé no resuena tanto como Gloria en este contexto

3. Efecto de las promociones

  • El producto gratis (AhorroTotal) performa mejor que sin promoción (SuperSaver)

  • Pero el 10% de descuento es claramente superior cuando se combina con otros atributos clave

Análisis por Atributo

Precio

  • El precio más bajo (S/50) no garantiza éxito (PlazaVea_Nav y MercadoFeliz <10%)

  • El precio medio (S/70) funciona mejor cuando se combina con otros atributos adecuados

Marca

  • Gloria supera a Nestlé y Marca Propia en todas las combinaciones

  • La marca propia tiene el peor desempeño (MercadoFeliz)

Composición

  • Enlatados claramente preferidos sobre otras opciones

  • La combinación “Básicos” tiene bajo atractivo incluso con precio bajo

Recomendaciones Estratégicas

  1. Reformular PlazaVea_Nav:

    • Cambiar a marca Gloria (en lugar de Nestlé)

    • Considerar 15% de descuento en lugar de 10%

    • Mantener enlatados y precio S/50

  2. Potenciar PremiumFest:

    • Posicionar como producto estrella

    • Asegurar disponibilidad de stock

    • Desarrollar versión premium (ej: enlatados gourmet)

  3. Rediseñar o eliminar productos poco competitivos:

    • SuperSaver: agregar al menos 10% de descuento

    • MercadoFeliz: evitar combinación “marca propia + básicos”

    • AhorroTotal: precio S/90 es demasiado alto