Translate

jueves, 8 de junio de 2023

Crear un modelo de regresión linear en BigQuery ML- GCP

Una de las cosas que mas me ha llamado la atencion al ponerme con Google Cloud platform y especialmente BigQuery (que es la joya de la Corona) es la posiblidad de hacer modelosusando SQL. Después de tan tiempo aprendiendo R y luego Python, ahora resulta que en BigQuery los debes hacer en SQL. 

Bueno, pues nada, parece un poco fuera de lugar pero allá vamos. En el curso una cosa que he echado en falta ha sido el hecho de que apenas se explican que hacen los ejercicios. En decir te explican la forma, pero no el porqué. Aunque entiendo que un ingeniero de datos no debe saber tanto de como hacer los modelos, a mi parece queda un poco cojo hacer un copia y pega sin saber en realidad lo que hace el código. Sobre todo si vienes de Software Engineering, y no sabes ni como funcionan los modelos.
Así que aquí estoy yo para intentar dar un poco de luz a esto.
Además a mi me resultó especialmente fácil porque para mi dissertation yo hice un modelo parecido. (si es que está todo inventado... larga vida al Machine Learning)

A la hora de crear un mdoelo, lo primero que tenemos que hacer es éntrenar nuestro modelo. Para eso vamos a usar una parte de nuesta muestra para entrenarlo(un porcentaje) y luego lo aplicaremos al total para ver si se puede extrapolar.

En cuanto al código que nos da para el ejercicio Google Cloud

Aquí ya vamos a crear un modelo que se llamará bike model. 

// Query train a model
CREATE OR REPLACE MODEL
  bike_model.model

En Options le vamos a meter las variable target. Es decir la que queremos predecir y además le vamos a decir el tipo de algortimo que vamos a usar. En este caso vamos a hacer una regresion lineal
 
OPTIONS
  (input_label_cols=['duration'],
    model_type='linear_reg') 

Para hacer la regresión lineal  vamos a seleccionar además otras variables llamadas independientes. En este caso vamos a seleccionar la duración, el dia de la semana y la hora.
Si no estás muy puesto en SQL te puede resulta raro el tema CAST que se mete por ahí en medio.Es una sentencia avanzada del lenguaje que se usa para cambiar el tipo de variable.En este caso las dos variable las convertimos a string y las llamamos como dayofweek y hoursofday. Las dos las convertirmos desde start-date  
AS
SELECT
  duration,
  start_station_name,
  CAST(EXTRACT(dayofweek
    FROM
      start_date) AS STRING) AS dayofweek,
  CAST(EXTRACT(hour
    FROM
      start_date) AS STRING) AS hourofday
FROM
  `bigquery-public-data`.london_bicycles.cycle_hire

Y para terminar con el from elegimos el dataset que estamos usando. 
Espero que esto sirva para dar un poco más de luz en BigQuery. Todos los derechos reservados a Google que son los que han escrito el código.

En caso de que quieras saber que pasa una vez que le das a run. BigQuery te calculos los cohefientes como si hubieras usado cualquier libreria de DataScience en R o Python. Te lo saca en su tablita y así puedes ver si funciona tu moledo o si debes seguir trabajando en el.

Seguiremos informando
Otros link a checkear

viernes, 20 de enero de 2023

Framework para EDA y como automatizar en Python el análisis exploratorio

 Antes de ponernos a hacer algún modelo o análisis y más allá de las herramientas que vamos a utilizar nos va a tocar familiarizarnos con los datos y ver que tipo de modificiones debemos hacerle antes de tenerlos listos 
Para ello existe un tipo de análisis EDA: Análisis de datos exploratorio. 
Lo que podemos definir que entra dentro de este análisis va a depender de las necesidades del dataset y de las preguntas que tenga el negocio, Lo que si es cierto es que una vez hecho uno, podemos reutiliar formulas para aplicarlo al resto de análisis.Sobre todo la parte de visualización  
Así que podemos definir un framework para transformar esos datos

Framework para realizar el análisis exploratorio

Podemos así ver 5 fases que pueden ser iterativas:

Data Sourcing

De dónde vienen los datos, tenemos que modificar el tipo de variable o la codificación? 

Data Cleaning

Existen valores nulos? Debemos eliminar valores atípicos, valores duplicados.

Univariate analysis

Cómo se distribuye cada una de las variables? Valores máximos y mínimos, ...

Bivariate analysis

Existe correlación entre dos variables. Una variabe ayuda  a predecir a la otra?

Multivariate analysis

Y cómo se comportan estas variables en su conjunto? Podemos añadir nuevas variables a partir de las que ya tenemos?

Automatización del análisis exploratorio en Python

Pues visto así esto nos puedo llevar bastante tiempo, pero se irá una inversión a medio plazo. Como comentaba más arriba gran parte del análisis exploratorio para el análisis de datos se puede automatizar. 

df.describe()

Y sobre todo visualizando las variables usando numpy y pandas con seaborn

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt


Librerias para la automatización del EDA en Python

Hasta la fecha ya tengo en mi bookmark tres librerias que automatizan esta parte. Sobre todo a mi me parece útil para hacer visualización tras transformar datos o creas nuevos. Estas librerias también se puede utulizar para comparar los datos que tenemos en nuestros train dataset de forma muy rápida. 
Las tres librerias que comento aquí hacen uso de tan sólo 2-3 líneas de comando.

Por mi orden de preferencia:
  1. 1. Pandas profiling, que nos da un informe de spoiler como este. Aunque los comandos avanzados no son muy avanzados, aquí tienes como instalar esta librería en Python
  2. 2. Dataprep 
  3. 3. Sweetviz, que es más ligero de pandas profiling

Quiero saber más sobre EDA!!

lunes, 26 de septiembre de 2022

HOW-TO: SQL When to use USING instead of WHERE - SQL INTERMEDIATE

 Visto en Leetcode:

https://leetcode.com/

Problema: 

Dadas dos tablas con IDs de usuario queremos saber el nombre y el id de usuario con su id único.


Además queremos que aparezcan los nulls

Explicación:

En un primer momento lo más fácil sería pensar en usar un LEFT JOIN o un RIGHT JOIN

Sin embargo tenemos una claúsulas que nos puede ayudar a simplicar el código creada para estos casos concretos y sería USING

SELECT unique_id, name 

FROM Employees e

LEFT JOIN EmployeeUNI u ON e.id = u.id


Por qué usar USING en SQL

Using hace más legible el código y además nos ayuda a prevenir problemas más complejos.

Cómo usar USING en SQL

# Write your MySQL query statement below
SELECT unique_id,name
FROM Employees
LEFT JOIN EmployeeUNI
USING(id)

jueves, 8 de septiembre de 2022

Product Analytics: How to calculate retention and what does it means.

Understanding how well your business keeps customers engaged is crucial for success. Retention rate is a key metric to measure this success, but there's no one-size-fits-all approach. Depending of your goals and therefore your KPIs you can choose one of them to measure strategies or tactics.
Let's explore three common retention methodologies:

Classic Retention (Day N)

This method tracks the percentage of new users who return on a specific day. For example, if 3 out of 10 new users return on the second day, your Day 2 retention rate is 30%.

  • Benefits: Daily granularity, easy to explain and calculate.
  • Limitations: Sensitive to daily fluctuations.
  • Best for: Measuring the immediate impact of short-term campaigns or analyzing day-to-day retention trends.

Range Retention

This measures retention over a specific time interval, like a week or a month. For instance, if 9 out of 50 new users return within the first week, your first-week retention rate is 18%.

  • Benefits: Smooths out daily noise, easy to explain, good for long-term trend analysis.
  • Limitations: Less granular, longer lag time for results.
  • Best for: Monitoring overall business health and identifying weekly or monthly behavioral patterns.

Rolling Retention

This calculates the percentage of new users who return on or after a specific day. It provides a single metric representing long-term customer engagement.

  • Benefits: Fast to calculate, reflects overall stickiness.
  • Limitations: Open-ended, can be constantly changing, doesn't differentiate between frequent and infrequent users.
  • Best for: Supplementing other KPIs and understanding long-term customer relationships.

Choosing the Right Method

  • Classic Retention: Ideal for tracking short-term campaigns and daily engagement.
  • Range Retention: Best for monitoring overall business health and identifying behavioral patterns.
  • Rolling Retention: Useful for supplementing other metrics and understanding long-term customer relationships.

domingo, 20 de febrero de 2022

Product ideation: Diagrama de Ishikawa

Dentro de la metodología de innovación en design thinking se puede hacer uso del diagrama de Ishikawa. 

El Diagrama de Ishikawa, también conocido como Diagrama de Espina de Pescado, una herramienta visual poderosa que te ayudará a navegar por las complejidades del proceso creativo y a asegurar que tu producto final sea un éxito rotundo.

El Diagrama de Ishikawa es una herramienta versátil y valiosa para cualquier equipo de desarrollo de productos. Al utilizarlo de manera efectiva, podrás anticipar y superar obstáculos, optimizar tus procesos y, en última instancia, crear productos que deleiten a tus clientes y impulsen el éxito de tu negocio.

¿Qué es el Diagrama de Ishikawa?

Imagina el esqueleto de un pez: la cabeza representa el problema o efecto que quieres analizar (en este caso, un producto fallido o con margen de mejora), y las espinas son las posibles causas que contribuyen a ese resultado. Estas causas se clasifican en categorías principales, como:

  • Métodos: Procesos de diseño, desarrollo, producción.
  • Máquinas: Tecnología, herramientas, equipos utilizados.
  • Mano de Obra: Habilidades, capacitación, motivación del equipo.
  • Materiales: Calidad, disponibilidad, costo de los insumos.
  • Medio Ambiente: Condiciones de trabajo, factores externos.
  • Mediciones: Métricas, sistemas de control de calidad.

¿Cómo Aplicarlo en la Creación de Productos?

  1. Define el Problema: ¿Qué quieres lograr con tu producto? ¿Qué desafíos o problemas potenciales anticipas?
  2. Identifica las Categorías Principales: Adapta las categorías tradicionales (6M) a tu contexto específico. Por ejemplo, en desarrollo de software, podrías considerar "Código", "Diseño UX/UI", "Requisitos", etc.
  3. Lluvia de Ideas: Reúne a tu equipo y genera ideas sobre las posibles causas que podrían afectar el éxito del producto, asignándolas a las categorías correspondientes.
  4. Profundiza en las Causas Raíz: Analiza cada causa y busca subcausas más específicas. Utiliza preguntas como "¿Por qué sucede esto?" para llegar al fondo del asunto.
  5. Prioriza y Actúa: Identifica las causas más impactantes y desarrolla soluciones concretas para abordarlas.

Beneficios del Diagrama de Ishikawa:

  • Fomenta la Colaboración: Involucra a todo el equipo en la identificación y resolución de problemas.
  • Visualiza las Relaciones: Permite ver claramente cómo las diferentes causas interactúan y afectan el resultado final.
  • Promueve el Pensamiento Crítico: Estimula el análisis profundo y la búsqueda de soluciones efectivas.
  • Previene Problemas Futuros: Al identificar y abordar las causas raíz, se reducen las posibilidades de que los mismos problemas vuelvan a surgir.
Si quieres tener más información. Desde esta página puedes encontrar una template para trabajar este modelo:

martes, 17 de agosto de 2021

TidyVerse y las condiciones del Tidy data que nos hacen la vida más fácil

ehhhh  (se pronuncia taidivers)
Hace ya varios año se dio un movimiento en la comunidad de R para que se utilizaran una serie de paquetes para unificar estos y que fuera más consistente el análisis de datos.
De aquí se crearon varios paquete cad auno con una funcionalidad diferente.
Para hacerlo más a menos aquí tienes un video directo al grano. 

Datos Tidy 

Ya sea en R, como en Python como en una hoja de cáculo tipo Google Drive o Excel antes de empezar a analizar nuestros datos tenemos que conseguir que los datos cumplan una determinada extructura. en resumen una forma de tabla o tabular. De no ser así algo puede salir mal y darnos unos resultados que los programas no van a comprender.
Condiciones que deben cumplir los datos Tidy
  1. - Cada columna es nua variable
  2. - Cada fila es una observación
  3. - Cada celda es un valor
Cumpliendo estos tres mmmm valores universales, podemos saber que estamos en el buen camino. Aunque muchas veces nos va a tocar transformar los datos para que tengan esta forma.

Paquete que nos ayudan a transformar datos para cumplir con el Data Tidy

Si usamos R, tenemos un paquete que se llama TidyR con su cheetshet
Si usamos Python, pandas cumple nuestro papel. Y para muestra esta cheetshet de pandas para data wrangling
Y para terminar un éxito de ventas de cuando esa joven de Tabular Bells (o algo así)

lunes, 9 de agosto de 2021

How-to Pandas. Notas sobre el curso de iniciación a Pandas de Kaggle

Hace unas semanas empecé un curso para repasar pandas y me topé con un curso muy claro y que explica  a muy bajo nivel como funciona así que para principiantes viene al pelo.
Una vez terminado tienes incluso un certificado de realización por Kaggle al que puedes acceder

Pero vamos a empezar por el principio:

Qué vamos a aprender en este curso de Kaggle de Python
  1. Creating, Reading and Writing
  2. Indexing, Selecting & Assigning
  3. Summary Functions and Maps
  4. Grouping and Sorting
  5. Data Types and Missing Values
  6. Renaming and Combining

El curso en cuestión es este y en una semana puedes tenerlo terminado si.

https://www.kaggle.com/learn/pandas

Para ayudar te dejo mi chileta

 Chuleta sobre tipos de datos :

 DataFrame = tabla
Series = lista
Por lo tanto un DataFrame es un conjunto de listas.

Leer un archivo csv:

wine_reviews = pd.read_csv("../input/wine-reviews/wine2020.csv")

Expecificando la columna a indexar

wine_reviews = pd.read_csv("../input/wine-reviews/wine2020.csv", index_col=0)

Cambiando la columna a indexar

reviews.set_index("title")