La solicitud

De Brian Mitchell, Analista de finanzas
Tu objetivo
Ajusta una recta de monthly["revenue"] sobre monthly["spend"] con np.polyfit(x, y, 1). Asigna a result un dict: "slope" redondeada a 2 decimales, "intercept" redondeado a 0 decimales y "r2" (la correlación al cuadrado de las dos columnas) redondeado a 3 decimales.
- Usa el DataFrame
orderspendiente - Usa el DataFrame
order_itemspendiente - Guarda un dict en
resultpendiente
One dot per month. The five dots far to the right are all Novembers and Decembers.
Ver los números
| Marketing spend in the month | Revenue in the month |
|---|---|
| $27,045 | $85,437 |
| $23,861 | $66,625 |
| $28,064 | $87,788 |
| $28,975 | $106,298 |
| $29,574 | $146,984 |
| $27,652 | $102,555 |
| $30,030 | $145,155 |
| $29,177 | $140,662 |
| $30,443 | $118,229 |
| $31,944 | $128,086 |
| $53,609 | $231,165 |
| $41,817 | $241,527 |
| $31,341 | $109,306 |
| $28,007 | $77,547 |
| $31,957 | $161,478 |
| $31,847 | $142,766 |
| $34,146 | $151,773 |
| $30,973 | $146,719 |
| $33,858 | $136,668 |
| $33,903 | $156,410 |
| $34,403 | $151,881 |
| $36,786 | $149,408 |
| $62,236 | $319,217 |
| $52,436 | $290,432 |
| $35,944 | $150,571 |
| $31,328 | $99,903 |
| $36,419 | $166,787 |
| $36,895 | $189,735 |
| $40,022 | $206,469 |
| $38,016 | $213,062 |
| $39,652 | $191,967 |
| $40,143 | $182,987 |
| $39,381 | $143,379 |
| $42,808 | $174,599 |
| $70,675 | $292,364 |
| $59,359 | $288,347 |
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 Brian, 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 |
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 |
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
Una recta entre los puntos
Una regresión lineal simple encuentra la recta y = pendiente × x + intercepto que queda más cerca de
los puntos, en el sentido de que las distancias verticales al cuadrado desde los puntos hasta la
recta suman lo mínimo posible (“mínimos cuadrados”). En NumPy es una sola llamada:
slope, intercept = np.polyfit(monthly["spend"], monthly["revenue"], 1)
# slope ≈ 5.50, intercept ≈ -40,288
El 1 es el grado: una línea recta. El orden de los argumentos importa: primero x (la columna desde
la que predices), después y (la que predices). Si los cambias, obtienes otra recta.
Leer la pendiente
La pendiente es el cambio en y por cada unidad de x. Aquí: los meses con $1,000 más de gasto en marketing tuvieron unos $5,500 más de ingresos. Lee cada palabra de esa frase. Compara meses; describe estos datos; no dice nada sobre lo que pasa si añades $1,000 el mes próximo. El nivel 2 mostró por qué: noviembre y diciembre tienen presupuestos grandes y clientes navideños, así que la pendiente carga con ambos.
Leer el intercepto
El intercepto es la y predicha cuando x vale 0: aquí, -$40,288 de ingresos en un mes sin marketing. Los ingresos negativos son imposibles. El intercepto es solo el punto donde la recta cruza el cero, muy a la izquierda de cualquier mes real (el gasto más bajo fue $23,861). Trátalo como un parámetro de la recta, no como un pronóstico.
R²: cuánta variación sigue la recta
El R² (R cuadrado) es la parte de la variación de y alrededor de su media que explica la recta. Con una sola x es la correlación al cuadrado:
monthly["spend"].corr(monthly["revenue"]) ** 2 # 0.845
0.845 significa que la recta sigue de cerca los altibajos de los ingresos. No significa que la recta sea causal, ni que las predicciones sean precisas al 84.5%. Un R² alto con una variable de confusión sigue siendo una recta confundida.
Errores comunes
- Cambiar x e y en
np.polyfit. La pendiente de los ingresos sobre el gasto no es 1 / (pendiente del gasto sobre los ingresos) a menos que los puntos estén exactamente sobre una recta. - Llamar a la pendiente un retorno de la inversión. Es una asociación entre meses.
- Leer el intercepto como un escenario real cuando x = 0 está muy fuera de los datos.
- Tratar un R² alto como prueba. Mide el ajuste, no la causa.
¡Linterna encendida!
Practicaste: linear regressionslopeinterceptr squared
- Resuelto
- Sin pistas
- Al primer intento
