Sugestão de Gorjeta com Sistema Fuzzy e Python

Blog Sobre Engenharia e IA

Sugestão de Gorjeta com Sistema Fuzzy e Python

Neste projeto prático vamos criar um algoritmo que vai prever o valor de gorjeta para um restaurante baseado no serviço e na qualidade da comida, onde o usuário irá dar uma nota para cada serviço e o sistema fuzzy irá sugerir um valor de gorjeta através das notas dadas, o algoritmo foi desenvolvido na plataforma Google Colab. Abaixo vamos entender um pouco sobre as condições do projeto:

Antecedentes (entradas)

Serviço: Que nota você daria para o serviço de o a 10? Ruim, aceitável ou ótimo?

Qualidade da comida: qual nota entre 0 a 10? Ruim, boa ou saborosa?

Consequentes (saídas)

Gorjeta: quanto de gorjeta você daria entre 0% e 20%? Baixa, média ou alta?

Regras

Se a qualidade da comida for ruim ou o serviço for ruim, então a gorjeta será baixa.

Se o serviço for médio, então a gorjeta será média.

Se o serviço for bom e a qualidade da comida for saborosa, então a gorjeta será alta.

Vamos para a implementação:

Instalando a biblioteca scikit-fuzzy que é a mais utilizada para sistema fuzzy.

Vamos importar as bibliotecas:

Numpy – para realizar operações em arrays multidimensionais;

Skfuzzy – para os pacotes fuzzy;

Control – para os sistemas de controle;

Criando os antescedentes

ctrl.Antecedent(np.arrange()) – chamamos o pacote control() e a classe Antecedent() e np.arrange() para indicar os valores que o usuário pode digitar onde 0 é o valor inicial e 11 é o final, sendo que os valores são de 0 até 10, no caso será a nota que o usuário vai dar para a qualidade da comida. 1 é porque os valores serão incrementados de 1 em 1.

Criando os consequentes

No caso o consequente que é a saída, será a variável gorjeta.

ctrl.Consequent(np.arrange()) – novamente chamamos o pacote control() mas desta vez a classe Consequent() e o np.arrange() vai indicar valores de 0 até 20 que representará o valor da gorjeta

gorjeta.universe para observarmos as opções de retorno, onde a menor gorjeta é 0% e a maior 20%.

Funções de pertinência para gerar gráficos e fazer o mapeamento de valores.

A escala do serviço de 0 até 10 será convertida para variáveis categóricas, ou seja, ruim, aceitável e ótima.

A escala da qualidade da comida de 0 até 10 será convertida para variáveis categóricas, ruim, boa e saborosa

E a escala da gorjeta de 0 até 20 será convertida para baixa, média ou alta.

Através da função qualidade.automf(number = 3) os valores de 0 a 10 serão mapeados para 3 categorias ruim, boa e saborosa.

O mesmo será feito para a variável serviço só que o serviço pode ser ruim, aceitável ou ótimo.

Visualizando graficamente

Observamos que na posição de qualidade com o número 5 temos um grau de pertinência igual a 1 para a categoria comida boa.

Observando o gráfico na categoria saborosa, notamos que onde a linha verde está em negrito ela está entre 0 e 5, o que significa que seu grau de pertinência é 0 na categoria saborosa. A comida só passa a ser considerada saborosa a partir da nota 5.

Através do comando fuzzy.trimf() acessamos o pacote fuzzy e a função triangular e acessessamos as faixas de 0 até 20.

Observando o gráfico podemos observar que uma gorjeta alta seria entre 10% e 20% indicado pela linha verde.

Comando ctrl.Rule() para definir as condições das regras.

Criando o Sistema de Controle

Criando o sistema de controle para unir todas as variáveis que foram definidas, o antecedente, consequente e as regras.

Usando o comando ctrl.ControlSystem() passamos as regras como parâmetros. Desta forma as variáveis inteiras são ligadas as variáveis categóricas. Ou seja, enviamos as notas e teremos a previsão do valor da gorjeta.

O comando ctrl.ControlSystemSimulation() para fazer as simulações e passamos a variável sistema_controle criada anteriormente.

Acessando o sistema e testando os valores

sistema.input[‘qualidade’] = 7 é a entrada da qualidade da comida digitada pelo usuário, no caso foi escolhido 7.

sistema.input[‘serviço’] = 4 é o valor de entrada  do serviço.

sistema.compute() é a função para enviar os valores para fazer os cálculos e termos os resultados.

Observamos pelo gráfico que a linha preta em negrito indica exatamente onde está o valor da gorjeta sugerida pelo algoritmo que é 10,47.

Esta é uma das várias aplicações da lógica fuzzy, você pode testar em casa com outras regras e outros valores para encontrar outros resultados.

Tags: , , ,

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *