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.
Uma Breve História sobre a Criação de Synthetic Data
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.
Usos de Synthetic Data
Os synthetic data têm 3 usos principais:
- Privacidade – quando a privacidade do dataset original é extremamente importante mas mesmo assim é necessário o uso de dados para manter os modelos em produção, gerar uma versão artificial desses mesmos dados é um dos métodos mais efectivos para manter o dataset original seguro e privado;
- Data augmentation – quando o tamanho dos dados necessários para testar uma hipótese é demasiado pequeno e testes de hipótese são necessários para justificar uma maior aquisição de dados (ex: testar uma hipótese num cohort de pacientes pequeno para decidir se vale a pena aumentar o tamanho do cohort) os synthetic data são uma grande ajuda dado que os métodos usados permitem um aumento controlado do dataset, permitindo assim que esses testes ocorram;
- Dados para treino são caros de adquirir – algumas áreas da inteligência artificial como os self driving cars requerem quantidades enormes de dados para treinar os seus algoritmos. No entanto, gerar estes dados na vida real é demasiado caro. A geração de synthetic data consegue manter os custos controlados, fornecendo dados para serem usados durante as fases de treino e desenvolvimento destes algoritmos.
Desafios e Benefícios da geração de Synthetic Data
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:
- Superar limitações legais e de privacidade dos dados – Dados sensíveis, como dados de pacientes e dados médicos, são sujeitos a necessárias medidas que restringem o seu uso de forma a proteger a privacidade dos donos dos mesmos. Os synthetic data permitem-nos replicar as estatísticas destes dados sensíveis sem os expor, eliminando portanto este problema;
- Criar dados que simulem situações que ainda não foram encontradas – quando os dados reais ainda não existem, a solução é synthetic data;
- Imunidade a problemas estatísticos comuns – como item nonresponse, skip patterns e outras restrições lógicas;
- Foco nas relações entre os dados – os synthetic data preservam as relações multivariadas entre as variáveis, em vez de estatísticas específicas isoladas.
Parece a forma perfeita de gerar datasets, não? Pois existem alguns desafios aos que deves estar atento, deixo aqui alguns:
- Podem faltar os casos que fogem à regra – os synthetic data mimetizam os dodos reais, no entanto, não são réplicas exatas. Portanto, alguns outliers podem não existir nos synthetic data, ao contrário das bases de dados feitas de dados reais;
- Qualidade dos Synthetic Data é directamente dependente dos dados reais – se os dados originais são incompletos ou estão enviesados, os synthetic data vão refletir isso mesmo.
- A aceitação pelos utilizadores é difícil – como todos os conceitos emergentes, os synthetic data terão que ultrapassar os preconceitos e medos dos utilizadores para serem aceites como dados válidos e usáveis;
- Requer tempo, esforço e muito trabalho para gerar – enquanto não tanto como dados reais em algumas indústrias (cof, cof, medicina) requer tempo, dinheiro equipas especializadas para que sejam produzidos synthetic data com qualidade;
- Controlo de produção é mandatório – uma monitorização constante do output destes modelos é necessário e comparação com os dados reais é absolutamente essencial para assegurar a qualidade e fiabilidade dos synthetic data.
Um Exemplo Simples da Geração de Synthetic Data com Dados Tabulares
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! ????