La solicitud

De Jordan Reyes, Director de Marketing
Tu objetivo
Asigna a result un DataFrame con una fila por año (2023, 2024, 2025) y las columnas year, spend (total de marketing_spend.amount de ese año, todos los canales, redondeado a 2), new_customers (clientes cuyo primer pedido contabilizado cae en ese año) y cac (spend / new_customers, redondeado a 2, a partir del gasto sin redondear). Los pedidos contabilizados están construidos en el código inicial. Ordena por año.
- Usa el DataFrame
orderspendiente - Usa el DataFrame
marketing_spendpendiente - Muestra exactamente
yearspendnew_customerscacpendiente
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.
Lo que recibe Jordan, 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 |
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 |
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 |
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 |
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 |
La lección
El lado del costo de un cliente
El costo de adquisición de clientes (CAC) es lo que cuesta ganar un cliente nuevo:
CAC = acquisition spend in a period / new customers acquired in that period
El LTV dice lo que vale un cliente; el CAC dice lo que cuesta uno. Un negocio que paga más por adquirir a un cliente de lo que el cliente vale se encoge con cada venta.
CAC mixto
La versión más simple divide todo el gasto de marketing entre todos los clientes nuevos. Eso es el CAC mixto. En Harbor & Pine:
# year spend new_customers cac
# 0 2023 382190.45 574 665.84
# 1 2024 441894.83 525 841.70
# 2 2025 510641.32 641 796.63
El numerador y el denominador deben cubrir el mismo período, y el denominador son los clientes nuevos: personas cuyo primer pedido contabilizado cae en el año. Los clientes que ya compraban no fueron adquiridos con el gasto de este año.
¿Por qué no un CAC solo de pago?
La búsqueda de pago es $340,778.33 del gasto de 2025. Es tentador dividirla entre los clientes que vinieron
“de anuncios”. Pero Harbor & Pine solo conoce el canal de un cliente por una pregunta en el registro: 47
clientes nuevos de 2025 respondieron google_ads y 209 la dejaron en blanco. Si divides el gasto de pago
entre 47, el CAC de pago sale en $7,250.60, que es sobre todo una medida de quién llena formularios. El CAC
por canal necesita una atribución adecuada (capítulo 3); hasta entonces, el CAC mixto es el número
defendible, etiquetado como mixto.
Lo que esconde el CAC mixto
- Gasto que no es adquisición. El correo va sobre todo a clientes existentes. Incluirlo sube el CAC; excluirlo exige un juicio que debes dejar por escrito.
- Clientes orgánicos. Los amigos y la búsqueda traen clientes gratis, lo que baja el CAC mixto y hace que los medios de pago parezcan más baratos de lo que son.
- Momento. El gasto de diciembre puede traer clientes en enero. Los períodos anuales suavizan esto; el CAC mensual es ruidoso por esa razón.
- El primer año de datos. 2023 cuenta como nuevos a clientes de largo plazo que aparecen por primera vez en los datos, así que su CAC es demasiado bajo.
Nota de entrevista
Cuando te pregunten cómo calcularías el CAC, da la fórmula y luego di qué gasto incluiste, cómo definiste a un cliente nuevo y si es mixto o por canal. Los entrevistadores escuchan las definiciones más que la división.
¡Linterna encendida!
Practicaste: cacblended cacacquisitionmarketing spendfirst order
- Resuelto
- Sin pistas
- Al primer intento
