Lokproblem mit Firmen unterschiedlicher Größe

9

Ich arbeite an Think Bayes (kostenlos hier: http://www.greenteapress.com/thinkbayes/ ) und mache Übung 3.1. Hier ist eine Zusammenfassung des Problems:

"Eine Eisenbahn nummeriert ihre Lokomotiven in der Reihenfolge 1..N. Eines Tages sehen Sie eine Lokomotive mit der Nummer 60. Schätzen Sie, wie viele Lokomotiven die Eisenbahn hat."

Diese Lösung wird mit der Wahrscheinlichkeitsfunktion und dem Exponentialprior wie folgt gefunden:

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)

Konzeptionell heißt das: Wenn wir eine Zugnummer sehen, die größer als eine unserer Hypothesen ist (1 ... 1000), hat jede kleinere Hypothese eine Null-Chance, korrekt zu sein. Der Rest der Hypothesen hat eine 1 / number_of_trains-Chance, uns einen Zug mit dieser Nummer zu zeigen.

In der Übung arbeite ich am Autor und füge dann ein kleines Extra hinzu. Dies setzt voraus, dass es nur eine Firma gibt. Im wirklichen Leben hätten Sie jedoch eine Mischung aus großen und kleinen Unternehmen und größeren Unternehmen (beide gleich wahrscheinlich). Dies würde jedoch bedeuten, dass Sie eher einen Zug einer größeren Firma sehen, da diese mehr Züge haben würde.

Die Frage ist nun, wie dies in der Wahrscheinlichkeitsfunktion widergespiegelt werden kann.

Dies ist kein Stapelüberlauf, daher bitte ich nicht wirklich um Hilfe beim Codieren, sondern vielleicht nur darum, wie ich dieses Problem in Bezug auf eine Wahrscheinlichkeitsfunktion beurteilen könnte.

Justin Bozonier
quelle
Das gleiche Problem besteht in 50 herausfordernden Wahrscheinlichkeitsproblemen von Mosteller. Das Buch ist weit verbreitet. Ich denke nicht, dass Bayes bald richtig ist.
Kaufte das Buch @Hogan, aber es enthält nicht den Teil über andere Unternehmen, die gemischt werden.
Justin Bozonier

Antworten:

8

Ich skizziere zunächst einen Ansatz für zwei Unternehmen im Detail. Die Erweiterung auf noch mehr Unternehmen sollte dann intuitiv sein (zumindest für die Wahrscheinlichkeit, dass der Prior schwieriger sein könnte).

Stellen Sie sich vor gibt es zwei Unternehmen A und B , wobei A hat Lokomotiven und B hat Lokomotiven. Wir nehmen (Sie können jederzeit A und B wechseln , um dies zu halten). Die Gesamtzahl für diese Hypothese von Lokomotiven ist .N B N AN B N t o t = N A + N B.NANBNANBNtot=NA+NB

Stellen Sie sich vor, Sie sehen eine Lokomotive mit der Nummer . Es gibt drei Fälle für die Wahrscheinlichkeit:n

  1. NA<n : Dies kann nicht passieren, daher ist die Wahrscheinlichkeit Null.
  2. 1 / N t o tNB<nNA : Diese Lokomotive muss von Firma A stammen , daher gibt es nur eine Lokomotive mit dieser Nummer. Somit beträgt die Wahrscheinlichkeit1/Ntot
  3. 2 / N t o tnNB : Diese Lokomotive kann entweder von A oder von B sein , daher gibt es zwei Lokomotiven mit dieser Nummer. Die Wahrscheinlichkeit, einen von ihnen zu sehen, beträgt .2/Ntot

Zur schnellen Überprüfung der Gesundheit: Die Wahrscheinlichkeit, überhaupt eine Zahl zu sehen, ist .

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

Im Allgemeinen gibt es Fälle (Anzahl der Unternehmen + 1), einen für jedes Intervall . Glücklicherweise können wir das Problem aus einem anderen Blickwinkel betrachten und feststellen, dass wir für die Wahrscheinlichkeit tatsächlich nur zwei Zahlen benötigen: , die Gesamtzahl der Lokomotiven; und die Anzahl der Lokomotiven mit der Nummer . Wie wahrscheinlich ist es, dass wir eine der Lokomotiven von -Lokomotiven sehen? Dies geschieht in allen Fällen in , daher ist dieser Bruch die Wahrscheinlichkeit. In Python können Sie dies mit zwei Summengeneratoren berechnen (und Sie müssen die Unternehmen nicht einmal nach Größe sortieren). Wenn N t o t N n N N N N t o t N nNi<nNi+1NtotNnnNnNtotNnNtotNsEnthält eine Liste (oder ein Tupel) von Unternehmensgrößen gemäß Ihrer Hypothese. Dies gibt die Wahrscheinlichkeit, eine Lokomotive mit der Nummer zu sehen 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)

Beachten Sie, dass der triviale Fall mit einer Firma auch von diesem Code behandelt wird (die erste Summe ist nur , die zweite Summe ist 0 oder 1, je nachdem, ob ).n N.NnN


Für die Vorgesetzten könnte das Zipf-Gesetz ein guter Ausgangspunkt für eine realistische Verteilung der Unternehmensgrößen sein.

Dobiwan
quelle
Dies ist eine großartige Antwort und Sie haben Recht, dass ich definitiv sehen kann, wie es sich verallgemeinert. Danke dass du dir die Zeit nimmst.
Justin Bozonier
Es ist nichts wert, dass die resultierende Wahrscheinlichkeitsfunktion unabhängig von der Hypothese den gleichen Wert hat. Das heißt, Likelihood(data=60, hypo=60)und Likelihood(data=60, hypo=1000)bewerten Sie auf den gleichen Wert. Wenn also die vorherige Verteilung gleichmäßig war, ist auch der hintere Teil gleichmäßig (abzüglich der Werte für die Wahrscheinlichkeit 0)
Ecerulm
0

Ich werde den Code nicht analysieren, aber unten ist die Lösung.

Lassen

  • P (loc60) ist die Wahrscheinlichkeit, dass eine zufällige Lokomotive die Nummer 60 hat
  • P (N) ist die vorherige Wahrscheinlichkeit, dass es genau N Lokomotiven gibt
  • P (loc60 | N) ist die Wahrscheinlichkeit, dass eine zufällige Lokomotive die Nummer 60 hat, wenn die Gesamtzahl der Lokomotiven N ist.
  • P (N | loc60) ist die Wahrscheinlichkeit, dass es genau N Lokomotiven gibt, wenn eine Zufallslokomotive die Nummer 60 hat

Dann

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

Aber

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

Von nun an nehmen wir an, dass .N60

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

Jetzt sollten wir P (N) auswählen, sonst stecken wir fest. Da wir nicht einmal die Größenordnung von P (N) kennen, ist es vernünftig anzunehmen, dass gleichmäßig zwischen 0 und einigen (dh die Wahrscheinlichkeit, dass ist die gleiche wie die Wahrscheinlichkeit, dass ). gastieren ist eine knifflige Aufgabe, aber aufgrund meiner Vorkenntnisse über Eisenbahnen und Lokomotiven kann ich davon ausgehen, dass .logN10 2N < 10 3logNmax102N<103103N<104NmaxNmax60

Die gleichmäßige Verteilung von bedeutet, dass , wobei c eine von N unabhängige Konstante ist.logN

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

Wenn wir dies durch die vorherige Formel , haben wir:

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

Aber

M=60Nmaxc/M260NmaxcM2dM=c60cNmaxc60

Jetzt haben wir

P(N|loc60)60/N2

Was ist der Medianwert von N? Dann sei esNmed

60Nmed60N2dN=1/2

60/N60Nmed=1/2

Nmed=120

Wenn wir eher mathematische Erwartung als Median brauchen, dann

E(N)=60Nmax60N2NdN=60logNmax60

Nach dem, was ich über Eisenbahnen weiß, sollte zwischen und , also liegt E (N) irgendwo zwischen 170 und 600.10 3 10 6Nmax103106

user31264
quelle
1
Dies scheint das einfache Problem anzugehen. Aber was ist mit dem Fall, dass Sie möglicherweise unterschiedliche Eisenbahnunternehmen unterschiedlicher Größe haben?
Justin Bozonier
Dies ist genau der Fall, wenn es verschiedene Eisenbahnunternehmen unterschiedlicher Größe gibt. " ist gleichmäßig zwischen 0 und einigen " ist die Größenverteilung. log N maxlogNlogNmax
user31264
4
Wenn du es sagst. Es ist seltsam, dass das Wort "Firma" in Ihrer Antwort nicht einmal vorkommt. Entschuldigung, ich sehe die Verbindung nicht.
Justin Bozonier