SPIKEPRINT: a receita importa mais que o resultado
Em spike-sorting, o número de unidades não é o dado — o pipeline que produziu o número é.
Quando mostro o SPIKEPRINT para alguém de eletrofisiologia, a primeira pergunta costuma ser: “qual a taxa de acerto?”. A pergunta certa é outra: “qual era a receita?”. A diferença entre as duas perguntas é o motivo de a ferramenta existir.
O problema do spike-sorting não é técnico no sentido difícil. Detecção por threshold, extração de features, clusterização — cada peça isolada é resolvida, com literatura de décadas. O problema é que as peças vivem espalhadas: um script do pós-doc que saiu, um notebook de 2019, uma versão do scikit-learn que ninguém pode atualizar porque “quebra o de 2021”. O resultado numérico — “encontramos 23 unidades” — é tratado como fato medido, quando na verdade é uma função da receita que gerou ele. Mude o threshold em 10% e você tem 19 unidades. Qual é a verdade? Nenhuma das duas, isoladamente.
A decisão de design central do SPIKEPRINT foi tornar a receita um artefato de primeira classe. Cada rodada carrega um arquivo de configuração versionado junto com os dados, e cada relatório carrega o hash da configuração que o gerou. Se amanhã alguém quiser reproducir “as 23 unidades”, o comando é um — o relatório HTML sai com os traços médios, a taxa de violação de refratário e a proporção de ruído de cada unidade, e o par de valores threshold/versão que os produziu.
Isso mudou a conversa nos laboratórios onde a ferramenta roda. O discussão deixa de ser “confio no seu sorting?” e passa a ser “nossa detecção divergiu na gravação X — as configurações foram diferentes, e aqui está a diferença”. Divertir o mérito de humano para processo é, no fundo, o que todas as boas ferramentas de engenharia fazem: CI não substitui confiança no desenvolvedor, substitui a necessidade de confiar.
O custo dessa decisão é ter um pipeline fixo. Não há plugin de terceiros, não há modo experimental, não há 12 algoritmos de clustering para escolher. Eu perco usuários avançados que querem trocar a peça do meio — e ganho a possibilidade de dizer, sem asterisco, o que a ferramenta faz. Numa área onde o erro padrão é invisible, ser previsível vale mais que ser completo.
Se você trabalha com dados neurais e quiser brigar comigo sobre threshold automático por desvio robusto versus threshold fixo por banda: o GitHub está aberto.