De las tarjetas perforadas a ChatGPT

De las tarjetas perforadas a ChatGPT La evolución de la inteligencia artificial

El vistazo de mi abuelo al IA generativo

Mi abuelo materno, Skip, siempre fue un granjero a mis ojos. Trágicamente, mi madre falleció de leucemia apenas un mes después de mi nacimiento en 1988. Siendo el primer nieto de la familia, Skip y yo éramos muy cercanos. De niño, pasaba mis días montado en el reposabrazos de los tractores y cosechadoras durante la cosecha anual de trigo, y cuando me convertí en adolescente, trabajé en la granja durante el verano como empleo.

Vista aérea de una cosechadora John Deere durante la cosecha de trigo en verano. Mi abuelo y yo usamos dos de estas durante nuestras propias temporadas de cosecha de trigo a finales de los años 90 y principios de los años 2000. Fue mi primer

Sin embargo, la vida anterior de Skip distaba mucho del mundo agrícola por el que lo conocí. Antes de que yo llegara, se sumergió en el mundo académico, completando su curso de doctorado en Estadísticas en Texas A&M, College Station, en 1972. Poco después, se convirtió en profesor en la Universidad de Maryland, finalizando su tesis en 1974. Su investigación revolucionaria pretendía predecir y localizar riesgos de seguridad y materiales en entornos industriales. Esta tarea monumental requería años de esfuerzo. Tenía que recopilar manualmente informes de accidentes de empresas diversas durante una década, procesar las estadísticas manualmente y luego convertir estos conocimientos en instrucciones de tarjetas perforadas para el sistema informático de la universidad. Conseguir tiempo en esa computadora no era inmediato; requería hacer reservaciones con semanas o incluso meses de anticipación. Un simple error de codificación podía significar empezar desde cero, lo que potencialmente retrasaría su investigación varios meses.

Abandonó esa vida en la década de 1980 para hacerse cargo de la granja familiar en el este de Texas y emprender negocios por su cuenta. Pero el deseo de aprovechar la inferencia estadística impregnaba todo lo que hacía como agricultor, aunque yo no lo comprendía cuando era niño. Para mi mente infantil, Skip estaba haciendo “trabajo de oficina”, como él lo llamaba, pero en realidad estaba aprovechando la tecnología de la información para prever y asegurar financiamiento para cubrir sus gastos operativos, optimizando la química de los fertilizantes para aumentar el rendimiento de los cultivos, y desarrollando estrategias para reducir la incertidumbre en sus flujos de efectivo a través de operaciones futuras en la Bolsa de Mercancías de Chicago, todo en una TRS 80 que compró en Radio Shack con 16 KB de RAM conectada a una impresora matricial. La agricultura puede ser un negocio de márgenes muy bajos, y la apuesta de Skip era que podía usar la estadística para nivelar un poco el campo de juego.

A lo largo de los años, la granja no resistió la prueba del tiempo. Resulta que la agricultura intergeneracional no funciona muy bien cuando se salta una generación, y los costos actuales son más inflexibles que nunca. La economía de escala se vuelve la única forma de competir de manera rentable, por lo que la mayoría de los agricultores pequeños y medianos de la generación de Skip fueron comprados y consolidados, aunque esto sucedió gradualmente, paso a paso (al menos para nosotros).

<p,yo, "basadas="" "en="" (en="" a="" agricultores="" agricultura="" agricultura.="" agrícolas,="" ahora="" aleatorio="" algo="" alturas="" analítica="" antes="" anual="" apreciar="" aprecio="" aprendizaje="" aquel="" aunque="" automático,="" ayudando="" años="" aún="" cada="" carrera="" ciencia="" como="" con="" conceptos="" conexión="" controlaban="" convirtiera="" cuando="" cuente="" cuento="" cultivos="" curso="" cómo="" datos="" datos",="" datos,="" de="" decisiones="" del="" departamento="" describo="" después="" décadas="" ejército="" el="" emoción="" emprendí="" en="" encanta="" entonces".="" entre="" es="" escucharlo,="" eso="" estados="" estadística="" estadísticas="" estas="" ficción,="" fuerte="" generaciones="" granja,="" hace="" hacer="" historia,="" hizo="" importantes="" incluida="" la="" le="" llegué="" lo="" los="" me="" medir="" menudo="" mi="" mientras="" minuciosamente="" mis="" moda.="" muestreaba="" muestreo="" mundo="" más="" nacional="" no="" nuestra),="" o="" ocasionalmente="" oficial="" opinión,="" oportunidad="" p="" palabra="" para="" parte="" pasar="" pedirle="" pero="" por="" profundo="" propia="" proyectos="" que="" que,="" real="" reconecto="" recuerdo="" refuerzo:="" regresiones="" rendimientos="" roza="" se="" sea="" segunda="" servicio="" simulaciones,="" sirviendo="" skip="" solían="" su="" supuesto,="" tarde,="" teléfono="" todo="" tomar="" treinta="" una="" unidos,="" unidos.="" uno="" veinte="" viajando="" vida="" visita="" y="" él="" él,="" él.

Le proporcioné a Skip actualizaciones en tiempo real cuando vi a John Deere presentar su discurso de apertura en CES en enero de 2023, mostrando nuevos equipos, como el pulverizador que se muestra arriba, que utiliza 36 cámaras, visión por computadora y redes neuronales para detectar malezas en los cultivos en tiempo real y minimizar el uso de herbicidas. Imagen del autor.

Ingresa al experimento.

Decidí durante el fin de semana mostrar en lugar de contar. Quería que Skip experimentara la nueva tecnología por sí mismo, no solo escucharme hablar de ella. ¿Y si pudiéramos crear un plan de negocios para lanzar una nueva granja hipotética en menos de 40 minutos? Podría hacerlo utilizando ChatGPT 4 con el Análisis Avanzado de Datos habilitado, compartiendo la pantalla en su iPhone; colaboraríamos juntos para crearlo.

Discutimos brevemente nuestras suposiciones:

  1. Tenemos 1,000 acres para cultivar en el este de Texas
  2. Tenemos $1 millón de capital inicial para comprar equipos
  3. Necesitamos asegurar una línea de crédito de un banco para los gastos operativos del primer año
  4. Estamos interesados en cultivar trigo y soja (lo que Skip cultivaba en el pasado)

Comenzamos de forma sencilla:

Promp 1: “Escríbeme un esquema para un plan de negocios para comenzar una nueva granja en el este de Texas para cultivar trigo y soja”.

Skip quedó impresionado de inmediato con los resultados detallados. Pero espera, recién estábamos comenzando…

Prompt 2: “Dame una lista de equipos que necesito para comenzar”Prompt 3: “Ponlo en una tabla y priorízalo numéricamente según lo que se necesite más urgentemente a lo menos urgente”Prompt 4: “ahora crea una columna nueva para la asignación de presupuesto, asume que usaré una combinación de arrendamientos y compras, crea una columna adicional para recomendar arrendamiento vs compra, asume que tengo $1 millón de capital inicial”.

(Tiempo transcurrido 4 minutos)

Resultado:

Datos generados por GPT-4, Imagen del autor.

Prompt 5: “¿Cuánto debo separar para solicitar una línea de crédito para los costos variables (semillas, fertilizantes, mano de obra, etc.), asumiendo 1000 acres? Crea una nueva tabla.”

Resultado:

Datos generados por ChatGPT 4, Imagen del autor

En este punto, sentí que Skip acababa de presenciar el Apolo 11 una vez más. Apenas podía contener su emoción. Pero aún no habíamos terminado…

Prompt 6: “Escríbeme una simulación de Monte Carlo que pueda ajustar mis suposiciones de entrada y probar el resultado en mi presupuesto”

Resultados:

import numpy as npimport matplotlib.pyplot as plt# Define number of simulationsn_simulations = 10000# Assumptions with [mean, std deviation]wheat_seed_cost = [20, 2]  # Cost per acresoybean_seed_cost = [50, 5]fertilizer_wheat_cost = [50, 5]fertilizer_soybean_cost = [40, 4]labor_cost = [25, 3]pesticide_cost = [30, 3]fuel_maintenance_cost = [15, 2]miscellaneous_cost = [10, 1]def simulate_farm_costs():    wheat_seed = np.random.normal(wheat_seed_cost[0], wheat_seed_cost[1])    soybean_seed = np.random.normal(soybean_seed_cost[0], soybean_seed_cost[1])    fertilizer_wheat = np.random.normal(fertilizer_wheat_cost[0], fertilizer_wheat_cost[1])    fertilizer_soybean = np.random.normal(fertilizer_soybean_cost[0], fertilizer_soybean_cost[1])    labor = np.random.normal(labor_cost[0], labor_cost[1])    pesticide = np.random.normal(pesticide_cost[0], pesticide_cost[1])    fuel_maintenance = np.random.normal(fuel_maintenance_cost[0], fuel_maintenance_cost[1])    miscellaneous = np.random.normal(miscellaneous_cost[0], miscellaneous_cost[1])        total_cost = (wheat_seed + soybean_seed + fertilizer_wheat + fertilizer_soybean +                   labor + pesticide + fuel_maintenance + miscellaneous) * 1000  # for 1000 acres    return total_costresults = [simulate_farm_costs() for _ in range(n_simulations)]# Visualizationplt.hist(results, bins=50, edgecolor='black', alpha=0.7)plt.title('Distribución de los costos totales de la granja')plt.xlabel('Costo Total')plt.ylabel('Frecuencia')plt.grid(True, alpha=0.2)plt.show()

Ahora llega el momento de la verdad: ¿se ejecutará el código? Fuimos a Jupyter notebook para ejecutar el código. Y ahí está en el primer intento:

Data Generada por ChatGPT 4, Imagen Generada por Python, Imagen del Autor

En este punto, solo llevábamos 10-15 minutos. Aún tenemos algo de tiempo libre… ¿Podríamos hacerlo interactivo?

Necesitamos crear una lista de parámetros que permitan al usuario ajustar dinámicamente las suposiciones en un control deslizante. Nuevamente, recurrimos a ChatGPT para obtener algunas recomendaciones sobre qué deben ser esos parámetros en función del Monte Carlo que construimos anteriormente:

Data Generada por GPT 4, Imagen por el Autor

Una vez que hayamos construido nuestra lista de parámetros, creamos una tabla de “medidas” en Power BI vinculada a 16 visualizaciones de fuentes de información que permiten al usuario seleccionar manualmente sus entradas y actualizar dinámicamente la simulación de Monte Carlo. Para hacer esto, creamos una “Visualización de Python” en Power BI, arrastramos todas nuestras medidas y luego actualizamos el código de la siguiente manera:

# El siguiente código para crear un dataframe y eliminar filas duplicadas se ejecuta siempre y actúa como un preámbulo para su script: # dataset = pandas.DataFrame(fertilizer_soybean_cost_avg Value, fertilizer_soybean_cost_std Value, fertilizer_wheat_cost_avg Value, fertilizer_wheat_cost_std Value, fuel_maintenance_cost_avg Value, fuel_maintenance_cost_std Value, labor_cost_avg Value, labor_cost_std Value, miscellaneous_cost_avg Value, miscellaneous_cost_std Value, pesticide_cost_avg Value, pesticide_cost_std Value, soybean_seed_cost_avg Value, wheat_seed_cost_avg Value, wheat_seed_cost_std Value)# dataset = dataset.drop_duplicates()# Pegue o escriba aquí el código de su script:import numpy as npimport pandas as pdimport matplotlib.pyplot as plt# Suponiendo que los datos de Power BI se pasan como 'dataset'df = dataset# Obtener valores del datasetwheat_seed_cost_avg = df ['wheat_seed_cost_avg Value'].iloc [0]wheat_seed_cost_std = df ['wheat_seed_cost_std Value'].iloc [0]soybean_seed_cost_avg = df ['soybean_seed_cost_avg Value'].iloc [0]soybean_seed_cost_std = df ['soybean_seed_cost_std Value'].iloc [0]fertilizer_wheat_cost_avg = df ['fertilizer_wheat_cost_avg Value'].iloc [0]fertilizer_wheat_cost_std = df ['fertilizer_wheat_cost_std Value'].iloc [0]fertilizer_soybean_cost_avg = df ['fertilizer_soybean_cost_avg Value'].iloc [0]fertilizer_soybean_cost_std = df ['fertilizer_soybean_cost_std Value'].iloc [0]labor_cost_avg = df ['labor_cost_avg Value'].iloc [0]labor_cost_std = df ['labor_cost_std Value'].iloc [0]pesticide_cost_avg = df ['pesticide_cost_avg Value'].iloc [0]pesticide_cost_std = df ['pesticide_cost_std Value'].iloc [0]fuel_maintenance_cost_avg = df ['fuel_maintenance_cost_avg Value'].iloc [0]fuel_maintenance_cost_std = df ['fuel_maintenance_cost_std Value'].iloc [0]miscellaneous_cost_avg = df ['miscellaneous_cost_avg Value'].iloc [0]miscellaneous_cost_std = df ['miscellaneous_cost_std Value'].iloc [0]# Definir número de simulacionesn_simulations = 10000# Suposiciones con [media, desviación estándar]wheat_seed_cost = [wheat_seed_cost_avg, wheat_seed_cost_std]soybean_seed_cost = [soybean_seed_cost_avg, soybean_seed_cost_std]fertilizer_wheat_cost = [fertilizer_wheat_cost_avg, fertilizer_wheat_cost_std]fertilizer_soybean_cost = [fertilizer_soybean_cost_avg, fertilizer_soybean_cost_std]labor_cost = [labor_cost_avg, labor_cost_std]pesticide_cost = [pesticide_cost_avg, pesticide_cost_std]fuel_maintenance_cost = [fuel_maintenance_cost_avg, fuel_maintenance_cost_std]miscellaneous_cost = [miscellaneous_cost_avg, miscellaneous_cost_std]def simulate_farm_costs ():    wheat_seed = np.random.normal (wheat_seed_cost[0], wheat_seed_cost[1])    soybean_seed = np.random.normal (soybean_seed_cost[0], soybean_seed_cost[1])    fertilizer_wheat = np.random.normal (fertilizer_wheat_cost[0], fertilizer_wheat_cost[1])    fertilizer_soybean = np.random.normal (fertilizer_soybean_cost[0], fertilizer_soybean_cost[1])    labor = np.random.normal (labor_cost[0], labor_cost[1])    pesticide = np.random.normal (pesticide_cost[0], pesticide_cost[1])    fuel_maintenance = np.random.normal (fuel_maintenance_cost[0], fuel_maintenance_cost[1])    miscellaneous = np.random.normal (miscellaneous_cost[0], miscellaneous_cost[1])    total_cost = (wheat_seed + soybean_seed + fertilizer_wheat + fertilizer_soybean +                  labor + pesticide + fuel_maintenance + miscellaneous) * 1000  # para 1000 acres    return total_costresults = [simulate_farm_costs () for _ in range (n_simulations)]# Convertir resultados en un dataframe df_simulated_results = pd.DataFrame (results, columns = ['Costo Total'])# Calcular la Rango Intercuartílico (RIC)Q1 = df_simulated_results['Costo Total'].quantile (0.25)Q3 = df_simulated_results['Costo Total'].quantile (0.75)# Graficar el histogramaplt.figure (figsize = (10, 6))n, bins, patches = plt.hist (df_simulated_results ['Costo Total'], bins = 50, color = 'blue', edgecolor = 'black', alpha = 0.7)plt.title ('Distribución de los Costos Variables del Año 1 de la Granja a partir de la Simulación')plt.xlabel ('Costo Variable del Año 1')plt.ylabel ('Frecuencia')plt.grid (True, which = 'both', linestyle = '--', linewidth = 0.5)# Sombrar el RICfor  i in range (len (bins)):    if bins [i] > Q1 y bins [i] < Q3:        patches [i] .set_facecolor ('green')plt.axvline (Q1, color = 'red', linestyle = 'dashed', linewidth = 1)plt.axvline (Q3, color = 'red', linestyle = 'dashed', linewidth = 1)plt.tight_layout ()plt.savefig ('histograma_costos_simulados.png')  # Esto guardará la figura como un archivo de imagenplt.show ()

Solo por diversión, le pedimos a ChatGPT que definiera el Rango Intercuartil (IQR, por sus siglas en inglés) y lo sombreado en un color diferente, también actualizamos manualmente las etiquetas del gráfico y el eje x. El resto es solo limpiar un poco los aspectos visuales en Power BI para hacerlo más amigable para el usuario. El resultado final:

Datos generados por una simulación de Monte Carlo basada en los parámetros seleccionados por el usuario, Código Python generado por ChatGPT 4, Tablero construido en MS PowerBI, Imagen del autor

Ahora tenemos una simulación dinámica de Monte Carlo para jugar con diferentes suposiciones de costos de entrada y proyectar los gastos operativos variables que necesitaríamos para poner en marcha nuestra operación agrícola. Aprovechando ChatGPT 4, no escribimos prácticamente ningún código, solo lo ajustamos un poco, hicimos la mayor parte del trabajo desde un iPhone compartiendo pantalla, construimos la última parte en PBI Desktop y la compartimos por la aplicación de iPhone de PBI. Todo en aproximadamente 30 a 40 minutos de trabajo.

¿El veredicto de mi abuelo? “Logramos en 40 minutos lo que a él le hubiera llevado 2 años hacer por sí mismo en aquellos tiempos”. Sí, reconozco que hay mucho más que podríamos hacer y que esta “simulación” está lejos de ser perfecta. (Por ejemplo, no diferenciamos entre el porcentaje de cultivos dedicado a la soja o al trigo). Pero ¿en 40 minutos? Hasta yo quedé impresionado. Y esta es la promesa de la inteligencia artificial generativa: democratizar la ciencia de datos, fomentar la experimentación y acelerar la capacidad de desarrollo, todo al alcance de la mano. Brindando una oportunidad a un abuelo y su nieto de reconectarse a través de las estadísticas y aprovechando la tecnología de formas nuevas e inesperadas.

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

Conoce LoftQ LoRA-Fine-Tuning-Aware Quantization para grandes modelos de lenguaje.

La introducción de los Modelos de Lenguaje Pre-entrenados (PLMs) ha significado un cambio transformador en el campo d...

Inteligencia Artificial

Avance en la Intersección de Visión-Lenguaje Presentando el Proyecto Todo-Vista

Impulsando el ascenso meteórico de los chatbots de IA, los LLM son el tema de conversación en la ciudad. Están mostra...

Inteligencia Artificial

Utilice la IA generativa para aumentar la productividad de los agentes mediante la automatización de la síntesis de llamadas.

Tu centro de contacto sirve como el vínculo vital entre tu negocio y tus clientes. Cada llamada a tu centro de contac...

Inteligencia Artificial

Investigadores de UC Berkeley presentan LLMCompiler Un compilador de LLM que optimiza el rendimiento de la llamada de funciones paralelas de LLMs

Las tareas de llamadas multifunción pueden ser lentas e inexactas cuando se utilizan LLM. Para abordar este problema,...

Inteligencia Artificial

🤖 ¡Háganse a un lado para el robot similar a una anguila un avance en la tecnología submarina! 🌊

Una innovación de vanguardia del Instituto Federal Suizo de Tecnología Lausana ha producido un notable y versátil rob...