Introdução à Lógica Fuzzy

Quando nós precisamos comprar alguma coisa, geralmente levamos em consideração na nossa decisão pelo produto o seu custo-benefício. Podemos formular essa consideração na seguinte forma lógica:

Se custo BAIXO e benefício ALTO  então custo-benefício ALTO
Se custo ALTO  e benefício ALTO  então custo-benefício MÉDIO
Se custo BAIXO e benefício BAIXO então custo-benefício MÉDIO
Se custo ALTO  e benefício BAIXO então custo-benefício BAIXO

Observe que, nesse exemplo, estou considerando apenas duas opções para custo e benefício: ou ele é ALTO ou BAIXO. Esse é um exemplo de lógica booleana, onde os valores só aceitam entradas VERDADEIRO (1) ou FALSO (0). Podemos reescrever as regras acima da seguinte forma:

Se custo-alto 0 e benefício-alto 1 então custo-benefício ALTO
Se custo-alto 1 e benefício-alto 1 então custo-benefício MÉDIO
Se custo-alto 0 e benefício-alto 0 então custo-benefício MÉDIO
Se custo-alto 1 e benefício-alto 0 então custo-benefício BAIXO

Acontece que geralmente nós não pensamos de forma estritamente booleana. Pode ser que, em determinadas situações, tanto custo-alto quanto benefício-alto sejam meio verdadeiros ou meio falsos. Em linguagem matemática, essas variáveis poderiam receber valores diversos entre 0 e 1. Ainda assim, nós ainda queremos fazer categorizações finais de custo-benefício em três possíveis classes: ALTO, MÉDIO ou BAIXO. Essa é a premissa da lógica fuzzy.

Quando aplicamos lógica fuzzy em modelos de machine learning, o objetivo é treinar um modelo de natureza categórica – assim como na lógica booleana – mas que aceite esse grau de incerteza ao pertencimento às categorias. No nosso exemplo, poderíamos reescrever a primeira regra de associação acima da seguinte forma:

Se custo-alto < 0.2 e benefício-alto > 0.8 então custo-benefício ALTO

Ou seja, estamos aceitando alguma incerteza na classificação de custo-alto (que agora pode também ser “pouco falso”) e benefício-alto (que agora também aceita “pouco verdadeiro”), mas a conclusão continua sendo a mesma.

Agora pense em um modelo de machine learning treinado numa base de dados extensa, composta pela opinião de várias pessoas. Cada pessoa tem sua própria subjetividade sobre o que significa custo-alto, benefício-alto, e valores “mais ou menos”. Ainda assim, o modelo captaria o que significa custo-benefício ALTO, MÉDIO ou BAIXO para aquele dataset. Essa é uma das aplicações da lógica fuzzy: ela é capaz de traduzir subjetividade nos dados independentes em uma saída dependente objetiva.

Nesse exemplo, nós até poderíamos usar uma variável contínua, como custo-real, ao invés da variável categórica custo-alto, mas também é preciso lembrar que nosso modelo só está interessado na categoria, não no valor absoluto, e o pertencimento a dada categoria vai depender da natureza do produto. Um sabonete de R$ 5 é caro, enquanto que um antibiótico não é. Além disso, converter benefício em uma variável contínua seria mais complicado, já que esse valor dependeria da finalidade de cada comprador. Um sabonete traz alto benefício pra quem quer lavar a mão, mas um antibiótico só pra quem tem uma infecção. O grande diferencial da lógica fuzzy é permitir trabalhar com variáveis categóricas incertas sem precisar entender como o alocamento nas categorias ocorre.

Em suma, a lógica fuzzy pretende aproximar o processo de decisão àquele que as pessoas fazem na prática. É como habilitar uma máquina a responder aqueles casos onde nós responderíamos como “depende”. A lógica fuzzy permite a um algoritmo levar essa “dependência” em consideração e ainda assim ser bem-sucedido. Ou a “pensar” como uma pessoa.