{"id":28580945,"url":"https://github.com/octavioduarte/feature-engineering","last_synced_at":"2025-06-11T04:15:05.304Z","repository":{"id":249457394,"uuid":"831508742","full_name":"octavioduarte/Feature-Engineering","owner":"octavioduarte","description":"This repository serves as guide to understanding feature engineering techniques in ML projects. Feature engineering is a crucial step in the data preprocessing pipeline, where raw data is transformed into meaningful features that can enhance model performance.","archived":false,"fork":false,"pushed_at":"2024-07-28T02:51:39.000Z","size":325,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-07-29T01:39:40.441Z","etag":null,"topics":["feature-engineering"],"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/octavioduarte.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-07-20T19:02:21.000Z","updated_at":"2024-07-28T02:51:42.000Z","dependencies_parsed_at":"2024-07-28T01:39:01.020Z","dependency_job_id":"cdb8b1ea-9c7f-4114-a54e-f8ae55d927f2","html_url":"https://github.com/octavioduarte/Feature-Engineering","commit_stats":null,"previous_names":["octavioduarte/feature-engineering"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/octavioduarte%2FFeature-Engineering","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/octavioduarte%2FFeature-Engineering/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/octavioduarte%2FFeature-Engineering/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/octavioduarte%2FFeature-Engineering/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/octavioduarte","download_url":"https://codeload.github.com/octavioduarte/Feature-Engineering/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/octavioduarte%2FFeature-Engineering/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259198000,"owners_count":22820153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["feature-engineering"],"created_at":"2025-06-11T04:15:03.825Z","updated_at":"2025-06-11T04:15:05.272Z","avatar_url":"https://github.com/octavioduarte.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"(README in Portuguese-BR - Project in English)\n# Feature Engineering pros gringos - Engenharia de Atributos pra nós - O que é?\n\n\u003cbr/\u003e\n\nÉ o nome dados a técnica de utilizar o conhecimento sobre o negócio para selecionar/manipular os atributos a partir dos dados brutos. \n\nNo texto sobre as etapas para a construção de um modelo de Machine Learning, vimos que a primeira etapa consiste em entender o domínio para, em seguida, realizarmos a coleta e preparação dos dados. É indispensável que essa sequência seja seguida, pois compreender o problema do negócio é fundamental para aplicar a melhor abordagem no processo de coleta e manipulação dos dados.\n\nÉ sempre bom lembrar que os dados não chegam em um formato propício para o treinamento do modelo. No primeiro contato entre um profissional de dados e os dados em si, sempre será necessário um processo de limpeza, pois os chamados dados brutos  💪🎲 (nome dado aos dados ainda não formatados) podem gerar modelos ineficientes. No entanto qualquer estratégia para editar/excluir ou criar dados em um conjunto deve ser feita com a premissa de que a solução para o problema do negócio não sera afetada - Essa é a base da Engenharia de Atributos/ Feature Engineering.\n\n\u003cbr/\u003e\n\n#### Algumas  técnicas utilizadas durante o processo de Engenharia de Atributos\n\nOk, a essa altura já compreendemos que precisamos ter o conhecimento do negócio e do problema que precisa ser resolvido (assim espero 🧐). Depois disso, entendemos que precisamos realizar a coleta dos dados, que são a matéria-prima de qualquer modelo. Na sequência, realizamos o processo da análise exploratória, etapa na qual nos aprofundamos nos dados para entender as relações entre eles, possíveis lacunas, etc. Agora, chega a hora de realizarmos o processo de seleção dos atributos que serão escolhidos para o treinamento do modelo. Uma vez escolhidos, existem técnicas para garantir que o formato desses mesmos atributos esteja adequado para o processo. Vamos ver mais sobre essas técnicas:\n\n\u003cbr/\u003e\n\n## Feature Engineering para seleção de atributos 👇:\n\n\u003cbr/\u003e\n\n\u003e ### Filtros 🔬\n\n\u003cbr/\u003e\n\n\u003e Consiste em aplicarmos técnicas para verificar o quão próximo está o atributo em relação à minha variável de saída. Por exemplo, em um contexto de análise de fraude, quão determinante é escolher o atributo \"Idade\" para determinar se uma compra é ou não uma fraude? São perguntas que são respondidas através da análises correlação por exemplo. Importante notar que isso independe de tecnologia é uma análise humana, é claro que podemos recorrer a recursos gráficos para visualizar quais atributos fazem ou não sentido para o treinamento do modelo, mas a decisão neste caso é humana, ou seja, a vantagem de utilizar filtros para seleção de atributos  é não demandar custo computacional para o processo - Usar filtros para seleção de atributos é uma técnica comum na comunidade de cientista de dados.\n\n\u003cbr/\u003e\n\u003chr/\u003e\n\u003cbr/\u003e\n\n\u003e ### Wrapper methods \n\n\u003cbr/\u003e\n\n\u003e Essa técnica envolve instanciar um algoritmo e passar a ele nosso conjunto de dados -  O algoritmo divide o conjunto em subconjuntos com diferentes combinações de atributos e determina, através de um processo de avaliação (guarde bem essa parte) qual a melhor combinação de atributos para nosso treinamento. Um exemplo de algoritimo que implementa essa técnica é o RFE do sklearn.\n\n\u003e Abaixo uma imagem extraída deste link da documentação do sklearn onde o RFE aplicou os testes em diferentes subconjuntos e determinou qual o mais eficiente com base no resultado - É como se fosse um ranking dos atributos  mais importantes para nossa variável de saída, cada quadrado representa o quão forte é a interação entre um determinado atributo e nossa variável de saída.\n\n\u003e Um ponto importante sobre wrapper methods é que podem demandas um alto custo computacional, principalmente quando estamos lidando com um alto número de atributos em nosso conjunto, mas ainda sim é extremamente eficiente e tende a costuma entregar modelos com resultados melhores do que aqueles que foram treinados através do processo de filtros.\n\n\u003cbr/\u003e\n\u003chr/\u003e\n\u003cbr/\u003e\n\n\u003e ### Embedded methods \n\n\u003cbr/\u003e\n\n\u003e Enquanto os wrapper methods determinam a melhor combinação de atributos através de um processo de avaliação, os embedded methods fazem isso a partir dos resultados do treinamento do modelo. Isso significa que o treino e a seleção de atributos são processos que ocorrem de forma sincronizada nos embedded methods. No scikit-learn, por exemplo, métodos como RandomForest (seja para classificação ou regressão) já contam com técnicas durante o treinamento que determinam quais são os atributos mais relevantes para o modelo, mas isso não significa que ao utilzar modelos RandomForest não devemos nos preocupar com a seleção de atributos, embedded methods demandam um alto custo computacional e em conjuntos grandes isso pode ser um problema - Aplicar a filtragem antes do RandomForest para que ele lide com um menor conjunto de atributos é uma solução apropriada por exemplo.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foctavioduarte%2Ffeature-engineering","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foctavioduarte%2Ffeature-engineering","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foctavioduarte%2Ffeature-engineering/lists"}