1. Faro

Nivel 2 · Percentiles para el umbral de envío gratis

La solicitud

De Daniel Brooks, Jefe de Operaciones

“Los pedidos de $75 o más se envían gratis. Finanzas quiere subir el umbral a $100. Antes de discutir, necesito ver dónde caen realmente nuestros pedidos: los puntos de cuartil del valor de pedido, la línea del 10% superior y cuántos pedidos quedan hoy por debajo de $75.”

Tu objetivo

Asigna a result un diccionario con los percentiles 25, 50, 75 y 90 de completed["order_value"] bajo las claves "p25", "p50", "p75", "p90" (cada uno redondeado a 2), y "share_under_75": la proporción de pedidos con un valor de pedido menor a 75, como fracción entre 0 y 1 redondeada a 4.

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

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

    Qué dice un percentil

    El percentil p es el valor por debajo del cual cae el p% de los datos. El percentil 25 (P25) del valor de pedido es el pedido que queda a un cuarto del camino en la lista ordenada; el 50 es la mediana; el 90 es donde empieza el 10% superior. En pandas todos son un único método:

    v = completed["order_value"]
    v.quantile(0.25)    # 93.99
    v.quantile(0.90)    # 1345.77
    v.quantile([0.25, 0.5, 0.75, 0.9])   # several at once, as a Series

    Los estadísticos dicen cuantil para la fracción (0.9) y percentil para el porcentaje (90). Es la misma idea.

    Leer una distribución con cuatro números

    En los pedidos completados de Harbor & Pine: P25 $93.99, mediana $268.94, P75 $659.87, P90 $1,345.77. Las brechas crecen a medida que subes: $175 de P25 a la mediana, $391 hasta P75, $686 hasta P90. Brechas que se ensanchan hacia arriba son la firma de una columna sesgada a la derecha, la misma forma que mostró el histograma del nivel 1. Una columna simétrica tendría brechas más o menos iguales a ambos lados de la mediana.

    Los percentiles también resisten a los valores atípicos. Un pedido de $11,000 cambia la media; no mueve P25 ni P50 en absoluto.

    Proporciones bajo una línea

    La pregunta opuesta, “¿qué proporción de pedidos está por debajo de $75?”, se responde con una comparación y una media:

    (v < 75).mean()    # 0.2097, about 21% of orders

    v < 75 da True o False por pedido. Python cuenta True como 1 y False como 0, así que la media es la proporción de True. Este truco sirve para cualquier condición: (v >= 1000).mean() es la proporción de pedidos de $1,000 o más.

    Para la reunión de Daniel: uno de cada cinco pedidos está por debajo del umbral actual. Subirlo a $100 pasa todos los pedidos entre $75 y $100 de “envío gratis” a “paga envío”, y puedes medir ese grupo de la misma manera.

    Errores comunes

    • quantile(25) en lugar de quantile(0.25). pandas espera una fracción entre 0 y 1.
    • Leer P90 como una proporción del máximo. P90 es un valor de los datos, no el 90% del pedido más grande.
    • Confundir “por debajo” con “igual o por debajo”. v < 75 y v <= 75 difieren en los pedidos de exactamente $75.00. Ajústate a la regla de negocio: el envío gratis aplica desde $75, así que “paga envío” es v < 75.
    • Contar en lugar de proporcionar. (v < 75).sum() es un conteo de pedidos. Di cuál de los dos reportas.

    Nota de entrevista

    Espera “¿cuál es la diferencia entre la mediana y el percentil 50?” (ninguna) y “¿cómo describirías esta columna sin un gráfico?” Un resumen de cinco números (mínimo, P25, mediana, P75, máximo) es la respuesta clásica, y describe() te lo imprime.

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