No momento, você está visualizando Do fluxograma ao código: Um recomendador inteligente de algoritmos de Machine Learning

Do fluxograma ao código: Um recomendador inteligente de algoritmos de Machine Learning

  • Autor do post:
  • Tempo de leitura:1 minuto de leitura
  • Categoria do post:Dados

Como referenciar este texto: Do fluxograma ao código: Um recomendador inteligente de algoritmos de Machine Learning’. Rodrigo Terra. Publicado em: 26/06/2025. Link da postagem: https://www.makerzine.com.br/dados/do-fluxograma-ao-codigo-um-recomendador-inteligente-de-algoritmos-de-machine-learning/.

Conteúdos que você verá nesta postagem

Escolher o algoritmo certo é uma das decisões mais desafiadoras para quem está começando a trabalhar com aprendizado de máquina. Com tantas opções disponíveis — árvores de decisão, máquinas de vetores de suporte, regressões lineares, redes neurais e muito mais — é comum se deparar com a dúvida: “Por onde começar?”

Mesmo com uma base de dados em mãos, saber qual algoritmo aplicar exige um mínimo de entendimento sobre o tipo de tarefa (classificação, regressão, agrupamento, etc.), a natureza das variáveis, o volume de dados e até a importância de determinadas características. Para quem está dando os primeiros passos, essa escolha pode ser confusa ou até paralisante.

Foi justamente para ajudar nesse processo que o time do Scikit-learn desenvolveu um fluxograma visual bastante conhecido na comunidade de ciência de dados. Ele orienta, passo a passo, o usuário até uma sugestão de algoritmo com base em perguntas simples como: “Você tem mais de 50 amostras?”, “Está prevendo uma categoria ou uma quantidade?”, “Sua base é textual?” — entre outras.

Apesar de muito útil, o fluxograma é estático: ele não interage com os dados reais do usuário e exige que a pessoa navegue manualmente pelas possibilidades. Isso me levou a fazer a seguinte pergunta: e se esse fluxograma pudesse ganhar vida, interagindo com o usuário e analisando os dados automaticamente?

Inspirado no infográfico oficial da biblioteca Scikit-learn, decidi transformar o caminho decisório manual em uma ferramenta automatizada, capaz de guiar o usuário — mesmo sem experiência prévia — até a escolha do algoritmo mais adequado para seu problema de aprendizado de máquina. O resultado foi um script em Python simples, mas poderoso, que une lógica condicional, leitura de dados e interação em tempo real com quem estiver usando a ferramenta.

A Inspiração Visual

Toda boa ideia nasce de uma faísca. No meu caso, ela veio de uma imagem.

Ao explorar a documentação da biblioteca Scikit-learn — uma das mais populares para machine learning em Python — encontrei um infográfico que já tinha visto algumas vezes, mas que dessa vez me chamou atenção de outro jeito. Trata-se de um fluxograma de algoritmos, criado para ajudar desenvolvedores e cientistas de dados a tomarem decisões mais seguras na hora de escolher um modelo.

O fluxograma parte de uma pergunta simples: você tem mais de 50 amostras? A partir daí, ele guia o leitor por uma sequência lógica de decisões, levando em consideração se a tarefa é supervisionada ou não, se o objetivo é classificar, prever uma quantidade, reduzir a dimensionalidade ou agrupar dados. O caminho se bifurca a cada resposta, até culminar na sugestão de um algoritmo ideal, como KMeans, RandomizedPCA, SGDClassifier ou Naive Bayes.

A beleza do fluxograma está justamente em sua simplicidade visual e organização didática. Para quem está começando, ele funciona quase como um mapa — acessível, direto e abrangente. No entanto, percebi que ele também traz uma limitação importante: por ser uma imagem estática, ele não consegue analisar automaticamente os dados do usuário, nem interagir com variáveis específicas que podem influenciar a escolha.

Foi aí que surgiu a ideia: transformar esse fluxograma em um código executável, capaz de analisar um dataset real, realizar algumas perguntas estratégicas e, com base nelas, sugerir um algoritmo apropriado. Em vez de apenas observar o diagrama e tentar se localizar, o usuário poderia conversar com o sistema — e esse sistema tomaria as decisões por ele, de forma guiada, transparente e pedagógica.

Com isso, o infográfico deixou de ser apenas uma referência visual e passou a ser a espinha dorsal de um pequeno sistema de recomendação inteligente.

O Projeto: da Análise à Recomendação

Transformar um fluxograma visual em um sistema funcional exigiu mais do que apenas seguir os passos do diagrama. Era preciso pensar em como o código poderia simular o papel do facilitador: alguém que lê os dados, entende o problema e faz perguntas relevantes para guiar a escolha do modelo.

O projeto foi implementado em Python, utilizando principalmente a biblioteca pandas para leitura e análise de dados, e blocos de lógica condicional (if-else) para replicar as decisões do fluxograma. O funcionamento é simples e interativo:

  1. O usuário fornece uma base de dados, geralmente no formato .csv.

  2. O sistema faz uma análise inicial, contando o número de amostras e variáveis.

  3. Em seguida, o usuário responde a algumas perguntas estratégicas, como:

    • A base possui uma variável-alvo?

    • O objetivo é classificar categorias ou prever valores numéricos?

    • Você quer encontrar padrões, ou reduzir a quantidade de variáveis?

  4. A cada resposta, o sistema segue um caminho interno que espelha as bifurcações do fluxograma original.

  5. Ao final, um algoritmo é sugerido, compatível com o tipo de tarefa e as características do conjunto de dados.

Por exemplo: se a base tem mais de 50 amostras, a variável-alvo é categórica e os dados não são textuais, o sistema pode recomendar o uso de um LinearSVC ou KNeighborsClassifier. Já se o objetivo for reduzir a dimensionalidade de uma base com muitas variáveis, o RandomizedPCA pode ser indicado como melhor ponto de partida.

A proposta, no entanto, não é apenas técnica. Este projeto também é pedagógico. A interação com o usuário tem um papel essencial: em vez de automatizar tudo silenciosamente, o sistema explica suas escolhas, fazendo com que o processo de recomendação também seja um processo de aprendizado.

Com isso, a ferramenta se torna útil tanto para quem está começando e precisa de orientação, quanto para educadores que desejam demonstrar, de forma prática, como diferentes tarefas de aprendizado de máquina exigem abordagens distintas.

Sobre o código

O código do projeto foi escrito em Python, com foco em legibilidade e lógica progressiva. Ele utiliza a biblioteca pandas para análise inicial da base de dados e estruturas condicionais (if-else) para replicar os caminhos do fluxograma do Scikit-learn. A ideia central foi criar um sistema modular e fácil de entender, mesmo para quem está começando na programação ou no aprendizado de máquina.

As decisões foram estruturadas em blocos sequenciais que simulam perguntas feitas ao usuário, permitindo que o código se adapte ao tipo de tarefa (classificação, regressão, clustering ou redução de dimensionalidade). Tudo isso acontece em tempo real, com respostas coletadas via terminal, o que reforça o caráter interativo e pedagógico da ferramenta.

O projeto está pronto para crescer: o código já prevê pontos de expansão para inclusão de métricas, execução automática dos modelos sugeridos e integração com interfaces gráficas. Cada parte do script foi escrita com atenção à clareza, com comentários explicativos e organização lógica que facilita o aprendizado e a manutenção.

				
					import pandas as pd

def recomenda_algoritmo(df):
    print("\n Análise automática de base iniciada...\n")

    n_amostras, n_features = df.shape
    print(f"Número de amostras: {n_amostras}")
    print(f"Número de características: {n_features}\n")
        
    tem_target = input("Sua base possui uma variável alvo? (s/n): ").strip().lower()

    if tem_target == 's':
        tipo_target = input("A variável alvo é categórica ou numérica? (c/n): ").strip().lower()

        if tipo_target == 'c':
            print("\n Tarefa: Classificação")
            if n_amostras < 50000:
                usa_texto = input("A entrada são dados de texto? (s/n): ").strip().lower()
                if usa_texto == 's':
                    print("Algoritmo sugerido: Naive Bayes")
                else:
                    print("Algoritmo sugerido: LinearSVC ou KNeighborsClassifier")
            else:
                print("Algoritmo sugerido: SGDClassifier")
        
        elif tipo_target == 'n':
            print("\n Tarefa: Regressão")
            if n_amostras < 100000:
                poucas_variaveis = input("Poucas variáveis explicativas são importantes? (s/n): ").strip().lower()
                if poucas_variaveis == 's':
                    print("Algoritmo sugerido: Lasso ou ElasticNet")
                else:
                    print("Algoritmo sugerido: RidgeRegression ou SVR com kernel linear")
            else:
                print("Algoritmo sugerido: SGDRegressor")

    else:
        tipo_tarefa = input("Você quer: (1) encontrar categorias (clustering) ou (2) reduzir dimensão? Digite 1 ou 2: ").strip()
        if tipo_tarefa == '1':
            print("\n Tarefa: Clustering")
            conhece_categorias = input("Você sabe o número de clusters? (s/n): ").strip().lower()
            if conhece_categorias == 's':
                if n_amostras < 10000:
                    print("Algoritmo sugerido: KMeans")
                else:
                    print("Algoritmo sugerido: MiniBatchKMeans")
            else:
                print("Algoritmo sugerido: MeanShift ou VBGMM")
        elif tipo_tarefa == '2':
            print("\n Tarefa: Redução de Dimensionalidade")
            if n_amostras < 10000:
                print("Algoritmo sugerido: Isomap ou SpectralEmbedding")
            else:
                print("Algoritmo sugerido: RandomizedPCA")
        else:
            print("Entrada inválida. Finalizando.")
				
			
				
					# Exemplo de uso:
if __name__ == "__main__":
    caminho = input("Digite o caminho para o arquivo CSV: ").strip()
    try:
        df = pd.read_csv(caminho)
        recomenda_algoritmo(df)
    except Exception as e:
        print(f"Erro ao carregar a base: {e}")
				
			

Se você acha que este conteúdo pode ser útil para alguém, compartilhe!

Ao divulgar os textos do MakerZine, você contribui para que todo o material continue acessível e gratuito para todas as pessoas.

Rodrigo Terra

Com formação inicial em Física, especialização em Ciências Educacionais com ênfase em Tecnologia Educacional e Docência, e graduação em Ciências de Dados, construí uma trajetória sólida que une educação, tecnologias ee inovação. Desde 2001, dedico-me ao campo educacional, e desde 2019, atuo também na área de ciência de dados, buscando sempre encontrar soluções focadas no desenvolvimento humano. Minha experiência combina um profundo conhecimento em educação com habilidades técnicas em dados e programação, permitindo-me criar soluções estratégicas e práticas. Com ampla vivência em análise de dados, definição de métricas e desenvolvimento de indicadores, acredito que a formação transdisciplinar é essencial para preparar indivíduos conscientes e capacitados para os desafios do mundo contemporâneo. Apaixonado por café e boas conversas, sou movido pela curiosidade e pela busca constante de novas ideias e perspectivas. Minha missão é contribuir para uma educação que inspire pensamento crítico, estimule a criatividade e promova a colaboração.

Deixe um comentário