ok, vamos a hablar un poco de las relaciones entre la validación y la calibración. La calibración es la idea de que modificando los parámetros del modelo de tal forma de crear un modelo más válido tenemos una forma estándar de comparar. La validación es comparar el modelo con el mundo real la calibración significa que los parámetros cambian de tal forma que el valor de salida del modelo se acerque a los datos del mundo real; para hacer esto para poder hacerlo en una forma que no sólo coincida con el mundo real, uno querrá dividir los datos en dos grupos, un conjunto de datos de entrenamiento y un conjunto de datos de prueba una de las preguntas que surge es, si hago coincidir los datos de entrenamiento esto no implica que va a coincidir con los datos de prueba si lo hacemos, entonces nuestro modelo puede ser considerado más válido una nota pequeña, a veces los datos del entrenamiento tienen diferentes configuraciones de entorno que los datos de la prueba, por ejemplo uno puede estar entrenando el modelo en una locación geográfica particular y realizar la prueba en otro entorno y entonces las variables pueden ser diferentes una vez que tenemos estas dos nociones podemos pensar en la calibración esencialmente como una búsqueda y entonces la calibración implica encontrar algún conjunto de parámetros P*, tal que puedan minimizar una función de error, que convierte los datos reales del entrenamiento en datos del modelo con los parámetros más otras cosas que uno pueda necesitar del entorno y podemos llevar a cabo la evaluación de estos componentes, una vez que hicimos la calibración, mirando el conjunto de datos de las pruebas una forma en la que podemos hacer esto es usando aprendizaje de máquina, uno también puede usar fuerza bruta y buscar en todas las posibilidades una pregunta que surge es función utilizar como hacemos para comparar con los datos del entrenamiento y si recordamos la última charla, en ese caso utilizamos un valor de R cuadrado una de las medidas es determinada particularmente por el campo en el que estamos trabajando o puede ser que sea el tipo de datos, si usamos series temporales pueden ser diferentes que si usamos un punto medio o algo así en un paper en el que se habla sobre este tema, lo que hicimos fue buscar diferentes medidas, buscamos correlaciones y luego hay otras medidas que se denominan distancias de L, que básicamente son formas diferentes de ver como dos conjuntos diferentes de números son, L0 simplemente significa que si tenemos dos series, dos vectores, van a diferir entonces contamos las diferencias que hay entre ellas L1 es llamada a veces la distancia Manhattan y que toma el valor absoluto de las diferencias entre cada una L2 es la distancia euclidiana o a veces también el grupo R donde tomamos las distancias entre los valores reales, los valores del mundo real restamos ambos, los elevamos al cuadrado y los vamos sumando todos estos R cuadrado y luego tomamos la raíz cuadrada de esos cuadrados, y tenemos la media cuadrada la raíz cuadrada, en este caso, no la media pero se puede usar la media también y luego tenemos la que se denomina Chebyshev o la diferencia máxima donde tomamos la distancia máxima entre esas dos entradas en el paper que escribí con Forrest, mostramos que estas medidas diferentes cada una calibra el modelo y lo hace bien para diferentes medidas ninguna de estas medidas necesariamente es la mejor, depende en verdad de lo que querés que haga el modelo y esa es una pregunta que hay que hacerse cuando nos aproximamos al modelo uno puede pensar: oh esto es demasiado, cómo puedo hacer esto? resulta que hay una herramienta muy linda que Forrest escribió para hacer más simple y se denomina "búsqueda de conducta" y lo que hace es permitirnos tomar un conjunto de datos que tengamos, bueno en realidad tomar un modelo que tengamos y correrlo para maximizar o minimizar alguna clase de conducta y automáticamente calibrar el modelo y sus valores de entrada dado el rango de valores de entrada que se permiten para maximizar o minimizar esa función; entonces uno define una función que es la relación entre nuestros valores de salida del modelo y los valores del mundo real y utilizar la búsqueda de conducta para minimizar esa función y automáticamente calibrar el modelo los detalles se escapan del alcance de esta clase en particular voy a abrir algunos ejemplos para que puedan ver veremos cuan lejos podemos llegar déjenme que lo traiga aquí tengo una versión del modelo 7 de nuestra unidad 4 pero hicimos algunos cambios para que pueda trabajar la búsqueda de conducta pero antes de ir ahí, yo quiero rápidamente mencionar que la búsqueda de conducta no funciona con el NetLogo 5.3.1 lo que tuve que hacer fue cargar el NetLogo 5.2, traer el modelo hacer algunos cambios, salvarlos, tiene que ver con los números aleatorios, creo que Forrest trabajó en un cambio, pero aún no está actualizado para poder hacer todo lo que tengo que hacer, primero cargo el NetLogo 5.2, la versión vieja, que está disponible en el sitio web de NetLogo luego bajo la "búsqueda de conducta" y lo agrego a la carpeta y para hacer eso tengo que obtener el directorio que se ve algo así, esperen que lo agrando un poco y entonces podemos correr la "búsqueda de conducta" desde la línea de comando sólo hay que escribir behaviorsearch y vamos a ver algo así pero antes de meternos en los detalles del "búsqueda de conducta", déjenme que les hable un poco sobre lo que modifiqué del modelo para que funcione en el modelo, una de las cosas que tuve que hacer, es, tuve que modificar desde el comienzo agregué algún código para leer algunos datos empíricos tengo este archivo, que se llama "curva de adopción" punto csv y voy a leer lo que dicen los conjuntos de datos empíricos acerca de la adopción y de lo que debería ser en cada período de tiempo ahora yo amasé esos datos, tuve tiempo para poder dividirlos por el número de las ventas eventuales, para tener los porcentajes de ventas a lo largo del tiempo y uno puede hacer esto con cualquier conjunto de datos que uno tenga los 10 años de adopción de las ventas sobre un producto en particular uno puede simplemente sumarlo y luego dividir cada uno de estos números para obtener una curva de las fracciones de ventas por año yo modifiqué, agregué algunas variables globales y algunas otras cosas y agregué la extensión csv, que es, que funciona muy bien con NetLogo para poder leer datos desde el archivo csv una vez que hice todo eso, escribí los datos, ahora tengo los datos del mundo real, tengo los datos de mi modelo, a medida que corre puedo correr lo que denominamos puedo correr una función de R, que computa las diferencias entre las dos a medida que el tiempo avanza, tengo esta función que se llama "compute-MSE" que básicamente computa los errores cuadráticos medios entre los valores de salida de mi modelo y los datos reales del mundo real este código, compute-MSE no es llamado en ningún lugar dentro del modelo, pero se utiliza por la búsqueda de conducta para poder analizar cómo ajustan los parámetros en relación a los datos en este caso abro el archivo de la búsqueda de conducta para este período de tiempo lo tengo por aquí tengo estos archivos veo un .2 que es la calibración del modelo y luego tiene todos los parámetros y lo que hace la búsqueda de conducta es ajustarlos o nos permite buscarlos, así que ajusté los números de los agentes pero le voy a permitir que la dispersión, la influencia social, la densidad de la influencia, el tipo de red, la fracción de influenciadores y el modo de influencia y automáticamente se cargan estos datos con esos valores y luego le voy a decir que ejecute el setup y el go y aquí vemos lo que les venía diciendo, tengo esta compute-MSE que va a computar las diferencias entre el modelo de adopción, que es algo que no estoy registrando en cada paso, si vamos a los pasos, he modelado la adopción para que sea el número de elecciones que los adoptadores medido por el número de tortugas, entonces tengo este tiempo cero en el modelo de la adopción y voy a calcular la diferencia entre esto y los datos del producto y los datos del producto son los que leí en la rutina reading-data, verán aquí creo este producto, variables de la serie temporal voy a calcular las diferencias y voy a decirle que minimice esa función, ahora, lo que hicimos, podemos decirle a la búsqueda de conducta sea en su forma estándar o aleatorio, lo que uno quiera, para que minimice estas diferencias y esa es la calibración, luego puedo correr la búsqueda de conducta y cargo ciertos parámetros, cuántas búsquedas correr, cuántos hilos usar, etc. y cuando corra tratará de encontrar los parámetros que mejor minimizan las diferencias entre mis datos de producto y perdón, los datos empíricos y los datos del modelo que estuve corriendo nos tomará un segundo por supuesto que quiero decir rápidamente miren ya lo hizo, pero como pueden ver para calcular este error medio cuadrático y el error medio cuadrático empieza a caer en verdad muy poco y al final lo que es interesante es que encontramos para los datos particulares que estaba buscando, encontré que la influencia de los medios masivos, no hubo influencia social y el resto dice que es irrelevante, oh excepto por los medios de influencia, que aún importan en verdad no ganan, porque los influenciadores no importan entonces básicamente encontramos que teniendo una influencia de medios masivos de .1 obtiene la mejor de las coincidencias si asignamos a algo no razonable, uno no puede hacerlo, uno puede hacer cosas como incrementar la influencia social así puede mejorar, puedo ir aquí y puedo decirle que la influencia social no pueda ser cero, tiene que ser de al menos .1 o puedo incrementar la densidad de la red o algo a lo largo de estas líneas que me permita cambiar los resultados como dije no tengo algo completo, puedo pasar algunas clases hablando sólo de la búsqueda de conducta, pero la idea era que pudieran ver como automáticamente calibrar el modelo a los datos, gracias