Provavelmente já ouviste falar de deep fakes nos últimos anos – se não ouviste – então prepara-te para ficar ????????!
Sites como thispersondoesnotexist.com geram aquilo a que chamamos synthetic data (dados sintéticos). No caso deste site, imagens de pessoas que não existem. As imagens são geradas pela rede neuronal subjacente ao site, rede esta que foi treinada com imagens reais para conseguir gerar imagens falsas.
Qualquer conjunto de dados aplicável a uma situação específica que não é obtida por medições directas” – McGraw-Hill Dictionary of Scientific and Technical Terms.
São todos os dados que são usáveis em contexto de data science mas que não foram obtidos do mundo real, portanto sintéticos.
A investigação na sintetização de dados remonta aos anos 30 quando as primeiras linhas de investigação em sintetização de áudio e voz são encontradas. O aparecimento da digitalização (conversão do sinal analógico em digital) permitiu que sintetizadores em software começassem a aparecer.
A primeira aplicação da geração de synthetic data para efeitos de privacidade dos dados remonta a 1993, a Donald Rubin, professor emérito de estatística em Harvard. Donald conceptualizou o uso de algoritmos para criar uma versão integralmente sintética do Decennial Census americano, assim conseguindo anonimizar os dados originais e mantendo a privacidade de quem respondeu intacta, enquanto que as estatísticas do dataset original se mantinham sem alterações.
Durante os anos 90 e início do séc. XXI as técnicas para gerar dados sintéticos diversificaram com o uso de algoritmos como o Bayes Bootstrap, o Parametric Posterior Predictive Distribuiton ou o Sequential Regression Multivariate Imputation.
Um enorme salto no uso e qualidade apareceu na década de 2010 com o aumento do uso de redes neuronais na geração de synthetic data e a diversificação da estrutura destas redes aumentou. Exemplo disso é o uso de Generative Adversarial Networks, abreviando, GANs, que foram apresentadas em 2014 neste paper e ganharam enorme popularidade.
As GANs são um conceito fascinante. Simplificando, construímos duas redes neuronais, um gerador e um discriminador, as duas aprendendo do mesmo dataset. O gerador atua como um falsificador de arte, começa por tentar produzir conjuntos de dados aleatórios que de início não se parecem com o dataset original mas que ao longo do tempo melhoram muito. O discriminador é a polícia, a sua função é distinguir quais dos dados que lhe são apresentados são verdadeiros e quais são cópias produzidas pelo gerador. Com o tempo, o nosso falsificador de arte (gerador) e a polícia (discriminador) aprendem e tornam-se mais eficazes, chegando ao ponto em que os dados conseguem enganar o discriminador (sendo falsos mas não identificados por ele) pois são quase indistinguíveis dos dados originais.
As GANs, porque são eficazes e têm um método de implementação relativamente simples, tornaram-se uma das metodologias mais utilizadas para gerar synthetic data, de vídeos a imagens e até mesmo os simples dados tabulares.
Hoje em dia a criação e implementação de synthetic data diversificou-se, com algoritmos tal como o já mencionado GAN’s e as redes neuronais de LSTM como os principais intervenientes. Desde dados tabulares, a imagens, sons e vídeos, os synthetic data vieram para ficar.
Os synthetic data têm 3 usos principais:
A possibilidade de mimetizar dados reais tem benefícios mas também desafios. Apesar de parecer não existirem limites na geração de cenários e dados para testes e desenvolvimento, é importante não esquecer que quaisquer modelos sintéticos derivados de dados conseguem apenas replicar propriedades específicas desses dados, significando assim que apenas serão capazes de simular tendências generalistas dos mesmos.
O que não faz com que os synthetic data não tenham também enormes benefícios:
Parece a forma perfeita de gerar datasets, não? Pois existem alguns desafios aos que deves estar atento, deixo aqui alguns:
Como podes ver, a geração de synthetic data está a crescer e a sua importância é indiscutível. Portanto, em jeito de introdução, vamos observar um exemplo simples de como criar um dataset sintético. Este exemplo é extremamente simples e irá amplificar dados tabulares – os mais usados no dia a dia de trabalho de equipas de data science.
Vamos acompanhar um exemplo usando uma Conditional Tabular GAN (ctGAN) e mostrar-te como podes gerar dados sintéticos em tabela. A estrutura da ctGAN que vamos usar é a mais simples, mas podes posteriormente melhorar os seus parâmetros.
Para este exemplo vamos usar o dataset da Kaggle “ Pima Indians Diabetes Dataset”, que demonstra um caso típico em que o uso de synthetic data faz sentido. Os dados são da informação médica de um grupo de mulheres do grupo étnico Indiano Pima e tenta prever o risco de diabetes para este grupo.
Vê o vídeo ou lê as instruções em baixo para criares o teu próprio synthetic dataset. Boa sorte! ????
{“id”:”set-43″,”enabled”:true,”values”:{“type”:”video”,”video”:”https://www.youtube.com/watch?v=t0Jr0kMGSUs”}}
Neste exercício vamos precisar de 3 packages: CTGAN, SDV e Table Evaluator. Para que o Table Evaluator funcione corretamente é necessário instalar uma versão específica do package seaborn, a 0.11.1. Podes instalar esta versão correndo python -mpip install seaborn==0.11.1 .
Primeiro vamos executar os imports necessários:
De seguida precisamos de importar os dados:
Aqui é crucial validar que o dataset está limpo e não lhe faltam dados (como é um dataset Kaggle, este está limpo). A ctGAN falha se o dataset não estiver limpo.
Finalmente podemos começar a implementação da ctGAN. Primeiro é preciso declarar quais as colunas com dados discretos (em oposição aos contínuos) para que a ctGAN não crie dados inválidos.
E agora podemos configurar o synthesizer. Podes controlar o número de epochs, o tamanho da batch e as dimensões do gerador e do discriminador. Verbose pode ser configurado para true se quiseres acompanhar o treino da ctGAN.
Depois de algum tempo (ctGANs demoram algum tempo a serem treinadas) podes gerar synthetic data desta ctGAN de uma forma simples, como vês:
O último passo é avaliar os dados sintéticos. Para isto temos duas ferramentas que nos ajudam muito, table_evaluator e sdv.evaluate. TableEvaluator é um package criado para avaliar quão similar um dataset sintético é do seu correspondente real. Simplificando, tenta avaliar o quão “real” são os teus synthetic data.
Como podem ver no exemplo do PCA abaixo, os dados falsos aprenderam as tendências gerais dos dados reais e as duas dispersões são bastante similares.
Se quisermos uma verificação objetiva e não visual entre os dados sintéticos e os reais podemos usar a função sdv.evaluate. Esta função agrega resultados de métricas de semelhança entre o dataset real e o sintético e apresenta-os numa escala de 0 a 1, sendo 0 o pior resultado (os datasets são totalmente diferentes) e 1 o melhor (os datasets são indistinguíveis). Como podes ver pelo resultado abaixo, que não é mau, ainda há uma margem de melhoria na ctGAN que pode ser conquistada melhorando os parâmetros do synthesizer.
Podes ver todo o código deste projeto, aqui.
Espero que tenhas gostado desta mini-introdução a uma área recente mas muito interessante da data science. E se quiseres saber mais sobre esta disciplina, eis um artigo sobre data science e os seus mais recentes desafios.
Até à próxima viagem pelo mundo dos dados! ????