Predizendo sexo a partir de nomes próprios com o genderBR

Com um exemplo de classificação de autores de mais de 200 mil teses defendidas no Brasil

19 Apr 2018 por Fernando Meireles


Para quem trabalha com bases de dados públicas, não é incomum encontrar o seguinte problema: ter disponível em alguma coluna o nome de várias pessoas, mas não a informação sobre o sexo delas. Para lidar com esse problema, há alguns meses desenvolvi um pacote para R, o genderBR, que oferece um método simples para resolvê-lo: usando dados do Censo de 2010 do IBGE, ele inferie o sexo de uma pessoa a partir de seu nome próprio (como descrito em maiores detalhes aqui). Comparado à tarefa manual de classificar sexo a partir desses nomes, o método não só é infinitamente mais rápido, mas também evita erros de imputação, tornando replicável qualquer pesquisa que o use.

Apesar da utilidade do pacote para resolver esse problema, ele fazia isso com algumas limitações. A principal delas é a de tempo gasto na tarefa, às vezes na casa de horas ou dias. Basicamente, isso ocorre por causa da forma com que a principal função do pacote, get_gender, faz predições: para cada nome solicitado, ela envia uma requisição ao serviço online de nomes do IBGE (daqui para frente, API), recebe as informações necessárias e, com base nelas, calcula a probabilidade desse nome pertencer a um a homem ou a uma mulher. Como esse processo consome cerca de 0.1 segundos, as consequências são inevitáveis: para 10 mil nomes, a função pode facilmente rodar por mais de 15 horas.

A partir da recém lançada versão do pacote, contudo, isso deixou de ser um problema. Aproveitando que o IBGE divulgou a base de dados que alimenta a API do serviço de nomes, agora o genderBR dispõe internamente dessas informações. Especificamente, a função get_gender ganhou um argumento opcional, internal, que permite escolher entre usar os dados internos do pacote (internal = TRUE, que agora é o padrão) ou requisitar os dados da API (internal = FALSE). Optando pelo primeiro, o processo de predizer nomes consome poucos segundos – e isso mesmo em bases com milhares ou milhões de nomes próprios.[1]

Como usar o genderBR

O primeiro passo para usar o genderBR é simples: com o R aberto, só é necessário executar install.packages("genderBR") para instalá-lo. Feito isso, predizer sexo a partir de nomes próprios é uma questão de chamar a função get_gender:

# Carrega o pacote
library(genderBR)

# Prediz o sexo de oito nomes
nomes <- c("Guilherme", "Maria", "Ana", "Arnaldo", "Martha", "Carlos", "Almir", "Cida")
get_gender(nomes)
## [1] "Male"   "Female" "Female" "Male"   "Female" "Male"   "Male"   "Female"

Mais útil que isso, é possível predizer o sexo de nomes contidos numa base de dados, adicionando o resultado dessa predição numa nova variável. Exemplo:

base <- data.frame(nome = c("Ana Maria", "Roberto Silva", "Marcia Campos"),
                   idade = c(25, 42, 33),
                   grupo = c("A", "A", "B")
                   )

base$sexo <- get_gender(base$nome)

base
##            nome idade grupo   sexo
## 1     Ana Maria    25     A Female
## 2 Roberto Silva    42     A   Male
## 3 Marcia Campos    33     B Female

Nos dois casos, as predições usam os dados internos ao pacote. Para desabilitar essa opção, fazendo requisições diretamente à API do IBGE, basta declarar como falso o argumento internal: get_gender(nomes, internal = FALSE). Como mostro na sequência, entretanto, usar essa opção consome muito mais tempo.

O desempenho da nova versão do genderBR

Quão rápido é predizer o sexo usando os dados internos do pacote genderBR? A título de ilustração, podemos comparar o tempo gasto para predizer o sexo daqueles 8 nomes do primeiro exemplo usando a API do IBGE, i.e. internal = FALSE, e os dados internos do pacote, internal = TRUE. Repeti essa operação 100 vezes com cada método, registrando o tempo gasto para concluir a predição em cada uma. Resultado: com os dados internos, o pacote leva cerca de 0.06 segundos para concluir a predição dos 8 nomes, em média; já usando a API do IBGE, o tempo necessário gira em torno de 1.4 segundos. Em outras palavras, o novo método adicionado ao pacote é cerca de 23 vezes mais rápido nesse exemplo.

Na verdade, usar os dados internos é ainda mais rápido se levarmos em conta as pausas entre requisições, aplicadas pela função get_gender quando o número de nomes a serem consultados na API do IBGE excede 100. Além disso, os ganhos em escala do método interno são imensos porque ele consome quase o mesmo tempo para predizer o sexo de 100, 1000, ou 10000 nomes. Isso, de novo, não acontece ao usar a opção internal = FALSE para extrair dados da API do IBGE.

Em resumo, predizer sexo a partir de nomes próprios com o genderBR ficou extremamente mais rápido.

Exemplo: sexo de autores de teses de Doutorado no Brasil

Para exemplificar os usos do pacote genderBR, classifiquei o sexo de autores(as) de todas as 221990 teses de Doutorado defendidas no Brasil entre 1987 e 2016. Esses dados vêm do Banco de Teses e Dissertações da Capes, disponíveis no novo portal de dados abertos da instituição – onde também estão outros sobre a composição dos programas de pós-graduação no país, ou sobre a produção acadêmica de doscentes e discentes, por exemplo.

O importante a notar é que a Capes disponibiliza apenas informações sobre instituição, área de avaliação e nome dos autores das teses defendidas no período, mas não o sexo de quem as defendeu.[2] É aí que entra o genderBR: usando os dados internos do pacote, predizer o sexo para todos os nomes na base leva menos de 5 segundos. Com essa informação, podemos criar um gráfico como esse.

O gráfico acima ilustra bem o trabalho do genderBR: ele classificou a imensa maioria dos nomes como pertencendo a homens ou mulheres (96% do total). Ainda assim, como os dados disponibilizados pelo IBGE incluem apenas nomes com mais de 20 ocorrências no país, alguns na base da Capes, cerca de 3% deles, foram classificados como Desconhecido, o que indica que não encontraram correspondência. Em outros casos, nomes classificados podem ser tanto de homens quanto de mulheres – como Ariel, Darci, Noá e Elir, por exemplo –, dificultando a tarefa de atribuir sexo (os Unissex do gráfico). De qualquer forma, como é possível ver, ambos os casos são residuais.

Voltando ao gráfico, dá para notar que mulheres defenderam cerca de metade das teses registradas no banco da Capes no período. Entretanto, como o número de defesas era pequeno até os anos 2000 – em 1987, por exemplo, apenas 939 teses defendidas foram registradas, e mesmo em 2000 esse número ainda era de apenas 5344 –, acompanhar o crescimento absoluto, ano a ano, dessa série dificulta detectar tendências. Por essa razão, podemos focar apenas na percentagem de teses defendidas por mulheres, excluindo da base pessoas com sexo classificado como Desconhecido ou Unissex.

A tendência geral, agora, é clara: com o passar do tempo, mulheres aumentaram sua participação na defesa de teses no Brasil.

Defesas de tese por grandes áreas

O mesmo padrão, entretanto, certamente varia entre áreas: pode ser que mulheres defendam mais teses em algumas grandes áreas da Capes, menos em outras. Como o Banco de Teses contém variáveis indicando essas grandes áreas, verificar isso é relativamente simples.

Por um lado, mulheres defendem mais teses no Brasil, ao menos nos últimos anos. Por outro lado, é possível ver que essa participação é desigual entre grandes áreas da Capes: mulheres defendem mais teses nas Ciências Biológicas, nas Humanas e nas Letras; homens, entretanto, estão sobrerrepresentados nas áreas de Engenharia e Exatas. O gradual aumento no número de mulheres defendendo teses não ocorreu nessas duas últimas.

Defesas de tese por área de avaliação

Enquanto que classificar o sexo de autores(as) de teses por grande área revela um cenário detalhado da participação de mulheres, é possível ir além com os dados da Capes. Em especial, podemos usar a classificação por área de avaliação, que é usada para classificar os programas de pós-graduação no país. Aqui, vou fazer isso para algumas dessas: para a Ciência Política, separadamente, e em algumas outras, mais próximas dessa. Os resultados, também aqui, mostram que mulheres participam mais na produção e defesa de teses em algumas áreas; já em outras, inclusa a Ciência Política, a presença delas fica aquém – às vezes muito aquém – da de homens.

Final

Classificar por sexo autores(as) de teses no Brasil é apenas uma das utilidades do genderBR. Usando as mesmas fontes de dados, na verdade, é possível investigar as causas da variação na participação de homens e mulheres na produção de teses; mapear a distribuição de doscentes e discentes por sexo em todos os programas de pós-graduação; ou, ainda, aplicar o mesmo método para classificar qualquer outro tipo de produção por sexo do(a) autor(a). Isso tudo, note-se, apenas com os dados da Capes, o que está longe de esgotar todas as aplicações possíveis do pacote.

A mensagem mais geral desse texto, entretanto, é outra: com a nova atualização, usar o genderBR para predizer sexo a partir de nomes próprios ficou muito mais rápido. Como o exemplo anterior indica, isso pode ser feito em poucos segundos mesmo em bases de dados grandes; quando os nomes próprios estão formatados de diferentes maneiras; e lenvando em conta diferenças no uso de nomes por sexo entre estados (ver aqui) – nesse caso, usando a API do IBGE. Como já discuti no texto da versão anterior do pacote, as predições do genderBR, além disso, são bastante precisas: nos testes que realizei, o método prediz o sexo a partir de um nome de forma correta mais de 99% das vezes, além de produzir poucos missings, como no caso do exemplo anterior. Tudo somado, o genderBR não só é incomparavelmente mais rápido do que classificar manualmente sexo a partir de nomes, mas também mais recomendado para evitar erros de imputação e contribuir para a replicabilidade de qualquer pesquisa que o use.

Dados e cógido

Os dados e o código usados nesse posto podem ser encontrados aqui. Como o pacote genderBR é open source, qualquer um pode consultar ou trabalhar em cima do seu código, disponível no GitHub. Críticas e sugestões são bem-vindos.

  1. A única ressalva, aqui, é que esse método só está disponível quando outro argumento, state, não é declarado. Com isso, apenas pela API do IBGE é possível obter predições considerando variação entre estados.

  2. Os dados do Banco de Teses e Dissertações da Capes têm muitos problemas, como missings, campos preenchidos de forma incorreta, incosistência de classificação em alguns anos, entre outros. Como meu objetivo é apenas exemplificar o pacote, fiz uma limpeza superficial na base. Os dados e o código usados nesse post, de qualquer forma, podem ser encontrados aqui.


« genderBR: predizendo sexo a partir de nomes próprios
Deflacionando séries com o deflateBR »