Giter Site home page Giter Site logo

jlrzarcor / jlrzarcor-itam-ecomp2021-ramis-finalprjct Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 1.0 649 KB

Repo proyecto final en equipo, clase de Estadística Computacional, M. Sc. Miguel Ángel Escalante Serrato. ITAM, Master DS.

Shell 0.49% Jupyter Notebook 9.31% HTML 89.64% Python 0.52% Dockerfile 0.04%

jlrzarcor-itam-ecomp2021-ramis-finalprjct's Introduction

Maestría en Ciencia de Datos

Estadística Computacional (DS Programming) (Otoño 2021)


Proyecto: Creación de un Producto de Datos

👥 Integrantes del equipo git

Nombre CU Mail Usuario Gh
Carlos Roman Lopez Sierra 197911 [email protected] Carlosrlpzi
Edgar Bazo Pérez 172061 [email protected] EddOselotl
Uriel Abraham Rangel Díaz 193921 [email protected] urieluard
José Luis Roberto Zárate Cortés 183347 [email protected] jlrzarcor

📈 Estadísticas del repositorio 📉

👀 Watching 🌟 Stars 🔌 fork 👥 contributors


Tabla de contenido 📑

  1. Objetivo
  2. Herramientas utilizadas
  3. Estructura del Repositorio
  4. El Producto de Datos
  5. ¿Cómo correr el proyecto?

Objetivo 🎯

El objetivo del proyecto es implementar y empaquetar un Producto de Datos completo, para que se pongan en práctica las herramientas revisadas durante el curso de Estadística Computacional.

Herramientas utilizadas 🔧

  • Bash: Lo utilizamos para hacer la descarga y limpieza de los datos utilizados.
  • Python: Es el lenguaje de programación que se utilizó para implementar un modelo de clasificación binaria.
  • SQL -PostgreSQL: Manejador de base de datos empleada para el almacenamiento y procesamiento de la información recolectada.
  • APIs -Flask: Interfase elegida para hacer las interacciones entre los usuarios y el producto de datos.
  • Docker: Herramienta para la creación de contenedores de Linux que se utiliza para empaquetar todo el producto de datos y pueda ser utilizado en cualquier equipo de cómputo que cumpla con los requerimientos.

Regresar

Estructura del Repositorio 📂

├── README.md          <- The top-level README for developers using this project.
│
├── images             <- Contains images used in the repository.
|
├── notebooks          
│   └── eda            <- Jupyter notebooks for EDA
|
├── references         <- Consulted references to document this proyect
|
├── results            <- If so, some relevant results
|
├── sql                <- Contains scripts used to deploy RDS db.
│
├── requirements.txt   <- The requirements file.
│
├── .gitignore         <- Avoids uploading data, credentials, outputs, system files etc.
│
└── src                <- Source code for use in this project.
    │
    ├── __init__.py    <- Makes src a Python module.
    │
    │
    ├── api            <- Contains Python modules used for app deplyment.
    │
    │
    ├── dashboard      <- Contains Python modules used for dashboard deplyment.
    │
    │
    ├── utils          <- Functions used across the project.
    │
    │
    ├── etl            <- Scripts to transform data from raw to intermediate.
    │
    │
    └── pipeline       <- Functions used for the pipeline.  

Regresar

El Producto de Datos 💻

Se pide un producto de datos completo, esto es, que tenga todos los componentes necesarios para que sea un análisis vivo y creciente de la información que va llegando al modelo de aprendizaje de máquina (modelo en adelante) y se logre cumplir con la finalidad para que fue diseñado.

Problema que resuelve ❔

Es de nuestro interés (didáctico) generar un producto de datos que nos permita tener un flujo de trabajo implementado de manera completa en una aplicación. Con esta aplicación le daremos servicio (hipotéticamente) a una empresa que se dedica a la aseguranza de vehículos tipo caravana y requiere saber ¿Cuáles personas, de una cartera de clientes que han adquirido este tipo de vehículos, estarían interesados en adquirir un seguro?.

Especificaciones 📋

Se solicita que la aplicación contenga los siguientes requisitos:

  • Base de Datos de soporte: Los datos deben de guardarse en un postgreSQL, esto para replicar la necesidad de motores externos de bases de datos en la vida real.
  • Ingesta inicial. La primer insersión de los datos a su base de datos debe de ser a través de Bash.
  • Modelo como Servicio Web. La API debe tener un modelo corriendo a manera de servicio.
  • Reentrenamiento del Modelo . Pasado un tiempo y con suficientes datos nuevos, usualmente se busca un reentrenamiento del modelo, por lo cual su API debe de ser capaz de hacerlo mediante una solicitud.
  • Ambiente totalmente reproducible. La API debe estar empaquetada por completo para que pueda correr sin ningún problema en cualquier computadora.
  • Captura de resultados del Modelo. Se busca entender el rendimiento y precisión del modelo, por ello es necasio desplegar sus resultados de desempeño, tal que el equipo de ciencia de datos pueda entender qué tan bien o mal está respondiendo.

Funcionamiento 🎮

La información con la que se cuenta es una base de datos que proviene de la compañía Sentient Machine Research y esta disponible en la página de kaggle. Este Data Set cuenta con aproximadamente 10,000 observaciones de 86 variables. Las variables que se tienen son de tipo socio-demográficas, de propietarios de vehículos tipo caravana, así como de estadísticas de seguros. cada observación corresponde a la de un código postal (granularidad).

Con esta base de datos (ingesta inicial) se entrena un modelo de regresión logística mediante el paquete de Sklearn de Python y se calculan sus métricas de desempeño con un set de validación que también es parte del Data Set mencionado. Para poder hacer predicciones de nuevos registros, se deberán ingresar los campos que se determinaron en el proceso de modelado a través de una interfase creada en Flask (una API). Para cada nueva observación que se ingrese mediante la API se hará la predicción con el modelo que resultó del entrenamiento. A esta interfase de la API le denominamos predicciones On Demand. Esta parte de la solución se utilizará por la empresa para identificar potenciales compradores de seguros y realizar campañas y/o estrategias de venta, con el fin de incrementar la venta de este tipo de seguros.

Por separado, existirá otra API (también creada en Flask) que se utilizará para cargar nuevos registros a la base de datos de entrenamiento, la cual tendrá dos opciones: Almacenar y Entrenar.

  • Con la primera opción (Almacenar) solo se almacenan nuevos registros en la Base de Datos, pero el modelo sigue siendo el mismo, el entrenado con la ingesta inicial. A este proceso le denominamos ingesta consecutiva.

  • Con la segunda (Entrenar), se ejecuta nuevamente el proceso de entrenamiento del modelo, utilizando los datos nuevos que se hayan almacenado en los diferentes periodos o ingestas consecutivas que se hayan realizado.

Regresar

¿Cómo correr el proyecto?

Prerrequisitos 💻

Se necesita un equipo de computo con acceso a internet, un sistema operativo Linux y Docker instalado.

Ejecución 🎬

1. clonar este repositorio en la computadora local (en el directoro de su preferencia)
2. Abrir una terminal CLI y colocarse en la raíz del repositorio clonado en el paso anterior
3. Ejecutar comando: <docker-compose up --build> con lo que se construye nuestra imagen de Docker
4. Ejecutar comando: <docker exec -it web_ramis bash> con lo que se accede al contenedor
5. En la terminal que ya es del contenedor abierto posicionarse en la carpeta con el siguiente nombre: jlrzarcor-ITAM-ecomp2021-Ramis-finalprjct
6. Activar el ambiente virtual de conda: <conda activate est_comp>
7. Exportar la variable de ambiente: <export PYTHONPATH=$PWD>
8. Correr el comando de Bash: <bash data_process.sh> con lo que se descarga la base de datos de Caravanas y se hace la limpieza. La salida se persiste en un volumen creado en local al que se puede acceder desde el contenedor
9. Ejecutar el script de python: <python src/utils/pdDF_to_SQL.py> que hace la lectura del archivo procesado por Bash y lo coloca en una tabla de PostgreSQL
Nota: Para verivicar la creación de esta tabla, abrir el contenedor con la base de datos con: <docker excec -it db_ramis bash> y ejecutar: <psql -U postgres -h db -d postgres> para ingresar al servidor de psql y dentro de este explorar la tabla creada ("variables")
10. Abrir una terminal de python y ejecutar: <from src.utils import utils> y <modelo, precision, recall = utils.modelado(0)> con esto se hace el primer modelo que corresponde a la ingesta inicial y con el cual ya se pueden hacer predicciones desde la API. El modelo se guarda en un archivo binario (.pkl)
11. Colocarse en un navegador y accesar a la dirección: <http://0.0.0.0:8080/> Esto desplegará los primeros 10 registros de la base de datos (informativo)

Para realizar una predicción:
Colocarse en una terminal CLI de su máquina local y ejecutar un comando de <curl> como el siguiente ejemplo:

curl -X POST -H "Content-Type: application/json" -d '{"predecir":{"mopllaag":1, "mink123m":2, "ppersaut":3, "pwaoreg":4,"pbrand":5,"aplezier":6,"afiets":7}}' 0.0.0.0:8080/users

Nota: Los valores de cada llave corresponden a los valores que tendría una nueva observación de la cual queremos hacer su predicción

Para reentrenar el modelo:
Colocarse en un <localhost> y poner la siguiente dirección:

http://0.0.0.0:8080/users

Esto nos devolverá un mensaje con el modelo que se utilizó (Regresión Logística) y las métricas que fueron de interés: Precisión y Recall

Regresar

jlrzarcor-itam-ecomp2021-ramis-finalprjct's People

Contributors

carlosrlpzi avatar eddoselotl avatar jlrzarcor avatar urieluard avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

eddoselotl

jlrzarcor-itam-ecomp2021-ramis-finalprjct's Issues

Dockering

Ambiente reproducible

Construir Docker file que contemple los siguientes elementos:

  • Crear Conda Environment
  • Instalar los requirements (environment.yaml)
  • Integración de PSQL: ejecución de Script que inicialice la DB (initDB): esquema, tablas.

EDA

Elaborar notebook para determinar los features de mayor importancia de nuestro Data set con los cuales se aliminetará nuestro modelo.

Modelado

  • Implementar el modelo de ML
  • Afinación de hiperparámetros
  • Generar el modelo definitivo que será implementado para predicciones en nuestro producto de datos.
  • Diseñar la interfaz de reentrenamiento cuando la API lo solicite.

API

  • Comunicación con la base de Datos de soporte (PSQL)
  • Carga de información inicial; insersión de manera limpia y automática.
  • Implementar el modelo de ML, ejecutándose en forma de servicio, esto es, si se envía una nueva observación, debe responder con la predicción que tiene de la misma.
  • Actualización en los datos con los que se entrenan el modelo; implementar el proceso de recibir nuevos datos y almacenar en BD.
  • Integrar request de reentrenamiento

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.