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.
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).
- Las 10 principales startups de IA generativa en el mundo
- 10 Mejores Generadores de Correo Electrónico AI (Octubre de 2023)
- Esta investigación de OpenAI presenta DALL-E 3 Revolucionando los modelos de texto a imagen con capacidades mejoradas de seguimiento de indicaciones.
<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.](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*KZejuRYBjZH8G-1CJB5lSw.jpeg)
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:
- Tenemos 1,000 acres para cultivar en el este de Texas
- Tenemos $1 millón de capital inicial para comprar equipos
- Necesitamos asegurar una línea de crédito de un banco para los gastos operativos del primer año
- 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.](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*Z8nCSqWZMQo8PweoDx6iOw.png)
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](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*-zorfCNIl2fx2GOEZ7Yx5Q.png)
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](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*KU2T0gdWTMKDs5XPtxXwbw.png)
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](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*8YNrvYY7DLgiszxduCY8HA.png)
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](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*mOK1FsCfgg1oQuy5NaYRzA.png)
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- CI/CD Pipelines para aplicaciones de procesamiento de datos en Azure Parte 1 Instancias de contenedor
- Falso profeta un modelo de regresión de series temporales casero
- DLSS 3.5 con reconstrucción de rayos ahora disponible en NVIDIA Omniverse
- Cabalgando los Rayos Sunswift Racing Brilla en la Carrera del Desafío Solar Mundial
- Cerrando la brecha de inclusión en la informática
- Una introducción a la estimación estadística e inferencia
- Implementación de VGG