Nivel 1 · ¿Los productos más caros venden menos?
0 de 3
La solicitud

De Jessica Turner, Gerente de merchandising
Tu objetivo
Asigna a result un dict con dos claves, ambas redondeadas a 3 decimales: "pearson", la correlación entre per_product["unit_price"] y per_product["units_sold"], y "rank", la correlación entre sus rangos (.rank() de cada columna y luego .corr()).
- Usa el DataFrame
productspendiente - Usa el DataFrame
orderspendiente - Guarda un dict en
resultpendiente
The dashed line is the best straight line through the dots. The dots bend: steep at low prices, nearly flat above $500.
Ver los números
| List price | Units sold, 2023–2025 |
|---|---|
| $31.99 | 571 |
| $11.99 | 1,568 |
| $159 | 787 |
| $19.99 | 2,320 |
| $25.99 | 812 |
| $53.99 | 1,349 |
| $92.99 | 507 |
| $349 | 309 |
| $20.99 | 2,017 |
| $159 | 559 |
| $66.99 | 96 |
| $70.99 | 423 |
| $1,599 | 163 |
| $28.99 | 2,300 |
| $239 | 293 |
| $17.99 | 1,704 |
| $149 | 214 |
| $179 | 384 |
| $189 | 606 |
| $27.99 | 842 |
| $25.99 | 601 |
| $76.99 | 433 |
| $259 | 370 |
| $104.99 | 1,325 |
| $189 | 568 |
| $13.99 | 1,035 |
| $289 | 205 |
| $169 | 592 |
| $53.99 | 772 |
| $159 | 190 |
| $45.99 | 687 |
| $179 | 268 |
| $379 | 1,046 |
| $38.99 | 664 |
| $54.99 | 648 |
| $179 | 354 |
| $109 | 545 |
| $43.99 | 1,122 |
| $179 | 766 |
| $189 | 629 |
| $109 | 324 |
| $369 | 101 |
| $72.99 | 467 |
| $29.99 | 1,318 |
| $93.99 | 747 |
| $409 | 113 |
| $18.99 | 402 |
| $10.99 | 1,527 |
| $329 | 139 |
| $84.99 | 360 |
| $179 | 195 |
| $449 | 152 |
| $30.99 | 546 |
| $199 | 305 |
| $52.99 | 1,645 |
| $50.99 | 716 |
| $259 | 143 |
| $78.99 | 180 |
| $219 | 317 |
| $129 | 196 |
| $86.99 | 83 |
| $289 | 514 |
| $23.99 | 517 |
| $249 | 331 |
| $629 | 98 |
| $439 | 79 |
| $79.99 | 206 |
| $74.99 | 509 |
| $779 | 37 |
| $429 | 39 |
| $1,099 | 208 |
| $51.99 | 238 |
| $1,379 | 33 |
| $779 | 88 |
| $1,609 | 105 |
| $689 | 56 |
| $219 | 64 |
| $969 | 45 |
| $669 | 53 |
| $169 | 115 |
| $349 | 465 |
| $13.99 | 743 |
| $789 | 37 |
| $16.99 | 853 |
| $219 | 114 |
| $72.99 | 169 |
| $1,659 | 44 |
| $60.99 | 792 |
| $999 | 208 |
| $1,209 | 25 |
| $109 | 105 |
| $169 | 492 |
| $379 | 34 |
| $15.99 | 454 |
| $179 | 100 |
| $239 | 54 |
| $19.99 | 1,061 |
| $919 | 46 |
| $20.99 | 744 |
| $229 | 377 |
| $30.99 | 226 |
| $17.99 | 295 |
| $189 | 167 |
| $519 | 77 |
| $159 | 71 |
| $44.99 | 790 |
| $51.99 | 211 |
| $70.99 | 356 |
| $139 | 138 |
| $139 | 447 |
| $289 | 23 |
| $12.99 | 407 |
| $109 | 135 |
| $279 | 29 |
| $279 | 8 |
| $18.99 | 195 |
| $1,289 | 6 |
| $17.99 | 305 |
| $103.99 | 35 |
| $869 | 13 |
Tu código
Cargando el editor…
Solución de referencia
| product_id | name | category | subcategory | unit_price |
|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Jessica, y por qué
DataFrames
Cargados como DataFrames de pandas, junto con pd y np.
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 |
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 |
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 |
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 |
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é mide una correlación
El coeficiente de correlación r es un número de -1 a 1 que dice qué tan de cerca se mueven dos columnas a lo largo de una línea recta:
- cerca de 1: cuando una es alta, la otra es alta, casi sobre una recta ascendente;
- cerca de -1: cuando una es alta, la otra es baja, casi sobre una recta descendente;
- cerca de 0: no hay un patrón de línea recta.
En pandas es una sola llamada sobre dos Series de la misma longitud:
per_product["unit_price"].corr(per_product["units_sold"]) # -0.425
Entre los 120 productos de Harbor & Pine, r es -0.425: los productos más caros venden menos unidades, pero los puntos están lejos de una recta ordenada. Una regla práctica común llama débil a 0.1, moderada a 0.3 y fuerte a 0.5, pero el número solo nunca te dice la forma. Mira el gráfico.
Cuando Pearson subestima una curva
La r de Pearson (el .corr() por defecto) premia una línea recta. Los puntos del gráfico se curvan:
las unidades caen en picada desde los juegos de tazones y jarrones de $11 hasta las lámparas de $200,
y luego casi no cambian desde las sillas de comedor de $800 hasta el sofá de dos plazas de $1,659. La
recta de mejor ajuste punteada falla en ambos extremos, así que r se ve apenas moderada.
Una correlación de rangos (la de Spearman) hace una pregunta más laxa: a medida que sube el precio, ¿bajan las unidades, sea cual sea la forma? Reemplaza cada valor por su rango (1 = el más barato) y correlaciona los rangos:
per_product["unit_price"].rank().corr(per_product["units_sold"].rank()) # -0.694
-0.694 es una relación negativa fuerte. Con SciPy instalado, .corr(method="spearman") da el mismo
número; ordenar por rangos primero funciona en todas partes, incluido este navegador.
Lo que r no te dice
- No es la pendiente. r = -0.7 no significa “cada dólar extra cuesta 0.7 unidades”. El tamaño del efecto es una pregunta de regresión (nivel 3).
- No es la causa. El extremo barato es menaje de cocina, decoración y textiles, que compran muchísimos más clientes; el extremo caro son muebles y juegos de exterior. El precio está enredado con lo que es el producto, así que este gráfico no puede decir qué haría un recorte de precio a las unidades.
- No es robusta a los valores atípicos. Un producto con ventas enormes puede mover r mucho. Los rangos son mucho menos sensibles.
Errores comunes
- Reportar r sin el diagrama de dispersión. Formas muy distintas pueden compartir la misma r.
- Llamar “sin relación” a una r moderada. Aquí r = -0.43 esconde un patrón fuerte y curvo.
- Mezclar granularidades. Correlacionar el precio con las unidades por línea de pedido en lugar de por producto cuenta cientos de veces los productos populares. Decide qué es una fila (aquí: un producto), construye ambas columnas en un solo DataFrame con esa granularidad y luego correlaciona.
¡Linterna encendida!
Practicaste: correlationpearsonrank correlationscatter plot
- Resuelto
- Sin pistas
- Al primer intento
