1. Faro

Nivel 6 · Desafío final: planifica la prueba del banner

La solicitud

De Jordan Reyes, Director de marketing

“El próximo año queremos probar un banner nuevo en la página de inicio contra el actual, y lo daríamos por ganador con un lift del 10% en conversión. ¿Puedes decirme cuántos visitantes necesitamos y cuánto tiene que durar la prueba? Yo esperaba dos semanas.”

Tu objetivo

Paso 1 de 3. Asigna a result un dict con "baseline", la tasa de conversión de 2025 de todas las sesiones redondeada a 4 decimales, y "daily_sessions", el número de sesiones de 2025 dividido entre 365, redondeado a 1 decimal.

  • Usa el DataFrame web_sessionspendiente
  • Guarda un dict en resultpendiente

Paso 1 · tu código

Python

Cargando el editor…

    ResultadoVista previa de web_sessions · presiona Ejecutar para ver el tuyo
    Vista previa de web_sessions
    session_idcustomer_idstarted_atdevicesource
    1NaN2023-01-01 23:02:24mobilepaid
    2182023-01-01 15:07:49desktoppaid
    3NaN2023-01-01 16:55:46desktopdirect
    4NaN2023-01-01 12:43:28mobileorganic

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    Paso 2 · tu código

    Python

    Cargando el editor…

      ResultadoVista previa de web_sessions · presiona Ejecutar para ver el tuyo
      Vista previa de web_sessions
      session_idcustomer_idstarted_atdevicesource
      1NaN2023-01-01 23:02:24mobilepaid
      2182023-01-01 15:07:49desktoppaid
      3NaN2023-01-01 16:55:46desktopdirect
      4NaN2023-01-01 12:43:28mobileorganic

      Mote revisa tu resultado

      Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

      Paso 3 · tu código

      Python

      Cargando el editor…

        ResultadoVista previa de web_sessions · presiona Ejecutar para ver el tuyo
        Vista previa de web_sessions
        session_idcustomer_idstarted_atdevicesource
        1NaN2023-01-01 23:02:24mobilepaid
        2182023-01-01 15:07:49desktoppaid
        3NaN2023-01-01 16:55:46desktopdirect
        4NaN2023-01-01 12:43:28mobileorganic

        Mote revisa tu resultado

        Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

        DataFrames

        Cargados como DataFrames de pandas, junto con pd y np.

        web_sessions40,000 filas · 7 columnas
        • session_idinteger
        • customer_idinteger
        • started_attimestamp
        • devicevarchar
        • sourcevarchar
        • pages_viewedinteger
        • convertedboolean
        Primeras 5 filas de web_sessions
        session_idcustomer_idstarted_atdevicesourcepages_viewedconverted
        1NaN2023-01-01 23:02:24mobilepaid1false
        2182023-01-01 15:07:49desktoppaid1false
        3NaN2023-01-01 16:55:46desktopdirect7false
        4NaN2023-01-01 12:43:28mobileorganic3false
        5NaN2023-01-01 13:06:21mobilesocial2false
        customers2,018 filas · 9 columnas
        • customer_idinteger
        • first_namevarchar
        • last_namevarchar
        • emailvarchar
        • cityvarchar
        • statevarchar
        • signup_datedate
        • segmentvarchar
        • referral_sourcevarchar
        Primeras 5 filas de customers
        customer_idfirst_namelast_nameemailcitystatesignup_datesegmentreferral_source
        1OwenHudsonowen.hudson@icloud.comSan FranciscoCA2022-06-02consumersearch
        2DouglasMendozadmendoza69@gmail.comAtlantaGA2022-06-02consumerNaN
        3HenryBrookshbrooks@lakesidecafe.comLos AngelesCA2022-06-04businessNaN
        4BrianGrahambgraham@bluecedarhomes.comSeattleWA2022-06-06businesspinterest
        5KyleJimenezkjimenez27@yahoo.comIndianapolisIN2022-06-07consumerNaN
        products120 filas · 8 columnas
        • product_idinteger
        • namevarchar
        • categoryvarchar
        • subcategoryvarchar
        • unit_pricedecimal
        • unit_costdecimal
        • launched_ondate
        • is_activeboolean
        Primeras 5 filas de products
        product_idnamecategorysubcategoryunit_priceunit_costlaunched_onis_active
        101Vale Velvet LoveseatFurnitureSofas1659.00NaN2023-09-11true
        102Alder Oak Coffee TableFurnitureTables919.00503.502024-05-16true
        103Orchard Rattan Dining ChairFurnitureChairs789.00429.872023-05-27true
        104Upland Oak BookcaseFurnitureStorage429.00214.702022-12-20true
        105Avery Leather Bed FrameFurnitureBeds449.00232.702021-08-31true
        orders12,000 filas · 7 columnas
        • order_idinteger
        • customer_idinteger
        • order_datetimestamp
        • statusvarchar
        • channelvarchar
        • shipping_feedecimal
        • coupon_codevarchar
        Primeras 5 filas de orders
        order_idcustomer_idorder_datestatuschannelshipping_feecoupon_code
        10011252023-01-01 20:51:19completedweb0.00NaN
        10021562023-01-02 07:58:46completedweb0.00NaN
        1003222023-01-02 10:25:27completedmarketplace4.99WELCOME10
        1004482023-01-02 11:21:51completedmarketplace4.99WELCOME10
        1005822023-01-02 11:43:36completedweb0.00WELCOME10
        order_items30,338 filas · 6 columnas
        • order_item_idinteger
        • order_idinteger
        • product_idinteger
        • quantityinteger
        • unit_pricedecimal
        • discount_pctdecimal
        Primeras 5 filas de order_items
        order_item_idorder_idproduct_idquantityunit_pricediscount_pct
        11001121931.990.00
        21001154311.990.00
        31002154411.990.00
        410021941149.000.00
        51002193219.990.00
        returns1,673 filas · 5 columnas
        • return_idinteger
        • order_item_idinteger
        • returned_ondate
        • reasonvarchar
        • refund_amountdecimal
        Primeras 5 filas de returns
        return_idorder_item_idreturned_onreasonrefund_amount
        1142023-01-10damaged83.69
        2422023-01-10wrong_item19.99
        31052023-01-14wrong_item10.99
        4242023-01-16changed_mind26.99
        51262023-01-16late20.99
        employees60 filas · 8 columnas
        • employee_idinteger
        • first_namevarchar
        • last_namevarchar
        • departmentvarchar
        • titlevarchar
        • manager_idinteger
        • hire_datedate
        • salaryinteger
        Primeras 5 filas de employees
        employee_idfirst_namelast_namedepartmenttitlemanager_idhire_datesalary
        1CatherineHaleExecutiveChief Executive OfficerNaN2016-03-01285000
        2RobertKimExecutiveChief Operating Officer12017-01-09235000
        3MeganCollinsSalesHead of Sales12018-04-16172000
        4ChloeGutierrezSalesAccount Executive32020-01-2172000
        5FrankBellSalesAccount Executive32023-05-2173000
        marketing_spend3,276 filas · 3 columnas
        • spend_datedate
        • channelvarchar
        • amountdecimal
        Primeras 5 filas de marketing_spend
        spend_datechannelamount
        2023-01-01paid492.99
        2023-01-01email37.38
        2023-01-01social200.53
        2023-01-02paid709.13
        2023-01-02email64.13

        La lección

        Planifica antes de lanzar

        Toda prueba A/B necesita tres números decididos antes de empezar: la tasa base (cómo convierte la versión actual), el lift mínimo que vale la pena detectar (el efecto mínimo detectable) y el tamaño de muestra que da una oportunidad justa de ver ese lift si es real. Si te saltas esto, o paras demasiado pronto (la trampa del peeking) o corres una prueba que nunca podría haber encontrado nada.

        Potencia y alfa

        Dos tasas de error entran en el plan:

        • alfa = 0.05: la tasa de falsos positivos que aceptas cuando no hay efecto real.
        • potencia = 0.80: la probabilidad de detectar el lift cuando es real. El otro 20% es un falso negativo: una mejora real que la prueba no ve.

        Cada una se convierte en un valor z de la curva normal: NormalDist().inv_cdf(0.975) ≈ 1.96 para un alfa de dos colas de 0.05, y NormalDist().inv_cdf(0.80) ≈ 0.84 para una potencia del 80%.

        La fórmula del tamaño de muestra

        Para dos tasas de conversión p0 (control) y p1 (la tasa que esperas ver), las sesiones necesarias por grupo son:

        n = (z_alpha + z_beta) ** 2 * (p0 * (1 - p0) + p1 * (1 - p1)) / (p1 - p0) ** 2

        La brecha p1 − p0 va al cuadrado en el denominador. Esa es toda la historia de las pruebas A/B en sitios pequeños: las tasas de conversión bajas hacen la brecha diminuta, y una brecha diminuta al cuadrado hace n enorme.

        Lo que la tienda puede pagar

        Con las 44.5 sesiones diarias de 2025 y una base de 3.08%, esto es lo que cuesta cada lift objetivo:

        lift a detectar sesiones por grupo días con todo el tráfico
        10% 51,752 2,329
        20% 13,530 609
        30% 6,275 283
        50% 2,445 111

        Incluso un lift del 50% necesita casi cuatro meses. Esto es normal en una tienda pequeña, y es la razón por la que las empresas grandes pueden probar colores de botones y las pequeñas no.

        Errores comunes

        • Lift relativo frente a absoluto. Un “lift del 10%” sobre una base de 3% significa 3.3%, no 13%.
        • Por grupo frente a total. La fórmula da un grupo. La prueba necesita los dos.
        • Planificar con un mes de mucho movimiento. Noviembre y diciembre convierten mejor y traen más tráfico; un plan hecho con cifras de temporada navideña subestima el tiempo que necesita una prueba de primavera. Usa un año completo.
        • Bajar el listón para que quepa en el calendario. Correr dos semanas “porque es lo que tenemos” no vuelve detectable un lift del 10%. Hace probable un resultado falso, en cualquier dirección.

        Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.