Plesová sezóna nám už pomalu, ale jistě, končí a z nějakého důvodu jsem dostal nutkání otevřít už 8 let starou otázku a konečně na ní nějak odpovědět. Tehda jsem sepsal svou domněnku, že nejvýhodnější pro mě jakožto člověka je si v tombole koupit pouze jeden lístek. A jelikož se už cítím být statisticky zdatnější, pustil jsem se do toho znovu a hlouběji.

Čistě matematicky to asi nepůjde

Popravdě, zkoušel jsem se k řešení dopočítat i klasickou matematickou cestou, ale celá záležitost je natolik komplikovaná, že vždy to mělo nějaké nedostatky. A tak jediné co zbývá, je jít cestou simulace. Po celo-dopoledním bádání jsem identifikoval, na čem by profitabilita v tombole mohla záviset, až jsem dospěl k tomuto grafu:

Zjistil jsem zajímavou věc, a sice že v první řadě to, jestli člověk zakoupením tombolového lístku vydělá nebo prodělá, závisí na tom, jestli pořadatel na prodeji lístků vybral více peněz, než je celková hodnota všech cen v tombole. To znamená, že pokud mají např. všechny ceny v tombole hodnotu 1000 Kč a pořadatel prodejem lístků vybere více než 1000 Kč, pak všichni účastníci tomboly přicházejí o peníze. Na grafu jde pak dále vidět, že čím více pořadatel na lístcích vybere a čím více lístků si koupíte, o to hůře na tom jste.

Anebo taky naopak …

Nyní se podívejme na opačný případ, kdy by pořadatel na lístcích vybral méně, než je hodnota celé tomboly:

Zde se naopak otevírá možnost pro návštěvníky vydělat a v tomto případě to bude pořadatel, kdo přijde zkrátka (za předpokladu, že dané věci koupil za své). Ovšem pro různé poměry zisku tomboly se vyplatí nakoupit různé počty lístků. Pokud jich nakoupíte příliš, přijdete o peníze taktéž.

Takže například pokud je hodnota tomboly 1000 Kč a pořadatel prodá 200 lístků za celkovou sumu 900 Kč (90% hodnoty tomboly – na grafu křivka s číslem 0.9), pak je pro návštěvníka nejvýhodnější koupit cca 5% všech lístků, což je v tomto případě 10. Naopak, pokud by pořadatel prodal lístky levněji a utržil jen 800 Kč (80% hodnoty tomboly), pak pro maximální zisk se Vám vyplatí jich koupit cca 10%, což je 20 lístků.

Kdyby však pro pořadatele nastal takřka katastrofální scénář, kde by prodal lístky jen za 500 Kč, pak jich můžete vlastnit rovnou polovinu! (100 lístků z 200 prodaných)

Takže tak … to je ve výcucu vše, co jsem chtěl sdělit a pokud by si s tím někdo chtěl více pohrát, tak můj Rkový kód je zde:

library(fpp3)
library(truncnorm)

spust_tombolu = function(proc_tvych_listku, ev = 1.1) {
  pocet_lidi = rpois(1,150)
  pocet_tvych_listku = (proc_tvych_listku*pocet_lidi) |> round()
  pocet_cen = rpois(1,60)
  hodnoty_cen = rtruncnorm(pocet_cen,a=30,mean=120,sd=50)
  hodnota_cen_total = sum(hodnoty_cen)
  cena_listku = (ev*hodnota_cen_total)/pocet_lidi
  
  pocet_prodanych_listku = pocet_lidi+pocet_tvych_listku
  
  cena_tvych_listku = pocet_tvych_listku*cena_listku
  
  slosovatelne_listky = 1 : pocet_prodanych_listku
  
  tve_listky = sample(slosovatelne_listky, pocet_tvych_listku)
  
  vylosovate_listky = sample(slosovatelne_listky, pocet_cen)
  
  tve_vyherni_listky = intersect(vylosovate_listky, tve_listky)
  pocet_vyhernich_listku = length(tve_vyherni_listky)
  
  hodnota_vyher = sample(hodnoty_cen, pocet_vyhernich_listku) |> sum()
  tvuj_zisk = hodnota_vyher - cena_tvych_listku
  
  tvuj_zisk
}

data = data.frame()

for (ev in c(-50,-20,-10,0,10,20,50)) {
  ev = (ev/100)+1
  
  for (proc_tvych_listku in c(1,2,5,10,20,50,75)/100) {
    vysledky = replicate(
      3000,
      spust_tombolu(proc_tvych_listku, ev)
    )
    t = t.test(vysledky)
    
    data = rbind(
      data,
      list(
        mean = t$estimate |> as.numeric(),
        low = t$conf.int[1] |> as.numeric(),
        high = t$conf.int[2] |> as.numeric(),
        ev = ev |> as.factor(),
        proc_tvych_listku = proc_tvych_listku
      )
    )
  }
}

PS: profitabilita tomboly je zde divně pojmenovaná jako ev (expected value), což je špatně.