Ética
As questões que surgem antes da entrada em produção.
Ética e futuro da IA
A ética da IA tem uma reputação dupla e contraditória: abstrata demais para as equipes técnicas, técnica demais para os tomadores de decisão. Os dois julgamentos se enganam pela mesma razão. A maioria das questões ditas éticas se reduz a grandezas mensuráveis, e medi-las exige justamente as competências adquiridas nas cinco lições anteriores.
Tomemos um exemplo que vai nos acompanhar por um tempo. Um modelo seleciona candidaturas. Nunca foram fornecidos a ele o sexo, a idade ou a origem dos candidatos — a precaução parece suficiente. Não é, e vamos demonstrá-lo em cerca de quinze linhas: o modelo reencontrará a informação por meio de uma variável correlacionada e produzirá taxas de seleção nitidamente desiguais. Isso não é uma hipótese de livro didático, é o modo de falha mais comum.
Vem então uma pergunta mais incômoda. Uma vez constatada a desigualdade, como decidir se o modelo é equitativo? Veremos que existem várias definições razoáveis de equidade, que todas podem ser medidas e que podem levar a veredictos opostos sobre o mesmo modelo. Não há saída técnica: a escolha da definição é uma escolha política, e é melhor fazê-la de forma explícita.
Esta lição aborda em seguida os dados pessoais, a explicabilidade, o custo energético, o marco regulatório europeu e os efeitos sobre o emprego. Em cada um desses temas, a exigência será a mesma: distinguir o que está estabelecido do que é conjectura, e não citar nenhum número que não possa ser verificado.
De onde vêm os vieses
Um viés quase nunca é introduzido pelo algoritmo. Ele vem dos dados, por quatro caminhos distintos.
| Fonte | Mecanismo | Exemplo |
|---|---|---|
| Amostragem | certos grupos são sub-representados | um corpus de rostos majoritariamente de pele clara |
| Rótulos | as decisões passadas codificam práticas passadas | contratações historicamente desiguais |
| Variáveis proxy | uma variável neutra é correlacionada a um atributo protegido | CEP, tipo de instituição, lacuna na trajetória profissional |
| Ciclo de retroalimentação | as previsões influenciam os dados futuros | patrulhar onde já se constataram infrações |
A terceira linha é a mais subestimada. Demonstração:
import numpy as np
from sklearn.linear_model import LogisticRegression
rng = np.random.default_rng(0)
n = 2000
groupe = rng.integers(0, 2, n) # atributo protegido, 0 ou 1
competence = rng.normal(0, 1, n) # real, independente do grupo
# Variável proxy: um sinal de trajetória correlacionado ao grupo,
# sem nenhuma relação com a competência.
relais = groupe * 1.5 + rng.normal(0, 0.5, n)
# Rótulos históricos: as decisões passadas favoreceram o grupo 1.
score_historique = competence + 1.2 * groupe + rng.normal(0, 0.3, n)
retenu = (score_historique > 0.8).astype(int)
# O grupo NÃO é fornecido ao modelo.
X = np.column_stack([competence, relais])
modele = LogisticRegression().fit(X, retenu)
prediction = modele.predict(X)
print(modele.coef_.round(2)) # [[3.61 2.08]]
for g in (0, 1):
m = groupe == g
print(g, round(prediction[m].mean(), 3), round(retenu[m].mean(), 3))
# 0 0.266 0.22
# 1 0.56 0.631
Dois resultados para ler em conjunto. O coeficiente da variável proxy vale 2,08, contra 3,61 para a competência: o modelo se apoia maciçamente em uma variável que não tem nenhum poder preditivo próprio, unicamente porque ela é correlacionada ao atributo protegido, que por sua vez é correlacionado aos rótulos históricos. Como resultado, a taxa de seleção é de 26,6% para o grupo 0 contra 56,0% para o grupo 1, embora a competência esteja distribuída de forma idêntica nos dois grupos por construção.
O modelo reconstruiu o atributo protegido sem tê-lo recebido. É por isso que remover uma coluna sensível de um conjunto de dados não constitui uma medida de equidade: isso elimina a possibilidade de medir a disparidade, não a disparidade em si.
Vamos verificar o diagnóstico removendo a variável proxy:
modele_sobre = LogisticRegression().fit(competence.reshape(-1, 1), retenu)
p = modele_sobre.predict(competence.reshape(-1, 1))
for g in (0, 1):
m = groupe == g
print(g, round(p[m].mean(), 3))
# 0 0.424
# 1 0.427
As taxas passam a ser 42,4% e 42,7%: a diferença desapareceu. A variável proxy era mesmo a via de transmissão. Mesmo assim, era preciso manter o atributo protegido no conjunto de dados de auditoria para poder fazer esse cálculo.
Em dados reais, a ordem de grandeza dessas disparidades chega a ser considerável. O estudo Gender Shades, de Joy Buolamwini e Timnit Gebru, publicado em 2018, avaliou serviços comerciais de classificação de gênero a partir de fotografias: a taxa de erro chegava a 34,7% para mulheres de pele escura, contra 0,8% para homens de pele clara. Um mesmo produto, anunciado com uma alta taxa de acerto global, comportava-se portanto de maneira muito diferente conforme a pessoa fotografada.
Medir a equidade em vez de jurá-la
Uma disparidade nas taxas de seleção é, por si só, a prova de um modelo injusto? Não necessariamente, e é aí que o assunto fica sério. Retomemos o modelo enviesado e meçamos de outra forma.
from sklearn.metrics import confusion_matrix
for g in (0, 1):
m = groupe == g
tn, fp, fn, tp = confusion_matrix(retenu[m], prediction[m]).ravel()
print(g, "TPR", round(tp / (tp + fn), 3), "FPR", round(fp / (fp + tn), 3))
# 0 TPR 0.853 FPR 0.101
# 1 TPR 0.834 FPR 0.091
A taxa de verdadeiros positivos é de 85,3% para o grupo 0 e 83,4% para o grupo 1; as taxas de falsos positivos, 10,1% e 9,1%. Esses valores são quase idênticos de um grupo para o outro.
O mesmo modelo é, portanto, simultaneamente:
- muito inequitativo no sentido da paridade demográfica — 26,6% contra 56,0% de taxa de seleção;
- quase perfeitamente equitativo no sentido da igualdade de oportunidades — mesmas taxas de erro em cada grupo.
Não há contradição nem erro de cálculo. Os dois critérios medem coisas diferentes. O segundo pergunta: «em situação igual em relação ao rótulo, o modelo trata os grupos da mesma forma?» A resposta é sim. Mas o próprio rótulo — as decisões históricas — é desigual. Um modelo que reproduz fielmente uma prática inequitativa satisfaz a igualdade de oportunidades ao mesmo tempo que perpetua a desigualdade.
| Critério | O que exige | Veredicto aqui |
|---|---|---|
| Paridade demográfica | mesma taxa de seleção por grupo | falha (0,266 / 0,560) |
| Igualdade de oportunidades | mesma taxa de verdadeiros positivos por grupo | satisfeito (0,853 / 0,834) |
| Igualdade das taxas de erro | mesmos verdadeiros e falsos positivos | satisfeito (0,101 / 0,091) |
Resultados de impossibilidade estabelecidos na ciência da computação teórica mostram que, em geral, esses critérios não podem ser todos satisfeitos ao mesmo tempo, exceto em casos degenerados. É preciso, portanto, escolher. Essa escolha depende da pergunta que se considera pertinente — reproduzir fielmente o passado ou corrigir um desequilíbrio — e essa pergunta não é técnica. O papel do engenheiro é tornar o arbitramento visível e quantificado, não decidi-lo sozinho em um notebook.
Dados pessoais e reidentificação
Remover o nome e o endereço de um arquivo não o anonimiza. A combinação de alguns atributos banais costuma bastar para isolar uma pessoa.
from collections import Counter
# (ano de nascimento, sexo, código postal)
table = [
("1985", "H", "75011"), ("1985", "H", "75011"), ("1985", "F", "75011"),
("1990", "F", "69003"), ("1990", "F", "69003"), ("1962", "H", "33800"),
]
for combinaison, occurrences in sorted(Counter(table).items()):
print(combinaison, occurrences, "UNIQUE" if occurrences == 1 else "")
# ('1962', 'H', '33800') 1 UNIQUE
# ('1985', 'F', '75011') 1 UNIQUE
# ('1985', 'H', '75011') 2
# ('1990', 'F', '69003') 2
Em seis linhas supostamente anonimizadas, duas pessoas são identificáveis de forma única apenas pelo cruzamento de três atributos comuns. O princípio que generaliza esse controle se chama k-anonimato: exigir que cada combinação de atributos quase identificadores apareça pelo menos k vezes. Aqui, com k = 2, duas linhas não estão em conformidade e deveriam ser generalizadas — faixa etária em vez de ano, departamento em vez de código postal — ou suprimidas.
O Regulamento Geral sobre a Proteção de Dados (RGPD), aplicável desde 25 de maio de 2018, distingue claramente duas noções frequentemente confundidas. A pseudonimização substitui os identificadores diretos por códigos: os dados continuam sendo dados pessoais, com todas as obrigações associadas, pois a reidentificação continua possível. A anonimização, no sentido do regulamento, pressupõe que a reidentificação tenha se tornado razoavelmente impossível — o que o exemplo acima mostra ser difícil de alcançar.
Dois princípios têm consequências diretas sobre o projeto de um sistema de IA:
- Minimização: coletar apenas o que é necessário para a finalidade declarada. «Isso poderia servir ao modelo mais tarde» não é uma finalidade.
- Limitação das finalidades: dados coletados para um uso não podem ser reutilizados livremente para treinar um modelo que persiga outro objetivo.
O texto de referência é o Regulamento (UE) 2016/679.
Explicar uma decisão
Alguns modelos são legíveis por construção. Uma árvore de baixa profundidade pode ser impressa e relida:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_text
iris = load_iris()
arbre = DecisionTreeClassifier(max_depth=2, random_state=0).fit(iris.data, iris.target)
print(export_text(arbre, feature_names=list(iris.feature_names), decimals=1))
# |--- petal width (cm) <= 0.8
# | |--- class: 0
# |--- petal width (cm) > 0.8
# | |--- petal width (cm) <= 1.8
# | | |--- class: 1
# | |--- petal width (cm) > 1.8
# | | |--- class: 2
Duas comparações sobre uma única medida bastam para descrever inteiramente esse classificador. Uma pessoa afetada pela decisão pode contestá-la no mérito: «a largura da minha pétala foi mal medida».
Para uma rede com vários milhões de parâmetros, essa leitura não existe. Recorre-se então a explicações a posteriori: medir a queda de desempenho quando se embaralha uma variável, produzir um mapa de saliência sobre uma imagem, atribuir um peso local a cada variável para uma dada previsão. Essas ferramentas são úteis, e uma ressalva de honestidade é indispensável: elas produzem uma aproximação do comportamento do modelo, não o raciocínio que ele efetivamente seguiu — o qual não tem a forma de um raciocínio. Aliás, dois métodos de explicação aplicados ao mesmo modelo podem fornecer importâncias diferentes.
Daí uma consequência prática: quando uma decisão precisa ser justificada perante a pessoa afetada ou perante um regulador, escolher de saída um modelo interpretável costuma ser mais seguro do que acrescentar uma camada de explicação sobre um modelo opaco. A diferença de desempenho às vezes é nula, e ela pode ser medida.
A questão também é jurídica. O artigo 22 do regulamento citado acima disciplina as decisões inteiramente automatizadas que produzam efeitos jurídicos ou afetem significativamente uma pessoa, e prevê, em particular, o direito de obter intervenção humana.
O custo energético
Treinar um modelo consome eletricidade. A ordem de grandeza é calculada a partir de três quantidades: o número de horas de computação, a potência das máquinas e a intensidade de carbono da rede elétrica utilizada.
heures_gpu = 10_000 # hipótese: 10.000 horas de placa gráfica
puissance_kw = 0.4 # ordem de grandeza de uma placa de computação
pue = 1.2 # custo adicional do data center (refrigeração, etc.)
energie_kwh = heures_gpu * puissance_kw * pue
print(energie_kwh) # 4800.0
for nom, intensite_g_par_kwh in (("très carboné", 700), ("moyen", 250), ("décarboné", 50)):
print(nom, round(energie_kwh * intensite_g_par_kwh / 1000, 1), "kg CO2e")
# très carboné 3360.0 kg CO2e
# moyen 1200.0 kg CO2e
# décarboné 240.0 kg CO2e
Esse cálculo não é uma medição: é uma estimativa construída sobre hipóteses explícitas, e seu interesse está aí. Para a mesma quantidade de computação, a pegada varia por um fator de 14 conforme a matriz elétrica. A principal alavanca não é, portanto, apenas a otimização do modelo: é o local e o momento em que o cálculo é executado.
Duas nuances de método, muitas vezes ausentes dos anúncios:
- Os números publicados quase sempre se referem ao treinamento de um modelo final, omitindo as tentativas malsucedidas e as buscas de hiperparâmetros, que podem representar a maior parte do custo real.
- Em um modelo amplamente utilizado, o acúmulo das inferências acaba superando o custo do treinamento. Um treinamento único é visível; bilhões de requisições, menos.
As estimativas publicadas na literatura variam fortemente conforme a metodologia e o escopo adotados. Citar um número isolado sem suas hipóteses não faz sentido; por isso o cálculo acima expõe as suas.
O marco regulatório europeu
A União Europeia dotou-se de um regulamento específico, o Regulamento (UE) 2024/1689, conhecido como «Regulamento sobre Inteligência Artificial». Sua lógica é graduar as obrigações segundo o risco do uso, e não segundo a técnica empregada: o mesmo algoritmo pode estar fora do escopo em um videogame e ser de alto risco em um processo de recrutamento.
| Nível de risco | Tratamento | Exemplos da categoria |
|---|---|---|
| Inaceitável | proibido | pontuação social por autoridades públicas |
| Alto | obrigações reforçadas | acesso a emprego, educação, crédito; certos usos em infraestruturas críticas |
| Limitado | obrigações de transparência | informar ao usuário que ele interage com uma IA, marcar os conteúdos gerados |
| Mínimo | nenhuma obrigação específica | filtro antispam, recomendação de conteúdo comum |
O regulamento entrou em vigor em 1º de agosto de 2024, com aplicação escalonada no tempo: as proibições são as primeiras a se aplicar, depois as obrigações relativas aos modelos de uso geral, e mais tarde o regime geral dos sistemas de alto risco. Os prazos precisos e seu alcance constam do texto, única fonte a consultar para uma questão operacional: Regulamento (UE) 2024/1689. Para um sistema classificado como de alto risco, as obrigações giram em torno de alguns eixos estáveis: qualidade e governança dos dados de treinamento, documentação técnica, registro de logs, informação aos usuários, supervisão humana efetiva, robustez e cibersegurança. Quem trabalha na área reconhecerá nisso boa parte do que é simplesmente um trabalho sério — e não é por acaso: a rastreabilidade de um conjunto de dados e a medição do desempenho por subgrupo são exigíveis muito antes de serem exigidas por lei.
Emprego: o que sabemos e o que não sabemos
Este é o assunto em que a tentação de afirmar é maior e a base empírica é mais frágil. Dois marcos permitem medir a distância entre as estimativas disponíveis.
Em 2013, Carl Frey e Michael Osborne estimaram que cerca de 47 % do emprego nos Estados Unidos se enquadrava em uma categoria de alto risco de automação. Esse número, muito repetido, foi criticado quanto ao método: ele avalia profissões inteiras. Em 2016, trabalhos conduzidos no âmbito da OCDE por Melanie Arntz, Terry Gregory e Ulrich Zierahn refizeram o exercício no nível das tarefas que compõem cada emprego e chegaram a uma ordem de grandeza de cerca de 9 % para os países estudados.
| Estudo | Ano | Unidade de análise | Ordem de grandeza divulgada |
|---|---|---|---|
| Frey e Osborne | 2013 | a profissão inteira | cerca de 47 % do emprego americano em alto risco |
| Arntz, Gregory e Zierahn (âmbito da OCDE) | 2016 | as tarefas que compõem o emprego | cerca de 9 % dos empregos em alto risco |
Um fator de cinco entre dois estudos sérios sobre o mesmo objeto deve ser lido pelo que é: o resultado depende estreitamente da unidade de análise escolhida. O que está solidamente estabelecido é mais modesto, mas real:
- A automação incide sobre tarefas, não sobre ofícios. Uma profissão em que 30 % das tarefas são automatizadas se transforma; não desaparece mecanicamente.
- Os efeitos se distribuem de forma desigual entre setores, níveis de qualificação e territórios. Um saldo líquido nacional esconde situações locais muito diferentes.
- O ritmo de adoção depende de fatores organizacionais, regulatórios e de custo, e não apenas da viabilidade técnica. É essa defasagem que torna pouco confiáveis as previsões a dez anos.
Quanto ao futuro — capacidades futuras dos modelos, cronogramas, rupturas anunciadas —, a posição honesta é constatar que as previsões publicadas se mostraram pouco confiáveis nos dois sentidos, e que uma predição acompanhada de uma data é opinião, não resultado. Este curso termina, portanto, aqui: ele lhe deu os meios para avaliar as afirmações que você encontrará, o que vale mais do que lhe fornecer mais uma.
Pontos-chave
- Um viés vem dos dados, por quatro vias: amostragem, rótulos, variáveis proxy e ciclos de retroalimentação. Retirar o atributo sensível não elimina a disparidade — o modelo a reconstrói por meio de um proxy e chega a 26,6 % contra 56,0 % de taxa de seleção — apenas elimina a possibilidade de medi-la.
- Várias definições de equidade são defensáveis, todas mensuráveis e, em geral, incompatíveis entre si. O mesmo modelo falha na paridade demográfica e satisfaz a igualdade de oportunidades. A escolha do critério é política; o dever do engenheiro é quantificá-lo e torná-lo visível.
- Três atributos comuns bastam para reidentificar pessoas em um arquivo “anônimo”. Pseudonimizar não é anonimizar, e os dados pseudonimizados continuam sendo dados pessoais.
- As explicações a posteriori de um modelo opaco são aproximações de seu comportamento, não seu raciocínio. Quando uma decisão precisa ser justificada, um modelo interpretável escolhido desde o início costuma ser a melhor opção.
- Para um cálculo idêntico, a pegada de carbono varia por um fator de 14 conforme a matriz elétrica. Quanto ao emprego, dois estudos sérios chegam a 47 % e 9 % conforme raciocinem por profissão ou por tarefa: a incerteza faz parte do resultado e deve ser anunciada junto com ele.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão