{"id":21176369,"url":"https://github.com/rikcav/pokemanos","last_synced_at":"2026-06-29T04:32:07.670Z","repository":{"id":220390188,"uuid":"751484112","full_name":"rikcav/pokemanos","owner":"rikcav","description":"Projeto para descobrir o tipo de um Pokémon através de suas características básicas. Desenvolvido na disciplina da Inteligência Artificial.","archived":false,"fork":false,"pushed_at":"2024-03-17T11:11:02.000Z","size":284,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T18:34:09.831Z","etag":null,"topics":["ai","ai-algorithms","artificial-intelligence","classification","classification-algorithm","classification-model","pokemon"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rikcav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-01T17:44:52.000Z","updated_at":"2024-03-17T12:09:55.000Z","dependencies_parsed_at":"2024-02-07T02:28:02.880Z","dependency_job_id":"52b2954a-d0bd-4903-981a-da9965c744e3","html_url":"https://github.com/rikcav/pokemanos","commit_stats":null,"previous_names":["rikcav/pokemanos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rikcav/pokemanos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rikcav%2Fpokemanos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rikcav%2Fpokemanos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rikcav%2Fpokemanos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rikcav%2Fpokemanos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rikcav","download_url":"https://codeload.github.com/rikcav/pokemanos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rikcav%2Fpokemanos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34913586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-algorithms","artificial-intelligence","classification","classification-algorithm","classification-model","pokemon"],"created_at":"2024-11-20T17:01:38.851Z","updated_at":"2026-06-29T04:32:07.641Z","avatar_url":"https://github.com/rikcav.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto de Classificação de Tipos de Pokémon\n\n## Participantes: [Elison Mélo](https://github.com/ElisonMartins), [José Henrique](https://github.com/rikcav), [Pedro Luiz](https://github.com/mightbehappyy), [Rônald Macário](https://github.com/RonaldMacario13)\n\n### Introdução\n\nEste relatório apresenta o desenvolvimento do projeto de Inteligência Artificial, que consiste em aplicar pelo menos três algoritmos a um problema de classificação ou regressão. O objetivo é analisar e comparar o desempenho dos algoritmos e selecionar um modelo para implantação.\n\n### Problema\n\nO problema selecionado para este projeto é responder à seguinte pergunta: é possível descobrir o tipo específico de um pokémon a partir de suas características básicas?\n\n### Desenvolvimento do Projeto\n\n#### Etapas\n\n**Definição do Problema**\n\nO objetivo desta etapa é entender o problema e definir claramente os objetivos do projeto. O problema escolhido consiste em determinar se é possível descobrir o tipo específico de um pokémon a partir de suas características básicas.\n\nPara isso, serão utilizados algoritmos de classificação em machine learning, que serão treinados com um conjunto de dados contendo informações sobre as características dos pokémons. O sucesso do projeto será medido pela capacidade dos algoritmos em identificar corretamente o tipo de pokémon com base nas características fornecidas.\n\n**Coleta de Dados**\n\nOs dados foram coletados de três fontes diferentes:\n\n1. Dados primários - esses dados trazem informações sobre características básicas dos pokémons, como peso, velocidade, ataque, defesa, etc. Esses dados vieram de um dataset do Kaggle: [The Complete Pokemon Dataset](https://www.kaggle.com/datasets/rounakbanik/pokemon)\n\n2. Dados secundários - esses dados trazem informações sobre as três cores básicas dos pokémons e foram retirados de um site de paletas de cores de pokémons através de data scraping: [Pokémon Palette](https://pokemonpalette.com/)\n\n3. Dados terciários - esses dados trazem dados classificadores sobre os pokémons que são baseados em animais/plantas através de data scraping: [Pokémon designed after animals or plants](https://bulbapedia.bulbagarden.net/wiki/User:Reshi643/Pok%C3%A9mon_designed_after_animals_or_plants)\n\n**Análise Exploratória**\n\nDevido à falta de informação no dataset principal, foi necessário obter mais dados relacionados aos Pokémons. Embora as informações que tínhamos fossem valiosas para a classificação dos Pokémons, não eram suficientes para o modelo distingui-los satisfatoriamente. O processo criativo para criar um Pokémon é complexo, e encontrar padrões nele não é uma tarefa trivial. No entanto, observamos que era possível encontrar padrões relacionados às cores e às inspirações nos seres vivos da realidade. Essas informações foram utilizadas no pré-processamento dos dados, juntamente com técnicas como label encoding e one-hot encoding.\n\n**Pré-processamento**\n\nForam mescladas as tabelas de dados primários, secundários e terciários. As colunas das cores do Pokémon tinham valores hexadecimais e estavam no formato de string, então foram transformadas para o formato RGB que possui valores de 0 a 255. Três colunas para cada cor foram criadas ('red 1', 'green 1', 'blue 1'... 'red 3', 'green 3', 'blue 3'), e as colunas antigas foram excluídas.\n\nA coluna “capture_rate” foi convertida para o tipo numérico. Inicialmente queríamos que o modelo conseguisse detectar tanto o tipo primário quanto o secundário, porém, a complexidade da tarefa aumentaria muito, seriam 153 classes diferentes. Tentamos fazer one-hot encoding da tabela dos tipos 1 e 2, porém isso fez com que tivéssemos duas colunas de respostas. Os modelos que tínhamos à nossa disposição não suportam múltiplos outputs. Juntamos as colunas do tipo 1 e do tipo 2 para que a resposta fosse unificada. Apesar da tentativa, retornamos à questão de existirem muitas classes, decidimos por dropar a coluna do tipo 2 e assim tínhamos 18 classes no total.\n\nPara a coluna dos “tipos” utilizamos label encoding para atribuir valores numéricos aos valores categóricos dos tipos. Para a coluna “super_type” (Grupo animal) e “specific_type” (Classe ou família animal) utilizamos one-hot encoding. Então dropamos as colunas de nomes ou daquelas que se mostraram irrelevantes na visualização de dados para evitar ruído para o modelo ('height_m', 'name', 'japanese_name', 'pokedex_number', 'percentage_male', 'classfication', 'base_egg_steps', 'base_happiness', 'abilities', 'experience_growth', 'defense', 'base_total', 'speed').\n\nExistiam valores nulos na coluna “capture_rate”, utilizamos a mediana desse valor para preencher. Dropamos a coluna de multiplicadores dos pokémons, isso acabava dando a resposta para o modelo. Tentamos utilizar o k-means e aproveitar os labels produzidos para substituir as colunas com os valores RGB, porém, devido a natureza não supervisionada do k-means e principalmente nossa base de dados, centros muito próximos foram produzidos e prejudicou a precisão do modelo.\n\nComo alternativa, tentamos estabelecer os centros de 7 cores e calculamos a distância euclidiana das cores do Pokémon e consideramos a cor do Pokémon aquela que está mais próxima, não obtivemos sucesso também, o modelo teve uma precisão tão baixa quanto a tentativa do k-means. Consideramos estabelecer o alcance das 7 cores, se a cor do pokémon estiver dentro daquele alcance, a cor do pokémon será rotulada como aquela, porém, não colocamos a ideia em prática. Por fim, passamos todas as colunas pela função “to_numeric” e normalizamos o dataframe.\n\n**Modelagem**\n\nNesta etapa, foram selecionados três algoritmos de classificação considerando sua compatibilidade com o problema proposto de identificar o tipo específico de um pokémon a partir de suas características básicas. Os algoritmos escolhidos foram:\n\n1. **Multi-Layer Perceptron (MLP)**:\n   - O MLP foi selecionado devido à sua capacidade de aprender padrões complexos nos dados.\n   - Este algoritmo é conhecido por sua eficácia em problemas de classificação com conjuntos de dados de médio a grande porte.\n\n2. **K-Nearest Neighbors (K\n\nNN)**:\n   - O KNN foi escolhido por sua simplicidade e capacidade de classificar novos pontos de dados com base na proximidade com os pontos de dados existentes.\n   - É um algoritmo não paramétrico que não faz suposições sobre a distribuição dos dados.\n\n3. **Árvore de Decisão (Decision Tree)**:\n   - A Árvore de Decisão foi selecionada devido à sua interpretabilidade e capacidade de lidar com conjuntos de dados com variáveis categóricas.\n   - Este algoritmo é capaz de capturar relações não lineares entre os recursos e os rótulos.\n\n#### Justificativas\n\n**Métrica de Avaliação**\n\nA métrica escolhida para avaliar o desempenho dos modelos foi a acurácia. A escolha baseia-se na sua capacidade de fornecer uma medida direta da proporção de predições corretas em relação ao total de predições realizadas.\n\nNesse contexto, a acurácia é uma métrica adequada, pois permite uma avaliação simples e intuitiva do desempenho dos modelos. Além disso, como o objetivo do projeto é determinar se é possível descobrir o tipo específico de um pokémon a partir de suas características básicas, a acurácia fornece uma medida clara de quão bem os modelos estão realizando essa tarefa, sendo uma escolha natural para a avaliação dos resultados.\n\n### Desempenho dos Algoritmos\n\nOs algoritmos foram avaliados utilizando o conjunto de treinamento e teste. A tabela a seguir mostra os resultados:\n\n| Algoritmo      | Acurácia Treino | Acurácia Teste |\n|----------------|-----------------|----------------|\n| MLP            | 41,14%          | 41,94%         |\n| KNN            | 42,55%          | 53,01%         |\n| Decision Tree  | 99,70%          | 44,58%         |\n\n### Modelo Selecionado\n\nO modelo escolhido para ser colocado em produção foi o K-Nearest Neighbors (KNN). A escolha foi feita com base na métrica estatística de previsão do modelo, visto que este foi o modelo com a melhor capacidade de prever o tipo do pokémon, tendo uma acurácia de 53,01% para os dados de teste.\n\n### Conclusão\n\nO projeto de Inteligência Artificial apresentado teve como objetivo principal explorar a capacidade de diferentes algoritmos de classificação em identificar o tipo específico de um pokémon a partir de suas características básicas. Através de um processo que envolveu a coleta e pré-processamento de dados, análise exploratória e modelagem, foi possível avaliar o desempenho de três algoritmos: Multi-Layer Perceptron (MLP), K-Nearest Neighbors (KNN) e Árvore de Decisão.\n\nDurante a análise exploratória, observamos que, apesar da complexidade do processo criativo por trás dos pokémons, era possível identificar alguns padrões relacionados às cores e inspirações nos seres vivos da realidade. Essas informações foram utilizadas no pré-processamento dos dados, juntamente com técnicas como label encoding e one-hot encoding.\n\nAo avaliar o desempenho dos algoritmos, observamos que o KNN obteve uma acurácia de 53,01% no conjunto de teste, seguido pelo Decision Tree com 44,58% e o MLP com 41,94%. Com base nesses resultados, o modelo selecionado para colocação em produção foi o KNN, devido à sua melhor capacidade de prever o tipo do pokémon.\n\nEm suma, o projeto demonstrou a aplicação prática de algoritmos de classificação em um problema específico, fornecendo insights valiosos sobre o desafio de identificar o tipo de um pokémon com base em suas características básicas. O trabalho futuro poderá se concentrar em melhorar a qualidade dos dados e explorar outras técnicas de modelagem para aprimorar os resultados obtidos.\n\n### Referências\n\n- [The Complete Pokemon Dataset](https://www.kaggle.com/datasets/rounakbanik/pokemon)\n- [Pokémon Palette](https://pokemonpalette.com/)\n- [Pokémon designed after animals or plants](https://bulbapedia.bulbagarden.net/wiki/User:Reshi643/Pok%C3%A9mon_designed_after_animals_or_plants)\n- Pokemanos.ipynb\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frikcav%2Fpokemanos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frikcav%2Fpokemanos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frikcav%2Fpokemanos/lists"}