Black Friday en Amazon Deportes, explicado con evidencias
Esta pagina muestra el proceso completo: datos históricos, limpieza, programa, fórmulas, cálculos, modelo matemático, tecnicismos por asignatura y conclusiones finales.
La demostración de Programación se ejecuta directamente en el navegador con los datos históricos embebidos, por lo que la web puede abrirse en otro ordenador y reproducir los cálculos principales.
Black Friday si genera bajadas, pero son moderadas, desiguales y solo estrictamente reales en una parte de la muestra.
De la recogida manual a la conclusión final
Idea clave: la conclusión final se apoya en una cadena verificable: datos históricos, limpieza, cálculo, simulación e interpretación interdisciplinar.
Estudiar la veracidad de promociones BF en Amazon Deportes combinando datos, programación, estadística, matemáticas y pensamiento crítico.
Grupo AIB2, doble grado ADN+IBM. Categoría Deportes. Comparación internacional: España, Francia e Italia.
Token Keepa compartido probado, pero no operativo para API (`PAYMENT_REQUIRED`). Se decide recogida manual desde Keepa/Amazon con ASIN, país y precios históricos.
Se excluyen casos no comparables: mancuernas no disponibles en Francia y auriculares sin histórico BF 2025.
Se construyen criterios general y estricto para medir bajadas y descuentos no reales.
Python automatiza el proceso y genera evidencias observables: CSV, JSON, HTML y gráficos.
Se modela la evolución previa con función lineal y se estima el precio esperado BF.
Los resultados se interpretan desde microeconomía, empresa internacional, antropología e historia de la técnica.
Base histórica usada y exclusiones
Decisión metodológica: al no estar operativo el acceso API de Keepa, la recogida queda manual, pero el análisis posterior queda automatizado, reproducible y documentado.
n0 = 27 observaciones9 productos aproximados por 3 países.
e = 4Mancuernas no disponibles en Francia y auriculares sin histórico BF 2025.
n = n0 - e = 23Solo observaciones comparables.
Tabla de entrada limpia
| subcategoría | producto | país | asin | precio_2025_10_20 | precio_2025_11_19 | precio_min_previo_20oct_19nov | precio_bf_2025_11_28 | precio_min_bf_20nov_1dic | incluido_análisis_bf |
|---|---|---|---|---|---|---|---|---|---|
| Fitness en casa | Esterilla de yoga/fitness | España | B0CJJNSM9V | 22,93 | 24,02 | 22,93 | 24,02 | 14,44 | True |
| Fitness en casa | Esterilla de yoga/fitness | Francia | B0CJJNSM9V | 27,54 | 23,09 | 23,09 | 19,99 | 19,99 | True |
| Fitness en casa | Esterilla de yoga/fitness | Italia | B0CJJNSM9V | 22,79 | 22,87 | 22,79 | 19,37 | 19,37 | True |
| Fitness en casa | Bandas elásticas de resistencia | España | B09CTVQWK8 | 6,99 | 6,99 | 6,99 | 6,64 | 6,64 | True |
| Fitness en casa | Bandas elásticas de resistencia | Francia | B09CTVQWK8 | 6,68 | 6,68 | 6,68 | 6,16 | 6,16 | True |
| Fitness en casa | Bandas elásticas de resistencia | Italia | B09CTVQWK8 | 6,99 | 6,99 | 6,99 | 6,64 | 6,64 | True |
| Fitness en casa | Mancuernas ajustables | España | B09BZ6LTV8 | 49,70 | 49,70 | 49,70 | 49,70 | 49,70 | True |
| Fitness en casa | Mancuernas ajustables | Italia | B09BZ6LTV8 | 59,90 | 57,90 | 57,90 | 57,90 | 57,90 | True |
| Running/entrenamiento | Reloj deportivo GPS | España | B0953XKD13 | 139,00 | 149,99 | 139,00 | 139,99 | 131,40 | True |
| Running/entrenamiento | Reloj deportivo GPS | Francia | B0953XKD13 | 139,99 | 138,99 | 138,99 | 137,49 | 129,24 | True |
| Running/entrenamiento | Reloj deportivo GPS | Italia | B0953XKD13 | 139,00 | 129,00 | 129,00 | 129,99 | 129,00 | True |
| Running/entrenamiento | Zapatillas running | España | B0CKS1SN2G | 36,49 | 33,16 | 33,16 | 33,16 | 33,16 | True |
| Running/entrenamiento | Zapatillas running | Francia | B0CKS1SN2G | 47,99 | 37,79 | 37,79 | 34,80 | 34,80 | True |
| Running/entrenamiento | Zapatillas running | Italia | B0CKS1SN2G | 44,95 | 38,79 | 38,79 | 33,95 | 33,95 | True |
| Deporte popular/outdoor | Balón de fútbol | España | B00QG1FKSE | 15,00 | 20,00 | 15,00 | 20,00 | 20,00 | True |
| Deporte popular/outdoor | Balón de fútbol | Francia | B00QG1FKSE | 12,99 | 13,99 | 12,99 | 14,49 | 13,49 | True |
| Deporte popular/outdoor | Balón de fútbol | Italia | B00QG1FKSE | 15,00 | 20,00 | 15,00 | 20,00 | 20,00 | True |
| Deporte popular/outdoor | Mochila deportiva | España | B09NYCR4NY | 16,49 | 16,49 | 16,49 | 15,99 | 19,99 | True |
| Deporte popular/outdoor | Mochila deportiva | Francia | B09NYCR4NY | 19,99 | 14,95 | 14,95 | 14,95 | 14,95 | True |
| Deporte popular/outdoor | Mochila deportiva | Italia | B09NYCR4NY | 14,95 | 14,95 | 14,95 | 14,95 | 14,95 | True |
| Deporte popular/outdoor | Casco de ciclismo | España | B0BGMPT47N | 24,43 | 24,43 | 24,43 | 24,43 | 23,82 | True |
| Deporte popular/outdoor | Casco de ciclismo | Francia | B0BGMPT47N | 34,68 | 35,94 | 24,99 | 35,94 | 35,94 | True |
| Deporte popular/outdoor | Casco de ciclismo | Italia | B0BGMPT47N | 19,99 | 19,99 | 19,99 | 19,99 | 19,99 | True |
Diccionario matemático y estadistico del proyecto
Para defender: aquí estan todas las variables clave que se usan después en Programación, Estadística y Métodos Matemáticos II.
precio_2025_10_20Precio observado el 20/10/2025. Es el primer punto de la tendencia previa.
precio_2025_11_19Precio observado el 19/11/2025. Es el segundo punto de la tendencia previa.
precio_min_previo_20oct_19novMenor precio observado antes de la ventana BF. Sirve para el criterio estricto.
precio_bf_2025_11_28Precio real observado el 28/11/2025, Black Friday.
precio_min_bf_20nov_1dicPrecio mínimo durante la ventana 20/11-01/12.
producto + país + ASINCada fila comparable del análisis.
Fórmulas estadísticas
P_ref = (P_20oct + P_19nov + P_min_previo) / 3Promedio usado para aproximar nivel normal previo.
D_ref(%) = ((P_ref - P_BF) / P_ref) * 100Pregunta si BF baja frente a la referencia previa.
D_estricto(%) = ((P_min_previo - P_BF) / P_min_previo) * 100Pregunta si BF mejora el mejor precio previo.
descuento_real_general = P_BF < P_refVariable binaria: verdadero/falso.
descuento_real_estricto = P_BF < P_min_previoCriterio principal para estimar descuentos no reales.
% no real = observaciones_no_reales / n * 100Proporción muestral de promociones que no cumplen el criterio.
Fórmulas de Métodos Matemáticos II
t = dias desde 20/10/202520/10 = 0; 19/11 = 30; BF = 39.
P(t) = P0 + m*tModelo funcional para la tendencia previa.
m = (P_19nov - P_20oct) / 30Variacion media en euros por día antes de BF.
P_esperado_BF = P_20oct + m*39Precio simulado si continuara la tendencia previa.
E_eur = P_BF_real - P_esperado_BFDiferencia en euros entre real y simulado.
E_% = (E_eur / P_esperado_BF) * 100Diferencia porcentual entre real y simulado.
V_previa = ((P_19nov - P_20oct) / P_20oct) * 100Comportamiento antes de la campaña.
V_BF = ((P_BF - P_19nov) / P_19nov) * 100Comportamiento al entrar en Black Friday.
Numeros que sostienen la conclusión
Resultado central: 65,22% baja frente a referencia, pero solo 39,13% mejora el mínimo previo; por tanto, 60,87% no es descuento estrictamente real.
Resumen por país
| país | observaciones | descuento_medio_vs_referencia_pct | pct_descuento_real_general | pct_descuento_real_estricto | pct_no_real_estricto | precio_simulado_medio | precio_real_bf_medio | error_medio_pct | variacion_previa_media_pct | variacion_hacia_bf_media_pct |
|---|---|---|---|---|---|---|---|---|---|---|
| España | 8 | -1,25 | 62,50 | 25,00 | 75,00 | 41,11 | 39,24 | -2,74 | 4,61 | -1,84 |
| Francia | 7 | 4,55 | 71,43 | 57,14 | 42,86 | 37,99 | 37,69 | -0,71 | -7,43 | -3,80 |
| Italia | 8 | 2,49 | 62,50 | 37,50 | 62,50 | 38,32 | 37,85 | -3,91 | 1,18 | -4,00 |
Resumen por subcategoría
| subcategoría | observaciones | descuento_medio_vs_referencia_pct | pct_descuento_real_general | pct_descuento_real_estricto | pct_no_real_estricto | precio_simulado_medio | precio_real_bf_medio | error_medio_pct | variacion_previa_media_pct | variacion_hacia_bf_media_pct |
|---|---|---|---|---|---|---|---|---|---|---|
| Deporte popular/outdoor | 9 | -5,38 | 22,22 | 11,11 | 88,89 | 20,32 | 20,08 | -0,60 | 5,87 | 0,06 |
| Fitness en casa | 8 | 6,20 | 87,50 | 62,50 | 37,50 | 24,58 | 23,80 | -5,20 | -1,80 | -5,82 |
| Running/entrenamiento | 6 | 6,77 | 100,00 | 50,00 | 50,00 | 86,97 | 84,90 | -1,86 | -7,35 | -4,56 |
Gráficos generados por el programa
Lectura: los gráficos resumen las diferencias por país, la proporción de descuentos estrictamente reales y la comparación entre precio real y precio simulado.
Amazon como producto de una civilización técnica
Objetivo UFV: Estudio de Amazon y de su evolución entendidos como producto de una civilización técnica.
Proceso paso a paso
- 1
Partimos de Amazon no como una tienda, sino como una infraestructura técnica global.
- 2
Identificamos sus capas técnicas: marketplace, datos, algoritmos, logística, pagos, recomendaciones y precios dinámicos.
- 3
Conectamos esas capas con Black Friday: una campaña masiva que necesita automatización para coordinar demanda, precios y stock.
- 4
Usamos los resultados cuantitativos para mostrar que la técnica también construye percepción de oportunidad, no solo descuentos reales.
Conceptos técnicos usados
Organización social en la que acciones cotidianas dependen de sistemas técnicos complejos.
Optimización de medios para fines como vender más, reducir fricción o acelerar entregas.
Conversión de busquedas, clics y compras en datos explotables.
Recomendaciones, rankings y precios mediados por sistemas automáticos.
Amazon organiza técnicamente el consumo. El Black Friday no es solo rebaja: es una operación de datos, algoritmos, precios dinámicos y logística que puede amplificar la percepción de oportunidad aunque el ahorro real sea limitado.
Texto técnico completo ya desarrollado para esta asignatura
Historia de la Ciencia y la Tecnología
Objetivo de la asignatura
El objetivo de Historia de la Ciencia y la Tecnología es estudiar Amazon y su evolución como producto de una civilización técnica. En este proyecto, esto significa interpretar el Black Friday no solo como una campaña comercial, sino como un fenomeno organizado por sistemas tecnológicos: datos, algoritmos, automatización logística, plataformas digitales y seguimiento histórico de precios.
Amazon como producto de una civilización técnica
Amazon nace en 1994 como librería online, pero su evolución muestra el paso de una empresa de comercio electrónico a una infraestructura tecnológica global. Su ventaja no depende únicamente de vender productos baratos, sino de coordinar información, inventario, recomendaciones, medios de pago, transporte, vendedores externos y servicios digitales dentro de una misma plataforma.
Desde esta perspectiva, Amazon es un ejemplo de civilización técnica porque transforma una actividad humana tradicional, comprar, en un proceso medido, automatizado y optimizado. El consumidor ya no se encuentra solo ante un escaparate, sino ante un sistema técnico que ordena productos, destaca ofertas, calcula precios, recomienda alternativas y reduce el tiempo entre deseo y compra.
En Black Friday esta lógica se intensifica. La campaña concentra demanda, publicidad y decisiónes de precio en pocos días. Para gestionarlo, Amazon y los vendedores necesitan herramientas técnicas capaces de adaptar precios, medir la reacción del mercado, organizar stock y garantizar entregas masivas. Por eso el Black Friday puede entenderse como una manifestacion de la técnica aplicada al consumo.
Relacion con nuestros datos
Nuestro estudio de productos deportivos en Amazon España, Francia e Italia confirma que los precios no se comportan de forma uniforme. Tras excluir los productos sin datos comparables, analizamos 23 observaciones válidas. El descuento medio frente a la referencia previa fue solo del 1,82%, y aunque el 65,22% de las observaciones tuvo algún descuento real, solo el 39,13% mejoró el mínimo previo observado.
Este resultado es importante para Historia de la Ciencia y la Tecnología porque muestra que la técnica no solo permite vender más, sino también construir una percepción de oportunidad. El consumidor ve una campaña ordenada visualmente como "descuento", "oferta" o "Black Friday", pero para saber si el ahorro es realmente excepcional necesita herramientas técnicas adicionales, como Keepa o un análisis histórico de precios.
También observamos diferencias por país. Francia tuvo el mayor descuento medio de la muestra, mientras que España presentó un descuento medio negativo. Esto refuerza la idea de que el Black Friday no es un fenomeno espontaneo ni identico en todos los mercados, sino una estrategia técnica y comercial adaptada a cada contexto nacional.
Capitalismo de consumo y pensamiento crítico
Los materiales de la asignatura relacionan el Black Friday con el capitalismo de consumo y con una cultura en la que el deseo se acelera mediante tecnología, credito, publicidad y disponibilidad inmediata. En este contexto, la libertad del consumidor no consiste solo en poder comprar, sino en poder comprender las condiciones de la compra.
El problema no es que exista tecnología en el comercio, sino que la decisión de compra puede quedar guiada por sistemas que el consumidor no ve completamente: algoritmos de recomendacion, precios dinámicos, urgencia temporal, rankings, disponibilidad aparente y mensajes promocionales. Por eso el pensamiento crítico es necesario para distinguir entre oportunidad real y estímulo técnico al consumo.
Conclusión
Amazon y el Black Friday son productos claros de una civilización técnica: una sociedad donde la compra se apoya en datos, automatización, plataformas globales y optimización continua. Nuestro análisis muestra que la técnica aumenta la eficiencia del mercado, pero también puede intensificar la percepción de descuento aunque el ahorro real sea limitado. Por ello, el consumidor necesita información histórica y criterio propio para actuar con libertad dentro de un entorno comercial cada vez más tecnificado.
Version breve para el resumen ejecutivo
Desde Historia de la Ciencia y la Tecnología, Amazon se interpreta como producto de una civilización técnica: una plataforma que convierte la compra en un proceso gestionado por datos, algoritmos, automatización logística y precios dinámicos. El Black Friday no es solo una rebaja, sino una operación técnica de organización del consumo. Nuestros datos refuerzan esta idea: el descuento medio fue reducido, 1,82%, y solo el 39,13% de las observaciones mejoró el mínimo previo. Esto muestra que la tecnología puede facilitar oportunidades reales, pero también construir una fuerte percepción de oferta. La conclusión crítica es que la libertad del consumidor depende de disponer de información histórica suficiente para distinguir entre ahorro real y estímulo técnico al consumo.
Formacion de precios, elasticidad y consumidor
Objetivo UFV: Analizar la evolución y formación de precios durante Black Friday, asi como la elasticidad y el comportamiento del consumidor.
Proceso paso a paso
- 1
Comparamos precios antes y durante BF por producto, país y subcategoría.
- 2
Distinguimos precio de referencia, mínimo previo y precio BF para no depender del precio tachado.
- 3
Interpretamos el mercado de Amazon como plataforma con precio dinámico, competencia entre vendedores, stock y segmentación por país.
- 4
Tratamos la elasticidad de forma cualitativa porque no hay unidades vendidas: no inventamos elasticidades numericas.
- 5
Conectamos el dato central con comportamiento del consumidor: muchas ofertas activan demanda aunque no sean el mínimo histórico reciente.
Conceptos técnicos usados
Ajuste del precio según demanda esperada, competencia, stock, vendedor y país.
Sensibilidad de la cantidad demandada ante cambios de precio; aquí se interpreta cualitativamente.
Alternativas que hacen al consumidor más sensible al precio.
La plataforma y herramientas históricas tienen más información que el comprador medio.
La muestra muestra una estrategia de precios dinámica y segmentada: descuento medio global de 1,82%, diferencias claras por país y subcategoría, y un consumidor expuesto a senales comerciales que no siempre equivalen al mejor precio previo.
Texto técnico completo ya desarrollado para esta asignatura
Apartado de Microeconomía
Objetivo microeconómico
El objetivo de Microeconomía es analizar la evolución y formación de precios de productos durante el Black Friday, así como la elasticidad y el comportamiento del consumidor.
Enfoque del análisis
El análisis se centra en productos deportivos vendidos en Amazon España, Francia e Italia. A partir de los precios recogidos antes y durante el Black Friday, se estudia si las promociones reflejan una verdadera reducción de precio y cómo puede interpretarse esta estrategia desde la oferta, la demanda y el comportamiento del consumidor.
La muestra final contiene 23 observaciones válidas. Se excluyeron productos que no tenían histórico comparable o no estában disponibles en el periodo analizado.
Formación de precios en Black Friday
Amazon funciona como una plataforma donde conviven productos vendidos directamente por Amazon y productos vendidos por terceros. Esto genera un entorno de precios dinámicos: los precios pueden variar según inventario, competencia, demanda esperada, disponibilidad, país y estrategia promocional.
Desde la microeconomía, el Black Friday puede interpretarse como un desplazamiento temporal de la estrategia de precios. Las empresas reducen algúnos precios para aumentar la cantidad demandada, liquidar inventario, captar clientes o mejorar su posición frente a competidores. Sin embargo, los datos muestran que esta reducción no es homogénea.
En la muestra analizada, el descuento medio frente a la referencia previa fue solo del 1,82%. Además, aunque el 65,22% de observaciones presentó algún descuento real, únicamente el 39,13% mejoró el mínimo previo observado. Esto indica que el precio de Black Friday no siempre representa una oportunidad excepcional para el consumidor.
Diferencias por país
Los resultados muestran diferencias entre España, Francia e Italia:
- España: descuento medio de -1,25%.
- Francia: descuento medio de 4,55%.
- Italia: descuento medio de 2,49%.
Francia fue el mercado con mejores descuentos en la muestra, mientras que España presentó un descuento medio negativo. Esto sugiere que Amazon y los vendedores no aplican una política uniforme en todos los países. La estrategia puede depender de factores como competencia local, stock, costes, hábitos de consumo o intensidad de la campaña comercial.
Desde Fundamentos de Empresa Internacional, este resultado también muestra adaptación al mercado local. Desde Microeconomía, refleja que el precio no solo depende del producto, sino del mercado concreto en el que se vende.
Diferencias por tipo de producto
La categoría Deportes no se comporta de forma uniforme:
- Fitness en casa: descuento medio de 6,20%.
- Running/entrenamiento: descuento medio de 6,77%.
- Deporte popular/outdoor: descuento medio de -5,38%.
Fitness y running muestran mejores descuentos que deporte popular/outdoor. Esto puede explicarse porque los productos de fitness y running tienen mayor competencia, más sustitutos y mayor sensibilidad a promociones. En cambio, productos como balones, cascos o mochilas pueden mantener precios más estables o incluso subir si la demanda es menos sensible al descuento.
Elasticidad de la demanda
La elasticidad-precio mide cómo reaccióna la cantidad demandada ante cambios en el precio. Para calcularla de forma exacta necesitaríamos datos de unidades vendidas, que no están disponibles en nuestra muestra. Por tanto, no calculamos una elasticidad numérica estricta.
Sí podemos hacer una interpretación cualitativa:
- Productos con muchos sustitutos, como bandas elásticas, esterillas o zapatillas, tienden a tener demanda más elástica. Si el precio baja, el consumidor puede cambiar fácilmente de marca o adelantar la compra.
- Productos de marca o tecnológicos, como el Garmin Forerunner 55, pueden tener una demanda menos elástica porque el consumidor busca características concretas, marca y confianza.
- Productos baratos, como bandas elásticas o balones, pueden necesitar descuentos porcentualmente visibles para modificar de verdad la decisión de compra.
El hecho de que el descuento medio sea reducido sugiere que muchas promociones buscan activar la percepción de oportunidad más que provocar una gran reducción económica.
Comportamiento del consumidor
El consumidor no siempre decide de forma perfectamente racional. En teoría, un consumidor racional compararía el precio de Black Friday con el histórico previo y compraría solo si el descuento es real. Sin embargo, en la práctica influyen señales comerciales como:
- precio tachado;
- urgencia temporal;
- mensajes de oferta limitada;
- reseñas;
- marca;
- recomendación del algoritmo;
- miedo a perder una oportunidad.
Esto conecta con el resultado estadístico: muchos productos bajan algo, pero menos de la mitad mejoran el mínimo previo. Por tanto, el consumidor puede percibir una oportunidad aunque el ahorro real sea limitado.
Equilibrio antes, durante y después del Black Friday
Antes del Black Friday, los precios reflejan una situación de equilibrio relativamente normal entre oferta, demanda, competencia y stock. En nuestro modelo matemático, la variación previa media fue de -0,25%, es decir, bastante estable.
Durante el Black Friday, la variación media entre el 19 y el 28 de noviembre fue de -3,19%. Esto muestra una caída mayor que la tendencia previa, pero no lo suficientemente intensa como para afirmar que todos los productos tuvieron descuentos fuertes.
Después del Black Friday, aunque faltan algúnos datos post-BF, la hipótesis microeconómica esperable es que ciertos precios vuelvan a subir al desaparecer el incentivo promocional. Esta parte se puede mencionar como limitación y como línea de mejora.
Conclusión microeconómica
Desde la microeconomía, el Black Friday en Amazon Deportes se comporta como una estrategia de precios dinámica y segmentada. Las promociones no son iguales por país ni por tipo de producto. Algunos bienes muestran bajadas reales, especialmente fitness y running, mientras que otros no presentan una mejora clara respecto al periodo previo.
La conclusión principal es que el Black Friday funciona tanto como mecanismo de ajuste de precios como herramienta de estímulo de demanda. Sin embargo, el consumidor debe comparar con el histórico para distinguir entre un descuento real y una promoción basada principalmente en la percepción de oportunidad.
Programa funcional, observable y reproducible
Objetivo UFV: Implementar un programa informatico que simule precios previos al Black Friday y compare estos precios simulados con precios reales extraidos de una base de datos histórica.
Proceso paso a paso
- 1
Entrada:
detalle_descuentos_deportes_limpio.csv, con precios históricos recogidos manualmente desde Keepa/Amazon. - 2
Limpieza: conversión de precios a numéricos, normalización de texto y filtrado de observaciones comparables.
- 3
Transformación estadística: recálculo de referencia previa, descuento general y descuento estricto.
- 4
Simulación: modelo lineal previo con pendiente diaria y precio esperado para el 28/11/2025.
- 5
Comparación: cálculo de error absoluto, error porcentual y clasificación de cada observación.
- 6
Salida observable: CSV fila a fila, JSON global, tablas por país/subcategoría, gráficos SVG e informe HTML.
Conceptos técnicos usados
Extracción, transformación y carga de datos en una secuencia reproducible.
Misma entrada, mismas transformaciónes, mismas salidas.
No usa aleatoriedad; todos los resultados son auditables.
Resultados visibles en pantalla: consola, metricas, tabla y comparación.
El objetivo de Programación queda cubierto porque existe un script ejecutable que simula el precio esperado de BF y lo compara con el precio real histórico. No es una conclusión manual: el programa genera las evidencias.
Probar el programa dentro del HTML
Esta demo reproduce en el navegador la parte esencial del programa: lee los datos históricos embebidos, calcula referencia previa, descuento estricto, pendiente, precio esperado BF y error real-vs-simulado.
Ver pseudocodigo que ejecuta esta demo
1. Leer datos históricos embebidos
2. Para cada observación:
P_ref = (P_20oct + P_19nov + P_min_previo) / 3
descuento_estricto = P_BF < P_min_previo
m = (P_19nov - P_20oct) / 30
P_esperado_BF = P_20oct + m * 39
error_% = (P_BF - P_esperado_BF) / P_esperado_BF * 100
3. Agregar medias y porcentajes
4. Comparar contra los resultados del análisis principal
Texto técnico completo ya desarrollado para esta asignatura
Programa funcional
Objetivo
El programa implementado automatiza el análisis cuantitativo del proyecto. Su función es leer una base histórica de precios, limpiar los datos, simular el precio esperado de Black Friday y comparar ese precio con el precio real observado.
Que hace
- Lee los precios históricos por producto, país y ASIN.
- Filtra observaciones no comparables.
- Calcula precio de referencia previa.
- Calcula descuento general y descuento estricto.
- Simula el precio esperado de Black Friday mediante una tendencia lineal.
- Calcula el error entre precio real y precio simulado.
- Clasifica cada observación.
Por que es reproducible
El modelo es determinista: con los mismos datos de entrada produce siempre los mismos resultados. En esta pagina se incluye una version ejecutable en el navegador para que el proceso pueda probarse durante la defensa.
Verificación de bajadas y descuentos no reales
Objetivo UFV: Verificar si los precios bajan durante el periodo de BF y estimar el porcentaje de productos cuyo descuento no es real.
Proceso paso a paso
- 1
Definimos la unidad estadística: producto + país + ASIN.
- 2
Partimos de 27 observaciones y excluimos 4 casos no comparables, quedando n = 23.
- 3
Creamos una referencia previa para evitar depender de un único día.
- 4
Calculamos descuento general frente a referencia previa.
- 5
Calculamos descuento estricto frente al mínimo previo.
- 6
Convertimos cada criterio en variable binaria y estimamos proporciones muestrales.
Conceptos técnicos usados
Usada para construir el precio de referencia previa.
Porcentaje de observaciones que cumplen o no el criterio.
Descuento real si/no según el criterio elegido.
P_BF < P_min_previo; pregunta si BF mejora el mejor precio anterior.
El 65,22% baja frente a referencia previa, pero solo el 39,13% mejora el mínimo previo. Por tanto, el 60,87% no es descuento real bajo el criterio estricto.
Texto técnico completo ya desarrollado para esta asignatura
Anexo técnico de Estadística
Objetivo de Estadística
Verificar si los precios bajan durante el periodo de Black Friday y estimar el porcentaje de productos cuyo descuento no es real.
Unidad estadística
Cada observación es una combinacion:
producto + país + ASIN
Muestra inicial:
n0 = 27
Exclusiones metodológicas:
e = 4
Muestra final:
n = n0 - e = 27 - 4 = 23
Variables utilizadas
P_20oct: precio el 20/10/2025.P_19nov: precio el 19/11/2025.P_min_previo: precio mínimo observado entre 20/10 y 19/11.P_BF: precio de Black Friday, 28/11/2025.P_min_BF: precio mínimo durante la ventana BF 20/11-01/12.
Referencia previa
Para evitar depender de un único día, se construye una referencia previa:
P_ref = (P_20oct + P_19nov + P_min_previo) / 3
Esta referencia aproxima el nivel normal del precio antes de la campaña.
Descuento frente a referencia previa
Fórmula:
D_ref(%) = ((P_ref - P_BF) / P_ref) * 100
Interpretación:
- Si
D_ref > 0, el precio BF baja frente a la referencia. - Si
D_ref <= 0, no hay descuento frente a la referencia.
Variable lógica:
descuento_real_general = P_BF < P_ref
Descuento estricto frente al mínimo previo
Fórmula:
D_estricto(%) = ((P_min_previo - P_BF) / P_min_previo) * 100
Variable lógica:
descuento_real_estricto = P_BF < P_min_previo
Este criterio es más exigente porque pregunta si Black Friday mejora el mejor precio que ya existia antes.
Porcentaje de descuentos no reales
Fórmula general:
% no real = (numero de observaciones sin descuento real / n) * 100
Criterio general:
% no real general = 100 - % descuento_real_general
Criterio estricto:
% no real estricto = 100 - % descuento_real_estricto
Resultados obtenidos
- Observaciónes válidas:
n = 23 - Descuento medio frente a referencia:
1,82% - Observaciónes con descuento real general:
65,22% - Observaciónes sin descuento real general:
34,78% - Observaciónes con descuento real estricto:
39,13% - Observaciónes sin descuento real estricto:
60,87%
Cálculo numerico de porcentajes
Si 39,13% de 23 observaciones cumplen descuento estricto:
0,3913 * 23 ≈ 9 observaciones
Por tanto:
23 - 9 = 14 observaciones
14 / 23 * 100 = 60,87%
Este es el porcentaje de casos cuyo descuento no es real bajo el criterio estricto.
Ejemplo de cálculo fila a fila
Producto: Esterilla Amazon Basics en Francia.
Datos:
P_20oct = 27,54P_19nov = 23,09P_min_previo = 23,09P_BF = 19,99
Referencia previa:
P_ref = (27,54 + 23,09 + 23,09) / 3 = 24,57
Descuento frente a referencia:
D_ref = ((24,57 - 19,99) / 24,57) * 100 = 18,65%
Descuento estricto:
D_estricto = ((23,09 - 19,99) / 23,09) * 100 = 13,43%
Conclusión:
Es descuento real general y también descuento real estricto.
Evolución funcional y estimacion del precio esperado
Objetivo UFV: Representar graficamente la evolución de precios simulados y reales, comparando sus tendencias. Analizar la variacion y comportamiento de los precios antes del BF, incluyendo evolución funcional y estimacion del precio esperado.
Proceso paso a paso
- 1
Codificamos el tiempo como días desde el 20/10/2025.
- 2
Tomamos el precio como función del tiempo: P(t).
- 3
Ajustamos una función lineal con los puntos 20/10 y 19/11.
- 4
Extrapolamos la tendencia hasta el día BF: t = 39.
- 5
Comparamos precio esperado y precio real mediante error absoluto y porcentual.
- 6
Representamos graficamente la comparación real-vs-simulado y un ejemplo de evolución funcional.
Conceptos técnicos usados
P(t)=P0+m*t representa la tendencia previa.
m mide euros por día antes de BF.
Estimacion del precio BF si siguiera la tendencia previa.
Diferencia porcentual entre precio real BF y precio esperado.
La tendencia previa era casi estable (-0,25%) y hacia BF baja más (-3,19%). El precio real BF medio queda 2,53% por debajo del esperado: hay efecto BF, pero moderado.
Texto técnico completo ya desarrollado para esta asignatura
Anexo técnico de Métodos Matemáticos II
Objetivo de Métodos Matemáticos II
Representar graficamente la evolución de precios simulados y reales, comparando sus tendencias. Analizar la variacion y comportamiento de los precios antes del Black Friday, incluyendo su evolución funcional y estimacion del precio esperado.
Variable independiente y variable dependiente
Variable independiente:
t = numero de dias desde el 20/10/2025
Variable dependiente:
P(t) = precio del producto en euros
Fechas codificadas:
- 20/10/2025:
t = 0 - 19/11/2025:
t = 30 - 28/11/2025, Black Friday:
t = 39
Modelo funcional utilizado
Se aproxima la evolución previa del precio con una función lineal:
P(t) = P0 + m*t
Donde:
P0 = P_20octm = pendiente diariat = dias desde el 20 de octubre
Pendiente diaria
Fórmula:
m = (P_19nov - P_20oct) / 30
Interpretación:
- Si
m > 0, el precio estaba subiendo antes del BF. - Si
m < 0, el precio estaba bajando antes del BF. - Si
m = 0, el precio estaba estable.
Precio esperado para Black Friday
Fórmula:
P_esperado_BF = P_20oct + m*39
Este precio representa lo que se esperaria el 28/11/2025 si el producto siguiera la tendencia previa sin efecto Black Friday.
Error del modelo
Error absoluto:
E_eur = P_BF_real - P_esperado_BF
Error porcentual:
E_% = (E_eur / P_esperado_BF) * 100
Interpretación:
- Si
E_% < 0, el precio real BF esta por debajo del esperado. - Si
E_% > 0, el precio real BF esta por encima del esperado.
Tasas de variacion
Variacion previa:
V_previa(%) = ((P_19nov - P_20oct) / P_20oct) * 100
Variacion hacia Black Friday:
V_BF(%) = ((P_BF - P_19nov) / P_19nov) * 100
Comparar ambas variaciones permite ver si el comportamiento de BF rompe la tendencia previa.
Resultados globales
- Precio esperado medio BF:
39,19 euros - Precio real medio BF:
38,28 euros - Error medio:
-2,53% - Variacion previa media:
-0,25% - Variacion hacia BF media:
-3,19% - Observaciónes con BF por debajo del esperado:
56,52%
Interpretación:
La tendencia previa era casi estable, con -0,25%. Al acercarse BF, la bajada fue mayor, -3,19%. Esto muestra un efecto BF, pero moderado.
Ejemplo de cálculo funcional
Producto: Esterilla Amazon Basics en Francia.
Datos:
P_20oct = 27,54P_19nov = 23,09P_BF = 19,99
Pendiente:
m = (23,09 - 27,54) / 30 = -4,45 / 30 = -0,1483 euros/dia
Precio esperado BF:
P_esperado_BF = 27,54 + (-0,1483 * 39) = 21,75 euros
Error:
E_eur = 19,99 - 21,75 = -1,76 euros
E_% = (-1,76 / 21,75) * 100 = -8,11%
Conclusión:
El precio real de BF fue inferior al precio esperado por la tendencia lineal, por lo que hay evidencia de efecto BF en este caso.
Gráficos generados
Estos gráficos permiten observar:
- Comparación por país.
- Relacion entre precio simulado y precio real.
- Evolución funcional en un ejemplo concreto.
Deseo, impulso y libertad del consumidor
Objetivo UFV: Reflexionar sobre el deseo y la libertad del consumidor desde una perspectiva humanistica.
Proceso paso a paso
- 1
Diferenciamos necesidad, deseo e impulso en la compra.
- 2
Analizamos como BF activa urgencia, precio tachado, recomendacion y miedo a perder oportunidad.
- 3
Conectamos libertad con información: decidir libremente exige poder deliberar con datos suficientes.
- 4
Usamos el resultado estadistico para mostrar que percepción de oferta y ahorro real no siempre coinciden.
- 5
Concluimos que el consumo responsable requiere comparar históricos y no solo reacciónar a estímulos.
Conceptos técnicos usados
Compra orientada a cubrir una carencia funcional.
Atraccion hacia un bien percibido como valioso.
Compra rápida con baja deliberacion.
Decisión condicionada por información, contexto y presion temporal.
La libertad del consumidor no consiste solo en poder comprar. Aumenta cuando puede deliberar con información histórica suficiente; se debilita si decide por urgencia y percepción de oportunidad.
Texto técnico completo ya desarrollado para esta asignatura
Apartado de Antropología
Objetivo antropológico
El objetivo de Antropología es reflexionar sobre el deseo y la libertad del consumidor desde una perspectiva humanística.
Punto de partida
El Black Friday no es solo un fenómeno económico. También es un fenómeno humano y cultural, porque afecta al modo en que las personas desean, deciden y consumen. Amazon no ofrece únicamente productos: ofrece una experiencia de compra rápida, personalizada y acompañada de señales de urgencia, oportunidad y recomendación.
Desde esta perspectiva, la pregunta no es solo si el precio baja, sino si el consumidor decide libremente cuando compra en un entorno diseñado para activar el deseo.
Deseo, impulso y necesidad
En el consumo pueden distinguirse tres niveles:
- Necesidad: compra orientada a cubrir algo realmente necesario.
- Deseo: inclinación hacia algo que se percibe como valioso o atractivo.
- Impulso: reacción rápida ante un estímulo, con poca deliberación.
El Black Friday actúa especialmente sobre el deseo y el impulso. La idea de “oferta limitada” puede transformar una compra no prevista en una decisión aparentemente urgente. En productos deportivos, esto puede verse en artículos ligados a mejora personal, salud, imagen o propósitos: zapatillas, relojes deportivos, material de fitness o accesorios de entrenamiento.
Libertad y calidad de la información
Una decisión libre no consiste solo en poder elegir entre muchos productos. También exige información suficiente para deliberar. Si el consumidor cree que una oferta es excepcional pero no conoce el histórico de precios, su libertad queda limitada por una información incompleta.
Nuestros datos muestran que el descuento medio fue solo del 1,82%. Además, aunque el 65,22% de observaciones presentó algún descuento real, solo el 39,13% mejoró el mínimo previo. Esto significa que muchas ofertas podían parecer atractivas sin ser necesariamente el mejor precio histórico reciente.
Desde la antropología, esto plantea una cuestión importante: ¿puede considerarse plenamente libre una decisión de compra si la persona decide bajo presión temporal, recomendación algorítmica y una percepción de descuento que no siempre coincide con una ventaja económica fuerte?
Fases del deseo en Black Friday
La campaña de Black Friday puede actuar en varias fases de la decisión:
1. Inclinación: el consumidor siente atracción por un producto o por la idea de aprovechar una oportunidad.
2. Deliberación: compara precios, necesidad, utilidad y presupuesto.
3. Decisión: acepta o rechaza la compra.
4. Ejecución: compra rápidamente, muchas veces desde el móvil o con pocos clics.
5. Integración: evalúa después si la compra le aporta valor real o si fue impulsiva.
Amazon refuerza estas fases mediante recomendaciones, reseñas, rankings, descuentos visibles, urgencia temporal y facilidad de pago. Todo ello reduce fricción y acelera la decisión.
Consumidor racional y consumidor vulnerable
El consumidor no es pasivo ni irracional por definición. Puede usar Black Friday de forma inteligente si compara precios, planifica compras y distingue deseo de impulso. Sin embargo, también puede ser vulnerable cuando:
- no conoce el precio histórico;
- se guía por un precio tachado;
- siente miedo a perder la oferta;
- compra por recompensa emocional;
- confunde deseo con necesidad.
Esto conecta con nuestro análisis microeconómico: si el ahorro real es limitado, parte del valor de la campaña está en la percepción de oportunidad.
Responsabilidad de la empresa
La empresa tiene responsabilidad porque diseña el entorno de decisión. Amazon puede facilitar información clara, transparencia en precios y herramientas de comparación. Si la plataforma conoce el histórico de precios y el consumidor no, existe una asimetría de información.
Desde una perspectiva humanística, una campaña comercial es más respetuosa con la libertad del consumidor cuando no se limita a maximizar clics o compras impulsivas, sino que permite una decisión informada.
Impacto social
Black Friday expresa una cultura de consumo acelerado. Promueve la idea de que comprar rápido es una forma de aprovechar la libertad. Sin embargo, puede producir el efecto contrario: que el consumidor se adapte al ritmo de la campaña y no a sus necesidades reales.
El riesgo antropológico no está en comprar, sino en que la persona se acostumbre a desear según estímulos externos constantes. Entonces el mercado no solo satisface deseos, sino que también los configura.
Conclusión antropológica
Desde la antropología, el Black Friday muestra una tensión entre libertad y condicionamiento. El consumidor es libre cuando puede deliberar, comparar y decidir según sus fines. Pero su libertad se debilita si la decisión se apoya en urgencia, información incompleta o deseo impulsivo.
Nuestros datos refuerzan esta reflexión: como menos de la mitad de las observaciones mejoraron el mínimo previo, la percepción de descuento puede ser más fuerte que el ahorro real. Por eso, el consumo responsable exige pensamiento crítico y comparación histórica de precios.
Guía de entrevistas y codificación temática
Objetivo cualitativo: comprender cómo viven los consumidores el Black Friday y qué papel tienen necesidad, deseo, urgencia, confianza y comparación de precios.
Guía breve de entrevista
- 1
Cuando piensas en Black Friday, ¿qué es lo primero que se te viene a la cabeza?
- 2
¿Has comprado alguna vez un producto deportivo en Black Friday? ¿Por qué?
- 3
Antes de comprar, ¿comparaste el precio histórico o solo miraste el descuento visible?
- 4
¿Qué pesa más en tu decisión: necesidad, deseo, urgencia, marca, precio o envío rápido?
- 5
Después de comprar, ¿sentiste que fue una oportunidad real o una compra impulsiva?
Códigos de análisis
El consumidor identifica BF como momento excepcional aunque el descuento real sea pequeño.
Prime, reseñas, rapidez y marca reducen la búsqueda externa de información.
El límite temporal acelera decisiónes con baja deliberación.
Uso de histórico, presupuesto y alternativas antes de comprar.
El resultado estadístico indica que solo el 39,13% mejora el mínimo previo. La parte cualitativa permite explicar por qué, aun así, muchos consumidores pueden percibir BF como una oportunidad: el precio tachado, la urgencia, las reseñas y la confianza en la plataforma reducen la deliberación.
Protocolo cualitativo defendible
Diseño
El taller recomienda entrevistas breves de 5-10 minutos, realizadas por parejas: una persona entrevista y otra toma notas o graba con permiso. La aproximación debe ser neutral, sin juzgar al entrevistado, y las respuestas deben analizarse de forma agregada.
Objetivo de información
El objetivo no es calcular porcentajes estadísticos, sino comprender significados: cómo se percibe el Black Friday, qué señales activan la compra y qué papel tienen necesidad, deseo, impulso, confianza y precio.
Matriz de interpretación
| Código | Indicador en entrevista | Conexión con asignaturas |
|---|---|---|
| Percepción de ahorro | El entrevistado habla de "chollo", "oferta" o "aprovechar". | Microeconomía, Estadística, Antropología. |
| Compra planificada | El entrevistado tenía lista previa o presupuesto. | Racionalidad del consumidor y libertad deliberativa. |
| Compra impulsiva | Compra por urgencia, miedo a perder oferta o recompensa emocional. | Deseo, impulso y técnica aplicada al consumo. |
| Confianza en plataforma | Compra por Amazon/Prime aunque no sea el precio mínimo. | Estrategia internacional, marca y ventaja competitiva. |
Este diseño refuerza la interpretación transversal sin falsear evidencia: nuestros resultados cuantitativos miden precios; el enfoque cualitativo explica percepción y comportamiento.
Estrategia multinacional y comparación ES-FR-IT
Objetivo UFV: Analizar cual ha sido la estrategia de Amazon hasta convertirse en una multinacional y los precios de productos y categorias en diferentes países en BF.
Proceso paso a paso
- 1
Explicamos la evolución de Amazon: librería online, marketplace, Prime, logística, AWS, publicidad y datos.
- 2
Aplicamos estrategia corporativa: diversificación relacionada y ecosistema de plataforma.
- 3
Identificamos ventaja competitiva: escala, marca, datos, tecnología, selección y conveniencia.
- 4
Comparamos los descuentos por país en la muestra ES-FR-IT.
- 5
Interpretamos la diferencia por país como glocalización: estrategia global adaptada localmente.
- 6
Conectamos BF con objetivos empresariales: tráfico, datos, inventario, fidelización y rentabilidad.
Conceptos técnicos usados
Coordinación entre consumidores, vendedores, servicios y datos.
Marketplace, Prime, AWS, publicidad y logística se refuerzan entre sí.
Misma lógica global con adaptación de precio, disponibilidad y competencia local.
Rivalidad, entrantes, proveedores, clientes y sustitutos aplicados a Amazon.
Amazon usa BF como herramienta internacional de plataforma. Los descuentos no son uniformes: Francia 4,55%, Italia 2,49% y España -1,25%, lo que muestra adaptación local dentro de una estrategia global.
Texto técnico completo ya desarrollado para esta asignatura
Apartado de Fundamentos de Dirección de Empresas Internacional
Objetivo de la asignatura
El objetivo es analizar cuál ha sido la estrategia de Amazon hasta convertirse en una multinacional y estudiar los precios de productos y categorías en diferentes países durante el Black Friday.
Amazon como multinacional
Amazon nació como una empresa de comercio electrónico centrada en la venta online de libros y evolucionó hasta convertirse en una multinacional tecnológica y comercial. Su crecimiento no se explica solo por vender más productos, sino por construir un ecosistema empresarial basado en:
- comercio electrónico;
- marketplace para vendedores externos;
- logística y distribución;
- Amazon Prime;
- publicidad digital;
- servicios de computación en la nube mediante AWS;
- datos, algoritmos y automatización.
En su informe anual de 2025, Amazon declara que organiza sus operaciónes en tres grandes segmentos: North America, International y Amazon Web Services. Esta estructura muestra que Amazon ya no es solo una tienda online, sino una plataforma global diversificada.
Estrategia corporativa
La estrategia corporativa de Amazon se basa en la diversificación relacionada. Parte del comercio electrónico, pero amplía su actividad hacia servicios que refuerzan el mismo ecosistema:
- Prime aumenta la fidelidad y frecuencia de compra.
- Marketplace incrementa la variedad sin asumir todo el inventario.
- FBA y la red logística permiten controlar entrega, experiencia y eficiencia.
- AWS genera ingresos de alto valor y financia capacidades tecnológicas.
- Publicidad aprovecha los datos de búsqueda y compra dentro de la plataforma.
Según el Form 10-K de 2025, Amazon alcanzó ventas consolidadas de 716.924 millones de dólares. El segmento International generó 161.894 millones, un 23% de las ventas consolidadas. Esto confirma la relevancia estratégica de los mercados internacionales.
Estrategia competitiva
Amazon compite principalmente mediante una combinación de liderazgo en costes, diferenciación y efecto plataforma.
Su ventaja competitiva se apoya en:
- precios competitivos;
- gran selección de productos;
- comodidad de compra;
- rapidez de entrega;
- confianza en la marca;
- recomendaciones algorítmicas;
- escala logística;
- integración de servicios como Prime.
El informe anual de Amazon resume su enfoque hacia el consumidor en tres elementos: selección, precio y conveniencia. También señala que la empresa busca reducir costes variables por unidad para poder ofrecer precios más bajos. Esta lógica se refleja en Black Friday: la empresa puede usar promociones para reforzar tráfico, rotación de inventario y captación de clientes.
Estrategia internacional
La estrategia internacional de Amazon combina estandarización y adaptación.
Elementos estandarizados:
- misma lógica de plataforma;
- misma marca global;
- uso de Prime;
- marketplace;
- tecnología y algoritmos;
- infraestructura logística.
Elementos adaptados:
- precios por país;
- moneda e impuestos;
- competencia local;
- disponibilidad de producto;
- intensidad promocional;
- preferencias del consumidor;
- estructura logística en cada mercado.
Nuestro análisis de España, Francia e Italia confirma esta adaptación. Aunque varios productos tienen el mismo ASIN en los tres países, los descuentos no fueron idénticos. Francia presentó el mejor descuento medio, 4,55%, Italia 2,49% y España -1,25%. Por tanto, Amazon no aplica el Black Friday como una política de precios uniforme, sino como una campaña ajustada al mercado.
Comparación internacional de precios en Black Friday
La comparación de productos deportivos muestra que el Black Friday no se comporta igual en los tres países:
| País | Observaciónes | Descuento medio BF | % descuento real | % descuento real estricto |
|---|---:|---:|---:|---:|
| España | 8 | -1,25% | 62,50% | 25,00% |
| Francia | 7 | 4,55% | 71,43% | 57,14% |
| Italia | 8 | 2,49% | 62,50% | 37,50% |
Estos datos permiten interpretar que la estrategia promocional puede depender de condiciones locales. Francia parece haber aplicado promociones más intensas en la muestra, mientras que España no presentó una bajada media clara. Italia quedó en una posición intermedia.
Porter: cinco fuerzas aplicadas a Amazon Black Friday
Rivalidad entre competidores
Alta. Amazon compite con grandes plataformas, tiendas deportivas, marketplaces y comercios locales. Black Friday intensifica la rivalidad porque muchas empresas compiten simultáneamente por la atención del consumidor.
Amenaza de nuevos entrantes
Media. Crear una tienda online es fácil, pero competir con Amazon en logística, marca, tecnología, escala y confianza es muy difícil.
Poder de negociación de proveedores
Variable. Las marcas fuertes, como Garmin, Adidas o Nike, tienen más poder. Los vendedores pequeños dependen más de Amazon para acceder al cliente y tienen menos capacidad de negociación.
Poder de negociación de clientes
Alto. El consumidor puede comparar precios entre países, tiendas y plataformas. Sin embargo, Amazon reduce esa presión mediante conveniencia, rapidez, Prime y recomendaciones personalizadas.
Amenaza de productos sustitutivos
Alta. En deportes hay muchos productos equivalentes: varias marcas de esterillas, bandas, zapatillas, mochilas o accesorios. Esto obliga a competir en precio, visibilidad y reseñas.
Impacto estratégico del Black Friday
Black Friday cumple varias funciones estratégicas para Amazon:
- Aumenta tráfico y frecuencia de visita.
- Estimula compras impulsivas y compras planificadas.
- Refuerza Prime y la percepción de conveniencia.
- Permite liquidar stock o mover categorías concretas.
- Genera datos sobre sensibilidad al precio.
- Aumenta ingresos de vendedores y de publicidad dentro de la plataforma.
Sin embargo, nuestros datos muestran que la promoción no siempre implica una rebaja fuerte. Esto puede ser estratégico: Amazon no necesita reducir todos los precios de forma intensa; puede combinar descuentos reales en algúnos productos con señales comerciales en otros para mantener márgenes y activar la demanda.
Conclusión de Empresa Internacional
Amazon se ha convertido en una multinacional porque ha construido un ecosistema global difícil de imitar: plataforma, logística, datos, servicios digitales, marketplace y AWS. Su ventaja no depende solo de vender barato, sino de coordinar escala, tecnología y experiencia de usuario.
En Black Friday, esta estrategia se observa en la comparación internacional. Los mismos productos deportivos no tuvieron el mismo comportamiento en España, Francia e Italia. Esto indica que Amazon adapta precios y promociones según mercado, disponibilidad, competencia y demanda local.
La conclusión principal es que Black Friday no es solo una campaña de descuentos, sino una herramienta estratégica internacional: atrae consumidores, genera datos, refuerza la plataforma y permite aplicar precios dinámicos por país y categoría.
Fuentes usadas
- Amazon.com, Inc. (2026). *Form 10-K 2025*. U.S. Securities and Exchange Commission. https://www.sec.gov/Archives/edgar/data/1018724/000101872426000004/amzn-20251231.htm
- Datos propios del proyecto: tabla manual de precios Amazon/Keepa para productos deportivos en España, Francia e Italia.
- Keepa. (2026). *Keepa Python API documentation*. https://keepaapi.readthedocs.io/en/latest/product_query.html
- Universidad Francisco de Vitoria. (2025). *Proyecto interdisciplinar Black Friday en Amazon: instrucciones y presentacion del reto*.
- Universidad Francisco de Vitoria. (2025). *Taller de entrevistas cualitativas para alumnos*.
- Guía Normas APA. (2026). *Normas APA 7.ª edición en español*. https://normas-apa.org/
Cálculos fila a fila
Para defender: cada conclusión global sale de estas columnas calculadas por el programa. Aquí se ve observación por observación.
| subcategoría | producto | país | precio_referencia_previo_recalculado | precio_min_previo_20oct_19nov | precio_bf_2025_11_28 | descuento_bf_vs_ref_recalculado_pct | descuento_estricto_vs_min_previo_recalculado_pct | precio_simulado_bf_lineal | error_real_menos_simulado_pct | clasificación_programa |
|---|---|---|---|---|---|---|---|---|---|---|
| Fitness en casa | Esterilla de yoga/fitness | España | 23,29 | 22,93 | 24,02 | -3,12 | -4,75 | 24,35 | -1,34 | Solo mejora frente al modelo |
| Fitness en casa | Esterilla de yoga/fitness | Francia | 24,57 | 23,09 | 19,99 | 18,65 | 13,43 | 21,75 | -8,11 | Descuento real estricto |
| Fitness en casa | Esterilla de yoga/fitness | Italia | 22,82 | 22,79 | 19,37 | 15,11 | 15,01 | 22,89 | -15,39 | Descuento real estricto |
| Fitness en casa | Bandas elásticas de resistencia | España | 6,99 | 6,99 | 6,64 | 5,01 | 5,01 | 6,99 | -5,01 | Descuento real estricto |
| Fitness en casa | Bandas elásticas de resistencia | Francia | 6,68 | 6,68 | 6,16 | 7,78 | 7,78 | 6,68 | -7,78 | Descuento real estricto |
| Fitness en casa | Bandas elásticas de resistencia | Italia | 6,99 | 6,99 | 6,64 | 5,01 | 5,01 | 6,99 | -5,01 | Descuento real estricto |
| Fitness en casa | Mancuernas ajustables | España | 49,70 | 49,70 | 49,70 | 0,00 | 0,00 | 49,70 | 0,00 | Descuento real general |
| Fitness en casa | Mancuernas ajustables | Italia | 58,57 | 57,90 | 57,90 | 1,14 | 0,00 | 57,30 | 1,05 | Descuento real general |
| Running/entrenamiento | Reloj deportivo GPS | España | 142,66 | 139,00 | 139,99 | 1,87 | -0,71 | 153,29 | -8,67 | Descuento real general |
| Running/entrenamiento | Reloj deportivo GPS | Francia | 139,32 | 138,99 | 137,49 | 1,32 | 1,08 | 138,69 | -0,87 | Descuento real estricto |
| Running/entrenamiento | Reloj deportivo GPS | Italia | 132,33 | 129,00 | 129,99 | 1,77 | -0,77 | 126,00 | 3,17 | Descuento real general |
| Running/entrenamiento | Zapatillas running | España | 34,27 | 33,16 | 33,16 | 3,24 | 0,00 | 32,16 | 3,11 | Descuento real general |
| Running/entrenamiento | Zapatillas running | Francia | 41,19 | 37,79 | 34,80 | 15,51 | 7,91 | 34,73 | 0,20 | Descuento real estricto |
| Running/entrenamiento | Zapatillas running | Italia | 40,84 | 38,79 | 33,95 | 16,88 | 12,48 | 36,94 | -8,10 | Descuento real estricto |
| Deporte popular/outdoor | Balón de fútbol | España | 16,67 | 15,00 | 20,00 | -20,00 | -33,33 | 21,50 | -6,98 | Solo mejora frente al modelo |
| Deporte popular/outdoor | Balón de fútbol | Francia | 13,32 | 12,99 | 14,49 | -8,76 | -11,55 | 14,29 | 1,40 | Sin evidencia suficiente de descuento real |
| Deporte popular/outdoor | Balón de fútbol | Italia | 16,67 | 15,00 | 20,00 | -20,00 | -33,33 | 21,50 | -6,98 | Solo mejora frente al modelo |
| Deporte popular/outdoor | Mochila deportiva | España | 16,49 | 16,49 | 15,99 | 3,03 | 3,03 | 16,49 | -3,03 | Descuento real estricto |
| Deporte popular/outdoor | Mochila deportiva | Francia | 16,63 | 14,95 | 14,95 | 10,10 | 0,00 | 13,44 | 11,25 | Descuento real general |
| Deporte popular/outdoor | Mochila deportiva | Italia | 14,95 | 14,95 | 14,95 | -0,00 | 0,00 | 14,95 | 0,00 | Sin evidencia suficiente de descuento real |
| Deporte popular/outdoor | Casco de ciclismo | España | 24,43 | 24,43 | 24,43 | -0,00 | 0,00 | 24,43 | 0,00 | Sin evidencia suficiente de descuento real |
| Deporte popular/outdoor | Casco de ciclismo | Francia | 31,87 | 24,99 | 35,94 | -12,77 | -43,82 | 36,32 | -1,04 | Solo mejora frente al modelo |
| Deporte popular/outdoor | Casco de ciclismo | Italia | 19,99 | 19,99 | 19,99 | 0,00 | 0,00 | 19,99 | 0,00 | Sin evidencia suficiente de descuento real |
Código fuente del programa
Objetivo UFV: implementar un programa informatico que simule precios previos y compare con precios reales históricos.
Ver código principal del programa
"""
Programa funcional observable - Proyecto Black Friday Amazon Deportes.
Este script cumple el objetivo de Programacion:
1. Lee una base de datos histórica de precios.
2. Limpia y valida los datos.
3. Simula el precio esperado de Black Friday mediante tendencia lineal previa.
4. Compara el precio simulado con el precio real.
5. Calcula descuentos reales, descuentos estrictos, errores y variaciones.
6. Genera evidencias observables: CSV, graficos PNG, informe HTML y salida por consola.
Ejecucion recomendada desde la raiz del proyecto:
python programa_funcional_bf.py
"""
from __future__ import annotations
import argparse
import html
import json
from pathlib import Path
import numpy as np
import pandas as pd
ROOT = Path(__file__).resolve().parents[2]
DEFAULT_INPUT = Path("dataset_histórico_black_friday.csv")
DEFAULT_OUTPUT = Path("salidas")
PRECIO_COLS = [
"precio_2025_10_20",
"precio_2025_11_19",
"precio_min_previo_20oct_19nov",
"precio_bf_2025_11_28",
"precio_min_bf_20nov_1dic",
"precio_post_2025_12_16",
]
def normalizar_texto(valor: object) -> object:
if not isinstance(valor, str):
return valor
return (
valor.replace("España", "España")
.replace("España", "España")
.replace("Matemáticos", "Matemáticos")
)
def cargar_base_histórica(path: Path) -> pd.DataFrame:
df = pd.read_csv(path)
for col in df.columns:
if df[col].dtype == "object":
df[col] = df[col].map(normalizar_texto)
for col in PRECIO_COLS:
if col in df.columns:
df[col] = pd.to_numeric(df[col], errors="coerce")
df = df[df["incluido_análisis_bf"].astype(str).str.lower().isin(["true", "1", "1.0"])]
df = df.dropna(subset=["precio_2025_10_20", "precio_2025_11_19", "precio_bf_2025_11_28"])
return df.reset_index(drop=True)
def calcular_descuentos_estadisticos(df: pd.DataFrame) -> pd.DataFrame:
out = df.copy()
out["precio_referencia_previo_recalculado"] = out[
["precio_2025_10_20", "precio_2025_11_19", "precio_min_previo_20oct_19nov"]
].mean(axis=1)
out["descuento_bf_vs_ref_recalculado_pct"] = (
(out["precio_referencia_previo_recalculado"] - out["precio_bf_2025_11_28"])
/ out["precio_referencia_previo_recalculado"]
* 100
)
out["descuento_estricto_vs_min_previo_recalculado_pct"] = (
(out["precio_min_previo_20oct_19nov"] - out["precio_bf_2025_11_28"])
/ out["precio_min_previo_20oct_19nov"]
* 100
)
out["descuento_real_general"] = out["precio_bf_2025_11_28"] < out["precio_referencia_previo_recalculado"]
out["descuento_real_estricto"] = out["precio_bf_2025_11_28"] < out["precio_min_previo_20oct_19nov"]
out["descuento_no_real_general"] = ~out["descuento_real_general"]
out["descuento_no_real_estricto"] = ~out["descuento_real_estricto"]
return out
def simular_precio_bf(df: pd.DataFrame) -> pd.DataFrame:
out = calcular_descuentos_estadisticos(df)
# Fechas expresadas como dias desde el 20/10/2025.
t_20oct = 0
t_19nov = 30
t_bf = 39
dias_19nov_bf = t_bf - t_19nov
out["t_20oct"] = t_20oct
out["t_19nov"] = t_19nov
out["t_bf"] = t_bf
out["pendiente_m_eur_dia"] = (out["precio_2025_11_19"] - out["precio_2025_10_20"]) / t_19nov
out["precio_simulado_bf_lineal"] = out["precio_2025_10_20"] + out["pendiente_m_eur_dia"] * t_bf
out["error_real_menos_simulado_eur"] = out["precio_bf_2025_11_28"] - out["precio_simulado_bf_lineal"]
out["error_real_menos_simulado_pct"] = (
out["error_real_menos_simulado_eur"] / out["precio_simulado_bf_lineal"] * 100
)
out["variacion_previa_pct"] = (
(out["precio_2025_11_19"] - out["precio_2025_10_20"]) / out["precio_2025_10_20"] * 100
)
out["variacion_hacia_bf_pct"] = (
(out["precio_bf_2025_11_28"] - out["precio_2025_11_19"]) / out["precio_2025_11_19"] * 100
)
out["tasa_diaria_previa_pct"] = out["variacion_previa_pct"] / t_19nov
out["tasa_diaria_hacia_bf_pct"] = out["variacion_hacia_bf_pct"] / dias_19nov_bf
out["bf_por_debajo_de_simulado"] = out["precio_bf_2025_11_28"] < out["precio_simulado_bf_lineal"]
out["clasificación_programa"] = np.select(
[
out["descuento_real_estricto"],
out["descuento_real_general"],
out["bf_por_debajo_de_simulado"],
],
[
"Descuento real estricto",
"Descuento real general",
"Solo mejora frente al modelo",
],
default="Sin evidencia suficiente de descuento real",
)
return out
def resumen_global(df: pd.DataFrame) -> dict[str, float | int]:
return {
"observaciones": int(len(df)),
"descuento_medio_vs_referencia_pct": float(df["descuento_bf_vs_ref_recalculado_pct"].mean()),
"pct_descuento_real_general": float(df["descuento_real_general"].mean() * 100),
"pct_descuento_real_estricto": float(df["descuento_real_estricto"].mean() * 100),
"pct_descuento_no_real_estricto": float(df["descuento_no_real_estricto"].mean() * 100),
"precio_simulado_medio": float(df["precio_simulado_bf_lineal"].mean()),
"precio_real_bf_medio": float(df["precio_bf_2025_11_28"].mean()),
"error_medio_pct": float(df["error_real_menos_simulado_pct"].mean()),
"variacion_previa_media_pct": float(df["variacion_previa_pct"].mean()),
"variacion_hacia_bf_media_pct": float(df["variacion_hacia_bf_pct"].mean()),
}
def resumen_por_grupo(df: pd.DataFrame, grupo: str) -> pd.DataFrame:
out = (
df.groupby(grupo, as_index=False)
.agg(
observaciones=("asin", "count"),
descuento_medio_vs_referencia_pct=("descuento_bf_vs_ref_recalculado_pct", "mean"),
pct_descuento_real_general=("descuento_real_general", "mean"),
pct_descuento_real_estricto=("descuento_real_estricto", "mean"),
pct_no_real_estricto=("descuento_no_real_estricto", "mean"),
precio_simulado_medio=("precio_simulado_bf_lineal", "mean"),
precio_real_bf_medio=("precio_bf_2025_11_28", "mean"),
error_medio_pct=("error_real_menos_simulado_pct", "mean"),
variacion_previa_media_pct=("variacion_previa_pct", "mean"),
variacion_hacia_bf_media_pct=("variacion_hacia_bf_pct", "mean"),
)
)
for col in ["pct_descuento_real_general", "pct_descuento_real_estricto", "pct_no_real_estricto"]:
out[col] *= 100
return out
def svg_header(width: int, height: int, title: str) -> list[str]:
return [
f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}">',
'<rect width="100%" height="100%" fill="#ffffff"/>',
f'<text x="24" y="34" font-family="Arial" font-size="18" font-weight="700" fill="#0B2545">{html.escape(title)}</text>',
]
def save_svg(path: Path, parts: list[str]) -> Path:
path.write_text("\n".join(parts + ["</svg>"]), encoding="utf-8")
return path
def guardar_graficos(df: pd.DataFrame, outdir: Path) -> list[Path]:
"""Genera graficos SVG sin dependencias externas como matplotlib."""
graficos = []
país = resumen_por_grupo(df, "país").sort_values("descuento_medio_vs_referencia_pct")
max_abs = max(1.0, país["descuento_medio_vs_referencia_pct"].abs().max())
parts = svg_header(760, 360, "Descuento medio BF vs referencia previa por país")
x0, center, scale = 170, 390, 260 / max_abs
parts.append(f'<line x1="{center}" y1="70" x2="{center}" y2="310" stroke="#333" stroke-width="1"/>')
for i, row in enumerate(país.itertuples(index=False)):
y = 82 + i * 70
v = float(row.descuento_medio_vs_referencia_pct)
color = "#B3261E" if v < 0 else "#2E7D32"
width = abs(v) * scale
x = center - width if v < 0 else center
parts.append(f'<text x="35" y="{y + 18}" font-family="Arial" font-size="14" fill="#0B2545">{html.escape(str(row.país))}</text>')
parts.append(f'<rect x="{x:.1f}" y="{y}" width="{width:.1f}" height="26" fill="{color}"/>')
parts.append(f'<text x="{(x + width + 8) if v >= 0 else (x - 58):.1f}" y="{y + 18}" font-family="Arial" font-size="13" font-weight="700" fill="{color}">{v:.2f}%</text>')
graficos.append(save_svg(outdir / "grafico_01_descuento_medio_por_país.svg", parts))
vals = [
("Real estricto", df["descuento_real_estricto"].mean() * 100, "#FF9900"),
("No real estricto", df["descuento_no_real_estricto"].mean() * 100, "#B3261E"),
]
parts = svg_header(760, 360, "Clasificación de descuentos con criterio estricto")
for i, (label, v, color) in enumerate(vals):
x = 150 + i * 260
bar_h = v * 2.2
y = 300 - bar_h
parts.append(f'<rect x="{x}" y="{y:.1f}" width="130" height="{bar_h:.1f}" fill="{color}"/>')
parts.append(f'<text x="{x + 65}" y="{y - 10:.1f}" text-anchor="middle" font-family="Arial" font-size="15" font-weight="700" fill="{color}">{v:.2f}%</text>')
parts.append(f'<text x="{x + 65}" y="325" text-anchor="middle" font-family="Arial" font-size="13" fill="#0B2545">{label}</text>')
parts.append('<line x1="80" y1="300" x2="690" y2="300" stroke="#DADCE0"/>')
graficos.append(save_svg(outdir / "grafico_02_descuentos_reales_vs_no_reales.svg", parts))
parts = svg_header(760, 420, "Precio BF real frente a precio BF simulado")
min_v = min(df["precio_simulado_bf_lineal"].min(), df["precio_bf_2025_11_28"].min())
max_v = max(df["precio_simulado_bf_lineal"].max(), df["precio_bf_2025_11_28"].max())
pad = (max_v - min_v) * 0.08
min_v -= pad
max_v += pad
def sx(v: float) -> float:
return 80 + (v - min_v) / (max_v - min_v) * 590
def sy(v: float) -> float:
return 350 - (v - min_v) / (max_v - min_v) * 270
parts.append('<line x1="80" y1="350" x2="680" y2="350" stroke="#333"/>')
parts.append('<line x1="80" y1="80" x2="80" y2="350" stroke="#333"/>')
parts.append(f'<line x1="{sx(min_v):.1f}" y1="{sy(min_v):.1f}" x2="{sx(max_v):.1f}" y2="{sy(max_v):.1f}" stroke="#FF9900" stroke-dasharray="6 5"/>')
for row in df.itertuples(index=False):
parts.append(f'<circle cx="{sx(row.precio_simulado_bf_lineal):.1f}" cy="{sy(row.precio_bf_2025_11_28):.1f}" r="4" fill="#1F77B4" opacity="0.8"/>')
parts.append('<text x="300" y="395" font-family="Arial" font-size="13" fill="#0B2545">Precio simulado BF</text>')
parts.append('<text x="12" y="220" transform="rotate(-90 12 220)" font-family="Arial" font-size="13" fill="#0B2545">Precio real BF</text>')
graficos.append(save_svg(outdir / "grafico_03_real_vs_simulado.svg", parts))
ejemplo = df.sort_values("error_real_menos_simulado_pct").iloc[0]
xs = [0, 30, 39]
labels = ["20/10", "19/11", "28/11 BF"]
real = [ejemplo["precio_2025_10_20"], ejemplo["precio_2025_11_19"], ejemplo["precio_bf_2025_11_28"]]
sim = [ejemplo["precio_2025_10_20"], ejemplo["precio_2025_11_19"], ejemplo["precio_simulado_bf_lineal"]]
min_p = min(real + sim) * 0.92
max_p = max(real + sim) * 1.08
def tx(t: float) -> float:
return 100 + t / 39 * 560
def ty(v: float) -> float:
return 330 - (v - min_p) / (max_p - min_p) * 235
parts = svg_header(760, 410, f"Evolucion funcional: {ejemplo['producto']} - {ejemplo['país']}")
parts.append('<line x1="90" y1="330" x2="680" y2="330" stroke="#333"/>')
parts.append('<line x1="90" y1="85" x2="90" y2="330" stroke="#333"/>')
sim_points = " ".join(f"{tx(x):.1f},{ty(y):.1f}" for x, y in zip(xs, sim))
real_points = " ".join(f"{tx(x):.1f},{ty(y):.1f}" for x, y in zip(xs, real))
parts.append(f'<polyline points="{sim_points}" fill="none" stroke="#1F77B4" stroke-width="3"/>')
parts.append(f'<polyline points="{real_points}" fill="none" stroke="#FF9900" stroke-width="3"/>')
for x, label in zip(xs, labels):
parts.append(f'<text x="{tx(x):.1f}" y="356" text-anchor="middle" font-family="Arial" font-size="12" fill="#0B2545">{label}</text>')
for x, y in zip(xs, sim):
parts.append(f'<circle cx="{tx(x):.1f}" cy="{ty(y):.1f}" r="4" fill="#1F77B4"/>')
for x, y in zip(xs, real):
parts.append(f'<circle cx="{tx(x):.1f}" cy="{ty(y):.1f}" r="4" fill="#FF9900"/>')
parts.append('<text x="505" y="90" font-family="Arial" font-size="13" fill="#1F77B4">simulado</text>')
parts.append('<text x="505" y="112" font-family="Arial" font-size="13" fill="#FF9900">real</text>')
graficos.append(save_svg(outdir / "grafico_04_ejemplo_evolucion_funcional.svg", parts))
return graficos
def generar_html(df: pd.DataFrame, resumen: dict, graficos: list[Path], outdir: Path) -> Path:
filas = []
columnas = [
"producto",
"país",
"precio_2025_10_20",
"precio_2025_11_19",
"precio_simulado_bf_lineal",
"precio_bf_2025_11_28",
"descuento_bf_vs_ref_recalculado_pct",
"descuento_estricto_vs_min_previo_recalculado_pct",
"error_real_menos_simulado_pct",
"clasificación_programa",
]
for _, row in df[columnas].iterrows():
filas.append(
"<tr>"
+ "".join(
f"<td>{html.escape(f'{row[col]:.2f}' if isinstance(row[col], float) else str(row[col]))}</td>"
for col in columnas
)
+ "</tr>"
)
metrics = "\n".join(
f"<div class='metric'><b>{k}</b><span>{v:.2f}</span></div>" if isinstance(v, float)
else f"<div class='metric'><b>{k}</b><span>{v}</span></div>"
for k, v in resumen.items()
)
imgs = "\n".join(f"<img src='{g.name}' alt='{g.name}'>" for g in graficos)
html_doc = f"""<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Programa BF Amazon Deportes - Evidencia</title>
<style>
body {{ font-family: Arial, sans-serif; margin: 32px; color: #0B2545; }}
h1, h2 {{ color: #0B2545; }}
.metrics {{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }}
.metric {{ border: 1px solid #DADCE0; padding: 12px; background: #F6F8FB; }}
.metric b {{ display: block; font-size: 12px; color: #5F6368; }}
.metric span {{ font-size: 22px; font-weight: 700; }}
img {{ max-width: 48%; margin: 14px 1%; border: 1px solid #DADCE0; }}
table {{ border-collapse: collapse; font-size: 12px; width: 100%; }}
th, td {{ border: 1px solid #DADCE0; padding: 5px; text-align: left; }}
th {{ background: #E8EEF5; }}
code {{ background: #F6F8FB; padding: 2px 4px; }}
</style>
</head>
<body>
<h1>Programa funcional BF Amazon Deportes</h1>
<p>Este informe HTML es generado automaticamente por <code>programa_funcional_bf.py</code>.</p>
<h2>Resumen global</h2>
<div class="metrics">{metrics}</div>
<h2>Graficos generados</h2>
{imgs}
<h2>Calculos fila a fila</h2>
<table>
<thead><tr>{"".join(f"<th>{c}</th>" for c in columnas)}</tr></thead>
<tbody>{"".join(filas)}</tbody>
</table>
</body>
</html>"""
path = outdir / "informe_observable_programa.html"
path.write_text(html_doc, encoding="utf-8")
return path
def imprimir_consola(resumen: dict, outdir: Path) -> None:
print("\n=== PROGRAMA FUNCIONAL BF AMAZON DEPORTES ===")
print("Objetivo: simular precio BF esperado y compararlo con precio BF real histórico.")
print("\nResumen global:")
for key, value in resumen.items():
if isinstance(value, float):
print(f"- {key}: {value:.2f}")
else:
print(f"- {key}: {value}")
print(f"\nArchivos generados en: {outdir}")
print("- calculos_fila_a_fila.csv")
print("- resumen_global.json")
print("- resumen_por_país.csv")
print("- resumen_por_subcategoria.csv")
print("- informe_observable_programa.html")
print("- graficos SVG")
def main() -> None:
parser = argparse.ArgumentParser(description="Análisis observable del Black Friday en Amazon Deportes.")
parser.add_argument("--input", type=Path, default=DEFAULT_INPUT, help="CSV histórico de entrada.")
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT, help="Carpeta de salidas.")
args = parser.parse_args()
args.output.mkdir(parents=True, exist_ok=True)
df = simular_precio_bf(cargar_base_histórica(args.input))
resumen = resumen_global(df)
graficos = guardar_graficos(df, args.output)
df.to_csv(args.output / "calculos_fila_a_fila.csv", index=False, encoding="utf-8-sig")
resumen_por_grupo(df, "país").to_csv(args.output / "resumen_por_país.csv", index=False, encoding="utf-8-sig")
resumen_por_grupo(df, "subcategoria").to_csv(
args.output / "resumen_por_subcategoria.csv", index=False, encoding="utf-8-sig"
)
(args.output / "resumen_global.json").write_text(
json.dumps(resumen, indent=2, ensure_ascii=False), encoding="utf-8"
)
generar_html(df, resumen, graficos, args.output)
imprimir_consola(resumen, args.output)
if __name__ == "__main__":
main()