Drobné kritické rýpnutí v postu Školácká chyba na Mikroblogy.cz pro Facebook vyvolalo rozsáhlou diskusi o domnělých motivech, názorech či komplexech kritika. Jan Řežab nejprve zaútočil a teprve po několika minutách se za chybu omluvil.
Bohužel se ale nechal tahat programátorem za fusekli a včera pozdě večer poněkud předčasně napsal, že programátor chybu „dnes odpoledne opravil a posílá své pozdravy“. Chyba opravena stále není a dokonce roste, ze 101 součet vyrostl na 102 procenta.
Neopravená chyba je nejen ve verzi grafu pro Facebook, ale i na home page Mikroblogy.cz. Zároveň si ale kladu otázku, kam se v grafu pro Facebook poděli ti, kteří v hlasování zvolili volbu Nevím nebo Možná?
Jan Řežáb, „specialista na mobilní řešení a provozovatel několika světových portálů o mobilních řešení“, by potřeboval zřejmě lekci nejen z netikety…
Grafy jsou jiné, nesouvisí – jedna je anketa a výpočet z hlasujících neregistrovaných uživatelů na Mikroblogy.cz (přímo přes www.mikroblogy.cz) a jedna je pouze statistika z Facebooku (www.mikroblogy.cz/fb). Produktově - je to tam i napsáno - u jednoho je to STATITSIKA a u jedné ANKETA.
Je to nelogické, opravíme to – díky moc za připomínku.
Rád bych Janka požádal, aby nám všem programátorům amatérům nabídl algoritmus, který pro libovolný počet (nebo řekněme do 10) možných odpovědí zajistí, aby při zobrazování statistik byl součet procentuálních výsledků jednotlivých možností roven 100%.
Mě žádný jednoduchý algoritmus nenapadá, resp. zejména mě nenapadá, jak současně zabránit tomu, aby se stalo, že například budou-li pro možnosti A, B, C a D hlasovat ze 7 hlasujících vždy dva (pro variantu D pak jen jeden), tak aby se nestalo, že bude graf ukazovat například:
Odpověď A: 2 hlasy (28%)
Odpověď B: 2 hlasy (29%)
Odpověď C: 2 hlasy (28%)
Odpověď D: 1 hlas (15%)
... obecně totiž vždycky dojde k tomu, že na určitém desetinném místě číslo "utínám", a pak musím buď průběžně číslo přibližovat k nějakému ze sousedních, abych průběžně vyvažoval zaokrouhlovací chybu, nebo mi na konci něco chybí či přebývá. A jak asi uznáte při pohledu na modelový příklad, rozpor v procentech u možností A B C vypadá diovně, stejně jako to, že při porovnání odpovědí A a D se zdá, že hlasy mají hodnotu 15 nebo taky jen 13 procent...
Mějme anketu se třemi odpověďmi. Tvrdíte, že pro malé počty hlasujících nemá smysl procenta uvádět, tak já budu velkorysý a hlasujících bude 1000. Pro variantu A hlasovalo 333 lidí, pro B 333 a pro C 334. Jak má podle vás správně vypadat procentní vyjádření, aby součet dal 100 %? A pokud podle vás má programátor švindlovat a k C přidat jedno procento, jak mělo vypadat před posledním hlasujícím, kdy hlasovalo 999 lidí – vždy přesně třetina (333) pro každou variantu? V takovém případě budou jakékoli hodnoty vyjádřené zaokrouhlený desetinným číslem, které dají dohromady 100 %, chybné – z čísel 3 × 33 % každý správně pochopí, že počet hlasů pro všechny tři varianty je vyrovnaný. Jakmile někam to procento navíc přidáte, vyjde vám sice součet 100 %, ale vzájemné poměry budou špatně. A o vzájemné poměry jde především, ne o celkový součet…
Filipe, díky za příspěvek, takže si to shrňme:
1. V postu jsem kritizoval výsledný graf na Mikroblogy.cz, který z nepochopitelných důvodů v součtu dosáhl 101 a 102 %. Zde nešlo o chybu vzniklou ze zaokrouhlování, ale o evidentní chybu programátora, který použil mezivýsledky odjinud, nikoli zaokrouhlená procenta.
2. Programátor v [6] požadoval algoritmus řešení pro případ s malým počtem respondentů a požadovaným výstupem v celých procentech a SÁM si doplnil podmínku na součet 100 %. Moje rada pro tento případ byla jasná: nepoužívat v takovém případě procenta.
3. Algoritmy pro úpravu tabulek, aby součet procent "seděl", se běžně používají desítky let (to si pamatuji, ale možná už i stovky), obvykle ale v případě procent udávaných s jedním nebo dvěma desetinnými místy (někdy je použitý algoritmus zcela primitivní). Požadavek na součet 100 % je ale především "estetický".
4. A nyní se teprve dostávám k vašemu dotazu: neřešíme matematickou úlohu, ale grafický výstup pro uživatele a dáváme si určitá kritéria jeho kvality či validity. Tedy pokud chceme jednoduchý výstup v celých procentech a chceme-li současně součet 100 % (upozorňuji opět, že já na něm striktně netrvám), dostaneme se v určitých případech do úzkých. Zde máme na výběr z několika možností: výsledky upravíme jen v případech, kde nedojde ke zkreslení (například v případě, že nám jde především o vzájemné poměry). V případě, že zároveň nezveřejňujeme konkrétní počty a výstup je dynamický, přidání jednoho procenta k nejvyšší hodnotě nemůže být podle mne na škodu, protože zdůrazní nejčastější výsledek (i když jde třeba o jeden hlas z tisíce). Další možností je v takovém případě "zjemnit" měřitko a zobrazit desetinné místo.
[17] Pro dvě možné odpovědi není problém zaokrouhlovací chybou dosáhnout součtu 101 %, to stále ještě mohla být chyba zaokrouhlování. Zjemnit měřítko nepomáhá – když zaokrouhluju na jednotky procent, logiky budu mít v součtu chybu v řádu jednotek procent. Když budu zaokrouhlovat na desetinu procenta, ta chyba bude opět v řádu desetiny procenta. Při skóre 333 : 333 : 333 není kam tu jedničku přidat, všechny tři varianty dostaly přesně stejný počet hlasů. Z neznalosti základních principů matematiky a zaokrouhlování bych tedy nepodezíral programátora, ale toho, kdo u zaokrouhlených hodnot vyžaduje součet 100 %.
Ten požadavek na součet 100 % nechápu. Když mi někdo napíše, že poměry jsou 35 : 72 : 123 nebo 7423 : 186 : 12407, nepředstavím si pod tím nic, a asi nejsem sám. Pokud mi totéž někdo vypíše pomocí procent, hned z toho vidím, v jakém jsou jednotlivé odpovědi přibližně poměru. Sčítat do stovky to nepotřebuju, stačí mi, že součet je přibližně sto.
S tím, že jde o chybu zaokrouhlování jste přišel vy – z dnešního obrázku je patrné, že nejde ani o zaokrouhlovací chybu při přepočtu z hlasů na procenta, ani o chybu v zaokrouhlování již jednou zaokrouhlených čísel. Pokud upozorňujete znova na součet 102 %, vede to čtenáře (zvlášť když četl minulý příspěvek) zase k chybě zaokrouhlování. Lepší by však bývalo bylo napsat, že jste se minule mýlil a chyba není v zaokrouhlování, ale jde o nějakou závažnější chybu.
[18] "Pro dvě možné odpovědi není problém zaokrouhlovací chybou dosáhnout součtu 101 %" - prosím o příklad, jak?
"Zjemnit měřítko nepomáhá" - takže použijte v mém "algoritmu" opět volbu, neopravovat nebo opět zjemnit ;-)
"Ten požadavek na součet 100 % nechápu." - zeptejte se Programátora, proč ho chtěl v našem případě řešit. Ale s tímto požadavkem jsem se opakovaně v mé programátorské praxi setkal a musel jsem ho řešit.
"že jde o chybu zaokrouhlování jste přišel vy" - napsal jsem "Poslední ukázkou je nezvládnutý graf na Mikroblogy.cz pro Facebook, kde programátor neumí zaokrouhlovat a nevadí mu výsledných celkových 101 %." a pokud použijeme běžné funkce pro zaokrouhlování, tak u součtu dvou zaokrouhlených výsledků v celých procentech nemůže dát součet NIKDY ani 101 a ani 102 procent. Navíc pokud byl poměr 11:0, tak mi žádné zaokrouhlení nedá 101%!
"Pokud upozorňujete znova na součet 102 %, vede to čtenáře (zvlášť když četl minulý příspěvek) zase k chybě zaokrouhlování. " - proboha, proč?
17) haha, no, me to treba vadi, protoze to bije do oci a trochu se ztraci vyznam 'per cent' a vypada to skolacky. algoritmy, ktere daji za vysledek vzdy 100% samozrejme existuji a lze jich vytvorit nekonecne mnoho:) pokud vysledky ankety zobrazujeme v procentech, bude to tak jako tak stejne hodnota orientacni a uprimne nedulezita, nejedna se o financni vypocet ci tak neco, kde bude lip vypadat soucet rovny 100%, i kdybych mel k jednomu ze 3 rovnych vysledku v percentualnim vyjadreni zakroutit krkem. reseni je mnoho a pokud nekoho nenapadaji, podeziral bych ho ze ztraty kreativity;)
Co je na mém příspěvku [6] hrubého, to netuším. Vidím hrubost v blogspotu (výsměch je forma hrubosti a doporučování, že by si měl kdosi zopakovat nejen Netiketu mi připadá jako forma výsměchu), ale já jsem Janka jen požádal, aby nám naznačil, jak by to dělal on. Nedozvěděl jsem se to, místo toho mi bylo doporučeno používat selský rozum, což implikuje, že ho nepoužívám, tedy opět argumentace "ad hominem" ("Jseš blbej, nepoužíváš selský rozum"). Zeptal jsem se znovu, upřesnil jsem dotaz, ale opět mi nebylo odpovězeno věcně.
Ale zřejmě má Janek nějaký jiný názor na to, jak by měly fungovat internetové diskuze -- místo tématu se zabývá osobami/osobnostmi, doporučuje jim školu nebo používání takového či onakého rozumu. Za zvláště úsměvné považuji doporučení (pro programátory) "nehledat algoritmus". To jako mají programátoři programovat bez algoritmů? Nebo jak tomu rozumět?
Procenta, jak vám naznačil Filip, jsou fajn k získání okamžitého přehledu; je velmi jednoduché pomocí procent zjistit, že určitá volba vyhovuje nadpoloviční většině, nebo čtvrtině, nebo sotva desetině, účastníků, a výhodou je - neříkám tím určitě nic objevného - že jak se mění velikost množiny, zůstávají hodnoty v procentech stále příjemně malé. Počítat, v jakém poměru vůči sobě jsou čísla
1 297 224
a
854 912
, to už tak snadné není, na první pohled pouze vidíte, že to druhé je menší, a pokud třetí volba má
442 315 hlasů,
tak není tak jednoduché poznat, zda ty dvě méně populární volby v součtu přebíjejí tu nejpopulárnější, či nikoliv, zatímco z 48%, 25% a 24% to zjistíte výrazně rychleji.
A jakmile se někdo rozhodne, že svým čtenářům / návštěvníkům zprostředkuje určité výsledky v pohodlnější, procentuální formě, narazí na problém, co dělat s tou výsečí, která při zaokrouhlování vzniká -- protože nenajde-li se Janek, pošklebující se součtu 102%, určitě se najde Jinek, pošklebující se součtu 99%.
Mimochodem - tohle NENI chyba programatora. Je to chyba testovani. Ale rozhodne ne programatora. Kazdy chape, ze programatori delaji (nekdy i trivialni) chyby. Tak to proste je. Nikdy se to nezmeni, nikdo s tim pomoci sebelepsi metodiky nic neudela. Je to chyba testeru, popripade produkce.
*Algoritmy pro úpravu tabulek, aby součet procent "seděl", se běžně používají desítky let (to si pamatuji, ale možná už i stovky), obvykle ale v případě procent udávaných s jedním nebo dvěma desetinnými místy (někdy je použitý algoritmus zcela primitivní). Požadavek na součet 100 % je ale především "estetický"*
OK, Janku, tak prosím:
Počet hlasů: Procent:
333333 = 33.33%
333333 = 33.33%
333333 = 33.33%
Celkem: 99.99%
Prosím, OPRAV tuto jednoduchou tabulku tak, jak by ji, podle tebe, opravil libovolný z těch opravovacích algoritmů, aby esteticky seděl součet 100%.
[19] -- Pro dvě možné odpovědi není problém zaokrouhlovací chybou dosáhnout součtu 101 %" - prosím o příklad, jak?
Kdykoli, kdy máte v obou údajích 5 desetin. Takže třeba 0,5 % a 99,5 %.
-- Ale s tímto požadavkem jsem se opakovaně v mé programátorské praxi setkal a musel jsem ho řešit.
A řešením je záměrně uvádět falešné údaje? Nebylo by lepší tomu, kdo to požaduje, vysvětlit základy zaokrouhlování?
-- pokud použijeme běžné funkce pro zaokrouhlování, tak u součtu dvou zaokrouhlených výsledků v celých procentech nemůže dát součet NIKDY ani 101 a ani 102 procent
Těch 101 tam radši nevidím…
-- "Pokud upozorňujete znova na součet 102 %, vede to čtenáře (zvlášť když četl minulý příspěvek) zase k chybě zaokrouhlování. " - proboha, proč?
Protože jedinou příčinou chyby, kterou jste nabídl, je zaokrouhlování?
[20, 29] jednoduchý algoritmus, který napadne snad každého, je nepočítat každou hodnotu jako podíl z celku, ale jako podíl ze zbývajících procent.
Na začátku mám 100 dílů. A=B=C=333333, takže A/(A+C+C) = 1/3, tj. po zaokrouhlení 33 %. Zbývá mi k rozdělení 67 dílů. Podíl je B/(B+C) = 2/3, 2/3 z 67 dílů je po zaokrouhlení 34, takže napíšu 34 procent. Zbývá 33 dílů, ty mám rozdělit na C/C = 1, tj. napíšu 33 %.
Ovšem jako každá úprava výsledků na má jednu „drobnou“ nevýhodu – pro stejné hodnoty hlasování dostanete různé hodnoty procent. Otázka je, k čemu mají prezentované výsledky sloužit – zda pro porovnání hodnot, nebo pro procvičení sčítání do stovky. Z toho důvodu bych se na sčítače vykašlal a nechal zobrazovat pouze zaokrouhlené hodnoty, bez nějakého „estetického“ falšování – ať se sčítači místo sčítání raději doučí něco o zaokrouhlování.
Filipe, dostal jste mne ;-) Už stárnu..., ale v komentářích u původního blogpostu jsem tuhle chybu neudělal. Ale ještě stručně a přehledně:
1. Stále platí původní výtky z obou blogpostů: 101 % při 11 hlasech z 11 je chyba programátora, stejně jako součet 102 %.
2. Některým lidem některé věci prostě nevysvětlíte. Ale takové úpravy se v době papírových výstupů běžně dělaly, ostatně bylo i tzv. bankovní zaokrouhlování, kdy se u čísel s 5 na konci zaokrouhlovalo v případě předchozí liché cifry dolů a v případě sudé nahoru (nebo naopak?).
3. Pokud upozorňuji na součet 102 %, upozorňuji především na chybu ve zpracování dat. V komentářích k původnímu blogpostu jsem to vlastně napsal...
4. Se závěrem souhlasím. Hledání algoritmu ale nebyl tak úplně můj nápad.
Bankovní zaokrouhlování bylo nastaveno tak, aby v případě rozhodné cifry 5 byla poslední platná číslice zaokrouhleného čísla sudá (43.5 ==> 44, 44.5 ==> 44).
Nevím ale, jak by to řešilo tento problém, pořád hrozí, že 45.5%, 45.5% 9% dá po zaokrouhlení na celá procenta součet 101. Podobně zaokrouhlování 45.155, 45.155 a 9.69 na dvě desetinná místa povede i při použití bankovního způsobu k výsledku 100.01...
Díky Filipovi, variantu "Procentuální hodnoty jsou zaokrouhleny, součet proto nemusí být přesně 100%" použiju.
… jsem z toho janek
Přečteno 59 096×
Přečteno 56 731×
Přečteno 55 970×
Přečteno 55 464×
Přečteno 52 879×