1. Faro

Nivel 6 · Desafío final: redacta el informe de la prueba de primavera

La solicitud

De Jordan Reyes, Director de Marketing

“Antes de la prueba de fiestas hicimos una prueba de banner más pequeña en primavera, marzo y abril de 2025, con el mismo montaje. Nadie la analizó nunca como es debido. ¿Puedes redactar el informe, con un veredicto claro que pueda reenviar a Catherine?”

Tu objetivo

Paso 1 de 4. Asigna a result un DataFrame con una fila por grupo (A, luego B) y las columnas arm, sessions (conteo), conversions (sesiones con converted True) y rate (conversions / sessions, redondeada a 4).

  • Usa el DataFrame web_sessionspendiente
  • Muestra exactamente arm sessions conversions ratependiente
  • 2 filas, ordenadas como se pidependiente
Spring banner test, conversion rate per arm
Spring banner test, conversion rate per arm0%1%2%3%4%A: no banner: 3.8%3.8%A: no bannerB: banner: 3%3%B: bannerArmSessions that converted
Spring banner test, conversion rate per arm0%1%2%3%4%A: no banner: 3.8%3.8%A: no bannerB: banner: 3%3%B: bannerArmSessions that converted

1,068 sessions in each arm. The banner arm converted less often. Your job is to say whether that gap means anything.

Ver los números
ArmSessions that converted
A: no banner3.8%
B: banner3%

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.

        Paso 4 · 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

          Los cuatro números de un informe

          Un informe de prueba responde cuatro preguntas, en este orden:

          1. ¿Fue sana la prueba? La tabla de grupos: sesiones por grupo (la revisión de proporción de muestra) y conversiones.
          2. ¿Qué pasó? El aumento, absoluto y relativo.
          3. ¿Qué tan seguros estamos? El intervalo de confianza del 95% y el valor p.
          4. ¿Qué podía haber visto la prueba? El efecto mínimo detectable, y el veredicto.

          Construiste las tres primeras para la prueba de fiestas. La prueba de primavera es más pequeña: 1,068 sesiones por grupo frente a 2,604, y por eso importa tanto la cuarta pregunta.

          Efecto mínimo detectable

          La potencia es la probabilidad de que una prueba detecte un efecto que de verdad existe. El efecto mínimo detectable (MDE) es el efecto más pequeño que la prueba detecta con una potencia elegida, normalmente 80%, al nivel habitual del 5%:

          nd = NormalDist()
          mde_abs = (nd.inv_cdf(0.975) + nd.inv_cdf(0.8)) * math.sqrt(2 * p_a * (1 - p_a) / n_a)
          mde_rel = mde_abs / p_a      # about 0.61

          Con la muestra de primavera, solo un cambio de cerca del 61% en la conversión tenía una probabilidad razonable de aparecer. Los banners, los colores de botones y los cambios de texto suelen mover la conversión unos pocos por ciento. Esta prueba era demasiado pequeña para su pregunta antes de empezar, y es mejor decirlo que dejar que un resultado plano se lea como “el banner no hace nada”.

          La misma fórmula responde la pregunta de planificación al revés: fija el aumento que te importa y despeja las sesiones que necesitas. Así evitas hacer la próxima prueba con poca potencia.

          Redactar el veredicto

          Fija la regla de decisión antes de mirar: lanzar ante una ganancia significativa, parar ante una pérdida significativa, y en cualquier otro caso llamarlo no concluyente. Entonces el veredicto se calcula, no se discute, y el informe para Jordan cabe en tres frases:

          “El grupo del banner convirtió 3.00% frente a 3.84% (−0.84 puntos, −22%); el intervalo del 95% va de −2.38 a +0.70 puntos, p = 0.28. Veredicto: no concluyente. Con 1,068 sesiones por grupo la prueba solo podía detectar cambios de cerca del 61%, así que no puede descartar un efecto típico de un banner en ninguna de las dos direcciones.”

          Errores comunes

          • Empezar con el aumento relativo. “−22%” solo suena a desastre. Con su intervalo es un encogimiento de hombros.
          • Tratar “no concluyente” como “sin efecto”. Una prueba con poca potencia que no encuentra nada ha aprendido muy poco. Di qué tan grande podría haber sido el efecto que habría encontrado.
          • Escribir el veredicto a mano. Si la regla está escrita en código, cualquiera puede volver a ejecutarla y obtener la misma conclusión, incluso cuando habría preferido otra.
          • Reutilizar la conclusión de fiestas. La temporada, la mezcla de tráfico y el tamaño de la muestra son distintos. Cada prueba tiene su propio informe.

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