Aplicativo de recomendação de preço com Python

Compartilhar no Facebook
Compartilhar no Twitter
Compartilhar no LinkedIn
Compartilhar no telegrama
Compartilhar no Whatsapp

Conteúdo

“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.

85709home-9941683

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()
42635pricevsquantity-4126457

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())]
64863tableraw-7182955

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)
28397max20revenue-3778606

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.

  1. 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.
  2. Um gráfico para visualizar a relação entre Preço Vs Quantidade
  3. Um gráfico para visualizar o rendimento ótimo
  4. 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:

76105recomendações-9790720

“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/

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.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.