# Cargar librerías
source("scripts/load_packages.R")
# Path a los datos
data_path <- "data/"
# Cargar los datasets
wishlist_data <- read_csv(paste0(data_path, "wishlist_data.csv"), show_col_types = FALSE)
damage_data <- read_csv(paste0(data_path, "damage_data.csv"), show_col_types = FALSE)
customer_vehicle_data <- read_csv(paste0(data_path, "customer_vehicle_data.csv"), show_col_types = FALSE)
vehicle_data <- read_csv(paste0(data_path, "vehicle_data.csv"), show_col_types = FALSE)
# Estandarizar los países y filtrar por Portugal
# 1. Estandarizar wishlist_data
wishlist_data <- wishlist_data |>
mutate(
country_code = str_sub(market, -2, -1) |> toupper(),
.after = market # Coloca la nueva columna después de la original
) |> select(-market)
# 2. Filtrar las tablas que tienen 'country_code' directamente
wishlist_pt <- wishlist_data |> filter(country_code == "PT")
customer_vehicle_pt <- customer_vehicle_data |> filter(country_code == "PT")
# 3. Sacar los daños de portugueses
portuguese_customer_id <- customer_vehicle_pt |> distinct(customer_id) |> pull(customer_id)
damage_pt <- damage_data |> filter(customer_id %in% portuguese_customer_id)
# vehicle_data se mantiene completo, al ser un dataset de vehículos y no de clientes.
# 4. Guardar los datos procesados
# Crear directorio si no existe
processed_data_path <- "data/processed"
if (!dir.exists(processed_data_path)) {
dir.create(processed_data_path, recursive = TRUE)
}
# Guardar los dataframes procesados para PT
saveRDS(wishlist_pt, file = file.path(processed_data_path, "wishlist_pt.rds"))
saveRDS(damage_pt, file = file.path(processed_data_path, "damage_pt.rds"))
saveRDS(customer_vehicle_pt, file = file.path(processed_data_path, "customer_vehicle_pt.rds"))
# Guardar también vehicle_data si lo vas a necesitar en otros capítulos
saveRDS(vehicle_data, file = file.path(processed_data_path, "vehicle_data.rds"))Mercedes-Benz: reto de Data Science
1 Introducción
1.1 Objetivo
El objetivo central de este proyecto, definido por Mercedes-Benz, es mejorar la efectividad de su sistema de “Personalización de Campañas de Marketing”. Actualmente, la empresa utiliza modelos para predecir cuándo un cliente existente podría realizar su próxima compra (next_repurchase_date) y qué tipo de vehículo le interesaría (next_class_bodytype).
Este proyecto se enfoca en explorar dos nuevas fuentes de datos – wishlist_data (vehículos deseados por los clientes) y damage_data (historial de visitas al taller) – para extraer información valiosa. Buscaremos descubrir si estos nuevos datos pueden enriquecer los modelos predictivos existentes, mejorar su precisión, o revelar nuevos patrones de comportamiento que permitan a Mercedes-Benz contactar a sus clientes de manera más oportuna y relevante. El análisis exploratorio inicial centrado en los datos de Portugal, el país más pequeño que encontramos en los datos, servirá como base para identificar estos potenciales insights y mejoras.
Comenzaré primero cargando paquetes relevantes y filtrando los datasets por Portugal (PT). Tras obtener alguna conclusión relevante con Portugal, es probable que pueda extrapolarlo a nuevos países sin tener que lidiar con la carga computacional añadida de tener todos los países a la vez.
1.2 Setup y carga de datos
No tiene sentido filtrar vehicle_data a priori, pues los datos que contiene no están relacionados con la situación geográfica de ningún cliente. Solo describen los aspectos técnicos de los vehículos que ofrece Mercedes-Benz, y parece conveniente tenerlos disponibles para cualquier análisis posterior. Por lo tanto, lo dejaremos completo.
1.3 Anexo IA
1.3.1 Uso de inteligencia artificial en el proyecto
En el desarrollo de este trabajo, se ha recurrido a herramientas de Inteligencia Artificial con el objetivo de optimizar ciertos procesos y mejorar la calidad final del documento. Es importante destacar que la IA se ha empleado como una herramienta de asistencia y no como el motor principal del análisis.
Las principales aplicaciones de la IA en este proyecto han sido:
Asistencia en la generación de código R complejo: para determinadas funciones o fragmentos de código en R que requerían una lógica más elaborada o una sintaxis específica (por ejemplo, filtrado de reglas intradominio o tautológicas en el análisis de patrones, obtención de algunas features inter-transaccionales en el modelo, etc), se consultó a modelos de IA para obtener sugerencias o estructuras base con el fin de acelerar su desarrollo. Estas sugerencias siempre fueron revisadas, adaptadas y validadas por el autor para asegurar su correcta implementación y adecuación al contexto del proyecto.
Mejora en la redacción de textos: en algunas secciones, especialmente en los textos introductorios de bloques de código R, se utilizaron herramientas de IA para refinar la redacción de ideas y hallazgos previamente elaborados por el autor. El objetivo era mejorar la claridad, la fluidez y el impacto del texto, manteniendo siempre la integridad del contenido e interpretaciones originales.
Obtención de información sobre paquetes y errores: para obtener información sobre la documentación de librerías, uso de librerías o ayuda en errores de ejecución se utilizaron herramientas basadas en IA. Esta no es una práctica extraña hoy día, pues sitios web como StackOverflow están en decadencia desde la imposición de estas nuevas herramientas en el mercado.
Estructuración y guía de algunas partes del proyecto: con el fin de poder construir un documento más ordenado y lógicamente dispuesto, se usaron herramientas basadas en IA. Su uso se basó en preguntar por estructuras, siguientes pasos lógicos y validación de ideas futuras.
Se subraya que la IA no se utilizó para generar el grueso del trabajo, realizar los análisis primarios, interpretar resultados de forma autónoma ni tomar decisiones críticas sobre la dirección del proyecto. El pensamiento analítico, la formulación de hipótesis, la interpretación de los datos y las conclusiones fundamentales son enteramente obra del autor. La IA ha sido un complemento para agilizar tareas específicas y enriquecer la presentación final.
1.3.2 Explicación detallada de la implicación de la IA en el proyecto
A continuación mostraré más a detalle, dividiendo en cada capítulo, la implicación de las herramientas de IA en la realización de este proyecto:
Análisis exploratorio de los datos
Asistencia con plots complejos de
ggplot(p_damage_cost_relation,p_ownership_duration…)Asistencia en la redacción de conclusiones previamente obtenidas por el autor, con el fin de que el lenguaje usado se adecúe más al contexto del proyecto.
Limpieza de los datos
Asistencia en la separación en otro dataset de
bodytype_dimensions(funcionesseparate; parámetrosremoveyconvert…)Asistencia en la documentación de código y reestructuración del capítulo. Mi aproximación inicial estaba bastante desordenada, pero tras indicarle cómo quería que se desarrollase el capítulo me proporcionó una guía para estructurarlo. También me ayudó comentando algo de código R.
Ingeniería de características - Creación de variables objetivo
Asistencia en la separación en categorías de
time_until_next_purchase_days.Consulta sobre decisiones posteriores (no reflejado en el capítulo). Mantuve una conversación con Gemini 2.5 Pro (inteligencia artificial usada en este proyecto) sobre si la creación de features adicionales debía hacerla en este capítulo. Finalmente decidí hacerla dentro de los capítulos posteriores, pues en el momento de crear este capítulo no tenía totalmente claro cómo quería aproximar las siguientes fases. Es uno de los problemas inherentes a no haberme enfrentado nunca a un reto de Data Science, pero así es como se gana experiencia.
Análisis de patrones
Consulta sobre cómo aproximar la categorización para
arules. Era consciente de que debía categorizar para poder obtener reglas, pero al no haberlo hecho nunca no tenía claro cómo debía aproximar el problema.Asistencia en la categorización de los datasets. Tras indicarle cómo quería aproximar el problema una vez tenía una idea de cómo se podía abordar, me ayudé de la herramienta para poder generar el código R necesario para poder crear las categorizaciones.
Consulta sobre parámetro
appearancedearules. Consulté si era posible obtener reglas con solo un tipo de atributo en el consecuente, y esta era la forma correcta. Quería hacer un análisis de las reglas relacionadas con la variable objetivo, y otro análisis genérico.Asistencia en la creación de las funciones de filtrado de reglas tautológicas y reglas intra-dominio. Sabía que, por la construcción de mis datasets categóricos, habría reglas que, aunque tuviesen altas puntuaciones en marcadores como confidence o lift, no aportaban valor. Para ello las filtré con ayuda de la inteligencia artificial, quedándome con lo verdaderamente relevante en este contexto. Me interesaba cómo los distintos datasets interactuaban entre ellos (reglas intra-dominio) y quería evitar las reglas obvias por la construcción de mi dataset (las reglas tautológicas o definicionales, como por ejemplo que si tiene actividad en la wishlist, usa la wishlist).
Asistencia en la función de resumen de conceptos de
fcaR. Sólo me importaban cuántos clientes había agrupados en un determinado cluster, no quienes eran estos clientes. Por ello, cree con ayuda de la inteligencia artificial una función que hacía precisamente eso: resumir los conceptos indicando cuántos clientes (objetos) cumplían ciertas características (atributos).
Modelo predictivo
Asistencia en la creación de
model_dataymodel_data_enriched. De nuevo, para crear los datasets de features, usé la inteligencia artificial como acelerador.Ayuda en la interpretación del análisis de residuos. Al no ser conceptos que tengo tan afianzados, consulté a la inteligencia artificial para tener una idea general de qué significaban estos conceptos para poder llegar a interpretarlos.
Asistencia en la utilización de Random Forest. Conocía el modelo previamente, ya que lo había usado en otras asignaturas (Sistemas Inteligentes…) pero desconocía como funcionaba en R. Fue un paso clave para confirmar mi hipótesis de no linealidad de los datos.
1.3.3 Ejemplos de interacciones
En los siguientes enlaces se pueden consultar, en formato txt, algunas conversaciones que tuve con Gemini 2.5 Pro en AI Studio.