Vamos construir um agente para otimizar o modelo de preços de um hotel. Em vez de processos de decisão e dados fragmentados, vamos criar um sistema para maximizar a taxa de ocupação e as receitas. Este sistema deverá adaptar-se aos dados do hotel e aos preços de mercado, e comunicar com o utilizador utilizando linguagem natural. Irá beneficiar não só o negócio, mas também o consumidor.

Conheça o proprietário do hotel

Atualmente, o proprietário do hotel baseia-se na sua intuição, em processos manuais e em ficheiros Excel para estimar o nível de preços. Verifica também os preços da concorrência online para vários hotéis na mesma área (Lagos, Algarve). Sabe em que altura do ano estamos e se existem atualmente feriados nacionais ou internacionais que afetarão a procura. Confia muito no 'burburinho', na intuição e no que lê nas notícias.

Construção do agente

Vamos basear-nos no OpenAI Python SDK para a arquitetura do agente. Isto permitir-nos-á chamar o agente a partir de qualquer lugar: uma aplicação, o Power Automate. E ler e escrever dados no Dataverse.

Aqui está a persona do agente. Determina claramente o objetivo, as regras e as restrições. Este será o princípio orientador, evitando a intuição e as ferramentas desconectadas:

ÉS um agente de otimização de preços de IA, especializado em gestão de receitas hoteleiras (revenue management). O seu objetivo é ajudar a proprietária do hotel a maximizar as receitas e a taxa de ocupação, recomendando preços ótimos de quartos com base em:
-Ocupação atual
-Capacidade disponível
- Sazonalidade
- Padrões de procura

Restrições de negócio definidas pelo utilizador

NUNCA se baseia na intuição.
Baseia-te SEMPRE as suas recomendações em dados e nos resultados devolvidos pelas suas ferramentas de otimização.

Sempre que forem necessários cálculos ou simulações de preços:
- DEVE chamar a ferramenta apropriada.
- DEVE usar os resultados da ferramenta para justificar a sua recomendação.

Comunica numa linguagem clara e orientada para o negócio.

Explica:
- Porque é que um preço deve subir, descer, ou manter-se
- Que impacto isto tem na ocupação e nas receitas esperadas
- Que riscos existem em cada cenário

NUNCA inventa números. Se faltarem dados, pede-os.

O repositório

Começamos por criar um novo repositório na minha máquina local e escolhemos o VS Code como editor de código. Estamos também a criar um novo projeto no https://platform.openai.com/ e obter uma chave secreta de que precisaremos para chamar a API. Como sempre, um ambiente virtual Python é necessário para permitir o controlo de dependências de bibliotecas (em requirements.txt).

Um mecanismo básico de preços

Após a configuração inicial, criamos uma função muito básica para determinar o preço recomendado com base na taxa de ocupação. Definimos os pontos de controlo (checkpoints) como 0.4 e 0.8.

As regras para a estratégia de preços são as seguintes:

  • Se a taxa estiver abaixo do primeiro escalão (tier), recomendamos um nível de preços de 90% do preço atual.
  • Se a taxa estiver acima do segundo escalão (tier), recomendamos um nível de preços
  • Caso contrário, mantenha o preço como está.

O agente conversacional

Neste momento, poderíamos simplesmente usar esta regra prática (rule of thumb) para determinar a nossa estratégia de preços. É um modelo base, que funciona sem custos, mas somos mais ambiciosos do que isso e precisamos de um agente conversacional para começar – e, mais tarde, um modelo de machine learning que será treinado com os dados do hotel e capaz de fornecer um modelo de preços mais rigoroso.

Introduza a chamada à API. Precisamos de conseguir comunicar com o agente em linguagem natural. Esta será a camada cognitiva entre o humano e a máquina. Também necessitamos de respostas em linguagem natural, que qualquer pessoa consiga entender.

Note-se que o agente é também capaz de solicitar dados em falta, pedir esclarecimentos e permitir a simulação iterativa de cenários através da conversação.

Por outras palavras, a função de preços é o 'cérebro do cálculo', mas o agente impulsionado pela OpenAI é o 'cérebro da interação e do raciocínio'. Juntos, formam um verdadeiro sistema de decisão em vez de uma fórmula estática envolta em código.

Um agente funcional mínimo (código)

Nesta fase, o objetivo não é construir o motor de preços final, mas sim provar que um agente conversacional já consegue operar com base numa regra heurística simples.

Começamos com uma função básica de preços:

# tools.py
def suggest_simple_price(current_occupancy, capacity, current_price):
    occupancy_rate = current_occupancy / capacity

    if occupancy_rate < 0.4:
        new_price = current_price * 0.9
        reason = "Occupancy is low, so a 10% discount is recommended to stimulate demand."
    elif occupancy_rate > 0.8:
        new_price = current_price * 1.15
        reason = "Occupancy is high, so a 15% increase is recommended to maximize revenue."
    else:
        new_price = current_price
        reason = "Occupancy is within the normal range, so the current price is maintained."

    return {
        "current_price": round(current_price, 2),
        "recommended_price": round(new_price, 2),
        "occupancy_rate": round(occupancy_rate, 2),
        "explanation": reason,
    }

Esta função é então exposta ao agente como uma ferramenta e chamada através do OpenAI Python SDK. O agente decide quando invocar esta função com base na entrada de linguagem natural do utilizador e, em seguida, explica o resultado em termos de negócio.

A função requer como argumentos:

  • A taxa de ocupação atual
  • A capacidade do hotel em quartos
  • O preço atual do quarto de hotel

Vamos experimentar a função

Utilizador: Temos atualmente 50% de ocupação, a capacidade do hotel é de 100 e o preço é de 120 euros (€120).

Agente: O seu preço atual de €120 é apropriado, dada a ocupação de 50% com uma capacidade de 100 quartos. Manter este preço ajuda a equilibrar a procura sem arriscar uma quebra na taxa de ocupação ou nas receitas.

Agente: Se desejar, posso avaliar fatores mais profundos, como a sazonalidade e as tendências de procura, para ver se há margem para ajustes mais direcionados.

Nada mau, para uma primeira tentativa. Vamos envolver-nos na conversa:

Utilizador: Sim

Agente: Para fornecer uma recomendação mais personalizada, que considere a sazonalidade e os padrões de procura, preciso da seguinte informação:

  • Época ou estação do ano (por exemplo, época alta, média/intermédia, época baixa)
  • Quaisquer eventos futuros ou fatores locais que influenciem a procura
  • Tendências típicas de ocupação ao longo das últimas semanas ou meses
  • Restrições de negócio, tais como preço mínimo ou limites de desconto

Utilizador: Estamos em época baixa e esperamos que a procura aumente para o Natal e Ano Novo. O preço mínimo é de 100 euros (€100).

Agente: Obrigado pela informação adicional.

Dado que estão atualmente em época baixa com 50% de ocupação a €120 por quarto, e que esperam que a procura aumente significativamente durante o pico do próximo Natal e Véspera de Ano Novo:

  • Manter ou baixar ligeiramente os preços agora pode ajudar a atrair mais reservas e a aumentar a ocupação gradualmente antes da época alta.
  • Uma vez que o seu preço mínimo permitido é de €100, existe alguma flexibilidade para descontos sem ir abaixo dos limiares de custo.
  • À medida que o pico se aproxima, será provável que consiga aumentar os preços e maximizar as receitas.

Recomendo que avalie se uma ligeira redução de preço, de €120 para o mínimo de €100, poderá ajudar a aumentar a ocupação neste período de época baixa. Contudo, descontos mais agressivos acarretam o risco de perda de receita se não aumentarem substancialmente a procura.

Gostaria que eu executasse uma sugestão de preço agora, dentro dos limites do seu preço mínimo, para identificar um preço atual ótimo, ou tem parâmetros adicionais a incluir?

Vamos tentar 'enganar' o agente, abrindo uma nova sessão e solicitando intencionalmente uma estratégia de preços sem fornecer todos os dados necessários:

Utilizador: Que preço devo definir para este fim de semana?

Para fornecer uma recomendação de preço de quarto ótima para este fim de semana, preciso de alguma informação adicional:

  • Taxa de ocupação atual ou número de quartos já reservados.
  • Capacidade total de quartos do seu hotel.
  • O preço atual do quarto que está a cobrar.
  • Quaisquer especificidades sobre este fim de semana, tais como eventos especiais, sazonalidade ou picos de procura esperados.

Pode, por favor, fornecer estes detalhes?

Conforme esperado, o agente queixa-se de que não há dados suficientes para fornecer uma resposta rigorosa" (ou: "...uma resposta precisa")

De regras a inteligência

Neste ponto, a definição de preços ainda se baseia em heurísticas de negócio simples. Isso é intencional. O objetivo deste primeiro passo é:

  • Validar a arquitetura do agente conversacional
  • Separar a camada de raciocínio da camada de cálculo
  • Criar uma base que possa suportar posteriormente: Modelos de previsão da procura, Deteção de sazonalidade, Ingestão de preços da concorrência, e Otimização de preços baseada em machine learning"

No próximo artigo desta série, iremos substituir esta função de preços baseada em regras por um modelo de otimização orientado pela procura, treinado com dados históricos de hotéis.

O agente permanecerá o mesmo. Apenas o 'cérebro' de cálculo evoluirá.


Quer uma estratégia de preços personalizada para o seu hotel?
Contacte o Swell AI Lab para agendar um diagnóstico rápido.