In the previous section I walked you
through a whole set of mathematical
derivations designed to produce a maximum
entropy model of
essentially a toy problem,
the toy problem is how can we model
the distribution of arrival times of
New York City taxicabs based on a small
set of data, and that's a problem that
well might be of interest to you personally,
but is certainly not of profound scientific interest.
In this next section, what I am
going to do is present to you a reasonably
interesting scientific problem and show
how the maximum entropy approach can
illuminate some interesting features
of that system.
The particular system we have in mind is
what people have tended to call the open
source ecosystem. It is the large
community of people devoted to writing
code in such a way that it is open,
accessible, and de-buggable,
and in general,
produced not by an individual,
and not by a corporation, with
copyright protections and control over the
source, but rather by a community of
people sharing and editing each others' code.
The open source ecosystem is
something that dominates a large fraction
of the computer code run for us today,
including not only Mac OS X, but of course
Linux. It is a great success story and we
would like to study it scientifically.
I used the word ecosystem advisably
in part because a lot of what I am going
to tell you now is a set of tools and
derivations that I learned from John Harte
and people who have worked with John
Harte on the maximum entropy approach
to not social systems, but to biological
systems and in particular ecosystems.
John Harte's book "Maximum Entropy
and Ecology" - I recommend it to you as a
source of a lot more information on the
kinds of tools that I am going to show
you now. My goal here is really to show
you that even simple arguments based on
maximum entropy can provide some really
deep scientific insight.
What I am gonna
take as my source of data, because I am
going to study the empirical world now,
is drawn from source forge. Source forge
is no longer the most popular repository
of open source software - perhaps Github
has now eclipsed it - but for a long
period, perhaps from 1999, and we gather
data up to 2011 on this, it has an
enormous archive of projects that range
from different kinds of computer games to
text editors to business and mathematical
software, some of the code that I've used
in my own research is put up on Sourceforge.
It is a great place to study in
particular the use of computer languages.
Here, what I have plotted is a
distribution of languages used in the open
source community and found on Sourceforge.
On the x-axis is the log of the
number of projects written in a particular
language. You can see that log zero, that
is one. In the database there are about
twelve languages that have only a round of
order one project. These languages are
extremely rare, in other words, in the
open source movement. Conversely,
on the other end of this logarithmic
scale here at four, so, ten to the four
that's ten thousand, we see there is a
small number of extremely popular
languages, these are sort of the most
common languages you will find on Sourceforge
they have a run away popularity, ok?
And if you know anything about computer
programming it will not surprise you to
learn that these are languages mostly
derived from C, such as C, C++, Java, ok?
Somewhere in the middle between these
extreme rare birds and these incredibly
common, you know, because these are sort
of like the bacteria of the open source
movement, somewhere in the middle you have
a larger number of moderately popular
languages, ok? So this distribution
of languages is what we are gonna try to
explain using maximum entropy methods, ok?
there is a small number of rare languages
a larger model of moderately popular ones
and then again a very small number of
wildly popular languages, ok?
So I plotted that as a probability
distribution, in fact, P of n where n
is the number of projects in the open
source community that use your language,
and this is the probability that your
language has n projects in the open source
community, what we would like to do is
build a maximum entropy model of this
distribution here, I represented the same
data in a slightly different way, this is
how people tend to represent it, this is a
rank abundance distribution,
what ecologist call a species abundance
distribution. So the top rank language,
rank one, here, is the language with the
most number of projects, and it won't
surprise youth lear that it actually
turned out to be Java, there is
20 thousands projects written in Java,
you can see the second rank language C++,
then C, then PHP, and this far rare
languages down here have much lower ranks,
so higher numbers means lower ranks, like
in 3rd place, 4th place, so a 100th place
down right here on the 100th place is the
very unfortunate language called Turing,
which has only as far as I'm aware in the
archive only two projects are written in
Turing, and you can see some of my
favorite languages like Ruby are somewhere
here in this kind of moderate popularity zone.
So we represent that data, is the
same data, now what I just plotted here is
log abundance on this axis and here is the
language rank but is a linear, as oppose
to here, where I showed you the log, ok?
this is a log-log plot, this is know a
log-linear plot, so this is the actual data.
So, the first thing will try
is a
maximum entropy distribution for language
abundance, in other words, for the
probability of finding a language with n
projects, and what we are gonna do is
we are gonna constraint only one thing,
the average popularity of a language,
this is gonna be our one constraint for
the maximum entropy problem, and we are
gonna pick the probability distribution
p of n that maximizes the entropy p log p
negative sum, and from zero to infinity of
p log p, where gonna maximize this
quantity subject to this constraint, and
of course, always subject to the
normalization constraint, that p(n) is
equal to unity, ok? So that's my other
constraint, and of course, we know how to
do this problem already, we know the
functional form, is exactly the same
problem as the one you learnt to do when
you modeled the waiting time for a
New York City taxi cab, ok? You modeled
that problem exactly the same way, so I'm
only gonna constraint the average of the
waiting time, here we're only gonna
constraint the average popularity of a
language, popularity mean the number of
projects written in that language has on
the archive, and so, we know what the
functional form will look like, it looks
like something like e to the negative
lambda n, ok? all over Z, and then all we
have to do is fit lambda and Z, ok? So
that we reproduce the correct abundance
that we see in the data, so this is the
maximum entropy distribution, it's also,
of course, an exponential model, has an
exponential form, and if actually find the
lambda and Z that best reproduce the data,
in other words, that best satisfies this
constraint, and are otherwise maximum entropy,
here is what we find, ok?
This red band here is the 1 and 2 sigma
contours for the rank abundance
distribution, and all I want you to see on
this graph is an incredibly bad fit to this.
The maximum entropy distribution
with this constraint,
does not reproduce the data,
is not capable of explaining,
our modeling, the data in any reasonable
way, it radically under predicts
these really extremely popular languages,
it's unable to, in other words, reproduce
the fact that there are languages like
C and Python, that are extremely popular,
it over predicts this kind of mesoscopic
regime, it over predicts the moderately
popular languages, right, as also it does
over predict those those really rare
birds, those really low rank languages,
with very few examples in the archive,
so this is right, this is science fail.
En la sección anterior lo guíe
por un conjunto de derivaciones
matemáticas diseñadas para producir
la máxima entropía de
un problema de juguete,
el problema de juguete es, como podemos
modelar la distribución de tiempos de
llegada de taxis en Nueva York, basados en
un pequeño grupo de datos, y ese es un
problema que puede ser de su interés personal
pero ciertamente no es un problema de profundo interés científico.
En esta sección, lo que
voy a hacer es presentarle un problema
razonablemente interesante y mostrarle
como el enfoque de la máxima entropía
puede aclarar algunas propiedades interesantes
de ese sistema.
En particular, el sistema que tengo en mente es
el que la gente tiende a llamar el ecosistema
de código abierto. Es la gran comunidad de
gente que escribe código para que sea
abierto, accesible, y depurable,
y en general
producido no por un individuo,
ni por una corporación,
con derechos de autor y control sobre el código,
sino por una comunidad de gente
compartiendo y editando código entre si
El ecosistema de código abierto
domina una gran fracción del código de
código de computadora que usado por nosotros hoy,
incluyendo no solo Mac OS X, claro, Linux.
Es una gran historia de triunfo y
nos gustaría estudiarla científicamente.
Use la palabra ecosistema
en parte, porque mucho de lo que voy a
decirle es un conjunto de herramientas y
derivaciones que aprendi de John Harte
y de la gente que trabaja con John Harte
en el enfoque de máxima entropía a…
no sistemas sociales, si no, a sistemas biológicos,
y en particular a ecosistemas.
El libro de John Harte "Máxima entropía y ecología"
Se lo recomiendo como
una fuente de información en este tipo
de herramientas que voy a mostrarle ahora.
Mi objetivo es mostrarle
que inclusive argumentos simples basados
en máxima entropía pueden proveer
conocimiento científico muy profundo.
Lo que voy a usar
como mi fuente de datos, porque ahora
voy a estudiar el mundo empírico,
es la pagina SourceForge.
SourceForge ya no es el mayor repositorio
de software abierto, quizás Github
lo eclipso, pero por un largo periodo de tiempo
tal vez desde 1999, y recopilamos datos
hasta 2011 sobre esto, tiene un enorme
archivo de proyectos que van desde
diferentes tipos de juegos de computadora
hasta editores de texto, a software de
negocios y matemático, parte del código
que he usado en mi propia investigación esta en SourceForge.
Es un gran ligar para estudiar, en particular,
el uso de lenguajes computadora.
Aquí, lo que he graficado es la
distribución de lenguajes usados en la comunidad
de código abierto y encontrados en SourceForge.
En el eje x tenemos el logaritmo del numero
de proyectos escritos en un lenguaje en particular
Puede ver que el logaritmo de cero es uno.
En la base de datos hay alrededor de doce
lenguajes que están en el orden de un solo proyecto
Estos lenguajes son extremadamente raros,
en otras palabras, en el movimiento de
código abierto. Contrariamente
en el otro extremo de esta escala
logarítmica, aquí, en el cuatro, diez a la cuatro es diez mil,
vemos que hay un pequeño numero de
lenguajes extremadamente populares,
estos son los lenguajes mas populares que
encontrara en SourceForge,
Tienen una popularidad desmesurada, ok?
Y si sabe algo acerca de programación de
computadoras no le sorprenderá saber que
estos lenguajes son mayoritariamente
derivados de C, como C, C++, Java, ok?
En el medio entre estos extremadamente poco comunes,
y estos increíblemente comunes
que son mas o menos como las bacterias
del movimiento de código abierto
por aquí, en el medio tiene un gran numero
de lenguajes moderadamente populares, ok?
Así, esta distribución de lenguajes
es lo que vamos a tratar de explicar
usando métodos de máxima entropía, ok?
Hay un pequeño numero de lenguajes poco comunes,
un gran numero de lenguajes moderadamente populares,
y un numero muy pequeño de
lenguajes extremadamente populares, ok?
Entonces, grafiqué eso como una distribución
de probabilidad, de hecho, P de n donde n
es el numero de proyectos en la comunidad
de código abierto que usan ese lenguaje,
y esta el la probabilidad de que su lenguaje
tenga n proyectos en la comunidad de
código abierto, lo que nos gustaría hacer
construir un modelo de máxima entropía de
esta distribución de aquí, yo represente
los mismo datos de una manera un poco diferente,
así es como la gente tiende a representarlos
esta es la distribución del ranking de abundancia
lo que los ecologistas llaman
una distribución de abundancia de especies,
Así, el lenguaje en el tope, aquí, es el
lenguaje con el mayor numero de proyectos,
y no va a sorprenderlo saber que
resulta ser Java, hay veinte mil proyectos
escritos en Java, el segundo en el ranking
como puede ver es C++,
luego C, luego PHP, y estos lenguajes raros
tienen un ranking mas bajo,
así, que números altos significan rangos bajos,
como en 3er lugar, 4to lugar, entonces,
el 100mo es el puesto esta el desafortunado
lenguaje llamado Turing,
que hasta donde se, solo hay dos proyectos
escritos en Turing en el archivo,
y puede ver algunos de mis lenguajes favoritos
como Ruby, están por aquí, en esta zona
de moderada popularidad.
Entonces representamos esos datos,
son los mismos datos, lo que acabo de
graficar es el logaritmo de la abundancia
en este eje, y aquí esta el ranking lineal
en cambio aquí, donde le mostré el logaritmo, ok?
esta es una gráfica log-log, esta es
conocida como una gráfica log-lineal,
así que estos son los datos reales. Así que la primera cosa que intentare
es…
Una distribución de máxima entropía de
abundancia de lenguajes, en otras palabras,
a la probabilidad de encontrar un lenguaje
con n proyectos, y lo que vamos a hacer es
vamos a restringir solo una cosa,
la popularidad promedio de un lenguaje
esta va a ser nuestra restriccion para el
problema de máxima entropía, y vamos
a elegir la distribución de probabilidad, p de n
que maximiza la entropía, suma negativa p log p
y de cero a infinito, de p log p,
vamos a tratar de maximizar estas cantidades
sujetas a esta restricción, y claro,
siempre sujeta a la restricción de normalización,
que p(n) es igual a la unidad, ok?
Entonces esa es mi otra restricción,
y claro, ya sabemos como resolver
este problema, conocemos la forma funcional,
es exactamente el mismo problema
que el que aprendió a resolver cuando
modelo el tiempo de espera de un taxi
en Nueva York, ok? Usted modelo
ese problema exactamente de la misma manera,
Así que, solo voy a restringir el promedio
del tiempo de espera, aquí solo voy a
restringir el promedio de la popularidad
de un lenguaje, popularidad significa el
numero de proyectos escritos en ese lenguaje
en el archivo, y así, sabemos que la forma
funcional se vera como, se ve como
algo como e a la menos lambda n, ok?
todo sobre Z, y luego todo lo que tenemos
que hacer es ajustar lambda y Z, ok?
Tal que reproduzca la abundancia correcta,
como la vemos en los datos, así que esta
es la distribución de máxima entropía,
es también, claro, un modelo exponencial,
tiene una forma exponencial, y si realmente
encontramos el valor de lambda y Z que
reproducen mejor los datos,
en otras palabras,
que mejor satisfacen esta restricción, y satisfacen la máxima entropía,
esto es lo que encontramos, ok?
Esta banda roja de aquí son los contornos
sigmas uno y dos del ranking
de la distribución de abundancia, y lo que quiero que vea en
esta gráfica es que se ajusta a los datos un increíblemente mal.
La distribución de máxima entropía
con esta restricción
no reproduce los datos,
no es capas de explicar…
nuestro modelado, los datos de ninguna
manera razonable, sub predice
estos lenguajes extremadamente populares,
es incapaz, en otras palabras, de reproducir el hecho
de que hayan lenguajes como C y Python,
que son extremadamente populares,
sobre predice esta especie de régimen
mesoscopico, sobre predice los lenguajes
moderadamente populares, igual que
sobre predice estos lenguajes poco comunes,
esos lenguajes de rangos muy bajos,
con muy pocos ejemplos en el archivo,
entonces esto esta bien,
esto es un fallo científico
Nella sezione precedente vi ho illustrato
attraverso un intero set di derivazioni
matematiche pensate per un modello
di massima entropia di
essenzialmente un problema giocattolo,
il problema giocattolo è come possiamo modellare
la distribuzione dei tempi di arrivo di
taxi di New York sulla base di un piccolo
insieme di dati, e questo è un problema
bene potrebbe essere di interesse a te personalmente,
ma non è certo di profondo interesse scientifico.
In questa sezione successiva, cosa
farò è presentarvi un ragionevole
interessante problema scientifico e mostrare
come può l'approccio della massima entropia
illuminare alcune caratteristiche interessanti
di quel sistema.
Il sistema particolare che abbiamo in mente è
quello che la gente tende a chiamare
ecosistema open-source. È una grande
comunità di persone dedite alla scrittura
di codice in modo che sia aperto,
accessibile e inspezionabile,
e in generale
prodotto non da un individuo,
e non da un'azienda, con
tutele del copyright e controllo sul
codice, ma piuttosto da una comunità di
persone che condividono e modificano codice reciproco.
L'ecosistema open-source è
qualcosa che domina una gran parte
dei programmi eseguiti per noi oggi,
incluso non solo Mac OS X, ma ovviamente
Linux. È una grande storia di successo e noi
vorremmo studiarlo scientificamente.
Ho usato la parola ecosistema in modo attento
in parte perché molto di quello che sto andando
a dire ora è un insieme di strumenti e
derivazioni che ho imparato da John Harte
e persone che hanno lavorato con John
Harte sull'approccio della massima entropia
non ai sistemi sociali, ma ai sistemi
biologici e in particolare ecosistemi.
Il libro di John Harte "Maximum Entropy
and Ecology "- te lo consiglio come una
fonte di molte più informazioni su
tipi di strumenti che sto per mostrare
ora. Il mio obiettivo qui è davvero quello di mostrare
che anche semplici argomenti basati su
la massima entropia possono fornirne davvero
profonda conoscenza scientifica.
Quello che sto per prendere
come mia fonte di dati, perché sto
andando a studiare il mondo empirico ora,
è tratto da Sourceforge. Sourceforge
non è più il repository più popolare
di software open-source - forse Github
lo ha ora eclissato, ma per molto tempo,
forse dal 1999, e troviamo
dati fino al 2011 su questo, ha un
enorme archivio di progetti che spaziano
da diversi tipi di giochi per computer a
editor di testo per affari e software
matematici, parte del codice che ho usato
nella mia ricerca è messo su Sourceforge.
È un ottimo posto in cui studiare
in particolare l'uso di linguaggi informatici.
Quello che ho tracciato qui é la
distribuzione dei linguaggi usati dalla
comunità open-source e trovato su Sourceforge.
Sull'asse delle "x" c'è il logaritmo del
numero di progetti scritti in un particolare
linguaggio. Puoi vedere quel log zero, quello
è uno. Nel database ci sono circa
dodici linguaggi che hanno solo circa
un progetto. Questi linguaggi sono
estremamente rari, in altre parole, nel
movimento open-source. Al contrario,
all'altra estremità di questa scala
logaritmica qui a quattro, quindi, dieci alla quattro
sono diecimila, vediamo che c'è un
piccolo numero di linguaggi estremamente
popolari, questi sono più o meno
linguaggi comuni che troverai su Sourceforge
hanno una popolarità fuori controllo, ok?
E se sai qualcosa di programmazione
non ti sorprenderà
che queste sono principalmente linguaggi
derivati da C, come C, C++, Java, ok?
Da qualche parte nel mezzo tra questi
uccelli estremamente rari e questi incredibilmente
comuni, sai, perché questi sono comuni,
come i batteri del movimento
open-source, da qualche parte nel mezzo che hai
un numero maggiore di linguaggi moderatamente
popolari, ok? Quindi questa distribuzione
dei linguaggi è quello che cercheremo di
spiegare usando il metodo della massima entropia, ok?
C'è un piccolo numero di linguaggi rari
uno più grande di quelli moderatamente popolari
e poi di nuovo un numero molto piccolo di
linguaggi molto popolari, ok?
Quindi ho tracciato questa come una distribuzione
di probabilità, infatti, P(n) dove n
qui è il numero di progetti nella
comunità open-source che usano il tuo linguaggio,
e questa è la probabilità che il tuo
linguaggio abbia n progetti nella comunità
open-source, quello che vorremmo fare è
costruire un modello di massima entropia di questa
distribuzione qui, ho rappresentato gli stessi
dati in un modo leggermente diverso, questo è
come le persone tendono a rappresentarlo, questo è una
classifica di abbondanza,
quello che gli ecologisti chiamano distribuzione di
abbondanza di specie. Quindi il linguaggio di primo livello,
il primo posto, qui, è il linguaggio con il
maggior numero di progetti, e non
sorprenderà i giovani che in realtà
questo si é rivelato essere Java, ci sono
20 mila progetti scritti in Java,
puoi vedere il secondo linguaggio C++,
poi C, poi PHP e questo raro
i linguaggi quaggiù hanno livelli molto più bassi,
quindi numeri più alti significano ranghi più bassi, come
al 3° posto, al 4° posto, quindi un 100° posto
proprio qui al centesimo posto c'è un
linguaggio molto sfortunato chiamato Turing,
che ha solo - per quanto ne so - in
archivio sono scritti solo due progetti
Turing, e puoi vedere alcuni dei miei
linguaggi preferiti come Ruby sono da qualche parte
qui in questa zona di moderata popolarità.
Quindi rappresentiamo quei dati, sono gli
stessi dati, ora quello che ho appena tracciato qui è
log abbondanza su questo asse ed qui il
rango del linguaggio ma è lineare, al contrario
di qui, dove vi ho mostrato il logaritmo, ok?
Questo è un grafico log-log, questo è ora un
grafico log-lineare, quindi questi sono i dati effettivi.
Quindi, la prima cosa che proveremo
è una distribuzione
con massima entropia per
l'abbondanza del linguaggio, in altre parole, per il
probabilità di trovare un linguaggio con "n"
progetti, e quello che faremo è
vincoleremo solo una cosa,
la popolarità media di un linguaggio,
questo sarà il nostro unico vincolo per
il problema della massima entropia, e
sceglieremo la distribuzione di probabilità
"p" di "n" che massimizza l'entropia "p log p"
somma negativa e da zero a infinito di
"p log p", dove massimizzare questa
quantità soggetta a questo vincolo e
ovviamente, sempre soggetto a
vincolo di normalizzazione, che "p(n)" è
uguale all'unità, ok? Quindi questo è il mio altro
vincolo e, naturalmente, sappiamo come farlo
fare già questo problema, conosciamo la
forma funzionale, è esattamente lo stesso
problema come quello che avete imparato a fare quando
avete modellato il tempo di attesa per un taxi
di New York, ok? Avete modellato
quel problema esattamente allo stesso modo, quindi io
vincolerò solo la media del
tempo di attesa, qui stiamo solo andando a
limitare la popolarità media di un
linguaggio, popolarità significa il numero di
progetti scritti in quel linguaggio che sono
nell'archivio, quindi sappiamo cosa è
la forma funzionale apparirà, sembra
come qualcosa come "e" alla meno
"lambda n", ok? tutto su "Z", e poi non
resta che trovare lambda e Z, ok? Così
che riproduciamo la giusta abbondanza
che vediamo nei dati, quindi questa è la
distribuzione di massima entropia, è anche,
ovviamente, un modello esponenziale, ha una
forma esponenziale, e se effettivamente trova
lambda e Z che riproducono al meglio i dati,
in altre parole, quello che meglio soddisfa questo
vincolo, e sono altrimenti massima entropia,
ecco cosa troviamo, ok?
Questa banda rossa qui è il sigma 1 e 2
contorni per la distribuzione di abbondanza
e tutto quello che voglio che vediate
questo grafico è un adattamento incredibilmente cattivo di questo.
La massima distribuzione dell'entropia
con questo vincolo,
non riproduce i dati,
non è in grado di spiegare,
la nostra modellazione, i dati in qualsiasi ragionevole
modo, radicalmente sottostima
questi linguaggi estremamente popolari,
non è in grado, in altre parole, di riprodursi
il fatto che ci siano linguaggi come
C e Python, che sono estremamente popolari,
predice fin troppo questo regime
mesoscopico, predice i linguaggi moderatamente
popolari, giusto, come fa anche
sovrastima quelli davvero rari
uccelli, quei linguaggi di rango veramente basso,
con pochissimi esempi nell'archivio,
quindi questo è giusto, questo è il fallimento della scienza.