Proyecto 1: Desarrollo de un Asistente Virtual y Sistema de Recomendación Personalizada para una Plataforma de E-commerce

Este proyecto te permitirá trabajar tanto en la creación de un asistente inteligente como en la implementación de un sistema de recomendación que puede mejorar la experiencia de compra en una tienda en línea.

Descripción del Proyecto:

El objetivo de este proyecto es crear un asistente virtual que interactúe con los clientes de una tienda en línea y un sistema de recomendación personalizado que sugiera productos basados en el historial de navegación y compras. El asistente virtual debe ser capaz de resolver preguntas comunes, ofrecer información sobre productos y ayudar en el proceso de compra. El sistema de recomendación, por su parte, debe sugerir productos a los clientes en función de sus interacciones previas en la tienda.


Pasos a Seguir:

1. Formación del Proyecto:

Aunque el proyecto lo vas a realizar de manera individual, es importante estructurarlo de forma ordenada. El proceso se puede dividir en dos partes principales:

  • Parte 1: Asistente Virtual
  • Parte 2: Sistema de Recomendación Personalizado

2. Selección de Herramientas:

Asistente Virtual:

  • Herramienta recomendada: Rasa o Botpress.
    • Rasa: Es una excelente opción para crear asistentes virtuales conversacionales utilizando machine learning.
    • Botpress: Es más orientado a usuarios sin mucha experiencia en programación y tiene una interfaz gráfica amigable.

Sistema de Recomendación:

  • Herramienta recomendada: scikit-learn.
    • Utilizaremos Random Forest para implementar un sistema de recomendación básico basado en las interacciones de los usuarios.

3. Diseño del Sistema:

Diseño del Asistente Virtual:

  • Flujo de Interacción:
    • Saludo Inicial: El asistente saluda al usuario y le ofrece ayuda.
    • Opciones Comunes: Preguntas frecuentes como “¿Dónde está mi carrito?”, “¿Cuáles son tus productos más vendidos?”, “¿Tienes descuentos?”.
    • Búsqueda de Productos: El usuario puede solicitar información sobre productos específicos.
    • Proceso de Compra: El asistente puede guiar al usuario en el proceso de compra.

Diseño del Sistema de Recomendación:

  • Características del Sistema:
    • El sistema utiliza Random Forest para predecir la probabilidad de que un usuario compre un producto basándose en su historial de visitas y compras previas.
    • Las características principales que se usarán para el entrenamiento son:
    • user_id: Identificador único del usuario.
    • product_id: Identificador único del producto.
    • view_count: Cantidad de veces que un producto fue visto.
    • purchase_count: Cantidad de veces que un producto fue comprado.

4. Implementación del Sistema de Recomendación:

Código de Ejemplo v1:

Ver en Colab ➜

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

# Crear un conjunto de datos ficticio
data = {
    'user_id': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
    'product_id': [101, 102, 103, 104, 105, 101, 102, 103, 104, 105],
    'view_count': [5, 3, 2, 6, 4, 1, 2, 3, 4, 5],
    'purchase_count': [1, 0, 0, 1, 0, 1, 0, 0, 1, 0]
}
df = pd.DataFrame(data)

# Preparar los datos para el modelo
X = df[['user_id', 'product_id', 'view_count']]
y = df['purchase_count']

# División de los datos
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Implementación del modelo de Random Forests
rnd_clf = RandomForestClassifier(n_estimators=100, random_state=42)
rnd_clf.fit(X_train, y_train)
y_pred = rnd_clf.predict(X_test)

# Evaluación del modelo
print("Random Forests Accuracy:", accuracy_score(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))

Este código entrena un modelo de Random Forest para predecir la probabilidad de compra de un producto basado en las interacciones previas de un usuario.


Paso 1

Ver en Colab ➜ Sistema de Recomendación con Random Forest, Paso 0

Ver en Colab ➜ Paso 1

Prompt empleado en ChatGPT:

Saludos. Tomando como punto de partida el siguiente proyecto, Quiero algo fácil de implementar con código abierto o desarrollo propio. Es importante que me brindes todo lo requerido para realizar el proyecto en un taller de Introducción básica al ML y a la IA con chatbots inteligentes. 

# Proyecto: Crear un asistente virtual que interactúe con los clientes de una tienda en línea y un sistema de recomendación personalizado que sugiera productos basados en el historial de navegación y compras. El asistente virtual debe ser capaz de resolver preguntas comunes, ofrecer información sobre productos y ayudar en el proceso de compra.

## Objetivos del proyecto:
- Descripción del diseño y flujo de interacción del asistente virtual.
- Explicación del sistema de recomendación.
- Proceso de implementación y herramientas utilizadas.
- Demostración del asistente virtual y sistema de recomendación en funcionamiento.
- Conclusiones y recomendaciones para futuras mejoras.

## Herramientas
- Google Colab
- Visual Studio Code o Sublime Text
- Cualquier otra requerida, en lo posible de la nube para realizar implementación final para entrega del proyecto.

## Código de Ejemplo para el Sistema de Recomendación:
Debes usar como punto de partida el código de ejemplo que dan con el Proyecto: 
---
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# Crear un conjunto de datos ficticio con más características
data = {
    'user_id': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'product_id': [101, 102, 103, 104, 105, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110],
    'view_count': [5, 3, 2, 6, 4, 1, 2, 3, 4, 5, 8, 2, 1, 7, 6],
    'purchase_count': [1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0],
    'price': [19.99, 59.99, 29.99, 39.99, 89.99, 19.99, 59.99, 29.99, 39.99, 89.99, 25.99, 50.99, 29.99, 20.99, 34.99],
    'rating': [4.5, 4.7, 4.3, 4.8, 4.6, 4.2, 4.4, 4.1, 4.9, 4.3, 4.2, 4.5, 4.6, 4.0, 4.1]
}
---

Hagamos algo grandioso!!!
1. Paso 1: Hoja de ruta y tecnologías a usar de forma muy operativa
2. Iniciar

Paso 2

Ver en Colab ➜ Paso 2

Prompt empleado en ChatGPT:

Saludos. Tomando como punto de partida el siguiente proyecto, Quiero algo fácil de implementar con código abierto o desarrollo propio. Es importante que me brindes todo lo requerido para realizar el proyecto en un taller de Introducción básica al ML y a la IA con chatbots inteligentes. 

# Proyecto: Crear un asistente virtual que interactúe con los clientes de una tienda en línea y un sistema de recomendación personalizado que sugiera productos basados en el historial de navegación y compras. El asistente virtual debe ser capaz de resolver preguntas comunes, ofrecer información sobre productos y ayudar en el proceso de compra.

## Objetivos del proyecto:
- Descripción del diseño y flujo de interacción del asistente virtual.
- Explicación del sistema de recomendación.
- Proceso de implementación y herramientas utilizadas.
- Demostración del asistente virtual y sistema de recomendación en funcionamiento.
- Conclusiones y recomendaciones para futuras mejoras.

## Herramientas
- Google Colab
- Visual Studio Code o Sublime Text
- Cualquier otra requerida, en lo posible de la nube para realizar implementación final para entrega del proyecto.

## Código de Ejemplo para el Sistema de Recomendación:
Debes usar como punto de partida el código de ejemplo que dan con el Proyecto: 

<ejemplo>
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# Crear un conjunto de datos ficticio con más características
data = {
    'user_id': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'product_id': [101, 102, 103, 104, 105, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110],
    'view_count': [5, 3, 2, 6, 4, 1, 2, 3, 4, 5, 8, 2, 1, 7, 6],
    'purchase_count': [1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0],
    'price': [19.99, 59.99, 29.99, 39.99, 89.99, 19.99, 59.99, 29.99, 39.99, 89.99, 25.99, 50.99, 29.99, 20.99, 34.99],
    'rating': [4.5, 4.7, 4.3, 4.8, 4.6, 4.2, 4.4, 4.1, 4.9, 4.3, 4.2, 4.5, 4.6, 4.0, 4.1]
}

# Agregar una columna de categoría de productos
categories = ['Electrónica', 'Ropa', 'Hogar', 'Calzado', 'Electrónica', 'Ropa', 'Calzado', 'Hogar', 'Accesorios', 'Accesorios', 'Deportes', 'Deportes', 'Accesorios', 'Ropa', 'Electrónica']
data['category'] = categories

# Convertir a DataFrame
df = pd.DataFrame(data)

# Convertir la columna 'category' en variables dummy (One-Hot Encoding)
df = pd.get_dummies(df, columns=['category'], drop_first=True)

# Mostrar el DataFrame con las nuevas columnas generadas por One-Hot Encoding
print(df.head())

# Seleccionar las características (features) y la variable objetivo (target)
X = df.drop('purchase_count', axis=1)  # Todas las columnas excepto 'purchase_count'
y = df['purchase_count']  # Variable objetivo: purchase_count (queremos predecir las compras)

# Dividir los datos en conjunto de entrenamiento (80%) y conjunto de prueba (20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear un modelo de Random Forest con los mismos parámetros
model = RandomForestClassifier(n_estimators=150, max_depth=5, random_state=42)

# Entrenar el modelo con los datos de entrenamiento
model.fit(X_train, y_train)

# Realizar predicciones con el conjunto de prueba
y_pred = model.predict(X_test)

# Calcular la precisión del modelo
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del modelo con nueva característica: {accuracy}')

# Mostrar la matriz de confusión
conf_matrix = confusion_matrix(y_test, y_pred)
print("Matriz de confusión (con nueva característica):")
print(conf_matrix)

# Mostrar las predicciones realizadas por el modelo
print("Predicciones del modelo:", y_pred)

# Graficar la matriz de confusión
plt.figure(figsize=(6, 4))
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=['No Comprado', 'Comprado'], yticklabels=['No Comprado', 'Comprado'])
plt.title('Matriz de Confusión')
plt.xlabel('Predicción')
plt.ylabel('Realidad')
plt.show()
</ejemplo>

Hagamos algo grandioso!!!
1. Paso 1: Hoja de ruta y tecnologías a usar de forma muy operativa

5. Implementación del Asistente Virtual:

Código de Ejemplo usando Rasa:

  1. Instalación de Rasa:

    • Instala Rasa en tu entorno: pip install rasa.
  2. Definir los Intents y Respuestas: En Rasa, los "intents" son los objetivos o intenciones que el usuario puede tener. Por ejemplo:

version: "2.0"
nlu:
  - intent: greet
    examples: |
      - Hola
      - Buenos días
      - ¡Hola, cómo estás!
  - intent: inquire_products
    examples: |
      - ¿Tienes zapatos?
      - Muéstrame productos deportivos

responses:
  utter_greet:
    - text: "¡Hola! ¿En qué puedo ayudarte hoy?"
  utter_inquire_products:
    - text: "Tenemos una gran variedad de zapatos deportivos y casuales. ¿Qué tipo te interesa?"
  1. Entrenamiento del modelo: Una vez que hayas definido tus intenciones y respuestas, entrena el modelo con Rasa:
rasa train
  1. Iniciar el servidor del asistente: Para probar el asistente, ejecuta:
rasa shell

6. Integración y Pruebas:

  1. Integración del Asistente Virtual:

    • Integrar Rasa con tu tienda en línea (por ejemplo, usando una API REST de Rasa).
    • Asegúrate de que el asistente pueda interactuar con los usuarios, responder a preguntas comunes y guiarlos en el proceso de compra.
  2. Pruebas del Sistema de Recomendación:

    • Realiza pruebas de rendimiento del sistema de recomendación asegurándote de que las predicciones sean precisas.
    • Evalúa la efectividad del modelo de Random Forest utilizando métricas como precisión, recall y f1-score.