Seu primeiro mapa, parte 4: classificação e validação¶
Na parte 3 você viu os tópicos no tempo e a geografia dos cerca de 400 artigos da Opinião Pública de 2010 a 2025. Nesta parte, um modelo de linguagem local lê o resumo de cada artigo e responde às perguntas de um codebook: a abordagem, a técnica, o recorte geográfico, a subárea. Cada resposta vem com o trecho do resumo que a justifica. Antes de confiar nas respostas, você mede quanto o modelo concorda com uma leitura cuidadosa de uma amostra. Leva uns 90 minutos, a maior parte com o modelo trabalhando sozinho.
Antes de começar
- Você precisa ter feito as partes 2 e 3, no projeto
projetos/op. - A classificação usa o modelo de
modelos.classificacaodomapa.yaml(qwen3.5:9bno perfil padrão, que precisa de uns 8 GB de memória livre). Confira comuv run mapa diagnostico. -
Todos os comandos rodam na pasta do projeto:
cd projetos/op
1. Conheça o codebook¶
O codebook.yaml do projeto é o de exemplo, com seis variáveis: a abordagem metodológica, a técnica ou fonte de dados, o recorte geográfico, se o Brasil é um caso analisado, a subárea e o período analisado. Abra o arquivo: cada variável tem uma pergunta e, nas categóricas, a definição de cada categoria. É isso que o modelo lê. O guia Escrever um codebook explica como escrever o seu.
2. Sorteie a amostra de validação¶
uv run mapa validar amostra --n 40
A amostra é sorteada entre os artigos com resumo, espalhada pelos tópicos:
Amostra sorteada: 40 documentos, estratificada por tópico (16 estratos), semente 7.
│ Confiança nas instituições democráticas │ 4 │
│ Identificação Partidária e Polarização Eleitoral │ 4 │
│ sem tópico │ 3 │
Os textos para quem vai codificar ficam em validacao/amostra.jsonl. (Numa pesquisa de verdade, use uma amostra maior: o padrão é 200.)
3. Estime o tempo¶
uv run mapa classificar --estimar
O modelo classifica 5 artigos e mostra os resultados, a taxa de evidência literal (o trecho citado está no resumo tal como o modelo o copiou) e quanto falta:
Classificação pronta: 5 de 395 documentos com resumo classificados por qwen3.5:9b; evidência literal em 96%; ...
JSON válido na primeira tentativa: 100,0%; 10,6 s por documento (mediana); 1 documento(s) sem resumo ficam de fora.
Estimativa: faltam 390 documentos, cerca de 1,1 h neste computador.
O tempo é o do Mac de desenvolvimento (M4 Pro, 24 GB); o seu pode ser outro.
4. Classifique a amostra primeiro¶
uv run mapa classificar --somente-amostra
A amostra de validação vem primeiro na fila, e --somente-amostra classifica só ela: uns 7 minutos. Assim a validação pode começar antes de o corpus inteiro ficar pronto.
5. Codifique a amostra¶
Abra o painel e vá a Validação › Codificar a amostra:
uv run mapa painel
Escreva o seu nome (sem acentos nem espaços) e codifique as 40 fichas. Cada ficha mostra o título e o resumo; responda com o teclado (1 a 9 escolhem a opção e passam para a próxima variável, Enter confirma a ficha). A ficha nunca mostra o que o modelo respondeu. Tudo é gravado sozinho; você pode parar e voltar. Veja Codificar a amostra.
6. Meça a concordância¶
uv run mapa validar metricas
Para cada variável, a concordância entre você e o modelo: a fração de respostas iguais, o kappa com o intervalo de 95%, o PABAK e o alfa. Na nossa rodada, a amostra foi codificada por um codificador de referência, e não por uma pessoa: o Claude (claude-opus), um modelo muito maior, lendo às cegas os títulos e resumos da amostra, só para esta documentação (ver o ADR 0012). Foi a única vez em que textos saíram da máquina; no seu projeto, quem codifica é você, no painel:
claude-opus × qwen3.5:9b
│ abordagem │ 40 │ 68% │ 0,51 (0,31 a 0,71) │ 0,61 │ 0,50 │
│ tecnica_principal │ 40 │ 78% │ 0,71 (0,54 a 0,85) │ 0,74 │ 0,71 │
│ recorte_geografico │ 40 │ 82% │ 0,71 (0,49 a 0,88) │ 0,79 │ 0,72 │
│ brasil_como_caso │ 40 │ 100% │ 1,00 (1,00 a 1,00) │ 1,00 │ 1,00 │
│ subarea │ 40 │ 70% │ 0,63 (0,44 a 0,79) │ 0,66 │ 0,63 │
│ periodo_analisado │ 40 │ 88% │ — │ — │ — │
Com a sua codificação, os números serão outros. Com 40 documentos, os intervalos são largos: a abordagem pode ter um kappa entre 0,31 e 0,71. O guia Ler kappa e PABAK explica cada número e o que fazer com uma variável fraca.
7. Classifique o resto¶
uv run mapa classificar
A etapa continua de onde parou: os 40 documentos da amostra (os 5 da estimativa estavam entre eles) vêm do cache, e o modelo classifica os outros 355. Neste computador, levou 67 minutos:
Classificação pronta: 395 de 395 documentos com resumo classificados por qwen3.5:9b; evidência literal em 95%;
355 novos e 40 do cache, em 3.992 s.
│ Abordagem metodológica │ Quantitativa (167), Qualitativa (139), Mista (58) │ 95% │
│ Técnica ou fonte de dados │ Dados observacionais agregados (106), Survey (105), Textos e docum… │ 96% │
│ Recorte geográfico │ Brasil (nacional) (193), Brasil (subnacional) (104), Outro país ou … │ 94% │
│ Brasil como caso │ Sim (312), Não (83) │ 96% │
│ Subárea │ Eleições e partidos (122), Comportamento e opinião (101), Políticas… │ 94% │
│ Período analisado │ não se aplica (124), 2010 (16), 2014 (12) │ 93% │
JSON válido na primeira tentativa: 100,0%; 10,0 s por documento (mediana); 1 documento(s) sem resumo ficam de fora.
A tabela mostra as três respostas mais frequentes de cada variável e a fração de evidências copiadas literalmente do resumo. Pode interromper a etapa (Ctrl+C) e rodar de novo quando quiser: nada se perde.
8. Veja no painel¶
Com o painel aberto, a vista Classificação mostra uma variável por vez: a distribuição por ano, o cruzamento com os macrotemas e, numa célula, os artigos com o trecho do resumo marcado. Ao lado de cada variável, um selo mostra o kappa da validação. No Mapa, o cartão de cada artigo agora marca no resumo os trechos citados. Veja Ler a classificação.
9. O relatório¶
uv run mapa validar relatorio
Grava em validacao/ o relatório em Markdown (com todas as divergências e o trecho que o modelo citou), as tabelas em LaTeX, prontas para um artigo, e as métricas em JSON.
10. Consulte em Python¶
Abra o Python do projeto com uv run python e rode:
import mapa_da_ciencia.api as mapa
por_abordagem = """
SELECT valor, count(*) AS n
FROM classificacoes
WHERE variavel = 'abordagem'
GROUP BY valor ORDER BY n DESC
"""
mapa.consultar(".", por_abordagem)
A view classificacoes tem uma linha por artigo e variável, com o valor, a evidência e o status da conferência (veja a API Python).
O que você fez¶
- Sorteou uma amostra de validação espalhada pelos tópicos.
- Estimou o tempo e classificou os resumos com um modelo local, primeiro a amostra e depois o resto, com uma evidência para cada resposta.
- Codificou a amostra às cegas e mediu a concordância.
- Viu a classificação no painel e gerou o relatório.
Próximos passos¶
- Leia as divergências no relatório ou na vista Validação, revise as definições do codebook e classifique de novo.
- Para comparar com outro modelo local, classifique a amostra com
uv run mapa classificar --somente-amostra --modelo <outro>e rodeuv run mapa validar metricas: a comparação entre os dois (teste de McNemar) aparece no fim.