Analisis de la disminución de ventas de un minorista de productos de escritura de lujo¶

Sección 1 - revisión de ingresos¶

Importamos Pandas y Matplotlib

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
sns.set_theme(style="ticks", rc={"axes.spines.right": False, "axes.spines.top": False})

Importamos la base de datos "efecto chivas.xlsx"

In [3]:
boligrafos = pd.read_excel("Data/Registro de ventas.xlsx",index_col="Id_venta")
In [4]:
boligrafos.head()
Out[4]:
Costo Produccion Precio Venta Ganancias Ganancias % Fecha Venta Tamaño (cm) Peso (gr) Oro (gr) Plata (gr) Estetica Tipo Platino (gr) Estuche Repuestos Duracion (m) Valoracion Cliente Color
Id_venta
3317 6365 8274.5 1909.5 0.3 2016-02-22 14 11 2 1 82 Boligrafo 2 No 2 3200 Muy Buena Azul
7123 8160 11424.0 3264.0 0.4 2016-02-23 14 13 1 4 58 Boligrafo 0 Si 3 3200 Buena Negro
6487 5050 6565.0 1515.0 0.3 2016-02-27 7 6 1 0 83 Boligrafo 0 Si 3 1600 Regular Azul
4526 7750 8525.0 775.0 0.1 2016-03-02 14 13 0 0 84 Boligrafo 1 No 3 2000 Buena Azul
1185 3915 4698.0 783.0 0.2 2016-03-02 18 22 0 1 56 Boligrafo 1 No 1 2000 Buena Azul
In [5]:
boligrafos.info()
<class 'pandas.core.frame.DataFrame'>
Index: 8000 entries, 3317 to 7844
Data columns (total 17 columns):
 #   Column              Non-Null Count  Dtype         
---  ------              --------------  -----         
 0   Costo Produccion    8000 non-null   int64         
 1   Precio Venta        8000 non-null   float64       
 2   Ganancias           8000 non-null   float64       
 3   Ganancias %         8000 non-null   float64       
 4   Fecha Venta         8000 non-null   datetime64[ns]
 5   Tamaño (cm)         8000 non-null   int64         
 6   Peso (gr)           8000 non-null   int64         
 7   Oro (gr)            8000 non-null   int64         
 8   Plata (gr)          8000 non-null   int64         
 9   Estetica            8000 non-null   int64         
 10  Tipo                8000 non-null   object        
 11  Platino (gr)        8000 non-null   int64         
 12  Estuche             8000 non-null   object        
 13  Repuestos           8000 non-null   int64         
 14  Duracion (m)        8000 non-null   int64         
 15  Valoracion Cliente  8000 non-null   object        
 16  Color               8000 non-null   object        
dtypes: datetime64[ns](1), float64(3), int64(9), object(4)
memory usage: 1.1+ MB

Agregar una columna llamada "Año", que contega el año de cada venta:

In [6]:
boligrafos['Año'] = boligrafos['Fecha Venta'].dt.strftime('%Y')#.astype('datetime64[ns]')

Obtenemos la cantidad de ingresos que han tenido en cada año:

In [7]:
ventas_por_anio = pd.pivot_table(data=boligrafos, index='Año', values='Precio Venta', aggfunc='sum')
ventas_por_anio
Out[7]:
Precio Venta
Año
2016 8490183.0
2017 8760126.0
2018 8759273.5
2019 6988492.0
2020 6975988.0
2021 6830662.0

Utilizamos la funcion plot.bar() para visualizar la cantidad de ventas realizadas en cada año y usamos plt.axvline y plt.text para señalar los años en los cuales hubo una caida en los ingresos totales de las ventas

In [8]:
plot = ventas_por_anio.plot(kind='bar', ylim=(6500000, 9000000), ylabel='Ingresos (Millones)', legend=False, title='Ingresos generados desde 2016 al 2021')
plot.bar_label(plot.containers[0], fontsize=11, labels=list(round(ventas_por_anio['Precio Venta'] / 1000000, 2)))

plt.axvline(x=2.5, linestyle='--', color='gray')
plt.text(x=2.75, y=8700000, s='Inicio de la caida de ingresos\n(2019 al 2021)', color='gray')

plt.show()
No description has been provided for this image

Conclución: Se observa una caida clara de ingresos entre el 2018 (8.759.273) y el 2019 (6.988.492) lo que se traduce en -20,21% de ingresos, que no se recuperan en los siguientes 2 años

Sección 2 - revisión de ganancias¶

Ahora hacemos el mismo ejercicio con las ganancias

In [9]:
ganancias_por_anio = pd.pivot_table(data=boligrafos, index='Año', values='Ganancias', aggfunc='sum')
ganancias_por_anio
Out[9]:
Ganancias
Año
2016 1831578.0
2017 1927126.0
2018 1886198.5
2019 1543292.0
2020 1608348.0
2021 1559622.0
In [10]:
list(round(ganancias_por_anio['Ganancias'] / 1000000, 2))
Out[10]:
[1.83, 1.93, 1.89, 1.54, 1.61, 1.56]
In [11]:
plot = ganancias_por_anio.plot(kind='bar', legend=False, ylim=(1500000, 2000000), ylabel='Ganancias (Millones)', title='Ganancias generados desde 2016 al 2021')
plot.bar_label(plot.containers[0], fontsize=11, labels=list(round(ganancias_por_anio['Ganancias'] / 1000000, 2)))

plt.axvline(x=2.5, linestyle='--', color='gray')
plt.text(x=2.7, y=1950000, s='Inicio de la caida de ganancias\n(2019 al 2021)', color='gray')

plt.show()
No description has been provided for this image

Conclución: Como en los ingresos las ganacias tambien se ven diminuidas pasando de 1.886.198 en el 2018 a 1.543.292 en 2019 lo que equivale a un -18.17%

Sección 3 - revisión de unidades vendidas¶

Obtenemos la cantidad total de productos vendidos en cada año

In [12]:
productos_por_anio = pd.pivot_table(data=boligrafos, index='Año', values='Tipo', aggfunc='count')
productos_por_anio
Out[12]:
Tipo
Año
2016 1334
2017 1352
2018 1347
2019 1326
2020 1323
2021 1318

Utilizamos la funcion .plot(drawstyle="steps") para mostrar la cantidad de productos vendidos en cada año

In [13]:
productos_por_anio.plot(kind='line', drawstyle='steps', marker='o', legend=False, ylabel='# de unidades vendidas', title='Cantidad de productos vendidos desde 2016 al 2021')

plt.show()
No description has been provided for this image

Conclución 1: Como era de esperar el numero de unidades vendidas a disminuido pasando de 1347 unidades en el 2018 a 1326 en 2019 lo que equivale a un -1.55% que no es proporcional con la disminución de los ingresos, por lo cual es necesario saber cual es el producto que se esta dejando de vender y ver como afecta el numero de unidades vendidas y el ingreso generado

Obtenemos el numero de productos vendidos en cada año por tipo

In [14]:
pcategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Color', aggfunc='count')
pcategorias_por_anio
Out[14]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 499 408 427
2017 548 431 373
2018 581 370 396
2019 461 419 446
2020 351 484 488
2021 289 514 515
In [15]:
ppcategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Color', aggfunc='count')

suma_valor_total_fila = ppcategorias_por_anio.sum(axis=1)
ppcategorias_por_anio = round((ppcategorias_por_anio.divide(suma_valor_total_fila, axis=0))*100, 1)

ppcategorias_por_anio
Out[15]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 37.4 30.6 32.0
2017 40.5 31.9 27.6
2018 43.1 27.5 29.4
2019 34.8 31.6 33.6
2020 26.5 36.6 36.9
2021 21.9 39.0 39.1

Obtenemos los ingresos totales en cada año por tipo

In [16]:
icategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Precio Venta', aggfunc='sum')
icategorias_por_anio
Out[16]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 4020536.0 2231536.5 2238110.5
2017 4425590.5 2319590.0 2014945.5
2018 4540819.5 2061087.5 2157366.5
2019 2360550.0 2263950.0 2363992.0
2020 1513329.5 2749812.0 2712846.5
2021 1205819.0 2890541.0 2734302.0
In [17]:
pvcategorias_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Precio Venta', aggfunc='sum')

suma_valor_total_fila = pvcategorias_por_anio.sum(axis=1)
pvcategorias_por_anio = round((pvcategorias_por_anio.divide(suma_valor_total_fila, axis=0))*100, 1)

pvcategorias_por_anio
Out[17]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 47.4 26.3 26.4
2017 50.5 26.5 23.0
2018 51.8 23.5 24.6
2019 33.8 32.4 33.8
2020 21.7 39.4 38.9
2021 17.7 42.3 40.0

Utilizamos la funcion .plot() para graficar la cantidad de productos vendidos en cada año separado por categoria

In [18]:
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(15,13))

fig.suptitle('Unidades e ingresos y porcentaje de participación por tipo de producto', y=0.95)

pcategorias_por_anio.plot(ax=ax[0,0], kind='line', marker='o', ylabel='# de unidades vendidas', title='Unidades de productos vendidos por tipo desde 2016 al 2021')
plot = ppcategorias_por_anio.plot(ax=ax[0,1], kind='bar', stacked=True, ylabel='% de las unidades', title='% Unidades vendidas por tipo desde 2016 al 2021', rot=0, yticks=range(0, 101, 20), legend=False)
ax[0,1].bar_label(plot.containers[0], fontsize=11, label_type='center', color='white', labels=ppcategorias_por_anio['Boligrafo'])
ax[0,1].bar_label(plot.containers[1], fontsize=11, label_type='center', color='white', labels=ppcategorias_por_anio['Lapicero'])
ax[0,1].bar_label(plot.containers[2], fontsize=11, label_type='center', color='white', labels=ppcategorias_por_anio['Plumafuente'])

icategorias_por_anio.plot(ax=ax[1,0], kind='line', marker='o', ylabel='Ingresos (Millones)', title='Ingresos generados por tipo desde 2016 al 2021')
plot = pvcategorias_por_anio.plot(ax=ax[1,1], kind='bar', stacked=True, ylabel='% de los ingresos', title='% Ingresos generados por tipo desde 2016 al 2021', rot=0, yticks=range(0, 101, 20), legend=False)
ax[1,1].bar_label(plot.containers[0], fontsize=11, label_type='center', color='white', labels=pvcategorias_por_anio['Boligrafo'])
ax[1,1].bar_label(plot.containers[1], fontsize=11, label_type='center', color='white', labels=pvcategorias_por_anio['Lapicero'])
ax[1,1].bar_label(plot.containers[2], fontsize=11, label_type='center', color='white', labels=pvcategorias_por_anio['Plumafuente'])

plt.subplots_adjust(hspace=0.3)
plt.show()
No description has been provided for this image

Conclución 2: Los boligrafos son el producto que historicamente a generado mas unidades de ventas y mayores ingresos, por lo cual son la principal causa de la disminución de los ingresos. Ademas de que con estas dos graficas se entiende el porque el porcentaje de disminución general de unidades (-1.55%) e ingresos (-20.21%) no se corresponden, ya que en unidades vendidas el lapicero y la pluma fuente han aumentado desde el 2018, sin embargo ese aumento no a repercutido de la misma forma en los ingresos, por esta razón es que el numero de unidades generales no se ve significativamente afectado por da disminución de ventas de boligrafos.

Sección 4 - Análisis de la percepción de los clientes¶

Obtenemos la cantidad total de veces que los clientes opinaron que nuestros productos son malos, muy malos, regulares, buenos y muy buenos en cada año

In [19]:
opiniones_por_anio = pd.pivot_table(data=boligrafos, index='Valoracion Cliente', values='Tipo', aggfunc='count', sort=False)
opiniones_por_anio
Out[19]:
Tipo
Valoracion Cliente
Muy Buena 1709
Buena 1852
Regular 1651
Mala 1386
Muy Mala 1402

Utilizamos la funcion plot.pie para visualizar el porcentaje de clientes que opina que nuestros productos son malos, muy malos, regulares, buenos y muy buenos en cada año

In [20]:
opiniones_por_anio.plot(kind='pie', y='Tipo', legend=False, autopct='%1.1f%%', ylabel='', title='% de calificación del cliente por tipo de valoración')

plt.show()
No description has been provided for this image

Conclución 1: Con las valoraciones agregadas se puede ver que el 34.8% de las opiniones son "negativas" y 20.6% son "neutrales" por lo cual vamos a revizar que productos tienen la mayor participación en cada una de estas categorias y si esto se corresponde con la disminución de ingresos de los boligrafos.

In [21]:
calificaciones = pd.pivot_table(data=boligrafos, index=['Año', 'Valoracion Cliente', 'Tipo'], values='Color', aggfunc='count', sort=False).reset_index()
calificaciones
Out[21]:
Año Valoracion Cliente Tipo Color
0 2016 Muy Buena Boligrafo 148
1 2016 Buena Boligrafo 161
2 2016 Regular Boligrafo 121
3 2016 Mala Boligrafo 36
4 2016 Muy Mala Boligrafo 33
... ... ... ... ...
85 2021 Muy Buena Plumafuente 110
86 2021 Regular Plumafuente 105
87 2021 Muy Mala Plumafuente 92
88 2021 Mala Plumafuente 103
89 2021 Buena Plumafuente 105

90 rows × 4 columns

In [22]:
sns.relplot(data=calificaciones, x='Año', y='Color', hue='Tipo', col='Valoracion Cliente', kind='line', col_wrap=3, height=4, markers=True, marker='o')

plt.show()
No description has been provided for this image

Conclución 2: El numero de valoraciones que eran muy buenas, buenas y regualres decaen de una forma bastante similar que los ingresos, es tanta la disminución en las ventas de boligrafos que las valoraciones malas y muy malas tambien disminuyeron, por lo cual nos enfocaremos en comprender el porque de la disminución de los boligrafos.

Filtramos los productos vendidos, solo conservamos aquellos en los cuales el tipo fue "Boligrafo" y obtenemos la cantidad total de veces que los clientes opinaron que nuestros boligrafos son malos, muy malos, regulares, buenos y muy buenos en cada año

In [23]:
opiniones_boligrafo_por_anio = pd.pivot_table(data=boligrafos[boligrafos['Tipo'] == 'Boligrafo'], columns='Valoracion Cliente', index='Año', values='Tipo', aggfunc='count', sort=False)
suma_valor_total_fila = opiniones_boligrafo_por_anio.sum(axis=1)

opiniones_boligrafo_por_anio = (opiniones_boligrafo_por_anio.divide(suma_valor_total_fila, axis=0))*100

porc_opiniones_boligrafo_por_anio = opiniones_boligrafo_por_anio.map('{:.1f}%'.format, na_action='ignore')
porc_opiniones_boligrafo_por_anio
Out[23]:
Valoracion Cliente Muy Buena Buena Regular Mala Muy Mala
Año
2016 29.7% 32.3% 24.2% 7.2% 6.6%
2017 31.2% 30.1% 22.4% 8.6% 7.7%
2018 27.2% 32.5% 22.7% 7.6% 10.0%
2019 19.5% 21.5% 24.5% 16.9% 17.6%
2020 19.4% 22.2% 18.2% 20.2% 19.9%
2021 14.9% 22.1% 23.9% 21.8% 17.3%

Utilizamos la funcion plot para visualizar el porcentaje de clientes que opina que nuestros boligrafos son malos, muy malos, regulares, buenos y muy buenos en cada año

In [24]:
titulos = ['% de valoración del cliente en categorias "positivas"', '% de valoración del cliente en categoria "neutra"', '% de valoración del cliente en categorias "negativas"']
valoraciones = [['Muy Buena', 'Buena'], 'Regular', ['Mala', 'Muy Mala']]
#texto = 

fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(6, 12))

fig.suptitle('Evoluación de la valoración del producto boligrafo (2016-2021)', y=0.93)

for x in range(0, 3):
    opiniones_boligrafo_por_anio[valoraciones[x]].plot(ax=ax[x], marker='o')
    ax[x].set_title(titulos[x])
    ax[x].set_ylabel('% del total de valoraciones')
    ax[x].set_ylim(0,35)
    ax[x].set_yticks(ticks=range(0, 36, 5))
    ax[x].set_yticklabels(labels=[str(y)+'%' for y in range(0, 36, 5)])
    ax[x].legend(title='')
    ax[x].axvline(x=2, linestyle='--', color='gray', alpha=0.3)
    ax[x].text(x=2.2, y=2, s='Inicio de la disminución en ventas', color='gray', alpha=0.3)

plt.subplots_adjust(hspace=0.4)
plt.show()
No description has been provided for this image

Conclución 3: Observando las proporciones de las valoraciones de los boligrafos Muy Buena (29.7%) y Buena (32.3%) en el 2016 pasaron a disminuir a 14.9% y 22.1% respectivamente en el 2021 mientras que la valoraciones muy malas (6.6%) y malas (7.2%) en el 2016 pasaron a crecer 21.8% y 17.3% en el 2021 respectivamente. Por lo cual indagaremos en la calidad del producto analizando la cantidad de repuestos que se venden por tipo de producto

Sección 5 - Análisis de la calidad del producto¶

Obtenemos la cantidad promedio de repuestos que incluimos en la venta de los boligrafos por año

In [25]:
brepuestos_prom_por_anio = pd.pivot_table(data=boligrafos[boligrafos['Tipo']=='Boligrafo'], index='Año', values='Repuestos', aggfunc='mean')
brepuestos_prom_por_anio
Out[25]:
Repuestos
Año
2016 1.991984
2017 2.056569
2018 2.029260
2019 2.041215
2020 2.062678
2021 2.000000
In [26]:
plot = brepuestos_prom_por_anio.plot(kind='bar', ylim=(1.9, 2.1), ylabel='Promedio de repuestos por venta', title='Promedio de repuestos por venta de boligrafos por año', legend=False)
plot.bar_label(plot.containers[0], fontsize=11, fmt='%1.3g')

plt.show()
No description has been provided for this image

Utilizamos la funcion .plot.bar para graficar la cantidad media de repuestos de los 3 tipos de productos

Conclución 1: Observando el promedio de repuestos por año de los boligrafos no resulta tener una variación significativa año a año, por lo cual seria necesario comparar las 3 categorias de producto para entender si esta cantidad promedio de repuestos resulta ser superior a los demas y sea esta una causa de la disminución de ventas.

Obtenemos el promedio de repuestos comprados por tipo de producto en cada año

In [27]:
grepuestos_prom_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Repuestos', aggfunc='mean')
grepuestos_prom_por_anio
Out[27]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 1.991984 1.941176 1.971897
2017 2.056569 2.037123 1.941019
2018 2.029260 1.991892 1.989899
2019 2.041215 2.035800 2.033632
2020 2.062678 2.020661 1.987705
2021 2.000000 1.998054 1.972816
In [28]:
grepuestos_prom_por_anio.plot(kind='line', marker='o', ylabel='Promedio de repuestos', ylim=(1.9, 2.1), title='Promedio de repuestos por venta de tipo de producto por año')
plt.show()
No description has been provided for this image

Conclución 2: Si bien los boligrafos tienen el mayor promedio de repuestos por año, la diferencia con las demas categorias no es significativa, por lo cual la calidad no resultaria ser el principal factor aun que si uno a tener en cuenta ya que los lapiceros y las plumas fuente han disminuido el numero de repuestos en los ultimos años manteniendo su numero de ventas por producto. Ahora analizaremos la duración de estos productos para ver si esta variable tiene una mayor peso en la disminución de ventas

Sección 6 - Análisis de la duración del producto¶

Obtenemos el promedio de metros de duración por tipo de producto en cada año

In [29]:
duracion_prom_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Duracion (m)', aggfunc='mean')
duracion_prom_por_anio
Out[29]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 2418.436874 2398.039216 2390.632319
2017 2393.430657 2323.897912 2393.565684
2018 2402.753873 2393.513514 2330.303030
2019 2379.175705 2366.587112 2381.165919
2020 2395.441595 2419.834711 2422.950820
2021 2442.906574 2389.105058 2390.679612
In [30]:
duracion_prom_por_anio.plot(kind='line', marker='o', ylabel='Duración promedio (metros)', ylim=(2300, 2450), title='Promedio de duración por tipo de producto por año')
plt.show()
No description has been provided for this image

Conclución: En un principio la duración de los 3 productos era muy similar, en los 2 años posteriores el lapicero y la plumafuente decalleron en promedio 100 metros con respecto a los boligrafos los cuales se han mantenido y aumentado su duración en el tiempo.Sin embargo puede ser que este reajuste en la duración, sumado a la disminución de la cantidad de repuestos de los lapiceros y plumafuente son las que estan amortiguando y reemplazando las ventas de boligrafos. Ahora revisaremos el valor promedio de venta de cada producto.

Sección 7 - Análisis del precio del producto¶

Obtenemos el precio de venta promedio por tipo de producto en cada año

In [31]:
precio_prom_por_anio = round(pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Precio Venta', aggfunc='mean'), 2)
precio_prom_por_anio
Out[31]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 8057.19 5469.45 5241.48
2017 8075.90 5381.88 5402.00
2018 7815.52 5570.51 5447.90
2019 5120.50 5403.22 5300.43
2020 4311.48 5681.43 5559.11
2021 4172.38 5623.62 5309.32
In [32]:
precio_prom_por_anio.plot(kind='line', marker='o', ylabel='Precio promedio', title='Precio promedio por tipo de producto por año')

plt.show()
No description has been provided for this image

Conclución: El precio promedio de los boligrafos es bastante superior casi duplicando el precio de los lapiceros y las plumas fuentes, por lo cual es necesario verificar si este precio esta justificado en otros aspectos que no sean la calidad o la duración de la tinta ya que como lo hemos evaluado anteriormente estos factores o no varian mucho entre si o despues del 2018 se han igualado con respecto a los boligrafos. Por lo cual esta podria ser la razón inicial en la dismución de ventas de los boligrafos, Ya que a pesar que desde el 2019 disminuyeron sus precios de forma significativa, siguen si cambiar esa tendencia a la baja de la venta de boligrafos.

Sección 8 - Análisis de las demas variables del producto (metales, color de tinta, estuche, estetica)¶

Metales usados en los productos¶

Obtenemos el precio de venta promedio por tipo de producto en cada año

In [33]:
materiales = pd.pivot_table(data=boligrafos, index=['Año', 'Tipo'], values=['Oro (gr)', 'Plata (gr)', 'Platino (gr)'], aggfunc='mean', sort=False).stack(future_stack=True).reset_index()
materiales.columns = ['Año', 'Tipo', 'Material', 'Cantidad']
materiales.head()
Out[33]:
Año Tipo Material Cantidad
0 2016 Boligrafo Oro (gr) 0.977956
1 2016 Boligrafo Plata (gr) 2.559118
2 2016 Boligrafo Platino (gr) 1.002004
3 2017 Boligrafo Oro (gr) 0.945255
4 2017 Boligrafo Plata (gr) 2.611314
In [34]:
sns.relplot(data=materiales, x='Año', y='Cantidad', hue='Tipo', col='Material', kind='line', col_wrap=3, height=4, markers=True, marker='o')

plt.show()
No description has been provided for this image

Conclución: La cantidad promedio de metales usados en cada producto no ha variado de forma significativa por lo cual no es un factor de peso en la disminución de ingresos.

Color de tinta disponible en los productos¶

Obtenemos el numero de ventas por el color de tinta en cada año

In [35]:
color_por_anio_plot = pd.pivot_table(data=boligrafos, index=['Año','Tipo', 'Color'], values='Valoracion Cliente', aggfunc='count')
color_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns=['Tipo', 'Color'] , values='Valoracion Cliente', aggfunc='count')
color_por_anio
Out[35]:
Tipo Boligrafo Lapicero Plumafuente
Color Azul Negro Rojo Verde Azul Negro Rojo Verde Azul Negro Rojo Verde
Año
2016 143 201 78 77 114 180 58 56 110 177 65 75
2017 156 233 81 78 108 192 62 69 123 138 57 55
2018 159 249 76 97 95 161 50 64 104 173 48 71
2019 138 200 63 60 108 193 58 60 123 202 60 61
2020 108 149 54 40 139 216 65 64 132 211 66 79
2021 78 126 43 42 144 232 63 75 145 215 92 63
In [36]:
sns.relplot(data=color_por_anio_plot, x='Año', y='Valoracion Cliente', hue='Color', col='Tipo', kind='line', col_wrap=3, height=4, markers=True, marker='o', palette=['blue','black','red','green'])
plt.ylabel('numero de boligrafos')
plt.show()
No description has been provided for this image

Conclución: La cantidad de disminuye y aumenta cada producto por color mantiene el patron de los ingresos, por lo cual tampoco es un factor relevante.

Se entrega estuche con el producto?¶

Obtenemos el numero de ventas en las que se entrego un estuche en cada año

In [37]:
estuche_por_anio_plot = pd.pivot_table(data=boligrafos, index=['Año', 'Tipo', 'Estuche'],  values='Valoracion Cliente', aggfunc='count')
estuche_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns=['Tipo', 'Estuche'], values='Valoracion Cliente', aggfunc='count')
estuche_por_anio
Out[37]:
Tipo Boligrafo Lapicero Plumafuente
Estuche No Si No Si No Si
Año
2016 266 233 197 211 206 221
2017 281 267 217 214 189 184
2018 296 285 190 180 200 196
2019 229 232 222 197 230 216
2020 166 185 249 235 231 257
2021 151 138 257 257 258 257
In [38]:
sns.relplot(data=estuche_por_anio_plot, x='Año', y='Valoracion Cliente', hue='Estuche', col='Tipo', kind='line', col_wrap=3, height=4, markers=True, marker='o')

plt.show()
No description has been provided for this image

Conclución: Que el producto incluya un estuche no resulta en ser un factor relevante en la venta del producto en si, ya que las ventas de los que si lo incluyen y los que no son bastante similares.

Estetica del producto¶

Obtenemos la valoración estetica promedio por tipo de producto en cada año

In [39]:
estetica_por_anio_plot = pd.pivot_table(data=boligrafos, index=['Año', 'Tipo'], values='Estetica', aggfunc='mean')
estetica_por_anio = pd.pivot_table(data=boligrafos, index='Año', columns='Tipo', values='Estetica', aggfunc='mean')
estetica_por_anio
Out[39]:
Tipo Boligrafo Lapicero Plumafuente
Año
2016 74.166333 73.644608 73.997658
2017 74.906934 76.204176 74.474531
2018 74.685026 74.605405 74.366162
2019 74.774403 75.863962 75.589686
2020 73.874644 74.859504 74.899590
2021 75.339100 74.394942 75.120388
In [40]:
sns.relplot(data=estetica_por_anio_plot, x='Año', y='Estetica', col='Tipo', kind='line', col_wrap=3, height=4, markers=True, marker='o')

plt.show()
No description has been provided for this image

Conclución: En el caso de la calificación estetica no se corresponde con el patron de ventas, ademas que resulta bastante erratica la calificación y de forma aparente no resulta ser un factor en la disminución de las ventas.

Sección 9 - Verificación de la correlación entre variables¶

Si bien ya hemos revisado todas las variables y podriamos tener unca conclución del porque de la disminución de ventas, no sobra asegurarnos observando la correlación de las diferentes variables que disponemos en la base de datos por si hubiesemos omitido algo.

In [41]:
h = boligrafos.apply(lambda x: pd.factorize(x)[0]).corr()

plt.figure(figsize = (16,7.7))
sns.heatmap(data = h, annot = True, fmt='.1g')

plt.show()
No description has been provided for this image

Conclución: La correlación entre variables es casi inexistente y el precio de venta y las ganancias estan principalmente correlacionadas con el tipo de producto, por lo cual no hemos omitido ningun patron implicito en los datos.

Conclución de cierre¶

El precio promedio de los boligrafos desde el el 2016 era muy superior al de los lapiceros y pluma fuente, esta diferencia de precios no se ve justificada en materiales, ni en duración o en calidad. Por lo cual pordemos comprender que el valor percibido no era intrinseco al producto boligrafo en si, por lo cual lo que se observa que se esta realizando una corrección del mercado donde en este caso los boligrafos tenian un valor superior al real incentivado por una campaña publicitaria o un convenio con alguna marca que le diera ese valor agregado. Debido ha esto podemos deducir que en el 2018 este factor externo desaparecio y los precios volvieron a la normalidad.