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