«En el momento en que comete un error en la fijación de precios, está mermando su reputación o sus ganancias». – Katharine Paine
La optimización de precios consiste en utilizar datos históricos para identificar el precio más apropiado de un producto o servicio que maximiza la rentabilidad de la empresa. Hay numerosos factores como la demografía, los costos operativos, los datos de la encuesta, etc. que juegan un papel en la fijación de precios eficiente, también depende de la naturaleza de las empresas y del producto que se sirve. La empresa agrega / actualiza regularmente funciones para aportar más valor al producto y, obviamente, esto tiene un costo asociado en términos de esfuerzo, tiempo y, lo más importante, la reputación de las empresas.
Como resultado, es importante comprender el precio correcto, un poco demasiado alto, perderá a sus clientes y un leve subprecio resultará en una pérdida de ingresos. La optimización de precios ayuda a las empresas a encontrar el equilibrio adecuado entre precios eficientes, lograr objetivos de ganancias y también atender a sus clientes. En este blog, veremos el enfoque simplista de optimización de precios y también crearemos una aplicación de simulación.
Figura"Figura" es un término que se utiliza en diversos contextos, desde el arte hasta la anatomía. En el ámbito artístico, se refiere a la representación de formas humanas o animales en esculturas y pinturas. En la anatomía, designa la forma y estructura del cuerpo. Además, en matemáticas, "figura" se relaciona con las formas geométricas. Su versatilidad hace que sea un concepto fundamental en múltiples disciplinas.... 1: Instantánea de la aplicación de recomendación de precios
Desafíos en la optimización de precios:
Optimización de precios para un solo producto: La optimización de precios para un solo producto es predecir la demanda cambiante en respuesta a diferentes precios. Ayuda a la empresa a fijar los precios que los clientes están dispuestos a pagar y a maximizar las ganancias. Por ejemplo: en el mercado de los teléfonos inteligentes, es un buen equilibrio entre las nuevas funciones y el precio.
Optimización de precios para una familia de productos: Cualquier cambio en el precio de un producto puede desencadenar una reacción en cadena en una familia de productos. Por tanto, la fijación de precios de la familia de productos se convierte en una tarea abrumadora. Ej .: En el mercado de los helados, puede haber diferentes sabores, tamaños como en tazas, caramelos, conos, packs familiares o tarrinas. Es el mismo producto con diferentes tamaños y precios.
Beneficios de optimizar los precios:
Beneficios económicos inmediatos: Las empresas pueden obtener resultados instantáneos al apuntar a múltiples KPILos KPI, o indicadores clave de rendimiento, son métricas utilizadas por las organizaciones para evaluar su éxito en alcanzar objetivos específicos. Estos indicadores permiten monitorear el progreso y tomar decisiones informadas. Existen diferentes tipos de KPI, que pueden variar según el sector y los objetivos estratégicos de la empresa. Su correcta implementación es esencial para mejorar la eficiencia y efectividad de las operaciones...., ya sea margenEl margen es un término utilizado en diversos contextos, como la contabilidad, la economía y la impresión. En contabilidad, se refiere a la diferencia entre los ingresos y los costos, lo que permite evaluar la rentabilidad de un negocio. En el ámbito editorial, el margen es el espacio en blanco alrededor del texto en una página, que facilita la lectura y proporciona una presentación estética. Su correcta gestión es esencial..., conversiones de ventas, la adición de nuevos clientes o penetrar en un nuevo espacio de mercado, etc., y luego revisar los resultados para realizar los cambios adecuados en los precios.
Automatización de procesos comerciales: Las optimizaciones de precios deberían ser más un proceso basado en datos. El análisis de datos históricos, tendencias de ventas, demanda, etc. ayuda a las empresas a diseñar reglas o construir modelos de ML o construir un modelo híbrido que está completamente automatizado, eliminando así el error humano o las decisiones basadas en emociones sobre los precios.
Respuesta rápida a las tendencias cambiantes del mercado: La demanda y la tendencia del mercado cambian con bastante frecuencia y, a veces, cuando un competidor lanza un producto similar a un precio más bajo, se come las acciones de otros. En tal escenario, optimizar los precios de los productos en un segmento de producto o geografía en particular ayuda a las empresas a enfrentar este desafío.
Objetivos:
Exploraremos los siguientes pasos y, al final de este blog, crearemos el Aplicación Price Optimization Simulator con guión de trama.
- Descripción general de la optimización de precios
- Desafíos y beneficios de la optimización
- Exploración de datos
- Optimización y construcción de modelos
- Desarrollo de aplicaciones con Plotly Dash
- Desafíos en la creación e implementación de modelos y aplicaciones de optimización de precios
Empezando:
Datos: Usaremos datos de juguetes. Price.csv y aquí hay una instantánea rápida de los datos. Como el conjunto de datos es pequeño y limpio, no es necesario ningún tipo de procesamiento previo.
Year Quarter Quantity Price 1977 1 22.9976 142.1667 1977 2 22.6131 143.9333 1977 3 23.4054 146.5000 1977 4 22.7401 150.8000 1978 1 22.0441 160.0000 1978 2 21.7602 182.5333 1978 3 21.6064 186.2000 1978 4 21.8814 186.4333 1979 1 20.5086 211.7000 1979 2 19.0408 231.5000
Estructura del proyecto: Aquí está la estructura de nuestro proyecto.
Optimización de precios
| app.py # El archivo para la creación de aplicaciones que tiene lógica de devolución de llamada y UI
+ —Activos # La hoja de estilo que define la estética de la aplicación.
|
+ —Datos
| price.csv # El archivo del conjunto de datos
+ —Python
| optimizar_precio.py # El archivo Python con lógica para la optimización de precios.
| optimizar_cantidad.py # El archivo python con lógica para optimización de cantidad
Cargando Bibliotecas: Vamos a crear un archivo por nombre optimizar_precio.py y cargue todas las bibliotecas necesarias.
import pandas as pd import numpy as np from pandas import DataFrame import matplotlib.pyplot as plt import seaborn as sns from statsmodels.formula.api import ols import plotly.express as px import plotly.graph_objects as go
Veamos la relación entre Precio y Cantidad y esperamos ver una tendencia lineal.
fig_PriceVsQuantity = px.scatter( df, x="Price", y="Quantity", color="Cost", trendline="ols") fig_PriceVsQuantity.show()
Figura 2: Precio Vs Cantidad
Construyendo un modelo básico: En nuestro caso, construiremos un modelo OLS (Ordinary Least Square) muy básico.
# fit OLS model model = ols("Quantity ~ Price", data=df).fit()
Rango de optimización: En la mayoría de los casos, tenemos una idea aproximada de los precios mínimos y máximos basados en la experiencia pasada. Como estamos en el proceso de identificar el mejor precio, será un buen punto de partida y lo refinaremos aún más con múltiples iteraciones.
Price = list(range(var_range[0], var_range[1], 10)) cost = int(var_cost) quantity = [] Revenue = [] for i in Price: demand = model.params[0] + (model.params[1] * i) quantity.append(demand) Revenue.append((i-cost) * demand)
Crearemos un marco de datos con las 3 columnas Precio, Ingresos y Cantidad que nos permitirá acceder fácilmente a estos valores durante la fase de desarrollo de la aplicación.
profit = pd.DataFrame({"Price": Price, "Revenue": Revenue, "Quantity": quantity}) max_val = profit.loc[(profit['Revenue'] == profit['Revenue'].max())]
Gráfico de líneasEl gráfico de líneas es una herramienta visual utilizada para representar datos a lo largo del tiempo. Consiste en una serie de puntos conectados por líneas, lo que permite observar tendencias, fluctuaciones y patrones en los datos. Este tipo de gráfico es especialmente útil en áreas como la economía, la meteorología y la investigación científica, facilitando la comparación de diferentes conjuntos de datos y la identificación de comportamientos a lo... de optimización: Aquí está la característica que planearemos tener en el gráfico.
- El gráfico debe actualizarse según la selección del usuario de un rango de precio / cantidad o tal vez un costo fijo.
- El gráfico debe indicar el punto exacto donde los ingresos están al máximo.
fig_PriceVsRevenue = go.Figure() fig_PriceVsRevenue.add_trace(go.Scatter( x=profit['Price'], y=profit['Revenue'])) fig_PriceVsRevenue.add_annotation(x=int(max_val['Price']), y=int(max_val['Revenue']), text="Maximum Revenue", showarrow=True, arrowhead=1) fig_PriceVsRevenue.update_layout( showlegend=False, xaxis_title="Price", yaxis_title="Revenue") fig_PriceVsRevenue.add_vline(x=int(max_val['Price']), line_width=2, line_dash="dash", line_color="red", opacity=0.25)
Figura 3: Precio Vs Ingresos
Poniendolo todo junto: La lógica de la optimización de precios estará en el archivo. optimizar_precio.py
import pandas as pd import numpy as np from pandas import DataFrame import matplotlib.pyplot as plt import seaborn as sns from statsmodels.formula.api import ols import plotly.express as px import plotly.graph_objects as go def fun_optimize(var_opt, var_range, var_cost, df): fig_PriceVsQuantity = px.scatter( df, x="Price", y="Quantity", color="Cost", trendline="ols") # fit OLS model model = ols("Quantity ~ Price", data=df).fit() Price = list(range(var_range[0], var_range[1], 10)) cost = int(var_cost) quantity = [] ...................... ...................... return [profit, fig_PriceVsRevenue, fig_PriceVsQuantity, round(max_val['Price'].values[0],2),round(max_val['Revenue'].values[0],3)]
Optimización por cantidad: Seguiremos un enfoque similar para optimizar la cantidad de una restricción determinada para obtener los máximos ingresos. En aras de la brevedad y para que el blog no sea extenso, no voy a colocar el código en el blog, pero no dudes en acceder al código desde optimizar_cantidad.py
Desarrollo de aplicaciones:
Desarrollaremos una aplicación de optimización de precios con Plotly Dash, que es un marco de Python para crear aplicaciones de datos. Creemos un archivo por nombre app.py y comience con la carga de bibliotecas.
Paso 1: carga de bibliotecas:
import dash import pandas as pd import numpy as np import dash_table import logging import plotly.graph_objs as go import plotly.express as px import dash_core_components as dcc import dash_html_components as html import dash_bootstrap_components as dbc from dash.dependencies import Input, Output, State import optimize_price import optimize_quantity import dash_daq as daq
Paso 2: Diseñar el diseño:
Dividimos el diseño en 4 secciones una al lado de la otra como vimos en la instantánea de la introducción.
- Los controles / campos, a saber, el control deslizante para seleccionar máximo y mínimo, botón de radio para seleccionar Precio o cantidad para optimizar, entrada de texto para configurar costo fijo.
- Un gráfico para visualizar la relación entre Precio Vs Cantidad
- Un gráfico para visualizar el ingresos óptimos
- Una mesa que tiene datos simulados
Aquí está el código de la interfaz de usuario para generar un control deslizante de rango.
html.Div( className="padding-top-bot", children=[ html.H6("OPTIMIZATION RANGE"), html.Div( id='output-container-range-slider'), dcc.RangeSlider( id='my-range-slider', min=0, max=500, step=1, marks={ 0: '0', 500: '500' }, value=[200, 400] ), ], ),
Será muy útil mostrar los valores de máximo y mínimo seleccionados por el usuario y podemos lograrlo con una función callback.
@app.callback( dash.dependencies.Output('output-container-range-slider', 'children'), [dash.dependencies.Input('my-range-slider', 'value')]) def update_output(value): return "{}".format(value)
Del mismo modo, agregaremos otros dos controles. por favor refiérase a app.py para el código completo.
Paso 3: Para construir la interactividad entre los controles y las imágenes, definimos las entradas y las salidas, es decir, para cada cambio en las entradas realizado por el usuario, que son las salidas que deben actualizarse. En nuestro caso, necesitamos actualizar dos gráficos de líneas y una tabla.
@app.callback( [ Output("heatmap", 'data'), Output("lineChart1", 'figure'), Output("lineChart2", 'figure'), Output("id-insights", 'children'), ], [ Input("selected-var-opt", "value"), Input("my-range-slider", "value"), Input("selected-cost-opt", "value") ])
Paso 4: Definimos un función update_output_All () que toma los controles como entradas, ejecuta la lógica, lo que significa que generó las imágenes y la tabla de datos, que se completarán en la interfaz de usuario.
def update_output_All(var_opt, var_range, var_cost): try: if var_opt == 'price': res, fig_PriceVsRevenue, fig_PriceVsQuantity, opt_Price, opt_Revenue = Python.optimize_price.fun_optimize( var_opt, var_range, var_cost, df) res = np.round(res.sort_values( 'Revenue', ascending=False), decimals=2) if opt_Revenue > 0: return [res.to_dict('records'), fig_PriceVsRevenue, fig_PriceVsQuantity, f'The maximum revenue of {opt_Revenue} is achieved by optimizing {var_opt} of {opt_Price}, fixed cost of {var_cost} and optimization was carried for {var_opt} range between {var_range}'] .................................. .................................. except Exception as e: logging.exception('Something went wrong with interaction logic:', e)
por favor refiérase a app.py para el código completo.
Recomendaciones: Aunque estamos creando una aplicación muy básica con campos y elementos visuales mínimos, aún necesitamos verificar la selección de entrada, observar los patrones, identificar los puntos de ingresos máximos y sacar conclusiones. Sería bueno agregar recomendaciones donde la aplicación nos diga si estamos obteniendo ganancias o pérdidas y también nos informe de los parámetrosLos "parámetros" son variables o criterios que se utilizan para definir, medir o evaluar un fenómeno o sistema. En diversos campos como la estadística, la informática y la investigación científica, los parámetros son fundamentales para establecer normas y estándares que guían el análisis y la interpretación de datos. Su adecuada selección y manejo son cruciales para obtener resultados precisos y relevantes en cualquier estudio o proyecto.... seleccionados.
Logramos esto construyendo dinámicamente una cadena y llenando los marcadoresLos "marcadores" son herramientas lingüísticas que se utilizan para guiar la estructura y el flujo de un texto. Su función principal es señalar relaciones entre ideas, como la adición, contraste o causa y efecto. Ejemplos comunes incluyen "además", "sin embargo" y "por lo tanto". Estos elementos no solo mejoran la cohesión del escrito, sino que también facilitan la comprensión por parte del lector, haciendo el contenido más accesible y claro.... de posición con valores durante el tiempo de ejecución. Aquí está la cadena de retorno de muestra de nuestra función de devolución de llamada
f'The maximum revenue of {opt_Revenue} is achieved by optimizing {var_opt} of {opt_Price}, fixed cost of {var_cost} and optimization was carried for {var_opt} range between {var_range}']
Aquí está el resultado de la recomendación de muestra:
«El precio es realmente bastante simple … Los clientes no pagarán literalmente un centavo más que el valor real del producto». – Ron Johnson
Puntos clave a tener en cuenta:
Como habrá notado, hay varias etapas para crear una aplicación de datos basada en modelos y cada una de estas etapas conlleva su propio conjunto de desafíos.
Calidad de los datos: La eficiencia del modelo ML depende de la calidad de los datos. Por lo tanto, es importante probar los datos para detectar cualquier desviación (desviación de los datos) del estándar esperado. Un proceso de control de calidad automatizado ayuda a identificar cualquier anomalía en los datos y se deben aplicar pasos adecuados de preprocesamiento de datos para rectificar la desviación.
Construcción del modelo: Un modelo, ya sea simple o complejo, necesita ser probado, validado y puesto a prueba antes de impulsarlo para su uso en producción. El desempeño del modelo en producción debe monitorearse, por ejemplo: tamaño del modelo, tiempo de respuesta del modelo, precisión, etc.
Despliegue: El modelo generalmente se implementa como un servicio que consume la aplicación. y tiene que haber una integración perfecta de varios componentes, fuentes de datos y otros sistemas. Muchas veces, los modelos son diferentes para cada región atendiendo a la demanda de esa geografía, y esto da como resultado múltiples modelos, datos y canalizaciones de modelos.
Supervisión del modelo *: Como cualquier otro sistema, los modelos implementados también deberán ser monitoreados para detectar desviaciones (desviación del modelo). Los modelos se vuelven a capacitar y se implementan con una frecuencia definida, que puede ser semanal, mensual o trimestral, según la naturaleza del producto / servicio y el impacto comercial.
Nota: La implementación del modelo no se cubrió como parte de este blog. Planearé un blog separado dedicado a la implementación de aplicaciones.
Nota de cierre:
El objetivo del blog era presentar un enfoque muy simplista para la optimización de precios y crear una aplicación web que pueda ayudar a los usuarios comerciales a tomar decisiones sobre la marcha. También abordamos varios aspectos de la creación de una aplicación de datos desde la exploración de datos hasta la creación de modelos y los desafíos asociados con la creación, implementación y mantenimiento de dicha aplicación.
- Esta configuración de proyecto se puede utilizar como plantilla para replicarla rápidamente para otros casos de uso.
- puede construir un modelo más complejo para optimizar cualquier variableEn estadística y matemáticas, una "variable" es un símbolo que representa un valor que puede cambiar o variar. Existen diferentes tipos de variables, como las cualitativas, que describen características no numéricas, y las cuantitativas, que representan cantidades numéricas. Las variables son fundamentales en experimentos y estudios, ya que permiten analizar relaciones y patrones entre diferentes elementos, facilitando la comprensión de fenómenos complejos.... de su interés.
- Conecte la aplicación a una base de datosUna base de datos es un conjunto organizado de información que permite almacenar, gestionar y recuperar datos de manera eficiente. Utilizadas en diversas aplicaciones, desde sistemas empresariales hasta plataformas en línea, las bases de datos pueden ser relacionales o no relacionales. Su diseño adecuado es fundamental para optimizar el rendimiento y garantizar la integridad de la información, facilitando así la toma de decisiones informadas en diferentes contextos.... y cree operaciones CRUD en la aplicación.
Espero que les haya gustado el blog. ¡¡¡Felices Aprendizajes !!!!
Puedes conectarte conmigo – Linkedin
Puede encontrar el código como referencia: Github
Referencia:
https://dash.plotly.com/dash-daq
https://unsplash.com/
Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.