  {"id":3871,"date":"2026-06-25T09:34:36","date_gmt":"2026-06-25T08:34:36","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=3871"},"modified":"2026-06-25T09:51:02","modified_gmt":"2026-06-25T08:51:02","slug":"conversion-rate-bayesiano","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/conversion-rate-bayesiano\/","title":{"rendered":"Stima bayesiana di un conversion rate: quanto possiamo fidarci dei pochi dati che abbiamo"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Abbiamo avuto modo di esaminare, nell&#8217;articolo sulle <a href=\"https:\/\/www.gironi.it\/blog\/statistica-bayesiana\/\">fondamenta della statistica bayesiana<\/a>, come l&#8217;aggiornamento bayesiano funzioni con la simulazione: generiamo campioni dal prior, simuliamo i dati, filtriamo. Un metodo intuitivo, ma che si scontra con un limite pratico non appena i dati diventano minimamente numerosi.<br> In questo articolo passiamo alla soluzione analitica elegante che l&#8217;approccio bayesiano mette a disposizione per uno dei problemi pi\u00f9 comuni nell&#8217;analisi di marketing: stimare un conversion rate con pochi dati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il problema nasce sempre allo stesso modo. Un piccolo e-commerce ha raccolto 23 conversioni su 412 sessioni. Il tasso grezzo \u00e8 23\/412 \u2248 5,6%. Un numero preciso, apparentemente. Ma quanta fiducia gli diamo? Potremmo trovarci davanti al 3% vero o al 9% vero \u2014 con quel campione, non lo sappiamo. La stima puntuale &#8220;5,6%&#8221; non dice niente sulla propria incertezza.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Di cosa parleremo<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Il modello Beta-Binomiale: perch\u00e9 la Beta \u00e8 la distribuzione naturale per un conversion rate<\/li><li>Prior non informativo: lasciar parlare i dati<\/li><li>Prior informativo: usare lo storico senza barare<\/li><li>Il posterior di oggi \u00e8 il prior di domani<\/li><li>Prova tu<\/li><li>Per approfondire<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Dal click singolo al tasso: il modello Beta-Binomiale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni sessione \u00e8 un evento binario: l&#8217;utente converte oppure no.<br> Con \\( n \\) sessioni e \\( k \\) conversioni, il meccanismo generativo \u00e8 binomiale. Il parametro che vogliamo stimare \u2014 il vero tasso di conversione \\( \\theta \\) \u2014 \u00e8 una proporzione: un valore tra 0 e 1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando il prior su \\( \\theta \\) \u00e8 una <a href=\"https:\/\/www.gironi.it\/blog\/la-distribuzione-beta-spiegata-semplice\/\">distribuzione Beta<\/a> e i dati sono binomiali, accade qualcosa di molto comodo: <strong>il posterior \u00e8 ancora una distribuzione Beta<\/strong>. Questo si chiama prior <em>coniugato<\/em>, e significa che l&#8217;aggiornamento bayesiano si riduce a una semplice operazione aritmetica sui parametri.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La regola di aggiornamento \u00e8 questa: se il prior \u00e8 Beta(\u03b1, \u03b2), dopo aver osservato \\( k \\) conversioni su \\( n \\) sessioni il posterior \u00e8:<\/p>\n\n\n\n\\( Beta(\\alpha + k,\\ \\beta + (n &#8211; k)) \\\\ \\)\n\n\n\n<p class=\"wp-block-paragraph\">In parole: aggiungiamo le conversioni osservate ad \u03b1 e i fallimenti osservati a \u03b2. Il prior Beta(\u03b1, \u03b2) raccoglie in \u03b1 le &#8220;conversioni gi\u00e0 viste&#8221; (o una credenza equivalente) e in \u03b2 i &#8220;non-click&#8221;. Ogni nuovo dato aggiorna entrambi i contatori.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prior non informativo: lasciar parlare i dati<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il prior pi\u00f9 neutro possibile su una proporzione \u00e8 la distribuzione uniforme su [0, 1], che corrisponde a Beta(1, 1): tutti i valori del tasso sono considerati ugualmente plausibili prima di vedere i dati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il nostro caso: 23 conversioni su 412 sessioni (389 non-conversioni).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Calcoliamo il posterior in R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Dati osservati\nconv &lt;- 23; sess &lt;- 412; nonconv &lt;- sess - conv\n\n# Prior NON informativo: uniforme Beta(1,1)\na0 &lt;- 1; b0 &lt;- 1\na1 &lt;- a0 + conv; b1 &lt;- b0 + nonconv      # posterior Beta(24, 390)\n\ncat(\"Non-informativo: media =\", round(a1\/(a1+b1), 4), \"\\n\")\ncat(\"  CI 95% =\", round(qbeta(c(.025,.975), a1, b1), 4), \"\\n\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output: media = 0.058, CI 95% = [0.0376, 0.0824].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Il posterior Beta(24, 390) ha media 5,8% e credible interval al 95% compreso tra 3,8% e 8,2%.<\/strong><br> Il credible interval bayesiano non \u00e8 un esercizio statistico astratto: significa direttamente che c&#8217;\u00e8 il 95% di probabilit\u00e0 che il vero tasso di conversione sia tra il 3,8% e l&#8217;8,2%. Non una frequenza su ripetizioni infinite \u2014 una probabilit\u00e0 diretta sul parametro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con 412 sessioni, l&#8217;incertezza \u00e8 ancora apprezzabile: quasi 5 punti percentuali di ampiezza. La stima puntuale 5,6% era fuorviante nella sua precisione.<\/p>\n\n\n\n<p class=\"has-light-gray-background-color has-background wp-block-paragraph\">Un avvertimento: il credible interval bayesiano e l&#8217;intervallo di confidenza frequentista hanno numeri simili ma significati profondamente diversi. Il 95% frequentista \u00e8 una propriet\u00e0 della procedura (&#8220;se ripetessi l&#8217;esperimento 100 volte, 95 intervalli conterrebbero il vero parametro&#8221;); il 95% bayesiano \u00e8 un&#8217;affermazione diretta sul parametro nel caso specifico che stiamo analizzando.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prior informativo: usare lo storico senza barare<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il prior non informativo \u00e8 il punto di partenza onesto quando non sappiamo nulla. Ma spesso sappiamo qualcosa: anni di campagne, storico del settore, benchmark di categoria.<br> Il nostro e-commerce ha uno storico di quattro stagioni con un conversion rate medio intorno al 4%. Come traduciamo questa conoscenza in un prior?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La distribuzione Beta(8, 192) ha media esattamente 8\/(8+192) \u2248 4% e \u2014 grazie alla somma \u03b1+\u03b2 = 200 \u2014 ha una concentrazione che equivale a &#8220;credere&#8221; ai nostri dati quanto si crede a 200 sessioni fittizie di storico. Non \u00e8 un numero arbitrario: \u00e8 una scelta dichiarata e verificabile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Calcoliamo il posterior informativo in R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Prior INFORMATIVO da storico: media ~4% -&gt; Beta(8, 192)\na0i &lt;- 8; b0i &lt;- 192\na1i &lt;- a0i + conv; b1i &lt;- b0i + nonconv  # posterior Beta(31, 581)\n\ncat(\"Informativo: media =\", round(a1i\/(a1i+b1i), 4), \"\\n\")\ncat(\"  CI 95% =\", round(qbeta(c(.025,.975), a1i, b1i), 4), \"\\n\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output: media = 0.0507, CI 95% = [0.0347, 0.0694].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Il posterior informativo Beta(31, 581) d\u00e0 media 5,1% e credible interval al 95% tra 3,5% e 6,9%.<\/strong><br> Due cose da notare. Prima: la media scende leggermente da 5,8% a 5,1% \u2014 il prior &#8220;tira&#8221; la stima verso il 4% dello storico. Seconda: l&#8217;intervallo si stringe (da 4,6 a 3,4 punti percentuali) \u2014 lo storico vale come informazione aggiuntiva, quindi l&#8217;incertezza cala.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con pochi dati, il prior informativo aiuta: aggiunge informazione dove i dati non bastano. Con molti dati \u2014 migliaia di sessioni \u2014 il prior viene <em>sommerso<\/em> dai dati e la differenza tra prior informativo e non informativo diventa trascurabile. Questa \u00e8 una caratteristica fondamentale dell&#8217;inferenza bayesiana: <strong>il prior conta quando i dati sono pochi; i dati vincono sempre, alla lunga<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Il posterior di oggi \u00e8 il prior di domani<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;eleganza pi\u00f9 pratica dell&#8217;approccio bayesiano \u00e8 l&#8217;aggiornamento sequenziale. Dopo un mese arrivano nuovi dati: 15 conversioni su 300 sessioni aggiuntive. Non dobbiamo ricominciare da zero \u2014 il posterior che abbiamo calcolato <em>diventa<\/em> il nuovo prior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aggiorniamo in R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Nuovi dati: 15 conversioni su 300 sessioni aggiuntive\nconv2 &lt;- 15; sess2 &lt;- 300\na2 &lt;- a1i + conv2; b2 &lt;- b1i + (sess2 - conv2)   # Beta(46, 866)\n\ncat(\"Dopo update: media =\", round(a2\/(a2+b2), 4), \"\\n\")\ncat(\"  CI 95% =\", round(qbeta(c(.025,.975), a2, b2), 4), \"\\n\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output: media = 0.0504, CI 95% = [0.0372, 0.0655].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tre stadi a confronto:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Stadio<\/th><th>Dati accumulati<\/th><th>Media<\/th><th>CI 95%<\/th><\/tr><\/thead><tbody><tr><td>Prior puro (prima dei dati)<\/td><td>\u2014<\/td><td>4,0%<\/td><td>[1,8%, 7,1%]<\/td><\/tr><tr><td>Dopo primo mese<\/td><td>23\/412<\/td><td>5,1%<\/td><td>[3,5%, 6,9%]<\/td><\/tr><tr><td>Dopo secondo mese<\/td><td>38\/712<\/td><td>5,0%<\/td><td>[3,7%, 6,6%]<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Il credible interval si \u00e8 ristretto<\/strong> ad ogni stadio: 5,3 punti percentuali nel prior puro, 3,4 dopo il primo mese, 2,8 dopo l&#8217;aggiornamento. La media \u00e8 rimasta stabile: i nuovi dati confermano la stima precedente invece di spostarla, e l&#8217;incertezza cala come atteso.<br> Questo \u00e8 il vero vantaggio operativo: non occorre aspettare che si accumuli un campione &#8220;abbastanza grande&#8221; prima di fare qualsiasi stima. Si parte da una stima incerta e la si affina progressivamente, con ogni nuovo dato.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Prova tu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un sito di lead generation ha un tasso di conversione storico intorno al 2%. Dopo una campagna di ottimizzazione, su 150 sessioni si osservano 8 conversioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1. Costruisci un <strong>prior informativo<\/strong> che rifletta il 2% storico: prova Beta(4, 196) \u2014 ha media esattamente 2%. 2. Calcola il <strong>posterior<\/strong> dopo le 8 conversioni su 150 sessioni. 3. Calcola il <strong>credible interval al 95%<\/strong>. 4. Calcola poi con <strong>prior non informativo<\/strong> Beta(1, 1): il posterior cambia molto? Perch\u00e9?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suggerimento: la formula \u00e8 sempre la stessa \u2014 <code>qbeta(c(.025, .975), a0 + conv, b0 + nonconv)<\/code>. L&#8217;unica cosa che cambia \u00e8 il punto di partenza.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Quello che abbiamo costruito finora \u00e8 la stima di un tasso su una singola variante. Il passo successivo \u00e8 confrontare due varianti \u2014 una pagina di controllo e una pagina modificata \u2014 e calcolare la probabilit\u00e0 bayesiana che una superi l&#8217;altra. \u00c8 esattamente quello che faremo nel prossimo articolo: l&#8217;A\/B test bayesiano.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Per approfondire<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se vuoi capire come il ragionamento bayesiano entra nelle decisioni pratiche \u2014 dalla previsione dei mercati alla stima dell&#8217;incertezza nei dati reali \u2014 <a href=\"https:\/\/www.amazon.it\/dp\/8860443865?tag=consulenzeinf-21\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Il segnale e il rumore<\/em><\/a> di Nate Silver \u00e8 il libro che consiglio. Silver dedica capitoli espliciti all&#8217;aggiornamento bayesiano, mostrandolo in contesti concreti (previsioni meteorologiche, politica, sport) che rendono immediato il concetto di &#8220;aggiornare le credenze con nuovi dati&#8221;. \u00c8 divulgativo ma rigoroso, e si legge d&#8217;un fiato.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Abbiamo avuto modo di esaminare, nell&#8217;articolo sulle fondamenta della statistica bayesiana, come l&#8217;aggiornamento bayesiano funzioni con la simulazione: generiamo campioni dal prior, simuliamo i dati, filtriamo. Un metodo intuitivo, ma che si scontra con un limite pratico non appena i dati diventano minimamente numerosi. In questo articolo passiamo alla soluzione analitica elegante che l&#8217;approccio bayesiano &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/conversion-rate-bayesiano\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Stima bayesiana di un conversion rate: quanto possiamo fidarci dei pochi dati che abbiamo&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[629],"tags":[],"class_list":["post-3871","post","type-post","status-publish","format-standard","hentry","category-statistica-it"],"lang":"it","translations":{"it":3871,"en":3872},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"Paolo Gironi","author_link":"https:\/\/www.gironi.it\/blog\/author\/autore-articoli\/"},"uagb_comment_info":0,"uagb_excerpt":"Abbiamo avuto modo di esaminare, nell&#8217;articolo sulle fondamenta della statistica bayesiana, come l&#8217;aggiornamento bayesiano funzioni con la simulazione: generiamo campioni dal prior, simuliamo i dati, filtriamo. Un metodo intuitivo, ma che si scontra con un limite pratico non appena i dati diventano minimamente numerosi. In questo articolo passiamo alla soluzione analitica elegante che l&#8217;approccio bayesiano&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=3871"}],"version-history":[{"count":3,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3871\/revisions"}],"predecessor-version":[{"id":3878,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3871\/revisions\/3878"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=3871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=3871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=3871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}