Dobrý den,
pokusím se reagovat na některé poznámky, které se zde objevily. Nebudu to dělit na více příspěvků (později asi ano, pokud budu reagovat na něco dalšího), takže to bude dost dlouhé. Ale zatím k prvnímu diskutujícímu.
No a mě zase nezajímá kolik stojí 100 minut, ale kolik celkem utratím. Na to kolik stojí 100 minut se můžu kouknout do ceníku.
A v tom se právě mýlíte. Cenu sta minut volání vám žádný ceník operátora nesdělí, jen s výjimkou těch, co mají tarifikaci 1+1. Právě proto existuje kalkulačka na ifon.cz. Jestliže má operátor 100 min. za N Kč, neznamená to, že za N Kč provoláte opravdu 100 minut. Reálně to může být i 50 min, nebo více, nebo méně...
Nejprve k samotnému výpočtu, resp. k poznámce o balíčcích a v případě Odoriku také odpuštění poplatku za SIM. Povídání rozdělím na dvě části: matematickou a "aplikační" z hlediska použitelnosti pro webový server.
1) Ad matematická část. Oba se zde bavíme patrně o něčem jiném. V kalkulačce se cena počítá -- pro konkrétní vstup -- deterministicky (to, že jsou na jiných místech použity zhusta pravděpodobnostní modely, je věc jiná). Klient si navolí konkrétní spotřebu a pro tu dostane konkrétní cenu. Takto může srovnávat nabídky. U tarifů s jinou než sekundovou tarifikací vstupuje do hry střední hodnota relativního navýšení času (vliv tarifikační míry). Výchozím bodem je střední hodnota délky hovoru. Relativní navýšení ceny v důsledku tarifikační míry různé od 1+1 zavádí do výsledku určitou nejistotu -- nakonec, pokud střední hodnotu ceny obalíte do pásu -sigma/+sigma, neřkuli |2*sigma|, do pásu si můžete klidně zapasovat libovolné zakulacené křivky.

Cena se chová však lineárně.
Jestliže klient Odoriku v daném období dosáhne útraty 100 Kč a volá dál, celková cena za volání se sníží, protože se odpouští poplatek za SIM. To chápeme všichni.

Nespojitost zde prostě je, cena skočí dolů. To je to, čemu vy říkáte "naivní" výpočet. Já nevím, co je na tom naivního. Funkce s jednou skokovou nespojitostí v bodě, kde se limita zleva nerovná limitě zprava, jsou úplně běžné funkce a jejich výskyt není známkou ani punku ani hlouposti.
K vašemu "zakulacení" a "zvlnění" trošku podrobněji. Hádám, že asi žádný z diskutujících Váš výsledek neověřil a nevygeneroval si vlastní křivky. Nechte mě proto trošku vysvětlit ostatním, co jste chtěl říct. Předpokládáte, že během roku je Vaše měsíční spotřeba minut rozdělena normálně, proto k výpočtu používáte Gaussovo normální rozdělení pravděpodobnosti, přičemž náhodou proměnnou je právě měsíční spotřeba. Přitom Váš výpočet v jistém okolí kolem T0 (času, jenž odpovídá volným minutým, resp. času, kdy dochází k odpuštění poplatku za SIM) -- popř. na širším intervalu, je-li sigma vyšší -- ukazuje odchylky od lineární funkce. Fajn. Ty odchylky jsou sice titěrné, ale budiž. V roce máte 12 měsíců, máte dvanáct bodů, dvanáct hodnot. Takto nízký počet měření nelze proložit normálním rozdělením, ne v tomto případě (resp. není k tomu důvod). U řady měřených veličin to lze, jsou-li pro to fyzikální důvody: má-li měřená veličina "tu správnou hodnotu", kterou se snažíte zjistit. Chyby měření jsou pak rovnoměrně rozloženy kolem této hodnoty (střední, očekávané hodnoty). V případě měsíčních spotřeb žádná "správná" hodnota neexistuje. Každý měsíc může mít klient libovolnou spotřebu, spotřeba z minulého měsíce nesouvisí se spotřebou v dalším měsíci. Ano, někdo může volat velmi podobně každý měsíc, pokud toto volání je řízeno nějakým plánem.
Jinými slovy, do výpočtu jste uměle zanesl další komplikaci a nutné (ne nutně správné) předpoklady a další stupně volnosti. Vy uvádíte, že Vaše spotřeba se řídí normálním rozdělením s jistými momenty, znáte svou střední spotřebu i střední kvadratickou odchylku (počítáte s 0.2*mu). Fajn. Držíte-li se tohoto N let, nic moc nenamítám. U lidí se ale chování mění: s tím, jak se mění ceny, s tím, jak pracují atd. Mám zde dataset ze zhruba 2000 SIM karet. Když se podíváte na spotřebu v roce, mluvit o normálním rozdělení nejde. Když člověk provede přímočarý výpočet průměrné spotřeby, spočítá střední kvadratickou odchylku, zjistí, že v tomto případě (pro 2000 SIM karet) je mean(sigma) = 0.43 mu. Takže rozptyl je u 2000 SIM karet daleko vyšší než u Vás (0.2mu). Medián je podobný, asi 0.41mu. Maximální sigma činí asi 3.5mu (sic!), minimální pak 0.1mu.
Ale dobrá, nechť se měsíční spotřeba řídí normálním rozdělením. Pak Váš výpočet je špatný.
************
Situaci zjednodušíme, bez újmy na obecnosti. [Unuděný čtenář může přeskočit níže pod hvězdičky.]
Počítejme s balíčkem volných minut s tarifikací 1+1 (mohl bych to pomocí svých modelů zobecnit i na jiné tarifikační míry, ale nebudu to komplikovat), stejně tak předpokládejme, že minutová sazba do sítě i mimo je táž. Nechť "T0" je počet volných minut, "c" je minutová sazba, "c0" měsíční paušál. Nechť je měsíční spotřeba náhodnou veličinou s Gaussovým pravděpodobnostním rozdělením. Pak pro střední hodnotu ceny platí
<cena> = c0 + \int_{T0}^{\infty} [c0 + c(t-T0)*NR(t; mu, sigma)/(1-F(0))] dt,
kde \int_{T0}^{\infty} je integrál z uvedeného výrazu přes interval (T0, nekonečno), NR(t; mu, sigma) je hustota pravděpodobnosti normálního rozdělení (pro časovou spotřebu) se střední hodnotou mu a střední kvadratickou odchylkou sigma a F(0) = \int_{-\infty}^0 NR(t; mu, sigma) dt. Ano, zanedbal jste korekční člen 1/(1-F(0)) -- někdy je blízký jedničce, mnohdy však není (pro vyšší hodnoty sigma). Vzhledem k tomu, že se Vám nelíbí, že lineární funkce pro cenu má skokovou nespojitost (resp. ostrý bod) a že Váš výpočet ukazuje cenové rozdíly v řádu jednotek korun, je zvláště pro Vás tento korekční člen velmi důležitý: ukazuje i vyšší cenové rozdíly od Vašeho výpočtu.
Důkaz:
Vzhledem k předpokladům výše je cena za volání definována po částech,
cena(t) = {0, t<0; c0, 0<=t<= T0; c0 + c(t-T0), t>T0}
(Slovy řečeno, je-li čas záporný (:)), je cena nulová. Je-li provolaný čas nižší než objem poskytnutých volných minut, je výsledná cena dána výši paušálu. Je-li provolaný čas vyšší než volné minuty, k paušálu je nutné připočíst minuty nad rámec VM.)
Vzhledem k předpokladu normálního rozdělení pravděpodobnosti náhodné veličiny, jíž je spotřeba minut, je nutné udělat jisté korekce. Totiž použijeme-li normální rozdělení tak, jak je definováno, existovala by nenulová pravděpodobnost, že měsíčně provoláte záporný čas.

.
Nemůžeme Gaussovo rozdělení jen useknout (dostali bychom se brzy k nekonečným výsledkům...), ale musíme ho napojit na jiné pravděpodobnostní rozdělení, v tom případě homogenní (je jedno, jestli provoláte minuty dvě, tři či deset minut; je-li provolaný objem nižší než volné minuty -- platíte pořád stejně). A to tak, aby pro libovolnou dvojici (mu, sigma) byla splněna normovací podmínka, tedy aby integrál přes celý obor reálných čísel naší hustoty pravděpodobnosti byl roven jedné; v tomto případě nahrazujeme reálný obor jen čísly kladnými (čas volání nemůže být záporný). Jinými slovy, musíme zaručit, aby naše spotřeba ležela mezi nulou a nekonečnem (což jistě všichni chápou). Pravděpodobnost, že provoláme nula až nekonečně mnoho minut, je zde 1: je to jisté. Méně provolat nejde. Takže naše hustota pravděpodobnosti spotřeby bude mít tvar
h(t) = {0, t<0; K, 0<=t<=T0; NR'(t), T0<t<nekonečno},
kde NR'(t) je useknuté normální rozdělení, NR'(t) = NR(t)/(1-F(0)), F(0) = \int_{-\infty}^0 NR(t; mu, sigma) dt, a K = 1/T0*\int_0^T0 NR'(t; mu, sigma) dt (věta o střední hodnotě integrálního počtu; na intervalu (0, T0) používáme ze zřejmých důvodů homogenní rozdělení pravděpodobnosti; rozmyslete si

).
---
"Pod-důkaz" týkající se F(0):
Nechť je NR(t) normální rozdělení náhodné veličiny t. Nechť a, b \in R, přičemž b>a. Přecházíme-li z celého R (tj. od (-nekonečno, nekonečno)) k intervalu (a, b), platí
\int_a^b NR(t; mu, sigma) dt = F(b) - F(a).
Jelikož F(b) - F(a) = konst. a 1/(F(b) - F(a))*\int_a^b NR(t) dt = 1, je NR'(t) = NR/(F(b) - F(a)). V našem případě b -> \infty (nekonečno) a "a" = 0, proto F(b) = 1. Takže
NR'(t) = NR(t)/(1-F(0)). *QED*
---
Nyní nás zajímá střední hodnota ceny.
Je-li g(x) funkce náhodné proměnné x se spojitým rozložením a je-li pravděpodobnostní funkce tohoto rozložení f, pak střední hodnota funkce g(x) je dána jako skalární součin těchto funkcí, tj.
<g(x)> = \int_{-\infty}^{\infty} g(x)f(x) dx,
pokud tento nevlastní integrál konverguje absolutně, tj. tato střední hodnota funkce je definována právě tehdy, když \int_{-\infty}^{\infty} |g(x)|f(x) dx < \infty.
Fajn, to je splněno. Vzhledem k definici ceny (po částech, viz výše) postupně dostáváme
<cena> = 0 + c0*F(0, T0) + c0*F(T0, \infty) + \int_{T0}^{\infty} c(t-T0)*NR'(t; mu, sigma) dt = c0 + \int_{T0}^{\infty} c(t-T0)*NR'(t; mu, sigma) dt,
takže
<cena> = c0 + \int_{T0}^{\infty} [c0 + c(t-T0)*NR(t; mu, sigma)/(1-F(0))] dt; QED.
************
Nyní máme vztah pro střední hodnotu ceny. Dost komplikovaný vztah a k tomu ještě postavený na vachrlatém základu (předpoklad normálního rozdělení spotřeby minut v každém měsíci během roku, tj. myslíme si, že se držíme při volání nějaké správné hodnoty spotřeby, kterou hledáme, a to vše okolo je jakási fluktuace, a to nezmiňujeme absenci SMS...). Pro každou hodnotu "mu" (střední spotřeby) a sigmy (střední kvadratické odchylky) dostaneme jinou, byť v mnohém podobnou hodnotu (ale jasně, někdy dostaneme i hodnoty dost nereálné a matoucí). Takže nakonec bychom měli mít střední hodnotu ceny danou jako funkci dvou proměnných, a dostali bychom 3D graf škaredý jak pytel na zmije. K čemu to všemu? Abychom se chvástali korunovými rozdíly v malém intervalu času, přičemž bychom nakonec zjistili, že pokud je předpoklad NR správný a sigmy jsou malé, střední cena konverguje hezky k původní jednoduché lineární funkci, která má jediný bod, v němž neexistuje derivace? Skutečně?
Navíc aby vznikl zaoblený graf bez ostrého přechodu (či v případě Odoriku bez nespojitosti), je nutné pro každou spotřebu s krokem +1 počítat uvedený vztah stále dokola až na konec intervalu, který si zvolíme (třeba od 1 minuty do 480 minut, což jsou zhruba limity kalkulačky; 480x musíte počítat zmíněný vztah s třemi integrály. Je na tom něco elegantního?
A tím se dostávám k druhému bodu:
2) Aplikační část, webové stránky. Provést výpočet uvedený výše pro vybraný interval (tj. získat hodnoty střední ceny) trvá několik minut. Tento laptop je sice spíše el. psací stroj, server je rychlejší, ale to neomlouvá celou neohrabanost procedury: výpočet (sestrojení takového grafu) trvá pro 180 minut s tímto -- nyní skutečně -- naivním -- a přemrštěně složitým postupem sedm minut (více křivek; u jedné kolem minuty až dvou). Teď jsem použil slova "naivní" já -- protože používáte daleko divočejší předpoklady, než jsou v deterministickém modelu, který je jasně a logicky vysvětlitelný a pochopitelný. A správný.
Deterministické, analytické modely použité na serveru dají správný výsledek během milisekund. Představte si, jak návštěvník webu klikne na profil operátora (nedejbože na kalkulačku s 200 tarify) a čeká (přinejlepším) 10 minut na vykreslení grafu pro zadané parametry. A to jen proto, aby eliminoval nespojitost, která přitom bude reálně vždy existovat. Modely, které jsou na serveru použity nyní, dovolují uživatelům interagovat s webem, přizpůsobovat si podmínky, srovnávat, počítat. A to doslova v reálném čase oproti postupu popsaném výše a preferovaném Vámi. Nedokážu si dost dobře představit, jaký hardware by byl potřeba k tomu, co navrhujete Vy, aby bylo obslouženo N uživatelů naráz a přesto mohli s aplikacemi na ifon.cz reálně pracovat.
Nemluvě o tom, že neznám nikoho, kdo by si vedl záznamy o a) skutečných provolaných minutách, b) o účtovaných minutách, c) o měsíčních spotřebách a cenách. I kdyby takoví lidé existovali, a tvořili statisticky významnou skupinu, stejně by jim tento zmíněný postup nemohl pomoci: skutečně pomoci jim může jen to, co je na webu uvedeno.
Nějakou dobu jsme si pohrávali s myšlenkou, že na webu bude generátor náhodných hovorů a že budou u nich uvedeny ceny atd.: ale opět platí, že pro drtivou většinu lidí nebude mít generátor žádný reálný smysl ani užitek. Jen to zatíží server. To, co je na webu použito dnes, vychází ze spousty práce. Na počátku byly poměrně složité stochastické modely. Trvalo N hodin, než daly výsledky. Kouzlo toho všeho, co je na ifon.cz použito, tkví v tom, že odvozené matematické vztahy dávají tytéž výsledky: jen ne během hodin, ale během milisekund.