“No momento em que você comete um erro de precificação, está corroendo sua reputação ou seus lucros”. – Katharine Paine
A otimização de preços consiste no uso de dados históricos para identificar o preço mais adequado de um produto ou serviço que maximize a lucratividade da empresa. Existem vários fatores, como dados demográficos, custos operacionais, dados de pesquisa, etc. que desempenham um papel na precificação eficiente, também depende da natureza das empresas e do produto a ser servido. A empresa acrescenta / atualize regularmente os recursos para agregar mais valor ao produto e, obviamente, isso tem um custo associado em termos de esforço, tempo e, o mais importante, a reputação das empresas.
Como resultado, é importante entender o preço correto, um pouco alto demais, você perderá seus clientes e uma ligeira redução do preço resultará em perda de receita. A otimização de preços ajuda as empresas a encontrar o equilíbrio certo entre preços eficientes, atingir metas de lucro e também atender seus clientes. Neste blog, veremos a abordagem simplista para a otimização de preços e também criaremos um aplicativo de simulação.
Figura 1: Instantâneo do aplicativo de recomendação de preço
Desafios na otimização de preços:
Otimização de preços para um único produto: A otimização de preços para um único produto prevê mudanças na demanda em resposta a diferentes preços. Ajuda a empresa a definir os preços que os clientes estão dispostos a pagar e a maximizar os lucros. Por exemplo: no mercado de smartphones, é um bom equilíbrio entre novos recursos e preço.
Otimização de preços para uma família de produtos: Qualquer mudança no preço de um produto pode desencadear uma reação em cadeia em uma família de produtos. Por tanto, O preço da família de produtos torna-se uma tarefa difícil. Não .: No mercado de sorvetes, pode haver sabores diferentes, tamanhos como em xícaras, doces, cones, packs familiares o tarrinas. É o mesmo produto com tamanhos e preços diferentes.
Benefícios da otimização de preços:
Benefícios econômicos imediatos: As empresas podem obter resultados instantâneos, visando vários KPIs, qualquer margem, conversões de vendas, adicionar novos clientes ou entrar em um novo espaço de mercado, etc., e, em seguida, analise os resultados para fazer as alterações de preço adequadas.
Automação de processos de negócios: As otimizações de preço devem ser mais baseadas em um processo baseado em dados. Análise de dados históricos, tendências de vendas, exigem, etc. ajuda as empresas a projetar regras ou criar modelos de ML ou um modelo híbrido totalmente automatizado, eliminando assim o erro humano ou as decisões de preços baseadas na emoção.
Resposta rápida às mudanças nas tendências do mercado: A demanda e a tendência do mercado mudam com bastante frequência e, as vezes, quando um concorrente lança um produto semelhante a um preço mais baixo, come as ações dos outros. Em tal cenário, otimizar os preços dos produtos em um determinado segmento de produto ou geografia ajuda as empresas a enfrentar esse desafio.
Objetivos:
Exploraremos as próximas etapas e, no final deste blog, nós vamos criar o Aplicativo de simulador de otimização de preço com roteiro de enredo.
- Visão geral da otimização de preços
- Desafios e benefícios da otimização
- Exploração de dados
- Construção e otimização de modelo
- Desenvolvimento de aplicativos com Plotly Dash
- Desafios na criação e implementação de modelos e aplicativos de otimização de preços
Iniciando:
Dados: Usaremos dados de brinquedos. Price.csv e aqui está um rápido instantâneo dos dados. Como o conjunto de dados é pequeno e limpo, nenhum pré-processamento é necessário.
Ano Trimestre Quantidade Preço 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
Estrutura do projeto: Aqui está a estrutura do nosso projeto.
Otimização de preço
| app.py # O arquivo para construir aplicativos que tem lógica de retorno de chamada e IU
+ -Ativos # A folha de estilo que define a estética do aplicativo.
|
+ -Dados
| price.csv # O arquivo do conjunto de dados
+ -Pitão
| optimizar_precio.py # O arquivo Python com lógica para otimização de preços.
| optimizar_cantidad.py # O arquivo python com lógica para otimização de quantidade
Carregando bibliotecas: Vamos criar um arquivo por nome optimizar_precio.py e carregue todas as bibliotecas necessárias.
importar pandas como pd importar numpy como np do pandas importar DataFrame import matplotlib.pyplot as plt importado do mar como sns de statsmodels.formula.api import ols import plotly.express as px import plotly.graph_objects as go
Vejamos a relação entre Preço e Quantidade e esperamos ver uma tendência linear.
fig_PriceVsQuantity = px.scatter( df, x ="Preço", y ="Quantidade", color ="Custo", linha de tendência ="ols") fig_PriceVsQuantity.show()
Figura 2: Preço Vs Quantidade
Construindo um modelo básico: No nosso caso, vamos construir um modelo OLS (Mínimo Quadrado Ordinário) muito básico.
# modelo OLS adequado model = ols("Quantidade ~ Preço", data = df).ajuste()
Faixa de otimização: Na maioria dos casos, temos uma ideia aproximada dos preços mínimo e máximo com base na experiência anterior. Como estamos no processo de identificação do melhor preço, será um bom ponto de partida e iremos refiná-lo ainda mais com várias iterações.
Preço = lista(faixa(var_range[0], var_range[1], 10)) cost = int(var_cost) quantidade = [] Receita = [] para i em preço: demand = model.params[0] + (model.params[1] * eu) quantidade.append(exigem) Revenue.append((Eu custo) * exigem)
Vamos criar um quadro de dados com o 3 Colunas de preço, Receita e valor que nos permitirá acessar facilmente esses valores durante a fase de desenvolvimento do aplicativo.
lucro = pd.DataFrame({"Preço": Preço, "Receita": Receita, "Quantidade": quantidade}) max_val = profit.loc[(lucro['Receita'] == lucro['Receita'].max())]
Gráfico de linha de otimização: Aqui está o recurso que planejamos ter no gráfico.
- O gráfico deve ser atualizado com base na seleção do usuário de uma faixa de preço / quantidade ou talvez um custo fixo.
- O gráfico deve indicar o ponto exato onde a renda é mais alta.
fig_PriceVsRevenue = go.Figure() fig_PriceVsRevenue.add_trace(go.Scatter( x = lucro['Preço'], y = lucro['Receita'])) fig_PriceVsRevenue.add_annotation(x = int(max_val['Preço']), y = int(max_val['Receita']), text ="Receita Máxima", showarrow = True, ponta de seta = 1) fig_PriceVsRevenue.update_layout( showlegend = False, xaxis_title ="Preço", yaxis_title ="Receita") fig_PriceVsRevenue.add_vline(x = int(max_val['Preço']), line_width = 2, line_dash ="traço", line_color ="vermelho", opacidade = 0,25)
Figura 3: Preço x renda
Juntando tudo: A lógica da otimização de preços estará no arquivo. optimizar_precio.py
importar pandas como pd importar numpy como np do pandas importar DataFrame import matplotlib.pyplot as plt importado do mar como sns de 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 ="Preço", y ="Quantidade", color ="Custo", linha de tendência ="ols") # modelo OLS adequado model = ols("Quantidade ~ Preço", data = df).ajuste() Preço = lista(faixa(var_range[0], var_range[1], 10)) cost = int(var_cost) quantidade = [] ...................... ...................... Retorna [lucro, fig_PriceVsRevenue, fig_PriceVsQuantity, volta(max_val['Preço'].valores[0],2),volta(max_val['Receita'].valores[0],3)]
Otimização de quantidade: Seguiremos uma abordagem semelhante para otimizar o valor de uma determinada restrição para a receita máxima.. Para ser breve e para que o blog não seja extenso, Não vou colocar o código no blog, mas sinta-se à vontade para acessar o código de optimizar_cantidad.py
Desenvolvimento de aplicações:
Vamos desenvolver um aplicativo de otimização de preços com Plotly Dash, que é uma estrutura python para a criação de aplicativos de dados. Vamos criar um arquivo por nome app.py e começar a carregar bibliotecas.
Paso 1: carga da biblioteca:
traço de importação importar pandas como pd importar numpy como np import dash_table registro de importação import plotly.graph_objs as go import plotly.express as px importar dash_core_components como dcc import dash_html_components as html import dash_bootstrap_components as dbc from dash.dependencies import Input, Saída, Estado import Optimize_price import Optimize_quantity importar dash_daq como daq
Paso 2: Projete o layout:
Dividimos o design em 4 seções lado a lado, como vimos no instantâneo de introdução.
- Os controles / campos, a saber, o controle deslizante para selecionar máximo e mínimo, botão de rádio para selecionar Preço ou quantidade otimizar, entrada de texto para configurar custo fixo.
- Um gráfico para visualizar a relação entre Preço Vs Quantidade
- Um gráfico para visualizar o rendimento ótimo
- Uma mesa que tem dados simulados
Aqui está o código da IU para gerar um controle deslizante de intervalo.
html.Div( className ="padding-top-bot", filhos =[ html.H6("ALCANCE DE OTIMIZAÇÃO"), html.Div( id = 'output-container-range-slider'), dcc.RangeSlider( id = 'my-range-slider', min = 0, max = 500, passo = 1, marcas ={ 0: '0', 500: '500' }, valor =[200, 400] ), ], ),
Será muito útil mostrar os valores máximos e mínimos selecionados pelo usuário e podemos conseguir isso com uma função de retorno de chamada.
@ app.callback( dash.dependencies.Output('output-container-range-slider', 'crianças'), [dash.dependencies.Input('my-range-slider', 'valor')]) def update_output(valor): Retorna "{}".formato(valor)
Do mesmo modo, vamos adicionar outros dois controles. por favor se refira a app.py para o código completo.
Paso 3: Para construir interatividade entre controles e imagens, nós definimos as entradas e saídas, quer dizer, para cada mudança nas entradas feitas pelo usuário, quais são os resultados que precisam ser atualizados. No nosso caso, precisamos atualizar dois gráficos de linha e uma tabela.
@ app.callback( [ Saída("mapa de calor", 'dados'), Saída("lineChart1", 'figura'), Saída("lineChart2", 'figura'), Saída("id-insights", 'crianças'), ], [ Entrada("selected-var-opt", "valor"), Entrada("meu-alcance-controle deslizante", "valor"), Entrada("opção de custo selecionada", "valor") ])
Paso 4: Nós definimos um Função update_output_All () que toma os controles como entradas, execute a lógica, o que significa que gerou as imagens e a tabela de dados, a ser preenchido na interface do usuário.
def update_output_All(var_opt, var_range, var_cost): Experimente: if var_opt == 'preço': 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( 'Receita', ascendente = falso), decimais = 2) if opt_Revenue > 0: Retorna [res.to_dict('registros'), fig_PriceVsRevenue, fig_PriceVsQuantity, f 'A receita máxima de {opt_Revenue} é alcançado através da otimização {var_opt} do {opt_Price}, custo fixo de {var_cost} e a otimização foi realizada para {var_opt} intervalo entre {var_range}'] .................................. .................................. exceto exceção como e: logging.exception('Algo deu errado com a lógica de interação:', e)
por favor se refira a app.py para o código completo.
recomendações: Embora estejamos criando um aplicativo muito básico com campos e recursos visuais mínimos, ainda precisamos verificar a seleção de entrada, observe os padrões, identificar pontos de renda máxima e tirar conclusões. Seria bom adicionar recomendações onde o aplicativo nos informa se estamos obtendo lucros ou perdas e também nos informa sobre os parâmetros selecionados.
Conseguimos isso construindo dinamicamente uma string e preenchendo os marcadores de posição com valores durante o tempo de execução. Aqui está o exemplo de string de retorno de nossa função de retorno de chamada
f 'A receita máxima de {opt_Revenue} é alcançado através da otimização {var_opt} do {opt_Price}, custo fixo de {var_cost} e a otimização foi realizada para {var_opt} intervalo entre {var_range}']
Aqui está o resultado da recomendação de amostra:
“O preço é realmente muito simples … Os clientes literalmente não pagarão um centavo a mais do que o valor real do produto”. – Ron Johnson
Pontos-chave a serem lembrados:
Como você deve ter notado, Existem vários estágios para construir um aplicativo de dados orientado por modelo e cada um desses estágios carrega seu próprio conjunto de desafios.
Qualidade de dados: A eficiência do modelo de ML depende da qualidade dos dados. Portanto, é importante testar os dados para quaisquer desvios (deriva de dados) do padrão esperado. Um processo de controle de qualidade automatizado ajuda a identificar quaisquer anomalias nos dados e as etapas de pré-processamento de dados apropriadas devem ser aplicadas para retificar o desvio..
Construção do modelo: Uma modelo, seja simples ou complexo, precisa ser testado, validado e testado antes de ser empurrado para uso na produção. O desempenho do modelo em produção deve ser monitorado, por exemplo: tamanho do modelo, tempo de resposta do modelo, precisão, etc.
Desdobramento, desenvolvimento: O modelo é geralmente implementado como um serviço que o aplicativo consome. e deve haver uma integração perfeita de vários componentes, fontes de dados e outros sistemas. Muitas vezes, os modelos são diferentes para cada região de acordo com a demanda daquela geografia, e isso resulta em vários modelos, dados de modelo e pipelines.
Monitoramento de modelo *: Como qualquer outro sistema, os modelos implementados também devem ser monitorados para detectar desvios (desvio do modelo). Os modelos são retreinados e implantados em uma frequência definida, que pode ser semanal, mensal ou trimestral, dependendo da natureza do produto / serviço e impacto nos negócios.
Observação: A implementação do modelo não foi abordada neste blog. Vou planejar um blog separado dedicado à implantação de aplicativos.
Nota de Encerramento:
O objetivo do blog era apresentar uma abordagem muito simplista para a otimização de preços e criar um aplicativo da web que pode ajudar os usuários de negócios a tomar decisões em trânsito.. Também abordamos vários aspectos da construção de um aplicativo de dados, desde a exploração de dados até a modelagem, e os desafios associados à construção., implementação e manutenção do referido aplicativo.
- Esta configuração de projeto pode ser usada como um modelo para replicá-la rapidamente para outros casos de uso.
- você pode construir um modelo mais complexo para otimizar qualquer variável de seu interesse.
- Conecte o aplicativo a um banco de dados e crie operações CRUD no aplicativo.
Espero que tenha gostado do blog. Boas aprendizagens !!!!
Você pode se conectar comigo – Linkedin
Você pode encontrar o código para referência: Github
Referência:
https://dash.plotly.com/dash-daq
https://unsplash.com/
A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.