Problème de locomotive avec des sociétés de différentes tailles


9

Je travaille via Think Bayes (gratuit ici: http://www.greenteapress.com/thinkbayes/ ) et je fais de l'exercice 3.1. Voici un résumé du problème:

"Un chemin de fer numérote ses locomotives dans l'ordre 1..N. Un jour, vous voyez une locomotive avec le numéro 60. Estimez combien de locomotives le chemin de fer a."

Cette solution se trouve avec la fonction de vraisemblance et la priorité exponentielle comme ceci:

class Train(Suite):
  def __init__(self, hypos, alpha=1.0):
    # Create an exponential prior
    Pmf.__init__(self)
    for hypo in hypos:
      self.Set(hypo, hypo**(-alpha))
    self.Normalize()
  def Likelihood(self, data, hypo):
    if hypo < data:
      return 0
    else:
      return (1.0/hypo)

Conceptuellement, cela veut dire que si nous voyons un nombre de trains supérieur à l'une de nos hypothèses (1 ... 1000), alors chaque hypothèse plus petite a une chance nulle d'être correcte. Les autres hypothèses ont une chance 1 / number_of_trains de nous montrer un train avec ce numéro.

Dans l'exercice sur lequel je travaille, l'auteur ajoute un petit plus. Cela suppose qu'il n'y a qu'une seule entreprise. Dans la vraie vie, cependant, vous auriez un mélange de grandes et petites entreprises et de plus grandes entreprises (les deux sont tout aussi probables). Cependant, cela signifierait que vous êtes plus susceptible de voir un train d'une plus grande entreprise car ils auraient plus de trains.

Maintenant, la question est de savoir comment refléter cela dans la fonction de vraisemblance?

Ce n'est pas Stack Overflow, donc je ne demande pas vraiment d'aide au codage, mais peut-être juste une aide sur la façon dont je pourrais penser ce problème en termes de fonction de vraisemblance.


Le même problème se trouve dans 50 Problèmes difficiles de probabilité par Mosteller. Le livre est largement disponible. Je ne pense pas que bayes bientôt soit correct.

J'ai acheté le livre @Hogan mais il n'inclut pas la partie sur les autres sociétés mélangées.
Justin Bozonier

Réponses:


8

Je décris d'abord en détail une approche pour deux entreprises, l'extension à encore plus d'entreprises devrait alors être intuitive (au moins pour la probabilité, le prieur pourrait être plus délicat).

Imaginez qu'il existe deux sociétés A et B , où A a locomotives et B a locomotives. Nous supposons (vous pouvez toujours basculer entre A et B pour que cela ). Le nombre total pour cette hypothèse de locomotives est .NANBNANBNtot=NA+NB

Imaginez que vous voyez une locomotive avec le numéro . Il y a trois cas pour la probabilité:n

  1. NA<n : Cela ne peut pas se produire, donc la probabilité est nulle.
  2. NB<nNA : Cette locomotive doit provenir de la compagnie A , il n'y a donc qu'une seule locomotive avec ce numéro. Ainsi, la probabilité est de1/Ntot
  3. nNB : Cette locomotive peut être soit de A soit de B , donc il y a deux locomotives avec ce numéro. La probabilité d'en voir un est de .2/Ntot

Comme une vérification rapide de la raison: la probabilité de voir n'importe quel nombre est .

i=1L(i)=i=1NB2Ntot+i=NB+1NA1Ntot=2NBNtot+NANBNtot=NA+NBNtot=1

Généralement, il y aura (nombre d'entreprises + 1) cas, un pour chaque intervalle . Heureusement, nous pouvons regarder le problème sous un angle différent et voir que ce dont nous avons besoin pour la vraisemblance sont en fait seulement deux nombres: , le nombre total de locomotives; et , le nombre de locomotives portant le nombre . Quelle est la probabilité de voir l'une des locomotive, parmi locomotives? Cela se produira dans de tous les cas, donc cette fraction est la probabilité. En Python, vous pouvez calculer cela avec deux générateurs de somme (et vous n'avez même pas besoin de classer les entreprises par taille). SiNi<nNi+1NtotNnnNnNtotNnNtotNscontient une liste (ou un tuple) de tailles d'entreprises selon votre hypothèse, cela donnera la probabilité de voir une locomotive avec un nombre n:

total_number_of_locomotives = sum(N for N in Ns)
number_of_locomotives_with_that_number = sum(1 for N in Ns if n<=N)
likelihood = (number_of_locomotives_with_that_number / total_number_of_locomotives)

Notez que le cas trivial avec une entreprise est également géré par ce code (la première somme sera juste , la deuxième sera 0 ou 1, selon que ).NnN


Pour les prieurs, la loi de Zipf pourrait être un bon point de départ pour une répartition réaliste des tailles d'entreprises.


C'est une excellente réponse et vous avez raison, je peux certainement voir comment cela se généralise. Je vous remercie d'avoir pris le temps.
Justin Bozonier

Cela ne vaut rien que la fonction de vraisemblance résultante ait la même valeur indépendamment de l'hypothèse. Autrement dit, Likelihood(data=60, hypo=60)et Likelihood(data=60, hypo=1000)évaluez à la même valeur. Donc, si la distribution précédente était uniforme, la partie postérieure sera également uniforme (moins les valeurs de la probabilité 0)
RubenLaguna

0

Je ne vais pas analyser le code, mais voici la solution.

Laisser

  • P (loc60) est la probabilité qu'une locomotive aléatoire ait le numéro 60
  • P (N) la probabilité antérieure qu'il existe exactement N locomotives
  • P (loc60 | N) la probabilité qu'une locomotive aléatoire ait le numéro 60, si le nombre total de locomotives est N,
  • P (N | loc60) la probabilité qu'il y ait exactement N locomotives, si une locomotive aléatoire a le numéro 60

alors

P(N|loc60)=P(loc60|N)P(N)P(loc60)=P(loc60|N)P(N)MP(loc60|M)

Mais

P(loc60|N)={1/N if N60 0 otherwise 

Désormais, nous supposons que N60.

P(N|loc60)=P(N)/NM=60P(M)/M

Maintenant, nous devons sélectionner P (N), sinon nous sommes bloqués. Puisque nous ne connaissons même pas l'ordre de grandeur de P (N), il est raisonnable de supposer quelogN est uniformément répartie entre 0 et certains logNmax(c.-à-d. la probabilité que soit la même que la probabilité que ). Inviter est une tâche délicate, mais d'après mes connaissances antérieures sur les chemins de fer et les locomotives, je peux supposer que .102N<103103N<104NmaxNmax60

La distribution uniforme de signifie que , où c est une constante indépendante de N.logN

P(N)=c(log(N+1)logN)c/N

En substituant ceci à la formule précédente, nous avons:

P(N|loc60)c/N2M=60Nmaxc/M2

Mais

M=60Nmaxc/M260NmaxcM2dM=c60cNmaxc60

Maintenant nous avons

P(N|loc60)60/N2

Quelle est la valeur médiane de N? Soit , puisNmed

60Nmed60N2dN=1/2

60/N60Nmed=1/2

Nmed=120

Si nous avons besoin d'une attente mathématique plutôt que d'une médiane, alors

E(N)=60Nmax60N2NdN=60logNmax60

D'après ce que je sais des chemins de fer, devrait être compris entre et , donc E (N) se situe entre 170 et 600.Nmax103106


1
Cela semble résoudre le problème simple. Mais qu'en est-il du cas où vous pourriez avoir différentes compagnies de chemin de fer de différentes tailles?
Justin Bozonier

Cela répond exactement au cas où il existe différentes sociétés de chemins de fer de tailles différentes. " est uniformément réparti entre 0 et certains " est la distribution des tailles. logNlogNmax
user31264

4
Si tu le dis. Il est étrange que le mot «entreprise» n'apparaisse pas une fois dans votre réponse. Désolé, je ne vois pas la connexion.
Justin Bozonier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.