Un alto directivo de la empresa X está solicitando a nuestro equipo de ingenieros desarrollar un sistema que permita predecir información relevante para el próximo Blackfriday que se llevará a cabo en noviembre 23 del 2018, tomando como base los datos de ventas del blackfriday del año pasado que se llevó a cabo en noviembre 24 2017.
El sistema debe ser capaz de responder las siguientes preguntas de forma gráfica y tabular (en tablas):
- Unidades que se venderán por producto.
- Total de ventas (valor de ventas) por producto en pesos.
- Top de compradores.
- ¿Nos comprarán más las personas solteras o las personas casadas? (en el dataset asumimos casadas como 1).
- ¿Nos comprarán más los hombres o las mujeres?
- Clasifique por edades, que producto que se venderá más.
Para calcular los pesos se debe predecir el valor del dólar efectuando una regresión con los datos de dataset: TRM_Historico.xls
- Se recomienda la librería Bokeh
- El sistema debe usar ML para resolver las preguntas.
- Django 2.1 y Python 3.7 (librerías de ML)
- Postgress, en caso de requerir el uso de una BD
La TRM es la Tasa Representativa del Mercado cambiario de Colombia y representa el valor que tiene un dólar estadounidense en pesos colombianos.
- Detalle del crecimiento de la población: Esta predicción no toma en cuenta nuevos usuarios ni el crecimiento de la población de usuarios que accedio a la tienda en el último año. Se asume que no disminuirá el tamaño de la población.
Se actualiza la versión del framework Django a la 2.1.2 debido a que en la versión 2.1 se reporto recientemente un fuerte problema de seguridad.
Por rapidez se trabaja con sqlite, ya que solo se requiere para guardar el archivo de datos csv.
Vamos a realizar una regresión lineal con los datos de dataset: TRM_Historico.xls para predecir el valor del dolar el día 23-nov-2018, día en que se realizará el evento.
Vamos a explorar el conjunto de datos BlackFriday.csv para conocer los datos y encontrar relación entre ellos. Esto nos permite saber:
- Tamaño del data set
- Cantidad y nombre de las caracteristicas
- Tipos de datos
- Valores nulos
- Identificar nuestro target
De la exploración de datos identificamos las siguientes variables del conjunto:
- User_ID: identificador del usuario. Variable tipo
int
. - Product_ID: identificador del producto. Se utiliza como característica sin procesar.
- Gender: Genero del usuario. Se convierte en una variable binaria.
- Age: Rango de edad del usuario. Se normaliza a variable tipo
int
. - Occupation: id de la ocupación del usuario. Variable tipo
int
. - City_Category: Categoria de la ciudad. Se usa la codificación One-Hot.
- Stay_In_Current_City_Years: Número de años que ha estado en la ciudad. Se normaliza a variable tipo
int
. - Marital_Status: Estado civil. Es una variable binaria.
- Product_Category_1: Categoria del producto. Variable tipo
int
. - Product_Category_2 y Product_Category_3: Son categorias del producto. Tienen valores nulos y no es significativa para la predicción, por lo que la eliminaremos del conjunto de datos
- Purchase: precio de la compra del producto. Variable tipo
int
. Nuestro TARGET
Variables a generar:
- user_count: cantidad de registros de compra de cada usuario.
- Product_count: cantidad de registros de compra de cada producto.
- Product_mean: cantidad promedio de compra de cada producto.
- user_high: Proporción de veces que el usuario compra productos a un monto mayor que el monto promedio de compra del producto.
Para preprocesar los datos lo primero es normalizarlos:
gender_dict = {'F':0, 'M':1}
age_dict = {'0-17':0, '18-25':1, '26-35':2, '36-45':3, '46-50':4, '51-55':5, '55+':6}
city_dict = {'A':0, 'B':1, 'C':2}
stay_city_years_dict = {'0':0, '1':1, '2':2, '3':3, '4+':4}
Antes de realizar los modelos, separamos el conjunto en datos de entrenamiento y datos de prueba. Se utilizaron modelos de regresión lineal con XGBoost
Vamos a realizar un backend con django para responder a las preguntas de forma gráfica.
- Instalar dependencias en un entorno virtual (libre elección)
pip install -r requirements.txt
-
Descargar el codigo de la carpeta site_prediction
-
Hacer migraciones
python manage.py makemigrations
- Correr migraciones
python manage.py migrate
- Correr el proyecto y Cargar conjunto de datos con el formulario.
python manage.py runserver