Masalah lokomotif dengan berbagai ukuran perusahaan

9

Saya sedang mengerjakan Think Bayes (gratis di sini: http://www.greenteapress.com/thinkbayes/ ) dan saya sedang berolahraga 3.1. Berikut ringkasan masalahnya:

"Sebuah kereta api memberi nomor lokomotifnya dalam urutan 1..N. Suatu hari kamu melihat lokomotif dengan nomor 60. Perkirakan berapa banyak lokomotif yang dimiliki kereta api."

Solusi ini ditemukan dengan fungsi kemungkinan dan eksponensial sebelumnya seperti:

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)

Secara konseptual ini dikatakan, jika kita melihat jumlah kereta yang lebih besar dari salah satu hipotesis kami (1 ... 1000) maka setiap hipotesis yang lebih kecil memiliki peluang nol untuk menjadi benar. Sisa hipotesis memiliki peluang 1 / number_of_trains untuk menunjukkan kepada kami kereta dengan nomor ini.

Dalam latihan saya bekerja pada penulis kemudian menambahkan sedikit tambahan. Ini mengasumsikan hanya ada satu perusahaan. Namun dalam kehidupan nyata Anda akan memiliki campuran perusahaan besar dan kecil dan perusahaan besar (keduanya sama-sama kemungkinan). Namun, ini berarti Anda lebih mungkin melihat kereta dari perusahaan yang lebih besar karena mereka akan memiliki lebih banyak kereta.

Sekarang pertanyaannya adalah bagaimana mencerminkan hal ini dalam fungsi kemungkinan?

Ini bukan Stack Overflow jadi saya tidak benar-benar meminta bantuan pengkodean, tetapi mungkin hanya membantu tentang bagaimana saya berpikir tentang masalah ini dalam hal fungsi kemungkinan.

Justin Bozonier
sumber
Masalah yang sama ada di 50 Masalah Menantang dalam Peluang oleh Mosteller. Buku ini tersedia secara luas. Saya tidak berpikir bayes segera benar.
Membeli buku @Hogan tetapi tidak termasuk bagian tentang perusahaan lain yang tergabung.
Justin Bozonier

Jawaban:

8

Saya pertama kali menguraikan pendekatan untuk dua perusahaan secara rinci, ekstensi untuk lebih banyak perusahaan kemudian harus intuitif (setidaknya untuk kemungkinan, yang sebelumnya bisa lebih rumit).

Bayangkan ada dua perusahaan A dan B , di mana A memiliki lokomotif dan B memiliki lokomotif . Kami menganggap (Anda selalu dapat beralih A dan B untuk membuat penahanan ini). Jumlah total untuk hipotesis lokomotif itu adalah .NANBNANBNtot=NA+NB

Bayangkan Anda melihat lokomotif dengan nomor . Ada tiga kasus untuk kemungkinan:n

  1. NA<n : Ini tidak bisa terjadi, jadi kemungkinannya nol.
  2. NB<nNA : Lokomotif ini harus berasal dari perusahaan A , jadi hanya ada satu lokomotif dengan nomor ini. Dengan demikian kemungkinannya adalah1/Ntot
  3. nNB : Lokomotif ini bisa dari A atau dari B , jadi ada dua lokomotif dengan nomor ini. Kemungkinan untuk melihat salah satunya adalah .2/Ntot

Sebagai pemeriksaan kewarasan cepat: Kemungkinan untuk melihat angka sama sekali adalah .

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

Secara umum, akan ada (jumlah perusahaan + 1) kasus, satu untuk setiap interval . Untungnya, kita dapat melihat masalah dari sudut yang berbeda dan melihat bahwa yang kita butuhkan untuk kemungkinan sebenarnya hanya dua angka: , jumlah total lokomotif; dan , jumlah lokomotif yang memiliki nomor . Seberapa besar kemungkinan kita melihat salah satu lokomotif , di luar lokomotif ? Ini akan terjadi di dari semua kasus, jadi fraksi ini adalah kemungkinannya. Dengan Python, Anda dapat menghitung ini dengan dua generator jumlah (dan Anda bahkan tidak perlu memesan perusahaan berdasarkan ukuran). JikaNi<nNi+1NtotNnnNnNtotNnNtotNsberisi daftar (atau tuple) ukuran perusahaan sesuai dengan hipotesis Anda, maka ini akan memberikan kemungkinan untuk melihat lokomotif dengan nomor 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)

Perhatikan bahwa kasus sepele dengan satu perusahaan juga ditangani oleh kode ini (jumlah pertama hanya akan menjadi , jumlah kedua akan menjadi 0 atau 1, tergantung pada apakah ).NnN


Bagi para prior, hukum Zipf bisa menjadi titik awal yang baik untuk distribusi ukuran perusahaan yang realistis.

dobiwan
sumber
Ini adalah jawaban yang bagus dan Anda benar bahwa saya pasti bisa melihat bagaimana itu digeneralisasikan. Terima kasih telah meluangkan waktu.
Justin Bozonier
Tidak ada gunanya bahwa fungsi kemungkinan yang dihasilkan memiliki nilai yang sama independen dari hipotesis. Yaitu, Likelihood(data=60, hypo=60)dan Likelihood(data=60, hypo=1000)evaluasi dengan nilai yang sama. Jadi jika distribusi sebelumnya seragam, posterior juga akan seragam (minus nilai untuk kemungkinan 0)
RubenLaguna
0

Saya tidak akan menganalisis kode, tetapi di bawah ini solusinya.

Membiarkan

  • P (loc60) adalah probabilitas bahwa lokomotif acak memiliki nomor 60
  • P (N) menjadi probabilitas sebelumnya bahwa ada tepat N lokomotif
  • P (loc60 | N) adalah probabilitas bahwa lokomotif acak memiliki angka 60, jika jumlah total lokomotif adalah N,
  • P (N | loc60) adalah probabilitas bahwa ada tepat lokomotif N, jika lokomotif acak memiliki nomor 60

Kemudian

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

Tetapi

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

Mulai sekarang, kita asumsikan bahwa .N60

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

Sekarang kita harus memilih P (N), kalau tidak kita macet. Karena kita bahkan tidak tahu urutan besarnya P (N), masuk akal untuk mengasumsikan bahwa didistribusikan secara seragam antara 0 dan beberapa (yaitu probabilitas bahwa sama dengan probabilitas bahwa ). Menjamu N_ adalah tugas yang sulit, tetapi dari pengetahuan saya sebelumnya tentang kereta api dan lokomotif, saya dapat berasumsi bahwa .logNlogNmax102N<103103N<104NmaxNmax60

Distribusi seragam dari berarti bahwa , di mana c adalah konstanta independen pada N.logN

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

Mengganti ini dengan rumus sebelumnya, kita memiliki:

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

Tetapi

M=60Nmaxc/M260NmaxcM2dM=c60cNmaxc60

Sekarang kita punya

P(N|loc60)60/N2

Berapa nilai median N? Biarlah , laluNmed

60Nmed60N2dN=1/2

60/N60Nmed=1/2

Nmed=120

Jika yang kita butuhkan adalah ekspektasi matematis daripada median, maka

E(N)=60Nmax60N2NdN=60logNmax60

Dari apa yang saya ketahui tentang jalur kereta api, harus antara dan , jadi E (N) berada di suatu tempat antara 170 dan 600.Nmax103106

pengguna31264
sumber
1
Ini tampaknya mengatasi masalah sederhana. Tetapi bagaimana dengan kasus ketika Anda mungkin memiliki perusahaan jalan kereta api yang berbeda dengan ukuran yang berbeda?
Justin Bozonier
Ini membahas persis kasus ketika ada perusahaan jalan kereta api yang berbeda dengan ukuran yang berbeda. " didistribusikan secara seragam antara 0 dan beberapa " adalah distribusi ukuran. logNlogNmax
user31264
4
Jika Anda berkata begitu. Sungguh aneh bahwa kata "perusahaan" tidak muncul sekali dalam jawaban Anda. Maaf, saya tidak melihat hubungannya.
Justin Bozonier