Skip to content

¿se puede usar google gemini para enseñar métodos cuantitativos para ciencias sociales?

Published: at 12:00 AM

Un hilo reciente en Mastodon tuvo una conversación / discusión entre M y JD sobre el tema recurrente. Uno de los argumentos de JD era que “les debemos a quienes tienen menos acceso a los LLMs el acercarles a estos sistemas, para cerrar las brechas que les impiden avanzar profesionalmente”1.

Para mí este tipo de argumentos caen en el error del tecnosolucionismo. Es decir, implican que hay una tecnología, que es propiedad de empresas grandes, que tenemos que enseñar/aprender, sí o sí, por razones xyz. Ahora, toda la historia de Microsoft desde los años 90s es un contraejemplo de ese argumento. Nos querían hacer creer que WinME era el futuro, luego que Explorer lo era, etc. Y todos esos proyectos luego murieron.

En otros casos las empresas han sido efectivas logrado forzarnos sus tecnosocluciones. Por ejemplo Facebook convenció a muchos reguladores (entre ellos el Estado Colombiano) de que su solución de internet reducido, que es gratis sólo para sus aplicaciones, era una respuesta al problema de la conectividad. Y de paso lograron generar un monopolio en las comunicaciones en Colombia. Dejando a las personas con una impresión de que internet equivale únicamente a sus productos.

Sin embargo, decidí ser el abogado del diablo, y darle una opción al uso de la tecnología. De todas formas las personas van a recibir propaganda 24/7 de su uso, así que en parte es mi responsabilidad como docente entender qué capacidades tienen. Y quien sabe, tal vez puede que podamos usar las armas del amo en desmantelar su casa.

Comencé por acceder a google colab:

https://colab.research.google.com/

Hice click en “Antigravity Agent”, con su tag: “explore the basics of building and using managed agents in Colab”.

Eso lleva a un cuaderno llamado “Get_started_managed_agents.ipynb”, 2. La primera instrucción que aparece es la siguiente:

%pip install -U -q "google-genai>=2.9.0"

Esta instrucción tiene una salida con error:

 ERROR: pip's dependency resolver does not currently take...

Lo que sería de entrada un gigantesco problema⚠️, porque nos lleva a un error, de un comando avanzado (pip), que además no permite ayuda como los demás errores. Es decir, ya caemos en una situación extremádamente particular. HMmmm.

La solución, querida lectora, es quitar la versión. Esto lo aprendí de la forma difícil, leyendo la documentación.

%pip install -U -q "google-genai"

Seguimos. Lo siguiente que pide es “Setup your API key”. Esto nos lleva a otro cuaderno, llamado “authentication.ipynb”, que nos explica cómo hacerlo. De nuevo otro problema en mi caso de uso, tendríamos que incluir otra discusión sobre qué es una llave y como se genera.

Más problemático de esta discusión, es que no sabemos con claridad cuál es la realidad de los cobros. La información está atrás de otra página, generada dinámicamente, llamada Gemini API Billing.

https://aistudio.google.com/app/billing

Esta página indica que “costs take a few hours to show up, and might take longer than 24 h”. Ok. Bueno, dejemos eso a un lado, una discusión que tendremos que solucionar si vamos a proponerle a los estudiantes usar este sistema.

Después generamos una interfaz y le ingresamos una pregunta al sistema. Siguiendo un ejercicio que históricamente ha generado líos, escribo lo siguiente:

“Genera un código que construya un histograma de los pesos de los nacimientos tomados de los datos de estadísticas vitales del dane, año 2023, de https://microdatos.dane.gov.co/index.php/catalog/876, mostrando los pesos según las tres categorías: bajo peso, peso normal y peso alto”,

Los datos del DANE están organizados por categorías, no por valor de peso en gramos. En mi mente la solución pasa por cargar los datos, limpiarlos, generar un histograma que muestre los valores en cada categoría y finalmente en la interpretación se sumen los valores que son de bajo peso, normal, alto.

La verdad es que hasta ahora nadie ha dado una respuesta de ese tipo, y eso habla más de la actividad que de los estudiantes. Tal vez estoy complicándolo todo mucho, y en mi mente las actividades que son de bajo nivel cognitivo son de alto nivel cognitivo para mis estudiantes. Lo que los frustra, abruma, recarga y por ello no llegan al nivel elevado.

Pero bueno, veamos que hace Gemini. Dele pues 🤖.

Algo que no les conté es que inicialmente hice la pregunta en inglés, porque ajá. Eso genera una salida en markdown que google compila en una página bonita. Luego pasé al castellano, porque esos son mis estudiantes. Ahí generó un markdown, pero ya no tan bonito, no compiló en html. HMMMMMMM.

“Sale” algo así 3:

ruta_archivo = "nac2023.csv"  # Ajusta la ruta a donde guardaste el archivo extraído

try:
    # Los archivos del DANE suelen venir en codificación ISO-8859-1 (Latin-1) y separador ',' o ';'
    try:
        df = pd.read_csv(ruta_archivo, encoding="ISO-8859-1", sep=",", low_memory=False)
    except Exception:
        df = pd.read_csv(ruta_archivo, encoding="ISO-8859-1", sep=";", low_memory=False)
    print(f"Archivo cargado exitosamente. Filas: {df.shape[0]:,}, Columnas: {df.shape[1]}")
except FileNotFoundError:
    print(f"No se encontró '{ruta_archivo}'. Generando datos de prueba simulados con distribución DANE...")

De nuevo hay cosas que son complicadas para las personas:

HMMMMM…

Lo más grave es que se inventó el nombre del archivo. El archivo del DANE se llama “BD-EEVV-Nacimientos-2023.csv”, no “nac2023.csv”.4 Como ese no es el archivo, estoy dispuesto a apostar un plato de lentejas (y me gustan mucho las lentejas) a que varios de mis estudiantes correrían este código sin saber ese pequeño error. El primer try no funciona, luego caemos en el segundo except, luego… ¡Se inventa los datos! Con unas probabilidades sacadas del 😈, pero bueno. OMMM.

Aquí me tocó parar, porque en mi laptop no tengo todavía instalado pandas5. Pero revisando un poco el código veo que el sistema si genera una respuesta de alto nivel a mi pregunta. Primero cambia los nombres de las columnas a mayúsculas, resolviendo un error típico que presentan los datos viejos del DANE. Luego procede a crear una función para limpiar los datos. La usa para generar una nueva columna con los valores de las categorías.

Cómo 🤖 no entiende, es como una persona que nunca sabe lo que no sabe. Entonces se inventa estrategias para trabajar con datos que estén en gramos, así ningunos de los datos del DANE estén en gramos.

Les quedo debiendo la revisión de si el código funciona o no. Citaré otro pedazo del código que es, para mí, altamente perturbador. Digamos que sale lo siguiente3:

“Si en tu curso o taller te solicitan usar estrictamente la función plt.hist sobre los códigos enteros del DANE delimitando los 3 intervalos:”

Ingenuamente podríamos decir que el 🤖 sabe que lo que le pedimos es una trampa, entonces para ser ultra-amigable está generando todas las posibles respuestas que podríamos tener en el taller; para que el estudiante pueda copiar y pegar los pedazos que le dan la mejor nota. Aunque tal vez es mejor pensar que el LLM está, en sí mismo, entrenado en “el rincón del vago”, y sólo está generando lo que según su entrenamiento paraece una instrucción razonable a la respuesta de la pregunta. En ambos casos, copia automatizada.

Hmmmmmm.

Y finalmente, la discusión sobre la pedagogía. Aunque el ejercicio inicial, con la cascarita, podía tener problemas, y uno podría argumentar que no era una buena forma de evaluar, cuando lo solucionan las personas es una forma para enseñar. Una oportunidad pedagógica. Que permite ejercitar y crecer un poquito.

Volviendo a la discusión de Mastodon. Por lo menos en éste punto, usar gemini, de esta forma, en este momento, en mi clase, sigue produciendo aún más problemas que beneficios. 👧🏽1, 🤖0.

En la estrategia automatizada tenemos un millón de dudas. Claramente no nos sirve para aprender. Para parafrasear a los techbros, hace difícil lo facil. ¿si era así?

notas a pie

Footnotes

  1. obviamente, estoy parafraseando

  2. ©️Google, lo cual es cuando menos irónico, teniendo en cuenta que estos sistemas son entrenados de información que estas empresas han tomado de internet, sin pagar, y que probablmente estén atacando esta misma página en éste mismo instante, así esté prohibido. Pero bueno, digamos que de aquí en adelante estamos “entrenando un llm”, y por lo tanto tenemos permiso de usar la página de google.

  3. Por Razones©️, digamos que esto no lo generó el LLM si no que sólo lo representa. Juradito. 🤞🏽. 2

  4. Lo “alusinó”, lo que quiere decir que la máquina que extruye texto sintético, generó lo que plausiblemente puede ser una el nombre del archivo del dane, porque lo que está haciendo es generar un artefacto que tiene forma de respuesta, no respondiendo a la pregunta. Pero bueno.

  5. por “razones”, que no vienen a cuento.


Next Post
Comunidad, problemas reales, ingenieros 1000x y los problemas de Erdos