La solicitud

De Catherine Hale, Directora Ejecutiva
Tu objetivo
Paso 1 de 3. Asigna a result un dict de 2025 con tres enteros: "buyers" (clientes distintos con un pedido contabilizado en 2025), "new_customers" (de ellos, clientes cuyo primer pedido contabilizado de toda su historia está en 2025) y "returning_customers" (el resto).
- Usa el DataFrame
orderspendiente - Usa el DataFrame
order_itemspendiente - Guarda un dict en
resultpendiente
Paso 2 de 3. Asigna a result un dict de 2025, con cada valor redondeado a 2: "aov" (ingresos netos / pedidos contabilizados), "orders_per_buyer" (pedidos contabilizados / compradores distintos) y "revenue_per_buyer" (ingresos netos / compradores distintos).
- Usa el DataFrame
orderspendiente - Usa el DataFrame
order_itemspendiente - Guarda un dict en
resultpendiente
Paso 3 de 3. Con todos los pedidos contabilizados (2023–2025), asigna a result un DataFrame con una fila por segmento de cliente y las columnas segment, customers (clientes con un pedido contabilizado), orders_per_customer (redondeado a 2), ltv (ingresos netos por cliente, redondeado a 2) y revenue_share_pct (la participación del segmento en todos los ingresos netos × 100, redondeada a 2). Ordena por ltv, de mayor a menor.
- Usa el DataFrame
order_itemspendiente - Usa el DataFrame
returnspendiente - Muestra exactamente
segmentcustomersorders_per_customerltvrevenue_share_pctpendiente
Paso 1 · tu código
Cargando el editor…
Solución de referencia
| order_id | customer_id | order_date | status | channel |
|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace |
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
Cargando el editor…
Solución de referencia
| order_id | customer_id | order_date | status | channel |
|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace |
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
Cargando el editor…
Solución de referencia
| order_item_id | order_id | product_id | quantity | unit_price |
|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 |
| 2 | 1001 | 154 | 3 | 11.99 |
| 3 | 1002 | 154 | 4 | 11.99 |
| 4 | 1002 | 194 | 1 | 149.00 |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Catherine, y por qué
DataFrames
Cargados como DataFrames de pandas, junto con pd y np.
orders12,000 filas · 7 columnas
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NaN |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NaN |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
order_items30,338 filas · 6 columnas
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
returns1,673 filas · 5 columnas
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
customers2,018 filas · 9 columnas
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NaN |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NaN |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NaN |
products120 filas · 8 columnas
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NaN | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
employees60 filas · 8 columnas
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NaN | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 filas · 7 columnas
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NaN | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NaN | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NaN | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NaN | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 filas · 3 columnas
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
La lección
Qué va en una hoja única de clientes
Un equipo directivo hace las mismas tres preguntas sobre los clientes en cada ciclo de planeación: cuántos atendimos y cuántos eran nuevos, cuánto vale un cliente en un año y qué clientes sostienen el negocio. Cada bloque de este nivel responde una de ellas, y cada uno necesita las definiciones de este capítulo: solo pedidos contabilizados, ingresos netos después de descuentos y reembolsos, y un cliente es nuevo en el año de su primer pedido contabilizado.
Bloque 1: la base
Los compradores de 2025 son clientes distintos con un pedido contabilizado ese año. Separarlos en nuevos y recurrentes necesita el primer pedido contabilizado de cada cliente en todos los años, no solo en 2025; de lo contrario todos los compradores de 2025 parecen nuevos. Reporta los conteos, no solo la proporción: 641 clientes nuevos es un número sobre el que se puede construir un plan de marketing.
Bloque 2: valor por comprador
Tres totales dan tres razones: AOV (ingresos por pedido), pedidos por comprador e ingresos por comprador. La tercera es el producto de las dos primeras, lo que sirve como verificación cruzada: si tus ingresos por comprador no son iguales al AOV por la frecuencia, uno de los denominadores está mal. Los ingresos por comprador en un año son también el ladrillo del LTV predictivo del nivel 4.
Bloque 3: segmentos
Las comparaciones por segmento son métricas de clientes, así que colapsa los pedidos a una fila por cliente antes de agrupar por segmento. Agrupar los pedidos directamente por segmento da ingresos por pedido, que es otra pregunta. Pon la participación de ingresos junto al valor por cliente: un segmento puede valer seis veces más por cliente y aun así ser una minoría de los ingresos, o, como aquí, ser el 15 % de los clientes y más de la mitad de los ingresos.
Errores comunes
- Mezclar ventanas. Los bloques 1 y 2 son 2025; el bloque 3 es 2023–2025. Dilo en la diapositiva.
- Llamar “clientes adquiridos” a todos los compradores. Los compradores recurrentes fueron adquiridos en años anteriores y pertenecen a esas cohortes.
- Promedios sin conteos. Un valor por cliente significa poco hasta que el lector sabe a cuántos clientes cubre.
Nota de entrevista
Las entrevistas de caso suelen terminar con “¿qué le pondrías enfrente a la CEO?”. Tres bloques, cada uno con un número, su definición y una frase de significado, es una buena estructura. Agrega la advertencia que más importa: aquí, que unas pocas cuentas empresa sostienen los ingresos, así que perder una es un riesgo real.
¡Linterna encendida!
Practicaste: new customersaovpurchase frequencyltvsegmentreporting
- Resuelto
- Sin pistas
- Al primer intento
