Explorando el poder y las limitaciones de GPT-4

Explorando GPT-4 poder y limitaciones

 

¿Alguna vez te has preguntado cómo se compara GPT-4, el más nuevo y avanzado, con su predecesor, ChatGPT 3.5?

¿Qué es lo que hace destacar a GPT-4 y cuáles son sus limitaciones?

A medida que profundizamos en las limitaciones de los modelos de lenguaje y sus posibles aplicaciones, es crucial comprender estos matices.

En este viaje a través del paisaje de la inteligencia artificial, resaltaremos las características distintivas de ChatGPT 4, sus complementos innovadores y cómo están revolucionando la forma en que resolvemos preguntas y problemas técnicos en el campo de la ciencia de datos.

Desde abordar la complejidad de la estadística y la probabilidad hasta enfrentar problemas de modelado complejos y consultas de programación en Python, SQL o R, exploraremos todas las formas en que GPT-4 puede ayudar en la ciencia de datos.

¡Así que prepárate mientras nos embarcamos en este viaje exploratorio, desvelando las capas de GPT-4 y su capacidad para transformar nuestro enfoque en la ciencia de datos!

 

ChatGPT 3.5 y ChatGPT 4

 

GPT-3.5, también conocido como ChatGPT, fue lanzado al público por OpenAI en noviembre de 2022.

Inmediatamente se hizo popular en todo el mundo. Incluso se volvió tan popular que a veces excedía la capacidad del servidor, lo que llevó a OpenAI a introducir una versión de pago, ChatGPT Plus, para gestionar la demanda.

Avanzando desde GPT-3.5, se lanzó GPT-4 el 14 de marzo, y tiene una mejora significativa.

Tiene capacidades de razonamiento avanzadas y, aunque puede generar significado a partir de datos en lugar de texto (como imágenes), la versión actual de ChatGPT+ aún solo produce texto como salida.

La capacidad de resolución de problemas de GPT-4 es más precisa que la de GPT-3.5.

Actualmente, la versión de pago de ChatGPT+ cuesta $20 al mes. Sin embargo, tiene sus restricciones, como el límite de 25 mensajes cada 3 horas.

Además, el motor de búsqueda de Microsoft, Bing, ha estado utilizando una versión personalizada de GPT-4.

Para obtener más información, aquí está la publicación oficial del blog sobre GPT-4 en el sitio web de OpenAI.

 

Complementos de ChatGPT

 

 

OpenAI presentó una nueva característica para ChatGPT: los complementos, el 23 de marzo.

Estas herramientas están diseñadas para mejorar las capacidades del modelo de lenguaje, permitiéndole acceder a la información más reciente y realizar cálculos.

La implementación de estos complementos se está realizando gradualmente para evaluar su uso práctico, impacto y posibles problemas de seguridad y alineación.

Varias empresas, incluyendo KAYAK, Klarna, Milo, Shopify, Slack, Speak, Wolfram, Zapier y más, han desarrollado el conjunto inicial de complementos.

Estos complementos ofrecen un amplio espectro de funcionalidades, como planificación de viajes, pedidos de comestibles, acceso a cálculos y recuperación de datos en tiempo real.

OpenAI también proporciona dos complementos: un navegador web y un intérprete de código.

Mientras que el navegador web te permite acceder a la web con el poder del modelo GPT, un intérprete de código te ayudará a manipular y analizar tus datos solo con una solicitud.

Algunos de estos complementos, como Noteable y Wolfram, son especialmente útiles en la ciencia de datos.

Estos complementos tienen como objetivo aumentar la utilidad de ChatGPT.

 

¿Se puede utilizar GPT4 para responder preguntas técnicas en ciencia de datos?

 

Podemos dividir las preguntas de ciencia de datos en preguntas no relacionadas con la codificación y preguntas de entrevistas de codificación.

Al probar la capacidad de ChatGPT4 en estas secciones, entenderemos mejor cómo se puede utilizar ChatGPT4 para responder preguntas técnicas en ciencia de datos.

Comencemos con las preguntas no relacionadas con la codificación.

 

Preguntas no relacionadas con la codificación

 

Aquí dividiremos las preguntas que no son de codificación en estadísticas, probabilidad y modelado.  

 

Estadísticas

 

Las estadísticas son vitales para la ciencia de datos, abarcando la recopilación, análisis, interpretación, visualización y organización de datos.

GPT-4 está equipado para responder preguntas sobre conceptos estadísticos, ofreciendo una comprensión integral de los principios estadísticos complejos.

Utilizar GPT-4 de esta manera puede mejorar la comprensión de las teorías estadísticas y capacitar a los científicos de datos para extraer ideas significativas de los datos.

   

Aquí está la pregunta de estadísticas que utilizaremos para probar las habilidades del Chat. Utilizaremos el complemento de Wolfram, que ayuda a los usuarios a realizar cálculos.

También, una nota importante al usar ChatGPT-4 y sus complementos: Pueden ser buenos, pero no son perfectos, así que siempre verifica el resultado porque puede estar equivocado.

Indicación: ¿Por qué se usa MSE con frecuencia como función de pérdida para la regresión lineal?

(Utiliza el complemento de Wolfram, proporciona fórmulas)

ChatGPT: La fórmula para MSE es:

   

donde:

Aquí están las razones por las que se utiliza comúnmente MSE:

  1. Diferenciabilidad: MSE es una función suave y diferenciable. Esto es importante porque los algoritmos de optimización, como el descenso de gradiente, se basan en la derivada de la función para encontrar el mínimo.
  2. Sensibilidad a los valores atípicos: El término de cuadrado en MSE otorga mayor peso a los errores más grandes. Esto significa que el modelo será más sensible a los valores atípicos y tratará de minimizar los errores grandes.
  3. Interpretabilidad: MSE es fácil de interpretar, ya que representa la diferencia cuadrada promedio entre los valores predichos y los valores reales. Un MSE más bajo indica un mejor ajuste del modelo a los datos.
  4. Convexidad: MSE conduce a un paisaje de pérdida convexo. Los problemas convexos tienen un único mínimo global, lo que los hace más fáciles de resolver utilizando algoritmos de optimización.
  5. Consistencia con OLS: En el caso de la regresión lineal, minimizar el MSE es equivalente a minimizar los residuos en Mínimos Cuadrados Ordinarios (OLS), que es el método estándar para estimar los parámetros de un modelo de regresión lineal.

Nota del autor: Aunque MSE tiene estas ventajas, no siempre es la mejor opción para cada problema de regresión. Dependiendo de las características específicas de los datos y del problema en cuestión, otras funciones de pérdida pueden ser más apropiadas.

Control

La respuesta de ChatGPT es detallada y correcta.

 

Probabilidad

 

La probabilidad es fundamental para la ciencia de datos, ya que ofrece una estructura para realizar predicciones de datos y comprender la incertidumbre. Puede ilustrar estos conceptos en detalle, explicando los cálculos matemáticos y la lógica detrás de la probabilidad de un evento específico.

Esto ayuda a los científicos de datos a construir modelos y tomar decisiones inteligentes basadas en el razonamiento probabilístico.

   

Aquí está la pregunta sobre probabilidad que ChatGPT intentará resolver.

Indicación: Estás jugando un juego con un amigo en el que lanzas dos dados justos de seis caras. Si la suma de los dos dados es 7 u 11, ganas; de lo contrario, tu amigo gana. ¿Cuál es la probabilidad de que ganes en tu primer lanzamiento?

ChatGPT: Para determinar la probabilidad de ganar en tu primer lanzamiento, necesitamos calcular el número de resultados favorables (resultados ganadores) y dividirlo por el número total de resultados posibles.

En este caso, hay 6 resultados posibles para cada dado, ya que son dados justos de seis caras. Por lo tanto, el número total de resultados al lanzar dos dados es: 66 = 36

Para ganar en el primer lanzamiento, la suma de los dos dados debe ser 7 u 11. Podemos calcular el número de resultados favorables de la siguiente manera:

  1. Suma de 7: Hay 6 formas de lograr este resultado: (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) y (6, 1).
  2. Suma de 11: Hay 2 formas de lograr este resultado: (5, 6) y (6, 5).

Por lo tanto, hay un total de 6 + 2 = 8 resultados favorables.

Ahora, podemos calcular la probabilidad de ganar en el primer lanzamiento dividiendo el número de resultados favorables entre el número total de resultados posibles:

Probabilidad de ganar en el primer lanzamiento = Número de resultados favorables / Número total de resultados posibles = 8 / 22 = 2 / 9 = 0,222

Por lo tanto, la probabilidad de que ganes en tu primer lanzamiento es aproximadamente 0,222 o 22,2%.

Control

La salida es correcta y coincide con la solución de la plataforma.

Modelado

El modelado es el proceso de formar una representación matemática de un sistema para analizar y predecir su comportamiento.

Puede ayudar a los científicos de datos a comprender conceptos, suposiciones, implementación e interpretación de sus resultados. Esto conduce a predicciones mejoradas y comprensión de los datos.

Aquí está la pregunta de modelado que vamos a probar.

Prompt: ¿Cómo funciona el algoritmo K-means?

ChatGPT: El algoritmo K-means es un algoritmo de agrupamiento iterativo que tiene como objetivo dividir un conjunto de datos en K grupos, donde K es un parámetro definido por el usuario.

Funciona de la siguiente manera:

  1. Inicialización: Selecciona aleatoriamente K puntos de datos del conjunto de datos como los centroides iniciales (puntos representativos) de los grupos.
  2. Asignación: Asigna cada punto de datos al centroide más cercano en función de una métrica de distancia, generalmente la distancia euclidiana. Este paso forma K grupos.
  3. Actualización: Recalcula los centroides de los grupos tomando la media de todos los puntos de datos asignados a cada grupo. Este paso tiene como objetivo encontrar mejores centroides que representen el centro de cada grupo.
  4. Iteración: Repite los pasos de asignación y actualización iterativamente hasta que se alcance la convergencia. La convergencia ocurre cuando los centroides dejan de cambiar significativamente o se alcanza el número máximo de iteraciones.
  5. Resultado: El algoritmo devuelve los K grupos finales, donde cada punto de datos pertenece al grupo con el centroide más cercano.

El algoritmo K-means busca minimizar la suma de distancias cuadradas dentro de los grupos, también conocida como inercia o varianza intra-cluster total. Supone que los grupos son esféricos y tienen la misma varianza. Sin embargo, el algoritmo puede converger a soluciones subóptimas dependiendo de la inicialización de los centroides.

Para mejorar el rendimiento de K-means, se pueden aplicar diversas técnicas, como utilizar múltiples inicializaciones, realizar métodos de inicialización de centroides más inteligentes (por ejemplo, K-means++) o utilizar el método del Codo para determinar el valor óptimo de K.

Es importante tener en cuenta que K-means es sensible a la elección inicial de los centroides y puede tener dificultades con conjuntos de datos que contienen grupos no lineales o de forma irregular. En tales casos, pueden ser más adecuados algoritmos de agrupamiento alternativos como DBSCAN o Modelos de Mezclas Gaussianas (GMM).

Control

La respuesta de ChatGPT es detallada y correcta.

Preguntas de Codificación

La programación es obligatoria para los científicos de datos. Incluye el uso de Python para la manipulación de datos y el aprendizaje automático, SQL para el manejo de bases de datos y R para cálculos estadísticos. GPT-4 puede ayudar a resolver problemas de codificación. Imagen por Autor

Vamos a probar ChatGPT-4 en preguntas de codificación, comenzando con Python.

Python

 

Python es un lenguaje preferido en la comunidad de ciencia de datos debido a su naturaleza amigable para el usuario y la presencia de bibliotecas robustas como pandas, numpy y scikit-learn.

GPT-4 puede ayudar en la depuración de código Python, recomendar las mejores prácticas de codificación e incluso producir fragmentos de código para tareas específicas.

Ahora vamos a probarlo con la siguiente pregunta.

   

Pregunta 1

Aquí está la pregunta.

Prompt: 

El nombre de mi conjunto de datos es airbnb_search_details y aquí hay más información;

Unnamed: 0:int64

id:int64

price:float64

property_type: object

room_type: object

amenities:object

accommodates:int64

bathrooms:int64

bed_type:object  

cancellation_policy:object 

cleaning_fee:bool

city:object 

host_identity_verified:object

host_response_rate:object

host_since:datetime64[ns]

neighbourhood:object

number_of_reviews:int64

review_scores_rating:float64

zipcode:int64

bedrooms:int64

beds:int64

La pregunta es: Encuentra todas las búsquedas de alojamientos donde el número de dormitorios es igual al número de baños. Asegúrate de que el tipo de salida esperado sea un dataframe.

Nota del autor: Para alimentar el conjunto de datos en el Chat, simplemente cópialo de la plataforma como se muestra a continuación.

ChatGPT: Para encontrar todas las búsquedas de alojamientos donde el número de dormitorios es igual al número de baños, puedes usar el siguiente código en Python:

import pandas as pd
# Suponiendo que 'airbnb_search_details' es el DataFrame que contiene tu conjunto de datos
# Reemplaza 'airbnb_search_details' con el nombre real de tu DataFrame si es diferente
# Filtra el DataFrame según la condición: número de dormitorios == número de baños
resultado = airbnb_search_details[airbnb_search_details['bedrooms'] == airbnb_search_details['bathrooms']]
# Muestra el DataFrame resultante
print(resultado)

 

Control

En realidad, la mayoría de la respuesta de ChatGPT es correcta excepto la última línea. No es necesario imprimir el dataframe resultado usando la función print, por lo que la solución funciona cuando el código se actualiza de la siguiente manera.

import pandas as pd
# Suponiendo que 'airbnb_search_details' es el DataFrame que contiene tu conjunto de datos
# Reemplaza 'airbnb_search_details' con el nombre real de tu DataFrame si es diferente
# Filtra el DataFrame según la condición: número de dormitorios == número de baños
resultado = airbnb_search_details[airbnb_search_details['bedrooms'] == airbnb_search_details['bathrooms']]
# Muestra el DataFrame resultante
resultado

 

Pregunta 2

Aquí está la pregunta de LeetCode que voy a alimentar en ChatGPT-4.

   

Voy a copiar y pegar toda la información en mi prompt.

Prompt

Dado un arreglo de enteros nums y un entero val, elimina todas las apariciones de val en nums en su lugar. El orden de los elementos puede cambiar. Luego devuelve el número de elementos en nums que no son iguales a val.

Considera que el número de elementos en nums que no son iguales a val es k, para ser aceptado, debes hacer lo siguiente:

Cambia el arreglo nums de manera que los primeros k elementos de nums contengan los elementos que no son iguales a val. Los elementos restantes de nums no son importantes, al igual que el tamaño de nums.

Devuelve k.

Juez personalizado:

El juez probará tu solución con el siguiente código:

int[] nums = […]; // Array de entrada

int val = …; // Valor a eliminar

int[] expectedNums = […]; // La respuesta esperada con la longitud correcta.

// Está ordenado sin valores iguales a val.

int k = removeElement(nums, val); // Llama a tu implementación

assert k == expectedNums.length;

sort(nums, 0, k); // Ordena los primeros k elementos de nums

for (int i = 0; i < actualLength; i++) {

assert nums[i] == expectedNums[i];

}

Si todas las afirmaciones pasan, entonces tu solución será aceptada.

Ejemplo 1:

Entrada: nums = [3,2,2,3], val = 3

Salida: 2, nums = [2,2,_,_]

Explicación: Tu función debería devolver k = 2, con los primeros dos elementos de nums siendo 2.

No importa qué dejes más allá de k devuelto (por lo tanto, son guiones bajos).

Ejemplo 2:

Entrada: nums = [0,1,2,2,3,0,4,2], val = 2

Salida: 5, nums = [0,1,4,0,3,_,_,_]

Explicación: Tu función debería devolver k = 5, con los primeros cinco elementos de nums conteniendo 0, 0, 1, 3 y 4.

Nota que los cinco elementos pueden ser devueltos en cualquier orden.

No importa qué dejes más allá de k devuelto (por lo tanto, son guiones bajos).

Restricciones:

0 <= nums.length <= 100

0 <= nums[i] <= 50

0 <= val <= 100

El formato de la solución: 

class Solution:

def removeElement(self, nums: List[int], val: int) -> int:

ChatGPT: Aquí está la solución en Python:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0  # Contador para elementos diferentes de val
        
        # Itera a través del array
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]  # Mueve el elemento a la posición k
                k += 1
        
        return k

 

La solución utiliza un enfoque de dos punteros para modificar el array nums en su lugar y contar el número de elementos que no son iguales a val. La variable k se utiliza para realizar un seguimiento de la posición donde se debe colocar el siguiente elemento que no es val.

El algoritmo itera a través del array y cada vez que encuentra un elemento que no es igual a val, lo mueve a la posición k y se incrementa k. Al final, k representa el número de elementos que no son iguales a val.

Puedes probar la solución utilizando el código personalizado proporcionado para verificar si produce la salida esperada para los ejemplos dados y pasa las afirmaciones.

Control

El código funciona perfectamente sin necesidad de ninguna actualización.

 

SQL

 

SQL es vital para trabajar con bases de datos. GPT-4 puede ayudar a formular consultas SQL, mejorar la eficiencia de las bases de datos y comprender conceptos SQL complicados.

Pregunta 1

Aquí está la pregunta SQL que intentaremos resolver.

   

Prompt : Aquí está la pregunta: Después de una reciente campaña publicitaria, el departamento de marketing desea clasificar sus esfuerzos en función del número total de unidades vendidas para cada producto.

Se le ha asignado la tarea de calcular el número total de unidades vendidas para cada producto y categorizar el rendimiento de los anuncios en función de los siguientes criterios para los artículos vendidos:

Destacado: 30+

Satisfactorio: 20 – 29

Insatisfactorio: 10 – 19

Pobre: 1 – 9

Tu salida debe contener el ID del producto, las unidades totales vendidas en orden descendente y su rendimiento publicitario categorizado.

El nombre de mi conjunto de datos es marketing_campaign y aquí están los tipos de datos.

marketing_campaign

user_id: int

created_at: datetime

product_id: int

quantity: int

price: int

Aquí está la salida esperada:

ID_producto vendido_total rendimiento_publicitario

105 41 Sobresaliente

102 29 Satisfactorio

114 23 Satisfactorio

118 22 Satisfactorio

120 21 Satisfactorio

Usa mysql para resolver esto.

ChatGPT: Para resolver esta tarea usando MySQL, puedes escribir una consulta para calcular el número total de unidades vendidas para cada producto y categorizar el rendimiento publicitario según los criterios dados.

Aquí está la consulta:

SELECT
    product_id,
    SUM(quantity) AS total_sold,
    CASE
        WHEN SUM(quantity) >= 30 THEN 'Sobresaliente'
        WHEN SUM(quantity) BETWEEN 20 AND 29 THEN 'Satisfactorio'
        WHEN SUM(quantity) BETWEEN 10 AND 19 THEN 'Insatisfactorio'
        WHEN SUM(quantity) BETWEEN 1 AND 9 THEN 'Pobre'
    END AS rendimiento_publicitario
FROM
    marketing_campaign
GROUP BY
    product_id
ORDER BY
    total_sold DESC;

 

En esta consulta, seleccionamos el product_id, calculamos la suma de las cantidades como total_sold y usamos una declaración CASE para categorizar el rendimiento publicitario en función del valor de total_sold. La consulta agrupa los resultados por product_id, los ordena en orden descendente de total_sold y proporciona la salida deseada.

Asegúrate de reemplazar “marketing_campaign” por el nombre real de tu tabla en la base de datos.

Al ejecutar esta consulta, obtendrás la salida esperada con el product_id, total_sold y rendimiento_publicitario categorizado según los criterios.

Control

El código funciona perfectamente sin necesidad de ninguna actualización.

Pregunta 2

Aquí está la segunda pregunta SQL tomada de LeetCode.

   

Prompt : Tabla: Ventas

+————-+——-+

| Nombre de columna | Tipo  |

+————-+——-+

| sale_id     | int   |

| product_id  | int   |

| year        | int   |

| quantity    | int   |

| price       | int   |

+————-+——-+

(sale_id, year) es la clave primaria de esta tabla. product_id es una clave externa a la tabla Product.

Cada fila de esta tabla muestra una venta del producto product_id en un año determinado. Ten en cuenta que el precio es por unidad.

Tabla: Producto

+————–+———+

| Nombre de columna  | Tipo    |

+————–+———+

| product_id   | int     |

| product_name | varchar |

+————–+———+

product_id es la clave primaria de esta tabla.

Cada fila de esta tabla indica el nombre del producto.

Escribe una consulta SQL que seleccione el ID del producto, año, cantidad y precio del primer año de cada producto vendido.

Devuelve la tabla resultante en cualquier orden.

El formato de resultado de la consulta es el siguiente ejemplo.

Ejemplo 1:

Entrada: 

Tabla Ventas:

+———+————+——+———-+——-+

| sale_id | product_id | year | quantity | price |

+———+————+——+———-+——-+ 

| 1       | 100        | 2008 | 10       | 5000  |

| 2       | 100        | 2009 | 12       | 5000  |

| 7       | 200        | 2011 | 15       | 9000  |

+———+————+——+———-+——-+

Tabla de productos:

+————+————–+

| product_id | product_name |

+————+————–+

| 100        | Nokia        |

| 200        | Apple        |

| 300        | Samsung      |

+————+————–+

Resultado: 

+————+————+———-+——-+

| product_id | primer_año | cantidad | precio |

+————+————+———-+——-+ 

| 100        | 2008       | 10       | 5000  |

| 200        | 2011       | 15       | 9000  |

+————+————+———-+——-+

ChatGPT: Para seleccionar el id del producto, el año, la cantidad y el precio del primer año de cada producto vendido, puedes utilizar la siguiente consulta SQL:

SELECT s.product_id, s.year AS primer_año, s.quantity, s.price
FROM Sales s
JOIN (
    SELECT product_id, MIN(year) AS primer_año
    FROM Sales
    GROUP BY product_id
) t ON s.product_id = t.product_id AND s.year = t.primer_año
ORDER BY s.product_id;

 

Explicación:

  1. La subconsulta (SELECT product_id, MIN(year) AS primer_año FROM Sales GROUP BY product_id) selecciona el año mínimo para cada producto utilizando la función MIN() y agrupa los resultados por product_id.
  2. La consulta principal une la tabla de ventas (Sales) con la subconsulta basada en las columnas product_id y year para obtener los registros de ventas del primer año de cada producto.
  3. Las columnas seleccionadas, incluyendo product_id, year como primer_año, quantity y price, se devuelven de la tabla de ventas (Sales) para los registros que coinciden.
  4. El resultado se ordena por product_id en orden ascendente.

La consulta devolverá el id del producto, el primer año, la cantidad y el precio del primer año de cada producto vendido, como se muestra en el ejemplo de resultado.

Control

El código funciona perfectamente sin necesidad de realizar ninguna actualización.

 

R

 

R es un lenguaje diseñado específicamente para evaluaciones estadísticas y visualización de datos. GPT-4 puede ayudar a comprender las sutilezas del lenguaje R, depurar el código R y utilizar varios paquetes de R para el análisis de datos.

Pregunta

   

Aquí está la pregunta de programación.

Indicación:

Aquí está la pregunta: Para cada revisor invitado, encuentra la nacionalidad del anfitrión favorito del revisor basado en la puntuación más alta que el revisor le dio a un anfitrión. Muestra el ID de usuario del invitado junto con la nacionalidad de su anfitrión favorito. En caso de que haya más de un anfitrión favorito del mismo país, muestra ese país solo una vez (elimina duplicados).

Ambas columnas from_user y to_user son ID de usuario.

Aquí está el resultado esperado:

from_user nacionalidad

0 Luxemburgo

1 Brasil

2 Australia

3 Australia

4 Brasil

Aquí están los data frames:

airbnb_reviews

from_user:int64

to_user:int64

from_type: object

to_type: object

review_score:int64

airbnb_hosts

host_id: int64

nationality: object

gender: object

age:int64

Resuelve esto con R.

Pistas:

Selecciona columna/s específica/s del dataframe usando [nombre_de_columna] y luego selecciona las filas con valores iguales a ‘==’ invitado

Usa .groupby(nombre_columna) para agrupar el dataframe según la columna especificada y max() para obtener la puntuación máxima dada por grupo

Realiza una unión interna en el dataframe original y el dataframe agrupado para obtener los atributos/detalles correspondientes del dataframe agrupado usando pd.merge(dataframe1, dataframe2, on = claves_comunes_tabla)

Realiza una unión interna en el dataframe resultante y airbnb_hosts

Usa [ [ nombre_columna/s] ] para seleccionar una columna especificada del dataframe y luego usa drop_duplicates(nombre_columna) para obtener valores distintos en la columna especificada.

ChatGPT: Para resolver esta tarea usando R, puedes seguir estos pasos:

  1. Selecciona las columnas necesarias del dataframe ‘airbnb_reviews’ y filtra las filas donde ‘from_type’ sea ‘guest’.
  2. Agrupa el dataframe filtrado por ‘from_user’ y obtén la puntuación máxima de revisión para cada invitado usando la función max().
  3. Realiza una unión interna entre el dataframe original y el dataframe agrupado basado en las columnas ‘from_user’ y ‘review_score’ para obtener las filas correspondientes con la puntuación máxima de revisión para cada invitado.
  4. Realiza otra unión interna entre el dataframe resultante y el dataframe ‘airbnb_hosts’ basado en las columnas ‘to_user’ y ‘host_id’ para obtener la nacionalidad del anfitrión favorito.
  5. Selecciona las columnas ‘from_user’ y ‘nationality’ del dataframe final unido.
  6. Utiliza la función distinct() para eliminar filas duplicadas basadas en la columna ‘nationality’.

Aquí está el código para lograr esto:

# Selecciona las columnas necesarias de airbnb_reviews y filtra las filas donde from_type es 'guest'
filtered_reviews <- airbnb_reviews[airbnb_reviews$from_type == 'guest', c('from_user', 'to_user', 'review_score')]

# Agrupa por from_user y obtén la puntuación máxima de revisión para cada invitado
max_scores <- aggregate(review_score ~ from_user, filtered_reviews, max)

# Realiza una unión interna para obtener las filas con la puntuación máxima de revisión para cada invitado
joined_df <- merge(filtered_reviews, max_scores, by = c('from_user', 'review_score'))

# Realiza una unión interna con airbnb_hosts para obtener la nacionalidad del anfitrión favorito
final_df <- merge(joined_df, airbnb_hosts, by.x = 'to_user', by.y = 'host_id')

# Selecciona las columnas necesarias del dataframe final unido
result <- final_df[, c('from_user', 'nationality')]

# Elimina filas duplicadas basadas en la nacionalidad
distinct_result <- distinct(result, .keep_all = TRUE)

# Imprime el resultado final
distinct_result

 

Ejecutar este código te dará la salida esperada con el ‘from_user’ (ID del invitado) y la ‘nationality’ correspondiente de su anfitrión favorito.

Control

El código funciona perfectamente sin necesidad de ninguna actualización.

 

Bono: Realizando un Proyecto de Datos con ChatGPT

 

El proyecto de datos en el que probaremos ChatGPT ha sido utilizado como una tarea para llevar a casa en el proceso de reclutamiento para los puestos de ciencia de datos en Uber.

   

En general, hay dos escenarios diferentes;

Escenario 1: Va a ser un sábado importante y necesitará haber muchos más autos en la carretera que la semana pasada. Para que los conductores se conecten en línea, estamos evaluando las siguientes dos opciones de bonificación en términos de costo:

  • Opción 1: $50 para cada conductor que esté en línea al menos 8 horas, acepte el 90% de las solicitudes, complete 10 viajes y tenga una calificación de 4.7 o mejor durante el período de tiempo;
  • Opción 2: $4/viaje para todos los conductores que completen 12 viajes y tengan una calificación de 4.7 o mejor.

Escenario 2: Un taxista genera actualmente $200 al día en tarifas (antes de gastos), trabaja seis días a la semana, toma tres semanas libres y tiene los siguientes gastos:

  • Gasolina – $200 por semana
  • Seguro – $400 por mes
  • Renta de vehículo (por semana) – $500

El conductor no paga los gastos de gasolina y renta en las semanas libres.

ChatGPT Cargador de Archivos

Ahora, para realizar un proyecto de datos, necesitamos la extensión de Chrome ChatGPT File Uploader. Te permitirá cargar archivos en ChatGPT.

No lo necesitas si ya tienes un complemento de intérprete de código: simplemente carga un archivo usando este complemento.

Para obtener más información al respecto, por favor mira este video.

Después de configurar la extensión File Uploader, intentemos resolver este proyecto de datos.

Abre ChatGPT y haz clic en el botón de esta extensión.

Verás el botón de envío como se muestra a continuación.

  Fuente: https://chat.openai.com/  

Ahora, alimentemos a ChatGPT con el conjunto de datos primero usando nuestro archivo de conjunto de datos y haciendo clic en el botón Enviar archivo primero.

  Fuente: https://chat.openai.com/  

Después de cargar el conjunto de datos, ChatGPT solicitará el conjunto de datos.

  Fuente: https://chat.openai.com/  

Ahora, aquí está la indicación que debes usar para resolver este proyecto de datos.

   

Indicación: Dadas las situaciones operativas y el conjunto de datos proporcionado, responde las siguientes preguntas utilizando Python.

Asignación

Situación 1: Va a ser un sábado muy concurrido y habrá muchos más autos en la carretera que la semana pasada. Para que los conductores se conecten en línea, estamos evaluando las siguientes dos opciones de bonificación en términos de costo:

Opción 1: $50 por cada conductor que esté en línea al menos 8 horas, acepte el 90% de las solicitudes, complete 10 viajes y tenga una calificación de 4.7 o mejor durante el período de tiempo;

Opción 2: $4 por viaje para todos los conductores que completen 12 viajes y tengan una calificación de 4.7 o mejor.

Utilizando el conjunto de datos proporcionado y dada la Situación 1, proporciona respuestas a las siguientes preguntas:

¿Cuánto sería el pago total de bonificación con la Opción 1?

¿Cuánto sería el pago total de bonificación con la Opción 2?

¿Cuántos conductores calificarían para una bonificación bajo la Opción 1 pero no bajo la Opción 2?

¿Qué porcentaje de conductores en línea completó menos de 10 viajes, tuvo una tasa de aceptación menor al 90% y tuvo una calificación de 4.7 o más?

Situación 2: Un taxista actualmente genera $200 por día en tarifas (antes de gastos), trabaja seis días a la semana, toma tres semanas libres y tiene los siguientes gastos:

Gasolina – $200 por semana

Seguro – $400 por mes

Alquiler de vehículo (por semana) – $500

El conductor no paga gastos de gasolina y alquiler en las semanas libres.

Ahora, supongamos que el mismo conductor compraría un Town Car y se asociaría con Uber. Si lo hace, sus gastos de gasolina aumentarían un 5%, sus gastos de seguro disminuirían un 20% y ya no alquilaría un vehículo. Sin embargo, tendría que comprar un automóvil. El conductor todavía tomaría tres semanas libres al año.

Dada la Situación 2, proporciona respuestas a las siguientes preguntas:

¿Cuánto dinero (después de gastos) gana el taxista por año sin asociarse con Uber?

Estás convenciendo al mismo conductor de arriba para comprar un Town Car y asociarse con Uber. Suponiendo que el nuevo automóvil cuesta 40,000 USD, ¿cuánto necesitarían aumentar las tarifas brutas del conductor por semana para pagar completamente el automóvil en el primer año y mantener el mismo margen de beneficio anual?

ChatGPT:

Para realizar estos cálculos, primero necesitamos cargar y preprocesar el conjunto de datos. Utilizaremos la biblioteca pandas de Python para cargar el archivo CSV y analizar las columnas requeridas.

Desafortunadamente, como modelo basado en texto, no puedo ejecutar directamente código. Pero puedo proporcionarte el código de Python que puedes usar para responder tus preguntas:

A continuación se muestra el código que necesitarías para responder tus preguntas para el Escenario 1:

import pandas as pd

# Cargar conjunto de datos
data = pd.read_csv('dataset_2.csv')

# Convertir 'Accept Rate' de porcentaje en cadena a flotante
data['Accept Rate'] = data['Accept Rate'].str.rstrip('%').astype('float') / 100.0

# Calcular bonificación en ambas opciones
data['Option 1 Bonus'] = ((data['Supply Hours'] >= 8) & (data['Accept Rate'] >= 0.9) & 
                          (data['Trips Completed'] >= 10) & (data['Rating'] >= 4.7)) * 50
data['Option 2 Bonus'] = ((data['Trips Completed'] >= 12) & (data['Rating'] >= 4.7)) * data['Trips Completed'] * 4

# Calcular pago total para cada opción
total_payout_option1 = data['Option 1 Bonus'].sum()
total_payout_option2 = data['Option 2 Bonus'].sum()

# Calcular el número de conductores que califican en la Opción 1 pero no en la Opción 2
num_option1_only = ((data['Option 1 Bonus'] > 0) & (data['Option 2 Bonus'] == 0)).sum()

# Calcular el porcentaje de conductores que completan menos de 10 viajes, tienen una tasa de aceptación inferior al 90% y tienen una calificación de 4.7 o superior
percent_undesirable_drivers = ((data['Trips Completed'] < 10) & (data['Accept Rate'] < 0.9) & (data['Rating'] >= 4.7)).mean() * 100

print('Pago total de bonificación para la Opción 1: $', total_payout_option1)
print('Pago total de bonificación para la Opción 2: $', total_payout_option2)
print('Número de conductores que califican en la Opción 1 pero no en la Opción 2: ', num_option1_only)
print('Porcentaje de conductores que completan menos de 10 viajes, tienen una tasa de aceptación inferior al 90% y tienen una calificación de 4.7 o superior: ', percent_undesirable_drivers)

 

A continuación se muestra el código para responder tus preguntas para el Escenario 2:

# Calcular los ingresos y gastos anuales del conductor de taxi
ingreso_diario = 200
ingreso_semanal = ingreso_diario * 6  # Trabajando 6 días a la semana
ingreso_anual = ingreso_semanal * 52  # Trabajando todo el año
gastos_anuales = (200 * 49) + (400 * 12) + (500 * 49)  # Sin gastos en semanas libres
ingreso_neto_anual = ingreso_anual - gastos_anuales

# Calcular los nuevos gastos e ingreso neto si el conductor se asocia con Uber
nuevos_gastos_anuales = (200 * 1.05 * 49) + (400 * 0.8 * 12)  # Aumento del 5% en gasolina, disminución del 20% en seguro
nuevo_ingreso_neto_anual = ingreso_anual - nuevos_gastos_anuales - 40000  # Restar costo del automóvil

# Calcular el aumento necesario en las tarifas brutas para mantener el mismo margen de beneficio
ingreso_adicional_requerido = ingreso_neto_anual - nuevo_ingreso_neto_anual
ingreso_adicional_semanal_requerido = ingreso_adicional_requerido / 52

print('Ingreso neto anual del conductor de taxi: $', ingreso_neto_anual)
print('Aumento requerido en las tarifas brutas semanales: $', ingreso_adicional_semanal_requerido)

 

Puedes reemplazar la ruta del archivo en la función read_csv con la ruta real de tu archivo dataset_2.csv, y luego ejecutar estos fragmentos de código en tu entorno local de Python.

Control

La salida del primer escenario es totalmente correcta (las primeras 4 preguntas). Sin embargo, la salida del segundo escenario no es correcta.

Por ejemplo, calcula que el conductor trabaja 52 semanas (todo el año); sin embargo, el conductor se toma 3 semanas libres.

Es por eso que debes tener cuidado con los cálculos que realiza ChatGPT y verificar los pasos que sigue para asegurarte del resultado.

Después de algunos intentos, aquí está el código que produce el resultado correcto que proporciona ChatGPT.

# Semanas libres por año
semanas_libres = 3

# Total de semanas por año
total_semanas_por_año = 52

# Semanas de trabajo por año
semanas_trabajo = total_semanas_por_año - semanas_libres

# Total de meses por año
total_meses_por_año = 12

# Gastos
gas_por_semana = 200
seguro_por_mes = 400
alquiler_vehículo_por_semana = 500

# Ingresos
tarifa_por_día = 200 
días_trabajo_por_semana = 6
ingreso_total = tarifa_por_día * días_trabajo_por_semana * semanas_trabajo

# Gastos totales
gastos_totales = (gas_por_semana + alquiler_vehículo_por_semana) * semanas_trabajo + seguro_por_mes * total_meses_por_año

# Ingreso neto
ingreso_neto = ingreso_total - gastos_totales

print("Ingreso neto por año: $", ingreso_neto)

# Para la pregunta 6:

# Cambios en los gastos
nuevo_gas_por_semana = gas_por_semana * 1.05  # 5% de aumento
nuevo_seguro_por_mes = seguro_por_mes * 0.8  # 20% de disminución
costo_auto = 40000

# Nuevos gastos totales
nuevos_gastos_totales = costo_auto + (nuevo_gas_por_semana * semanas_trabajo) + (nuevo_seguro_por_mes * total_meses_por_año)

# Para mantener el mismo ingreso neto, los nuevos ingresos deberían ser:
nuevo_ingreso_total = nuevos_gastos_totales + ingreso_neto

# Esto se traduce en un aumento requerido en las tarifas semanales:
tarifa_adicional_por_semana = (nuevo_ingreso_total - ingreso_total) / semanas_trabajo

print("Aumento requerido en las tarifas semanales: $", tarifa_adicional_por_semana)

 

Palabras Finales

 

Esta exploración ha arrojado luz sobre las aplicaciones innovadoras y las limitaciones inherentes de GPT-4, especialmente en el campo de la ciencia de datos.

Ya sea abordando problemas estadísticos y de probabilidad complejos, problemas de modelado o consultas de programación, GPT-4 ha demostrado capacidades prometedoras.

Sin embargo, es esencial recordar que aunque GPT-4 proporciona una herramienta valiosa, la supervisión y comprensión humanas siguen siendo fundamentales para garantizar resultados de calidad, especialmente en cálculos matemáticos.

Esta exploración es solo el comienzo del viaje de GPT-4, ya que siempre hay avances y mejoras en el horizonte. Sam Altman, CEO de OpenAI, dijo que en el futuro modelo (GPT5), OpenAI planea resolver el problema de cálculos inexactos y el límite en el número de indicaciones.

Continúa manteniendo la curiosidad, sigue explorando y recuerda que el único límite del potencial de la IA es aquel que establecemos nosotros mismos.

    Nate Rosidi es un científico de datos y estratega de productos. También es profesor adjunto de enseñanza de análisis y fundador de StrataScratch, una plataforma que ayuda a los científicos de datos a prepararse para sus entrevistas con preguntas reales de las principales empresas. Conéctate con él en Twitter: StrataScratch o LinkedIn.  

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

¿Podemos superar la fragilidad inmediata en los modelos de lenguaje grandes? La IA de Google presenta la calibración por lotes para un rendimiento mejorado.

Los modelos de lenguaje grandes han surgido recientemente como herramientas poderosas para diversas tareas de compren...

Inteligencia Artificial

Proyecto Green Light de Google sincroniza los semáforos para reducir en un 30% las paradas

El Proyecto Green Light de Google se ha asociado con 12 ciudades en todo el mundo para proporcionar recomendaciones d...

Inteligencia Artificial

La modelación en 3D se basa en la inteligencia artificial

La inteligencia artificial puede desbloquear mejoras en velocidad y calidad en gráficos tridimensionales.

Inteligencia Artificial

Este documento de IA presenta técnicas avanzadas para explicaciones detalladas de texto y visual en modelos de alineación de imágenes y texto.

Los modelos de alineación de texto e imagen tienen como objetivo establecer una conexión significativa entre el conte...

Inteligencia Artificial

Estos ingeniosos drones pueden unirse en el aire para formar un robot más grande y fuerte

Investigadores de la Universidad de Tokio en Japón han desarrollado drones que pueden ensamblar y desmontar en pleno ...