Integrando ChatGPT en los flujos de trabajo de Ciencia de Datos Consejos y Mejores Prácticas

Integrating ChatGPT in Data Science Workflows Tips and Best Practices.

¿Buscas integrar ChatGPT en tu flujo de trabajo de ciencia de datos? Aquí tienes un ejemplo junto con consejos y mejores prácticas para sacar el máximo provecho de ChatGPT para la ciencia de datos.

ChatGPT, su sucesor GPT-4 y sus alternativas de código abierto han sido extremadamente exitosas. Los desarrolladores y científicos de datos buscan ser más productivos y utilizar ChatGPT para simplificar sus tareas diarias.

Aquí veremos cómo utilizar ChatGPT para la ciencia de datos a través de una sesión de programación en pareja con ChatGPT. Construiremos un modelo de clasificación de texto, visualizaremos el conjunto de datos, identificaremos los mejores hiperparámetros para el modelo, probaremos diferentes algoritmos de aprendizaje automático y más, todo utilizando ChatGPT.

En el camino, también veremos ciertos consejos para estructurar los comandos de manera que obtengamos resultados útiles. Para seguir adelante, necesitas tener una cuenta gratuita de OpenAI. Si eres un usuario de GPT-4, también puedes seguir los mismos comandos.

Construir un modelo de trabajo más rápido

Intentemos construir un modelo de clasificación de noticias usando ChatGPT para el conjunto de datos de 20 newsgroups en scikit-learn.

Este es el comando que usé: “Me gustaría construir un modelo de clasificación de noticias utilizando el conjunto de datos de 20 newsgroups de sklearn. ¿Sabes algo sobre esto?”

Aunque mi comando no es muy específico en este punto, he indicado tanto el objetivo como el conjunto de datos:

  • Objetivo: construir un nuevo modelo de clasificación
  • Conjunto de datos a utilizar: conjunto de datos de 20 newsgroups de scikit-learn

La respuesta de ChatGPT nos indica que comencemos cargando el conjunto de datos.

# Cargar el conjunto de datos
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True)
newsgroups_test = fetch_20newsgroups(subset='test', shuffle=True)

Como también hemos indicado el objetivo (construir un modelo de clasificación de texto), ChatGPT nos indica cómo podemos hacer esto.

Vemos que nos da los siguientes pasos:

  • Usar TfidfVectorizer para el preprocesamiento de texto y obtener una representación numérica. Este enfoque de usar los puntajes TF-IDF es mejor que usar las ocurrencias de conteo utilizando un CountVectorizer.
  • Crear un modelo de clasificación en la representación numérica del conjunto de datos utilizando un clasificador Naive Bayes o Support Vector Machine (SVM).

También dio el código para un clasificador Naive Bayes multinomial, así que lo usaremos y verificaremos si ya podemos tener un modelo de trabajo.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report

# Preprocesar los datos de texto
vectorizer = TfidfVectorizer(stop_words='english')
X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.transform(newsgroups_test.data)

# Entrenar un clasificador Naive Bayes
clf = MultinomialNB()
clf.fit(X_train, newsgroups_train.target)

# Evaluar el rendimiento del clasificador
y_pred = clf.predict(X_test)
print(classification_report(newsgroups_test.target, y_pred))

Fui y ejecuté el código anterior. Y funciona como se esperaba, sin errores. Pasamos de una pantalla en blanco a un modelo de clasificación de texto en unos minutos con un solo comando.

Resultados >>
precision    recall  f1-score   support

           0       0.80      0.69      0.74       319
           1       0.78      0.72      0.75       389
           2       0.79      0.72      0.75       394
           3       0.68      0.81      0.74       392
           4       0.86      0.81      0.84       385
           5       0.87      0.78      0.82       395
           6       0.87      0.80      0.83       390
           7       0.88      0.91      0.90       396
           8       0.93      0.96      0.95       398
           9       0.91      0.92      0.92       397
          10       0.88      0.98      0.93       399
          11       0.75      0.96      0.84       396
          12       0.84      0.65      0.74       393
          13       0.92      0.79      0.85       396
          14       0.82      0.94      0.88       394
          15       0.62      0.96      0.76       398
          16       0.66      0.95      0.78       364
          17       0.95      0.94      0.94       376
          18       0.94      0.52      0.67       310
          19       0.95      0.24      0.38       251

    accuracy                           0.82      7532
   macro avg       0.84      0.80      0.80      7532
weighted avg       0.83      0.82      0.81      7532

Aunque hemos obtenido un modelo funcional para resolver el problema en cuestión, aquí hay algunos consejos que pueden ayudarte cuando hagas una solicitud. La solicitud podría haber sido mejor y desglosada en pasos más pequeños, como los siguientes:

  • Por favor, dime más sobre el conjunto de datos de 20 grupos de noticias de scikit-learn.
  • ¿Cuáles son las posibles tareas que puedo realizar con este conjunto de datos? ¿Puedo construir un modelo de clasificación de texto?
  • ¿Puede decirme qué algoritmo de aprendizaje automático será el más adecuado para esta aplicación?

Visualiza el conjunto de datos

Vale, ya hemos construido un modelo de clasificación de texto. Pero sucedió muy rápido, así que vamos a ralentizar y tratar de idear una visualización simple del conjunto de datos.

En particular, intentemos comprender la distribución de las muestras de entrenamiento en las 20 categorías de noticias e identificar si hay algún desequilibrio de clases.

Aquí está la solicitud que usé: “Me gustaría visualizar el conjunto de datos para comprender la distribución de clases e identificar el desequilibrio de clases. ¿Puedes ayudarme con la visualización?”

ChatGPT sugirió que un gráfico de barras o un histograma del número de muestras en cada una de las clases sería una buena visualización. Eso suena razonable.

Aquí está el código que ChatGPT generó para crear un gráfico de barras simple en matplotlib:

import matplotlib.pyplot as plt

# Carga el conjunto de datos
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True)

# Cuenta el número de muestras para cada clase
class_counts = {}
for label in newsgroups_train.target:
    class_name = newsgroups_train.target_names[label]
    if class_name in class_counts:
        class_counts[class_name] += 1
    else:
        class_counts[class_name] = 1

# Grafica la distribución de clases
plt.bar(class_counts.keys(), class_counts.values())
plt.xticks(rotation=90)
plt.xlabel('Clase')
plt.ylabel('Número de muestras')
plt.title('Distribución de clases')
plt.show()

Aquí está el gráfico. Es ordenado, las etiquetas son legibles. También podemos ver el número de muestras en cada una de las 20 clases.

La distribución de muestras de entrenamiento en las 20 clases es aproximadamente uniforme y no hay un desequilibrio de clases visible. Por lo tanto, el modelo que obtuvimos en el paso anterior es útil. Y no necesitamos usar ninguna técnica de re-muestreo novedosa para abordar el desequilibrio de clases.

Ajuste de hiperparámetros

A continuación, me gustaría ajustar los hiperparámetros del modelo. Primero, me gustaría comprender los diferentes hiperparámetros que se pueden ajustar. Luego, podemos hacer una búsqueda en cuadrícula simple si no hay demasiados hiperparámetros.

Aquí está la solicitud: “¿Hay algún hiperparámetro que pueda ajustar para mejorar el modelo clasificador?”

En el código que obtuvimos, max_df para TfidfVectorizer también es ajustable. Sabemos que la puntuación TF-IDF funciona asignando un peso más alto a los términos que ocurren con frecuencia en un documento particular mientras asigna un peso sustancialmente menor a los términos que ocurren con frecuencia en todos los documentos. El max_df utiliza el porcentaje de ocurrencia para ignorar un término particular.

Por ejemplo, un max_df de 0.5 indica que se ignorarán todos los términos que se produzcan en al menos el 50% de los documentos. Si lo desea, puede eliminar esto. Pero voy a mantenerlo solo para ver qué max_df puedo usar.

El código utiliza una búsqueda en cuadrícula simple y selecciona los valores óptimos en función de las puntuaciones de validación cruzada.

from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline

# Define el pipeline con TF-IDF y Multinomial Naive Bayes
pipeline = Pipeline([
    ('tfidf', TfidfVectorizer(stop_words='english')),
    ('clf', MultinomialNB())
])

# Define la cuadrícula de hiperparámetros
param_grid = {
    'tfidf__max_df': [0.5, 0.75, 1.0],
    'clf__alpha': [0.1, 0.5, 1.0],
    'clf__fit_prior': [True, False],
}

# Realiza la búsqueda en cuadrícula con validación cruzada
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(newsgroups_train.data, newsgroups_train.target)

# Imprime los mejores hiperparámetros y la puntuación de validación cruzada
print("Mejores hiperparámetros: ", grid_search.best_params_)
print("Puntuación de validación cruzada: ", grid_search.best_score_)

Output >>
Mejores hiperparámetros:  {'clf__alpha': 0.1, 'clf__fit_prior': False, 'tfidf__max_df': 0.5}
Puntuación de validación cruzada:  0.9088736147919108

Al insertar los valores de estos hiperparámetros, obtuve una mejora del 2% en la precisión de la clasificación.

Aquí, no tuvimos muchos hiperparámetros para ajustar. Si tiene muchos hiperparámetros donde cada uno puede tomar un conjunto de valores, ejecutar una búsqueda en cuadrícula podría ser costoso. Y podría tener sentido ejecutar una búsqueda aleatoria en su lugar.

Iteración más rápida sobre diferentes modelos

Vimos en uno de los primeros pasos que un SVM también funciona bien para este problema de clasificación.

Ahora me gustaría construir un clasificador de vectores de soporte para el mismo conjunto de datos.

La indicación que utilicé: “¿Puede decirme si puedo usar un SVM para resolver el mismo problema? ¿Puede generar el código para hacerlo?”

y aquí vamos:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# Cargar el conjunto de datos
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True)

# Convertir los datos de texto en una matriz de características TF-IDF
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(newsgroups_train.data)
y = newsgroups_train.target

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

# Definir el clasificador SVM
clf = SVC(kernel='linear')

# Entrenar el clasificador SVM
clf.fit(X_train, y_train)

# Predecir las etiquetas de clase para el conjunto de prueba
y_pred = clf.predict(X_test)

# Calcular la precisión del clasificador SVM
accuracy = accuracy_score(y_test, y_pred)
print('Precisión:', accuracy)

Dado que tenemos una puntuación de precisión de más del 90%, SVM parece ser una buena opción para este conjunto de datos.

Salida >> Precisión: 0.9019001325673884

Como se puede ver, puede usar ChatGPT para probar rápidamente diferentes modelos para resolver el mismo problema.

Explorando la reducción de dimensionalidad

Una vez que se ha centrado en construir un modelo funcional, también se pueden explorar otras direcciones disponibles. Veamos la reducción de dimensionalidad como ejemplo.

En este punto, no estoy interesado en ejecutar algoritmos de reducción de dimensionalidad porque ya tengo un modelo funcional. Y el espacio de características no es muy dimensional. Entonces no necesitamos reducir el número de dimensiones antes de construir el modelo.

Sin embargo, veamos los enfoques de reducción de dimensionalidad para este conjunto de datos específico.

La indicación que utilicé: “¿Puede decirme las técnicas de reducción de dimensionalidad que puedo usar para este conjunto de datos?”

Los siguientes técnicas han sido sugeridas por ChatGPT:

  • Análisis semántico latente o SVD
  • Análisis de componentes principales (PCA)
  • Factorización de matrices no negativas (NMF)

Terminemos nuestra discusión enumerando las mejores prácticas para usar ChatGPT.

Mejores prácticas para usar ChatGPT en ciencia de datos

Estas son algunas de las mejores prácticas a tener en cuenta al usar ChatGPT para la ciencia de datos:

  • No ingrese datos confidenciales ni código fuente: no ingrese datos confidenciales en ChatGPT. Cuando trabaje en equipos de datos en organizaciones, a menudo construirá modelos en datos de clientes, que deben mantenerse confidenciales. En su lugar, puede intentar construir prototipos para conjuntos de datos públicos similares y tratar de transponerlos en su conjunto de datos o problema. Del mismo modo, absténgase de ingresar código fuente sensible o cualquier información que no deba divulgarse.
  • Especifique claramente sus indicaciones: sin indicaciones específicas, es bastante difícil obtener respuestas útiles de ChatGPT. Por lo tanto, estructure su indicación de manera que sean lo suficientemente específicas. Las indicaciones deben transmitir el objetivo claramente, uno paso a la vez.
  • Descomponga indicaciones más largas en indicaciones más pequeñas: si tiene una cadena de pensamiento sobre cómo lograr una tarea específica, intente descomponerla en pasos más simples e indicar a ChatGPT que realice cada uno de los pasos.
  • Depure de manera efectiva utilizando ChatGPT: en este ejemplo, todo el código que obtuvimos se ejecutó sin errores; pero esto no siempre es el caso. Puede encontrar errores debido a funciones obsoletas, referencias API no válidas y más. Cuando se encuentre con errores, puede ingresar el mensaje de error y la traza relevante en su indicación. Y observe las soluciones ofrecidas, luego proceda a depurar su código.
  • Haga un seguimiento de las indicaciones: si usa (o planea usar) ChatGPT mucho en su flujo de trabajo diario de ciencia de datos, puede ser una buena idea hacer un seguimiento de las indicaciones. Esto puede ayudar a refinar las indicaciones con el tiempo e identificar técnicas de ingeniería de indicaciones para obtener mejores resultados de ChatGPT.

Conclusión

Cuando se utiliza ChatGPT para aplicaciones de ciencia de datos, comprender el problema empresarial es el primer y más importante paso. Por lo tanto, ChatGPT es solo una herramienta para simplificar y automatizar ciertas tareas y no es un reemplazo para la experiencia técnica de los desarrolladores.

Sin embargo, sigue siendo una herramienta invaluable para aumentar la productividad al ayudar a construir y probar rápidamente diferentes modelos y algoritmos. ¡Así que aprovechemos ChatGPT para perfeccionar nuestras habilidades y convertirnos en mejores desarrolladores! Bala Priya C es una desarrolladora y escritora técnica de India. Le gusta trabajar en la intersección de las matemáticas, la programación, la ciencia de datos y la creación de contenido. Sus áreas de interés y experiencia incluyen DevOps, ciencia de datos y procesamiento del lenguaje natural. ¡Disfruta de la lectura, la escritura, la programación y el café! Actualmente, está trabajando en aprender y compartir sus conocimientos con la comunidad de desarrolladores mediante la redacción de tutoriales, guías prácticas, artículos de opinión y más.

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

Google DeepMind presenta una nueva herramienta de IA que clasifica los efectos de 71 millones de mutaciones 'missense

El mayor desafío en la genética humana es sin duda la complejidad del genoma humano y la vasta diversidad de factores...

Inteligencia Artificial

QCNet Revolucionando la seguridad de los vehículos autónomos con una predicción avanzada de trayectorias

Ha habido una transformación a gran escala en los automóviles, pasando de ser vehículos normales a vehículos eléctric...

Inteligencia Artificial

Algoritmo de Búsqueda en Profundidad (DFS) Explorando las Profundidades del Recorrido de Grafos

En este artículo, profundizaremos en el funcionamiento interno del algoritmo de Búsqueda en Profundidad Primero, expl...

Inteligencia Artificial

Aumente la productividad del agente con la integración de Salesforce para el análisis de llamadas en vivo.

Como agente de un centro de contacto, ¿preferirías enfocarte en tener conversaciones productivas con los clientes o d...

Inteligencia Artificial

La función de detección de suplantación de identidad protege a las marcas y personalidades de las cuentas falsas en las redes sociales

Una empresa canadiense ha incorporado una función de protección contra la suplantación de identidad en su plataforma ...