1. Faro

Nivel 6 · Desafío final: ¿qué tan grande debe ser la muestra?

La solicitud

De Laura Bennett, Jefa de Finanzas

“Los auditores quieren seguir muestreando pedidos a mano. Dime qué tan lejos puede quedar una muestra de 100 pedidos, demuéstralo y dime cuántos pedidos necesitarían para que el promedio quede a menos de $25 de la cifra real.”

Tu objetivo

Paso 1 de 3. Asigna a result un diccionario con "sd", la desviación estándar de completed["order_value"] (.std() de pandas), y "se", el error estándar de la media para una muestra de 100 pedidos (sd dividida entre la raíz cuadrada de 100), ambos redondeados a 2 decimales. Calcula se con la sd sin redondear.

  • Usa el DataFrame orderspendiente
  • Usa el DataFrame order_itemspendiente
  • Guarda un dict en resultpendiente

Paso 1 · tu código

Python

Cargando el editor…

    ResultadoVista previa de orders · presiona Ejecutar para ver el tuyo
    Vista previa de orders
    order_idcustomer_idorder_datestatuschannel
    10011252023-01-01 20:51:19completedweb
    10021562023-01-02 07:58:46completedweb
    1003222023-01-02 10:25:27completedmarketplace
    1004482023-01-02 11:21:51completedmarketplace

    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 orders · presiona Ejecutar para ver el tuyo
      Vista previa de orders
      order_idcustomer_idorder_datestatuschannel
      10011252023-01-01 20:51:19completedweb
      10021562023-01-02 07:58:46completedweb
      1003222023-01-02 10:25:27completedmarketplace
      1004482023-01-02 11:21:51completedmarketplace

      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 orders · presiona Ejecutar para ver el tuyo
        Vista previa de orders
        order_idcustomer_idorder_datestatuschannel
        10011252023-01-01 20:51:19completedweb
        10021562023-01-02 07:58:46completedweb
        1003222023-01-02 10:25:27completedmarketplace
        1004482023-01-02 11:21:51completedmarketplace

        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.

        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
        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
        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
        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
        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

        El error estándar

        En el nivel anterior, una muestra de 200 pedidos salió $28 por debajo de la media verdadera, y otras muestras cayeron entre $385 y $581. El error estándar (EE) le pone un solo número a esa oscilación: es la desviación estándar de la media muestral entre todas las muestras que podrías sacar.

        sd = completed["order_value"].std()   # 795.75, spread of single orders
        se = sd / math.sqrt(100)              # 79.57, spread of 100-order averages

        La fórmula es EE = sd / √n. Dos cosas la determinan: qué tan dispersos están los valores (sd) y cuántos muestreas (n). Baja con la raíz cuadrada de n, así que una muestra cuatro veces mayor solo reduce el error a la mitad.

        Comprobarlo con una simulación

        Es más fácil confiar en una fórmula cuando la has visto funcionar. Con toda la población en memoria puedes sacar muchas muestras y mirar directamente sus medias:

        rng = np.random.default_rng(42)
        values = completed["order_value"].to_numpy()
        means = pd.Series([rng.choice(values, size=100, replace=False).mean() for _ in range(1000)])
        means.std()   # close to the formula's 79.57

        La lista de 1,000 medias es la distribución muestral de la media. Su centro cae sobre la media verdadera, y su dispersión es el error estándar. También tiene mucha más forma de campana que los propios valores de pedido (sesgo 0.38 contra 3.95): los promedios de muchos valores suavizan la cola. Es el teorema del límite central en acción, y por eso un multiplicador de 1.96 funciona para medias incluso cuando los datos están sesgados.

        Del error estándar al margen de error

        Cerca del 95% de las medias muestrales cae a menos de 1.96 errores estándar de la media verdadera, así que el margen de error al 95% de una media muestral es 1.96 × EE. Para 100 pedidos eso es 1.96 × 79.57 ≈ ±$156. Da vuelta a la fórmula para planificar una muestra:

        n = math.ceil((1.96 * sd / 25) ** 2)   # orders needed for ±$25

        Redondea hacia arriba: una muestra de 3,892.1 pedidos no existe, y redondear hacia abajo no alcanzaría la meta.

        Lo que el error estándar no cubre

        El error estándar mide solo el error de muestreo aleatorio. Una muestra elegida de mala manera (los visitantes de email del nivel anterior) tiene un error estándar pequeño y un sesgo grande. Úsalo con muestras aleatorias.

        Errores comunes

        • Confundir sd y EE. La sd describe valores individuales y no se reduce con más datos; el EE describe un promedio y sí.
        • Esperar ganancias lineales. Duplicar la muestra reduce el error solo un 29%.
        • Mezclar ddof. .std() de pandas divide entre n − 1, np.std de numpy entre n. Elige uno y dilo; aquí todo usa pandas.
        • Redondear n hacia abajo. Los tamaños de muestra siempre se redondean hacia arriba.

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